summaryrefslogtreecommitdiffstats
path: root/sound/usb/card.c
diff options
context:
space:
mode:
authorClemens Ladisch <clemens@ladisch.de>2010-09-03 10:53:11 +0200
committerTakashi Iwai <tiwai@suse.de>2010-09-03 22:36:39 +0200
commita2acad8298a42b7be684a32fafaf83332bba9c2b (patch)
tree34cddff9b3b8efcc3a60a6e9d0a3e001a714d364 /sound/usb/card.c
parentALSA: usb-audio: Assume first control interface is for audio (diff)
downloadlinux-a2acad8298a42b7be684a32fafaf83332bba9c2b.tar.xz
linux-a2acad8298a42b7be684a32fafaf83332bba9c2b.zip
ALSA: usb-audio: fix detection of vendor-specific device protocol settings
The Audio Class v2 support code in 2.6.35 added checks for the bInterfaceProtocol field. However, there are devices (usually those detected by vendor-specific quirks) that do not have one of the predefined values in this field, which made the driver reject them. To fix this regression, restore the old behaviour, i.e., assume that a device with an unknown bInterfaceProtocol field (other than UAC_VERSION_2) has more or less UAC-v1-compatible descriptors. [compile warning fixes by tiwai] Signed-off-by: Clemens Ladisch <clemens@ladisch.de> Cc: Daniel Mack <daniel@caiaq.de> Cc: <stable@kernel.org> Signed-off-by: Takashi Iwai <tiwai@suse.de>
Diffstat (limited to 'sound/usb/card.c')
-rw-r--r--sound/usb/card.c9
1 files changed, 5 insertions, 4 deletions
diff --git a/sound/usb/card.c b/sound/usb/card.c
index b443a33d31c9..32e4be8a187c 100644
--- a/sound/usb/card.c
+++ b/sound/usb/card.c
@@ -216,6 +216,11 @@ static int snd_usb_create_streams(struct snd_usb_audio *chip, int ctrlif)
}
switch (protocol) {
+ default:
+ snd_printdd(KERN_WARNING "unknown interface protocol %#02x, assuming v1\n",
+ protocol);
+ /* fall through */
+
case UAC_VERSION_1: {
struct uac1_ac_header_descriptor *h1 = control_header;
@@ -253,10 +258,6 @@ static int snd_usb_create_streams(struct snd_usb_audio *chip, int ctrlif)
break;
}
-
- default:
- snd_printk(KERN_ERR "unknown protocol version 0x%02x\n", protocol);
- return -EINVAL;
}
return 0;