1 /* SPDX-License-Identifier: GPL-2.0 */ 2 #ifndef __USBMIDI_H 3 #define __USBMIDI_H 4 5 /* maximum number of endpoints per interface */ 6 #define MIDI_MAX_ENDPOINTS 2 7 8 /* data for QUIRK_MIDI_FIXED_ENDPOINT */ 9 struct snd_usb_midi_endpoint_info { 10 int8_t out_ep; /* ep number, 0 autodetect */ 11 uint8_t out_interval; /* interval for interrupt endpoints */ 12 int8_t in_ep; 13 uint8_t in_interval; 14 uint16_t out_cables; /* bitmask */ 15 uint16_t in_cables; /* bitmask */ 16 int16_t assoc_in_jacks[16]; 17 int16_t assoc_out_jacks[16]; 18 }; 19 20 /* for QUIRK_MIDI_YAMAHA, data is NULL */ 21 22 /* for QUIRK_MIDI_MIDIMAN, data points to a snd_usb_midi_endpoint_info 23 * structure (out_cables and in_cables only) */ 24 25 /* for QUIRK_COMPOSITE, data points to an array of snd_usb_audio_quirk 26 * structures, terminated with .ifnum = -1 */ 27 28 /* for QUIRK_AUDIO_FIXED_ENDPOINT, data points to an audioformat structure */ 29 30 /* for QUIRK_AUDIO/MIDI_STANDARD_INTERFACE, data is NULL */ 31 32 /* for QUIRK_AUDIO_EDIROL_UA700_UA25/UA1000, data is NULL */ 33 34 /* for QUIRK_IGNORE_INTERFACE, data is NULL */ 35 36 /* for QUIRK_MIDI_NOVATION and _RAW, data is NULL */ 37 38 /* for QUIRK_MIDI_EMAGIC, data points to a snd_usb_midi_endpoint_info 39 * structure (out_cables and in_cables only) */ 40 41 /* for QUIRK_MIDI_CME, data is NULL */ 42 43 /* for QUIRK_MIDI_AKAI, data is NULL */ 44 45 int __snd_usbmidi_create(struct snd_card *card, 46 struct usb_interface *iface, 47 struct list_head *midi_list, 48 const struct snd_usb_audio_quirk *quirk, 49 unsigned int usb_id, 50 unsigned int *num_rawmidis); 51 52 static inline int snd_usbmidi_create(struct snd_card *card, 53 struct usb_interface *iface, 54 struct list_head *midi_list, 55 const struct snd_usb_audio_quirk *quirk) 56 { 57 return __snd_usbmidi_create(card, iface, midi_list, quirk, 0, NULL); 58 } 59 60 void snd_usbmidi_input_stop(struct list_head *p); 61 void snd_usbmidi_input_start(struct list_head *p); 62 void snd_usbmidi_disconnect(struct list_head *p); 63 void snd_usbmidi_suspend(struct list_head *p); 64 void snd_usbmidi_resume(struct list_head *p); 65 66 #endif /* __USBMIDI_H */ 67