aboutsummaryrefslogtreecommitdiffstats
path: root/sound/usb/usbaudio.c
diff options
context:
space:
mode:
authorSebastien Alaiwan <sebastien.alaiwan@gmail.com>2010-02-16 02:55:08 -0500
committerJaroslav Kysela <perex@perex.cz>2010-02-16 03:34:56 -0500
commitd39e82db73eb876c60d00f00219d767b3be30307 (patch)
tree6a6d0fdaae86bd4089e66578dd2bed19a6987d87 /sound/usb/usbaudio.c
parentc3a3e040f01457d2ea4f199f75ca205401001a3b (diff)
ALSA: USB MIDI support for Access Music VirusTI
Here's a patch that adds MIDI support through USB for one of the Access Music synths, the VirusTI. The synth uses standard USBMIDI protocol on its USB interface 3, although it does signal "vendor specific" class. A magic string has to be sent on interface 3 to enable the sending of MIDI from the synth (this string was found by sniffing usb communication of the Windows driver). This is all my patch does, and it works on my computer. Please note that the synth can also do standard usb audio I/O on its interfaces 2&3, which already works with the current snd-usb-audio driver, except for the audio input from the synth. I'm going to work on it when I have some time. Signed-off-by: Sebastien Alaiwan <sebastien.alaiwan@gmail.com> Signed-off-by: Clemens Ladisch <clemens@ladisch.de> (cosmetics, list terminator) Signed-off-by: Jaroslav Kysela <perex@perex.cz>
Diffstat (limited to 'sound/usb/usbaudio.c')
-rw-r--r--sound/usb/usbaudio.c32
1 files changed, 32 insertions, 0 deletions
diff --git a/sound/usb/usbaudio.c b/sound/usb/usbaudio.c
index 4963defee18a..d01ec188b602 100644
--- a/sound/usb/usbaudio.c
+++ b/sound/usb/usbaudio.c
@@ -3327,6 +3327,32 @@ static int snd_usb_cm6206_boot_quirk(struct usb_device *dev)
3327} 3327}
3328 3328
3329/* 3329/*
3330 * This call will put the synth in "USB send" mode, i.e it will send MIDI
3331 * messages through USB (this is disabled at startup). The synth will
3332 * acknowledge by sending a sysex on endpoint 0x85 and by displaying a USB
3333 * sign on its LCD. Values here are chosen based on sniffing USB traffic
3334 * under Windows.
3335 */
3336static int snd_usb_accessmusic_boot_quirk(struct usb_device *dev)
3337{
3338 int err, actual_length;
3339
3340 /* "midi send" enable */
3341 static const u8 seq[] = { 0x4e, 0x73, 0x52, 0x01 };
3342
3343 void *buf = kmemdup(seq, ARRAY_SIZE(seq), GFP_KERNEL);
3344 if (!buf)
3345 return -ENOMEM;
3346 err = usb_interrupt_msg(dev, usb_sndintpipe(dev, 0x05), buf,
3347 ARRAY_SIZE(seq), &actual_length, 1000);
3348 kfree(buf);
3349 if (err < 0)
3350 return err;
3351
3352 return 0;
3353}
3354
3355/*
3330 * Setup quirks 3356 * Setup quirks
3331 */ 3357 */
3332#define AUDIOPHILE_SET 0x01 /* if set, parse device_setup */ 3358#define AUDIOPHILE_SET 0x01 /* if set, parse device_setup */
@@ -3624,6 +3650,12 @@ static void *snd_usb_audio_probe(struct usb_device *dev,
3624 goto __err_val; 3650 goto __err_val;
3625 } 3651 }
3626 3652
3653 /* Access Music VirusTI Desktop */
3654 if (id == USB_ID(0x133e, 0x0815)) {
3655 if (snd_usb_accessmusic_boot_quirk(dev) < 0)
3656 goto __err_val;
3657 }
3658
3627 /* 3659 /*
3628 * found a config. now register to ALSA 3660 * found a config. now register to ALSA
3629 */ 3661 */