[alsa-devel] [PATCH] ALSA: usb-audio: fix missing input volume controls in MAYA44 USB(+)

Clemens Ladisch clemens at ladisch.de
Wed Jun 3 11:36:51 CEST 2015


The driver worked around an error in the MAYA44 USB(+)'s mixer unit
descriptor by aborting before parsing the missing field.  However,
aborting parsing too early prevented parsing of the other units
connected to this unit, so the capture mixer controls would be missing.

Fix this by moving the check for this descriptor error after the parsing
of the unit's input pins.

Reported-by: nightmixes <nightmixes at gmail.com>
Tested-by: nightmixes <nightmixes at gmail.com>
Signed-off-by: Clemens Ladisch <clemens at ladisch.de>

--- a/sound/usb/mixer.c
+++ b/sound/usb/mixer.c
@@ -1583,18 +1583,15 @@ static int parse_audio_mixer_unit(struct
 			      unitid);
 		return -EINVAL;
 	}
-	/* no bmControls field (e.g. Maya44) -> ignore */
-	if (desc->bLength <= 10 + input_pins) {
-		usb_audio_dbg(state->chip, "MU %d has no bmControls field\n",
-			      unitid);
-		return 0;
-	}

 	num_ins = 0;
 	ich = 0;
 	for (pin = 0; pin < input_pins; pin++) {
 		err = parse_audio_unit(state, desc->baSourceID[pin]);
 		if (err < 0)
+			continue;
+		/* no bmControls field (e.g. Maya44) -> ignore */
+		if (desc->bLength <= 10 + input_pins)
 			continue;
 		err = check_input_term(state, desc->baSourceID[pin], &iterm);
 		if (err < 0)


More information about the Alsa-devel mailing list