aboutsummaryrefslogtreecommitdiffstats
path: root/sound/usb/usbaudio.c
diff options
context:
space:
mode:
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 b8e0b8fda607..8a8f62515b80 100644
--- a/sound/usb/usbaudio.c
+++ b/sound/usb/usbaudio.c
@@ -3312,6 +3312,32 @@ static int snd_usb_cm6206_boot_quirk(struct usb_device *dev)
3312} 3312}
3313 3313
3314/* 3314/*
3315 * This call will put the synth in "USB send" mode, i.e it will send MIDI
3316 * messages through USB (this is disabled at startup). The synth will
3317 * acknowledge by sending a sysex on endpoint 0x85 and by displaying a USB
3318 * sign on its LCD. Values here are chosen based on sniffing USB traffic
3319 * under Windows.
3320 */
3321static int snd_usb_accessmusic_boot_quirk(struct usb_device *dev)
3322{
3323 int err, actual_length;
3324
3325 /* "midi send" enable */
3326 static const u8 seq[] = { 0x4e, 0x73, 0x52, 0x01 };
3327
3328 void *buf = kmemdup(seq, ARRAY_SIZE(seq), GFP_KERNEL);
3329 if (!buf)
3330 return -ENOMEM;
3331 err = usb_interrupt_msg(dev, usb_sndintpipe(dev, 0x05), buf,
3332 ARRAY_SIZE(seq), &actual_length, 1000);
3333 kfree(buf);
3334 if (err < 0)
3335 return err;
3336
3337 return 0;
3338}
3339
3340/*
3315 * Setup quirks 3341 * Setup quirks
3316 */ 3342 */
3317#define AUDIOPHILE_SET 0x01 /* if set, parse device_setup */ 3343#define AUDIOPHILE_SET 0x01 /* if set, parse device_setup */
@@ -3609,6 +3635,12 @@ static void *snd_usb_audio_probe(struct usb_device *dev,
3609 goto __err_val; 3635 goto __err_val;
3610 } 3636 }
3611 3637
3638 /* Access Music VirusTI Desktop */
3639 if (id == USB_ID(0x133e, 0x0815)) {
3640 if (snd_usb_accessmusic_boot_quirk(dev) < 0)
3641 goto __err_val;
3642 }
3643
3612 /* 3644 /*
3613 * found a config. now register to ALSA 3645 * found a config. now register to ALSA
3614 */ 3646 */