aboutsummaryrefslogtreecommitdiffstats
path: root/sound
diff options
context:
space:
mode:
authorChirayu Desai <cdesai@cyanogenmod.org>2013-06-29 12:19:32 +0530
committerChirayu Desai <cdesai@cyanogenmod.org>2013-06-29 12:19:32 +0530
commit5dd3308e81c660adaf95ff9d1efd699d0ad94b41 (patch)
tree01d73a37cdc3573dadc9630a36f7b62df7a83ce8 /sound
parenta921f81fdcfec509021fcfe19dbca8650f95e7aa (diff)
parent863c94fa3948619d3e425f9a3c61e6baf72ee666 (diff)
downloadkernel_samsung_aries-5dd3308e81c660adaf95ff9d1efd699d0ad94b41.zip
kernel_samsung_aries-5dd3308e81c660adaf95ff9d1efd699d0ad94b41.tar.gz
kernel_samsung_aries-5dd3308e81c660adaf95ff9d1efd699d0ad94b41.tar.bz2
Merge tag 'v3.0.84' of git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable into HEAD
This is the 3.0.84 stable release
Diffstat (limited to 'sound')
-rw-r--r--sound/usb/card.c22
1 files changed, 20 insertions, 2 deletions
diff --git a/sound/usb/card.c b/sound/usb/card.c
index ce29d87..b3c7e19 100644
--- a/sound/usb/card.c
+++ b/sound/usb/card.c
@@ -148,14 +148,32 @@ static int snd_usb_create_stream(struct snd_usb_audio *chip, int ctrlif, int int
return -EINVAL;
}
+ alts = &iface->altsetting[0];
+ altsd = get_iface_desc(alts);
+
+ /*
+ * Android with both accessory and audio interfaces enabled gets the
+ * interface numbers wrong.
+ */
+ if ((chip->usb_id == USB_ID(0x18d1, 0x2d04) ||
+ chip->usb_id == USB_ID(0x18d1, 0x2d05)) &&
+ interface == 0 &&
+ altsd->bInterfaceClass == USB_CLASS_VENDOR_SPEC &&
+ altsd->bInterfaceSubClass == USB_SUBCLASS_VENDOR_SPEC) {
+ interface = 2;
+ iface = usb_ifnum_to_if(dev, interface);
+ if (!iface)
+ return -EINVAL;
+ alts = &iface->altsetting[0];
+ altsd = get_iface_desc(alts);
+ }
+
if (usb_interface_claimed(iface)) {
snd_printdd(KERN_INFO "%d:%d:%d: skipping, already claimed\n",
dev->devnum, ctrlif, interface);
return -EINVAL;
}
- alts = &iface->altsetting[0];
- altsd = get_iface_desc(alts);
if ((altsd->bInterfaceClass == USB_CLASS_AUDIO ||
altsd->bInterfaceClass == USB_CLASS_VENDOR_SPEC) &&
altsd->bInterfaceSubClass == USB_SUBCLASS_MIDISTREAMING) {