[alsa-devel] [RME - hdsp] Multiface/Digiface/RPM detection

Adrian Knoth adi at drcomp.erfurt.thur.de
Thu Jul 28 22:31:07 CEST 2011


I've recently added support for the RME RPM to hdspmixer. Unfortunately,
I don't have one, it's been done blindly with user feedback.

This very user now reports that he needs to upload the device firmware
from windows. I've checked hdsploader, and of course, it needs patching.
I'll take care in a second.

More surprisingly, though, the kernel wasn't able to upload the firmware
itself, because it fails to detect the RPM and hence tries to upload a
multiface firmware.

After reading the kernel source, I think the code in hdsp.c is wrong:

		if (hdsp_fifo_wait(hdsp, 0, HDSP_SHORT_WAIT)) {
			hdsp_write(hdsp, HDSP_control2Reg, HDSP_VERSION_BIT);
			hdsp_write(hdsp, HDSP_control2Reg, HDSP_S_LOAD);
			if (hdsp_fifo_wait(hdsp, 0, HDSP_SHORT_WAIT))
				hdsp->io_type = RPM;
				hdsp->io_type = Multiface;
		} else {
			hdsp->io_type = Digiface;

Who here owns a Digiface and can confirm or deny that the kernel
correctly detects it as Digiface? Same for Multiface, though I guess
since it's more or less the default, users wouldn't notice it.

What's wrong with the code above? I think all occurrences of
HDSP_control2Reg in hdsp_check_for_iobox need to be changed to
HDSP_controlRegister and the second hdsp_fifo_wait needs to be inverted.

But this is pure guesswork. If I come up with a patch, who here has a
RPM, Digiface or Multiface to test it?


More information about the Alsa-devel mailing list