[LAD] [RME - hdsp] Multiface/Digiface/RPM detection

Adrian Knoth adi at drcomp.erfurt.thur.de
Thu Jul 28 22:43:02 UTC 2011


On 07/28/11 23:56, Adrian Knoth wrote:

> 
>>> 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;
>>> 		}
>>>
>>> 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.

Nope, it was correct. I got confused by bytes-vs-4byte-offsets to the
iobase.

So, control2Reg is right, the logic is right, too.

Only HDSP_VERSION_BIT seems wrong here, try

   HDSP_VERSION_BIT | HDSP_S_LOAD

instead. Or change

#define HDSP_VERSION_BIT        0x100

to

#define HDSP_VERSION_BIT        (0x100 | HDSP_S_LOAD)

Still pure guesswork.


> I blindly wrote a patch:
> 
>    http://adi.loris.tv/hdsp_test.tar.bz2

Forget it, it was stupid. Removed from the web.



Cheers



More information about the Linux-audio-dev mailing list