aboutsummaryrefslogtreecommitdiffstats
path: root/sound/usb/stream.c
diff options
context:
space:
mode:
authorClemens Ladisch <clemens@ladisch.de>2013-03-31 17:43:12 -0400
committerClemens Ladisch <clemens@ladisch.de>2013-06-27 15:59:48 -0400
commitaafe77cc45a595ca1d4536f2412ddf671ea9108c (patch)
treef21cc9256d40ece84da14b0c10d097fe859d4cdb /sound/usb/stream.c
parentba7c2be114243fa4cfcbc66a81db18e1d55abf4b (diff)
ALSA: usb-audio: add support for many Roland/Yamaha devices
Add quirks to detect the various vendor-specific descriptors used by Roland and Yamaha in most of their recent USB audio and MIDI devices. Together with the previous patch, this should add audio/MIDI support for the following USB devices: - Edirol motion dive .tokyo performance package - Roland MC-808 Synthesizer - Roland BK-7m Synthesizer - Roland VIMA JM-5/8 Synthesizer - Roland SP-555 Sequencer - Roland V-Synth GT Synthesizer - Roland Music Atelier AT-75/100/300/350C/500/800/900/900C Organ - Edirol V-Mixer M-200i/300/380/400/480/R-1000 - BOSS GT-10B Effects Processor - Roland Fantom G6/G7/G8 Keyboard - Cakewalk Sonar V-Studio 20/100/700 Audio Interface - Roland GW-8 Keyboard - Roland AX-Synth Keyboard - Roland JUNO-Di/STAGE/Gi Keyboard - Roland VB-99 Effects Processor - Cakewalk UM-2G MIDI Interface - Roland A-500S Keyboard - Roland SD-50 Synthesizer - Roland OCTAPAD SPD-30 Controller - Roland Lucina AX-09 Synthesizer - BOSS BR-800 Digital Recorder - Roland DUO/TRI-CAPTURE (EX) Audio Interface - BOSS RC-300 Loop Station - Roland JUPITER-50/80 Keyboard - Roland R-26 Recorder - Roland SPD-SX Controller - BOSS JS-10 Audio Player - Roland TD-11/15/30 Drum Module - Roland A-49/88 Keyboard - Roland INTEGRA-7 Synthesizer - Roland R-88 Recorder Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
Diffstat (limited to 'sound/usb/stream.c')
-rw-r--r--sound/usb/stream.c15
1 files changed, 12 insertions, 3 deletions
diff --git a/sound/usb/stream.c b/sound/usb/stream.c
index 1ea5871cb980..c4339f97226b 100644
--- a/sound/usb/stream.c
+++ b/sound/usb/stream.c
@@ -493,10 +493,10 @@ int snd_usb_parse_audio_interface(struct snd_usb_audio *chip, int iface_no)
493 altsd = get_iface_desc(alts); 493 altsd = get_iface_desc(alts);
494 protocol = altsd->bInterfaceProtocol; 494 protocol = altsd->bInterfaceProtocol;
495 /* skip invalid one */ 495 /* skip invalid one */
496 if ((altsd->bInterfaceClass != USB_CLASS_AUDIO && 496 if (((altsd->bInterfaceClass != USB_CLASS_AUDIO ||
497 (altsd->bInterfaceSubClass != USB_SUBCLASS_AUDIOSTREAMING &&
498 altsd->bInterfaceSubClass != USB_SUBCLASS_VENDOR_SPEC)) &&
497 altsd->bInterfaceClass != USB_CLASS_VENDOR_SPEC) || 499 altsd->bInterfaceClass != USB_CLASS_VENDOR_SPEC) ||
498 (altsd->bInterfaceSubClass != USB_SUBCLASS_AUDIOSTREAMING &&
499 altsd->bInterfaceSubClass != USB_SUBCLASS_VENDOR_SPEC) ||
500 altsd->bNumEndpoints < 1 || 500 altsd->bNumEndpoints < 1 ||
501 le16_to_cpu(get_endpoint(alts, 0)->wMaxPacketSize) == 0) 501 le16_to_cpu(get_endpoint(alts, 0)->wMaxPacketSize) == 0)
502 continue; 502 continue;
@@ -512,6 +512,15 @@ int snd_usb_parse_audio_interface(struct snd_usb_audio *chip, int iface_no)
512 if (snd_usb_apply_interface_quirk(chip, iface_no, altno)) 512 if (snd_usb_apply_interface_quirk(chip, iface_no, altno))
513 continue; 513 continue;
514 514
515 /*
516 * Roland audio streaming interfaces are marked with protocols
517 * 0/1/2, but are UAC 1 compatible.
518 */
519 if (USB_ID_VENDOR(chip->usb_id) == 0x0582 &&
520 altsd->bInterfaceClass == USB_CLASS_VENDOR_SPEC &&
521 protocol <= 2)
522 protocol = UAC_VERSION_1;
523
515 chconfig = 0; 524 chconfig = 0;
516 /* get audio formats */ 525 /* get audio formats */
517 switch (protocol) { 526 switch (protocol) {