|
@@ -1550,46 +1550,45 @@ int snd_usb_create_midi_interface(snd_usb_audio_t* chip,
|
|
|
|
|
|
/* detect the endpoint(s) to use */
|
|
/* detect the endpoint(s) to use */
|
|
memset(endpoints, 0, sizeof(endpoints));
|
|
memset(endpoints, 0, sizeof(endpoints));
|
|
- if (!quirk) {
|
|
|
|
|
|
+ switch (quirk ? quirk->type : QUIRK_MIDI_STANDARD_INTERFACE) {
|
|
|
|
+ case QUIRK_MIDI_STANDARD_INTERFACE:
|
|
err = snd_usbmidi_get_ms_info(umidi, endpoints);
|
|
err = snd_usbmidi_get_ms_info(umidi, endpoints);
|
|
- } else {
|
|
|
|
- switch (quirk->type) {
|
|
|
|
- case QUIRK_MIDI_FIXED_ENDPOINT:
|
|
|
|
- memcpy(&endpoints[0], quirk->data,
|
|
|
|
- sizeof(snd_usb_midi_endpoint_info_t));
|
|
|
|
- err = snd_usbmidi_detect_endpoints(umidi, &endpoints[0], 1);
|
|
|
|
- break;
|
|
|
|
- case QUIRK_MIDI_YAMAHA:
|
|
|
|
- err = snd_usbmidi_detect_yamaha(umidi, &endpoints[0]);
|
|
|
|
- break;
|
|
|
|
- case QUIRK_MIDI_MIDIMAN:
|
|
|
|
- umidi->usb_protocol_ops = &snd_usbmidi_midiman_ops;
|
|
|
|
- memcpy(&endpoints[0], quirk->data,
|
|
|
|
- sizeof(snd_usb_midi_endpoint_info_t));
|
|
|
|
- err = 0;
|
|
|
|
- break;
|
|
|
|
- case QUIRK_MIDI_NOVATION:
|
|
|
|
- umidi->usb_protocol_ops = &snd_usbmidi_novation_ops;
|
|
|
|
- err = snd_usbmidi_detect_per_port_endpoints(umidi, endpoints);
|
|
|
|
- break;
|
|
|
|
- case QUIRK_MIDI_RAW:
|
|
|
|
- umidi->usb_protocol_ops = &snd_usbmidi_raw_ops;
|
|
|
|
- err = snd_usbmidi_detect_per_port_endpoints(umidi, endpoints);
|
|
|
|
- break;
|
|
|
|
- case QUIRK_MIDI_EMAGIC:
|
|
|
|
- umidi->usb_protocol_ops = &snd_usbmidi_emagic_ops;
|
|
|
|
- memcpy(&endpoints[0], quirk->data,
|
|
|
|
- sizeof(snd_usb_midi_endpoint_info_t));
|
|
|
|
- err = snd_usbmidi_detect_endpoints(umidi, &endpoints[0], 1);
|
|
|
|
- break;
|
|
|
|
- case QUIRK_MIDI_MIDITECH:
|
|
|
|
- err = snd_usbmidi_detect_per_port_endpoints(umidi, endpoints);
|
|
|
|
- break;
|
|
|
|
- default:
|
|
|
|
- snd_printd(KERN_ERR "invalid quirk type %d\n", quirk->type);
|
|
|
|
- err = -ENXIO;
|
|
|
|
- break;
|
|
|
|
- }
|
|
|
|
|
|
+ break;
|
|
|
|
+ case QUIRK_MIDI_FIXED_ENDPOINT:
|
|
|
|
+ memcpy(&endpoints[0], quirk->data,
|
|
|
|
+ sizeof(snd_usb_midi_endpoint_info_t));
|
|
|
|
+ err = snd_usbmidi_detect_endpoints(umidi, &endpoints[0], 1);
|
|
|
|
+ break;
|
|
|
|
+ case QUIRK_MIDI_YAMAHA:
|
|
|
|
+ err = snd_usbmidi_detect_yamaha(umidi, &endpoints[0]);
|
|
|
|
+ break;
|
|
|
|
+ case QUIRK_MIDI_MIDIMAN:
|
|
|
|
+ umidi->usb_protocol_ops = &snd_usbmidi_midiman_ops;
|
|
|
|
+ memcpy(&endpoints[0], quirk->data,
|
|
|
|
+ sizeof(snd_usb_midi_endpoint_info_t));
|
|
|
|
+ err = 0;
|
|
|
|
+ break;
|
|
|
|
+ case QUIRK_MIDI_NOVATION:
|
|
|
|
+ umidi->usb_protocol_ops = &snd_usbmidi_novation_ops;
|
|
|
|
+ err = snd_usbmidi_detect_per_port_endpoints(umidi, endpoints);
|
|
|
|
+ break;
|
|
|
|
+ case QUIRK_MIDI_RAW:
|
|
|
|
+ umidi->usb_protocol_ops = &snd_usbmidi_raw_ops;
|
|
|
|
+ err = snd_usbmidi_detect_per_port_endpoints(umidi, endpoints);
|
|
|
|
+ break;
|
|
|
|
+ case QUIRK_MIDI_EMAGIC:
|
|
|
|
+ umidi->usb_protocol_ops = &snd_usbmidi_emagic_ops;
|
|
|
|
+ memcpy(&endpoints[0], quirk->data,
|
|
|
|
+ sizeof(snd_usb_midi_endpoint_info_t));
|
|
|
|
+ err = snd_usbmidi_detect_endpoints(umidi, &endpoints[0], 1);
|
|
|
|
+ break;
|
|
|
|
+ case QUIRK_MIDI_MIDITECH:
|
|
|
|
+ err = snd_usbmidi_detect_per_port_endpoints(umidi, endpoints);
|
|
|
|
+ break;
|
|
|
|
+ default:
|
|
|
|
+ snd_printd(KERN_ERR "invalid quirk type %d\n", quirk->type);
|
|
|
|
+ err = -ENXIO;
|
|
|
|
+ break;
|
|
}
|
|
}
|
|
if (err < 0) {
|
|
if (err < 0) {
|
|
kfree(umidi);
|
|
kfree(umidi);
|