[alsa-devel] usb-audio: Correct way to do a mixer quirk?
Clemens Ladisch
clemens at ladisch.de
Mon Feb 20 09:07:59 CET 2012
Mark Hills wrote:
> The Electrix Ebox-44 is a new USB interface, but the MIXER_UNIT descriptor
> is broken and refers to a non-existing unit_id.
>
> I worked around it with the patch below to remove the additional entry,
> and the device seems to work as expected.
>
> But inserting code here is probably not desirable -- I imagine I need to
> turn this into a quirk of some sort. Am I correct?
>
> And what is the best way to do this?
>
> * It doesn't appear I can use quirks-table.h to adjust the content
> of a mixer unit (the bNrInPins attribute)
>
> * It seems that to use mixer_quirks.c would require a function to
> create the whole mixer
>
> It's possible I'm incorrect on the above, though. Can anyone advise on how
> to make this fix in the correct way?
I'd suggest to change the code to not abort if a unit doesn't exist.
Regards,
Clemens
> ---
> AudioControl Interface Descriptor:
> bLength 15
> bDescriptorType 36
> bDescriptorSubtype 4 (MIXER_UNIT)
> bUnitID 6
> bNrInPins 3 <-- should be 2
> baSourceID( 0) 5
> baSourceID( 1) 4
> baSourceID( 2) 2 <-- bogus entry
>
> ---
> sound/usb/mixer.c | 3 +++
> 1 files changed, 3 insertions(+), 0 deletions(-)
>
> diff --git a/sound/usb/mixer.c b/sound/usb/mixer.c
> index 8147ffc..ab3ccca 100644
> --- a/sound/usb/mixer.c
> +++ b/sound/usb/mixer.c
> @@ -1387,6 +1387,9 @@ static int parse_audio_mixer_unit(struct mixer_build *state, int unitid, void *r
> return 0;
> }
>
> + if (state->chip->usb_id == USB_ID(0x200c, 0x1018) && unitid == 6)
> + input_pins = 2;
> +
> num_ins = 0;
> ich = 0;
> for (pin = 0; pin < input_pins; pin++) {
More information about the Alsa-devel
mailing list