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 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 */