|
@@ -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:
|