ALSA: usbmixer: bail out early when parsing audio class v2 descriptors
authorDaniel Mack <daniel@caiaq.de>
Mon, 22 Feb 2010 22:49:12 +0000 (23:49 +0100)
committerTakashi Iwai <tiwai@suse.de>
Tue, 23 Feb 2010 07:40:26 +0000 (08:40 +0100)
This is just a quick hack that needs to be removed once the new units
defined by the audio class v2.0 standard are supported.

However, it allows using these devices for now, without mixer support.

Signed-off-by: Daniel Mack <daniel@caiaq.de>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
sound/usb/usbmixer.c

index ca7949598191eb0384fb4d8742d6f83f6a9bf861..42bb95c739a852f8efbcecaa8963f6e13ad9b99c 100644 (file)
@@ -2258,7 +2258,8 @@ int snd_usb_create_mixer(struct snd_usb_audio *chip, int ctrlif,
        };
        struct usb_mixer_interface *mixer;
        struct snd_info_entry *entry;
-       int err;
+       struct usb_host_interface *host_iface;
+       int err, protocol;
 
        strcpy(chip->card->mixername, "USB Mixer");
 
@@ -2275,6 +2276,16 @@ int snd_usb_create_mixer(struct snd_usb_audio *chip, int ctrlif,
                return -ENOMEM;
        }
 
+       host_iface = &usb_ifnum_to_if(chip->dev, ctrlif)->altsetting[0];
+       protocol = host_iface->desc.bInterfaceProtocol;
+
+       /* FIXME! */
+       if (protocol != UAC_VERSION_1) {
+               snd_printk(KERN_WARNING "mixer interface protocol 0x%02x not yet supported\n",
+                                       protocol);
+               return 0;
+       }
+
        if ((err = snd_usb_mixer_controls(mixer)) < 0 ||
            (err = snd_usb_mixer_status_create(mixer)) < 0)
                goto _error;