Daniel,
The main problem at the moment is that snd_usb_create_mixer() will not be
called on quirked devices! Take a look at card.c: snd_usb_create_mixer() will only be called if snd_usb_create_quirk() returns > 0. But why should
we
assume that quirked devices don't have any mixers?
That is indeed strange, yes. I can't explain that. Not to break existing devices, I would suggest adding a bit-wise "flags" field to snd_usb_audio_quirk and still create the mixers if a certain flag (something like "QUIRK_FLAG_CREATE_STANDARD_MIXERS") is set. Clemens, Takashi, would that be ok?
In general, note that as long as functions are static, the can and should have short names. But once they're not, you're in the global kernel namespace, and all symbols must be well prefixed (with "snd_usb_" in that case) in order to avoid name collisions.
So this is probably a terrible idea but what about creating a new quirk
QUIRK_MIXER_STANDARD_INTERFACE and just having that eventually call snd_usb_create_mixer()
because conceptually I could see this as two problems with two solutions. one is that the interface type/blah is the mixer is a lie (vendor_specific instead of UAC2 MIXER . (should be solved via a "quirk" in quirk-table.h) and
The other is that the endpoint descriptors within that are wrong (solved in mixer_quirks)
or am I thinking about this wrong?
Grant.