diff options
Diffstat (limited to 'sound/usb/usbaudio.c')
-rw-r--r-- | sound/usb/usbaudio.c | 32 |
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 | */ | ||
3336 | static 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 | */ |