[alsa-devel] Fixed sampling freq UAC2 doubt
Hi,
While testing my under-development generic USB Audio Class 2.0 _gadget_ driver with ALSA's USB Audio Class driver, I came across an apparent discrepency. Or so do I think.
Page-98 Section 5.2.5.1.1 of 'Audio 20 final.pdf' specifies :- [In many cases, the Clock Source Entity represents a crystal oscillator based generator with a single fixed frequency. In that case, the Set request is not supported.]
Here 'not supported' means setup requests for CUR/RANGE CS_SAM_FREQ_CONTROL should stall. Right ?
The snd_usb_hw_params in sound/usb/pcm.c apparently attempts to do that with disregard to Clock-Frequency-Control bitmask in bmControls field of the Clock Source Descriptor.
The confusion is, subs->cur_rate is initialized only if snd_usb_init_sample_rate succeeds. Which does SET control tranfer, albeit with the supported frequency. Couldn't a fixed sampling freq UAC2 compliant device refuse to work in that case, thereby failing any attempt to use the USB card?
Could someone please point where I got it wrong and/or if such a card works with ALSA USB?
Thanks.
Added relevant guys to Cc....
At Fri, 21 Jan 2011 17:35:52 +0900, Jassi Brar wrote:
Hi,
While testing my under-development generic USB Audio Class 2.0 _gadget_ driver with ALSA's USB Audio Class driver, I came across an apparent discrepency. Or so do I think.
Page-98 Section 5.2.5.1.1 of 'Audio 20 final.pdf' specifies :- [In many cases, the Clock Source Entity represents a crystal oscillator based generator with a single fixed frequency. In that case, the Set request is not supported.]
Here 'not supported' means setup requests for CUR/RANGE CS_SAM_FREQ_CONTROL should stall. Right ?
The snd_usb_hw_params in sound/usb/pcm.c apparently attempts to do that with disregard to Clock-Frequency-Control bitmask in bmControls field of the Clock Source Descriptor.
The confusion is, subs->cur_rate is initialized only if snd_usb_init_sample_rate succeeds. Which does SET control tranfer, albeit with the supported frequency. Couldn't a fixed sampling freq UAC2 compliant device refuse to work in that case, thereby failing any attempt to use the USB card?
Could someone please point where I got it wrong and/or if such a card works with ALSA USB?
Thanks.
Jassi Brar wrote:
While testing my under-development generic USB Audio Class 2.0 _gadget_ driver with ALSA's USB Audio Class driver, I came across an apparent discrepency. Or so do I think.
Page-98 Section 5.2.5.1.1 of 'Audio 20 final.pdf' specifies :- [In many cases, the Clock Source Entity represents a crystal oscillator based generator with a single fixed frequency. In that case, the Set request is not supported.]
Here 'not supported' means setup requests for CUR/RANGE CS_SAM_FREQ_CONTROL should stall. Right ?
Strictly speaking, "is not" (instead of "might not be") implies that the device _must_ stall.
The snd_usb_hw_params in sound/usb/pcm.c apparently attempts to do that with disregard to Clock-Frequency-Control bitmask in bmControls field of the Clock Source Descriptor.
The confusion is, subs->cur_rate is initialized only if snd_usb_init_sample_rate succeeds. Which does SET control tranfer, albeit with the supported frequency. Couldn't a fixed sampling freq UAC2 compliant device refuse to work in that case, thereby failing any attempt to use the USB card?
Yes, it will fail. This is a bug in the driver.
Regards, Clemens
On Thu, Jan 27, 2011 at 5:14 PM, Clemens Ladisch clemens@ladisch.de wrote:
Jassi Brar wrote:
While testing my under-development generic USB Audio Class 2.0 _gadget_ driver with ALSA's USB Audio Class driver, I came across an apparent discrepency. Or so do I think.
Page-98 Section 5.2.5.1.1 of 'Audio 20 final.pdf' specifies :- [In many cases, the Clock Source Entity represents a crystal oscillator based generator with a single fixed frequency. In that case, the Set request is not supported.]
Here 'not supported' means setup requests for CUR/RANGE CS_SAM_FREQ_CONTROL should stall. Right ?
Strictly speaking, "is not" (instead of "might not be") implies that the device _must_ stall.
Ok, though I am still going to allow for 0 and the 'supported' freq to be SET, because mine is going to be a virtual 'utility' gadget driver and there is not much point being too a purist in such a trivial case.
The snd_usb_hw_params in sound/usb/pcm.c apparently attempts to do that with disregard to Clock-Frequency-Control bitmask in bmControls field of the Clock Source Descriptor.
The confusion is, subs->cur_rate is initialized only if snd_usb_init_sample_rate succeeds. Which does SET control tranfer, albeit with the supported frequency. Couldn't a fixed sampling freq UAC2 compliant device refuse to work in that case, thereby failing any attempt to use the USB card?
Yes, it will fail. This is a bug in the driver.
There seems more such situations where the specs are 'overlooked'. I mean not many fields of the UAC2 descriptors are found to be used. My employer willing, I would love to work on the UAC-2 host-class driver as well.
Thanks
participants (3)
-
Clemens Ladisch
-
Jassi Brar
-
Takashi Iwai