On Thu, Jul 28, 2011 at 10:31:07PM +0200, Adrian Knoth wrote:
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;
else
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?
I have an RPM wich I'd like to use as a signal generator for measurments
etc. (it has those nice balanced line outs). But I never managed to make
it work, despite trying 1000 variations on the code you quoted. It hangs
in one of the hdsp_fifo_wait(), I don't remember which one.
Ciao,
--
FA