diff options
author | Clemens Ladisch <clemens@ladisch.de> | 2013-03-31 17:43:12 -0400 |
---|---|---|
committer | Clemens Ladisch <clemens@ladisch.de> | 2013-06-27 15:59:48 -0400 |
commit | aafe77cc45a595ca1d4536f2412ddf671ea9108c (patch) | |
tree | f21cc9256d40ece84da14b0c10d097fe859d4cdb /sound/usb/stream.c | |
parent | ba7c2be114243fa4cfcbc66a81db18e1d55abf4b (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.c | 15 |
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) { |