aboutsummaryrefslogtreecommitdiff
path: root/sound/usb/usbmidi.c
diff options
context:
space:
mode:
authorTakashi Iwai <tiwai@suse.de>2009-05-27 16:51:15 +0200
committerTakashi Iwai <tiwai@suse.de>2009-05-27 16:51:15 +0200
commitf00452cfdc5ab97208078f06e802b39a4839b7b3 (patch)
tree6c8e4657bac5b9a61484db6d23148bb08f2bc43a /sound/usb/usbmidi.c
parentcd86a536c81e9300d984327517548ca0652eebf9 (diff)
parent55de5ef970c680d8d75f2a9aa7e4f172140dbd9c (diff)
Merge branch 'fix/misc' into for-linus
* fix/misc: sound: usb-audio: make the MotU Fastlane work again
Diffstat (limited to 'sound/usb/usbmidi.c')
-rw-r--r--sound/usb/usbmidi.c12
1 files changed, 11 insertions, 1 deletions
diff --git a/sound/usb/usbmidi.c b/sound/usb/usbmidi.c
index 26bad373fe6..2fb35cc22a3 100644
--- a/sound/usb/usbmidi.c
+++ b/sound/usb/usbmidi.c
@@ -1778,8 +1778,18 @@ int snd_usb_create_midi_interface(struct snd_usb_audio* chip,
umidi->usb_protocol_ops = &snd_usbmidi_novation_ops;
err = snd_usbmidi_detect_per_port_endpoints(umidi, endpoints);
break;
- case QUIRK_MIDI_RAW:
+ case QUIRK_MIDI_FASTLANE:
umidi->usb_protocol_ops = &snd_usbmidi_raw_ops;
+ /*
+ * Interface 1 contains isochronous endpoints, but with the same
+ * numbers as in interface 0. Since it is interface 1 that the
+ * USB core has most recently seen, these descriptors are now
+ * associated with the endpoint numbers. This will foul up our
+ * attempts to submit bulk/interrupt URBs to the endpoints in
+ * interface 0, so we have to make sure that the USB core looks
+ * again at interface 0 by calling usb_set_interface() on it.
+ */
+ usb_set_interface(umidi->chip->dev, 0, 0);
err = snd_usbmidi_detect_per_port_endpoints(umidi, endpoints);
break;
case QUIRK_MIDI_EMAGIC: