Using snd_pcm_hw_params_set_format (), if I attempt to set an Asus Xonar U7 as "hw" into S32_LE format I get an error. It will, however, accept S16_LE. This would normally mean that the hardware does not support the format would it not? But I presume that Xonar U7 can, and does, support 24 bit resolution. This bug(?), I think has also been noted for CM6631A-based cards. The common 'workaround' seems to be to use "plughw" which does allow use of S32_LE. However, does this not just mean that the 32 bit values are being converted to S16_LE in software prior to being sent to the card, so the card never works in 24 bit mode? I am assuming that 32 bit values should, in fact, be acceptable for the "hw" device, and that these should be played back at the maximum resolution of the card..?
Apologies if I am misunderstanding anything.
Further information: it seems that people are noticing the same anomaly in CM6631A/CM6632A-based cards from different manufacturers when running Linux or Mac. A commenter in this blog finds a hardware-based solution: http://archimago.blogspot.co.uk/2013/03/measurements-adaptive-aune-x1.html
He removes a hardware power-on reset chip and his Mac suddenly discovers the card's USB2.0 settings rather than the USB1.0 only that prevents use above 16 bit. A thought: do C-Media provide a reference hardware design that includes a reset chip with an unusually long reset, or something like that? Perhaps Linux and Mac are too quick off the draw, and fail to give the chips long enough to reset before interrogating them..? Something like that?
It would be great to know if anyone has read this!