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