1736 struct snd_usb_midi* umidi;
1737 struct snd_usb_midi_endpoint_info endpoints[MIDI_MAX_ENDPOINTS];
1738 int out_ports, in_ports;
1739 int i, err;
1740
1741 umidi = kzalloc(sizeof(*umidi), GFP_KERNEL);
1742 if (!umidi)
1743 return -ENOMEM;
1744 umidi->chip = chip;
1745 umidi->iface = iface;
1746 umidi->quirk = quirk;
1747 umidi->usb_protocol_ops = &snd_usbmidi_standard_ops;
1748 init_timer(&umidi->error_timer);
1749 spin_lock_init(&umidi->disc_lock);
1750 umidi->error_timer.function = snd_usbmidi_error_timer;
1751 umidi->error_timer.data = (unsigned long)umidi;
1752
1753
1754 memset(endpoints, 0, sizeof(endpoints));
1755 switch (quirk ? quirk->type : QUIRK_MIDI_STANDARD_INTERFACE) {
1756 case QUIRK_MIDI_STANDARD_INTERFACE:
1757 err = snd_usbmidi_get_ms_info(umidi, endpoints);
1758 if (chip->usb_id == USB_ID(0x0763, 0x0150))
1759 umidi->usb_protocol_ops =
1760 &snd_usbmidi_maudio_broken_running_status_ops;
1761 break;
1762 case QUIRK_MIDI_US122L:
1763 umidi->usb_protocol_ops = &snd_usbmidi_122l_ops;
1764
1765 case QUIRK_MIDI_FIXED_ENDPOINT:
1766 memcpy(&endpoints[0], quirk->data,
1767 sizeof(struct snd_usb_midi_endpoint_info));
1768 err = snd_usbmidi_detect_endpoints(umidi, &endpoints[0], 1);
1769 break;
1770 case QUIRK_MIDI_YAMAHA:
1771 err = snd_usbmidi_detect_yamaha(umidi, &endpoints[0]);
1772 break;
1773 case QUIRK_MIDI_MIDIMAN:
1774 umidi->usb_protocol_ops = &snd_usbmidi_midiman_ops;
1775 memcpy(&endpoints[0], quirk->data,
1776 sizeof(struct snd_usb_midi_endpoint_info));