162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */ 262306a36Sopenharmony_ci#ifndef __USBMIDI_H 362306a36Sopenharmony_ci#define __USBMIDI_H 462306a36Sopenharmony_ci 562306a36Sopenharmony_ci/* maximum number of endpoints per interface */ 662306a36Sopenharmony_ci#define MIDI_MAX_ENDPOINTS 2 762306a36Sopenharmony_ci 862306a36Sopenharmony_ci/* data for QUIRK_MIDI_FIXED_ENDPOINT */ 962306a36Sopenharmony_cistruct snd_usb_midi_endpoint_info { 1062306a36Sopenharmony_ci int8_t out_ep; /* ep number, 0 autodetect */ 1162306a36Sopenharmony_ci uint8_t out_interval; /* interval for interrupt endpoints */ 1262306a36Sopenharmony_ci int8_t in_ep; 1362306a36Sopenharmony_ci uint8_t in_interval; 1462306a36Sopenharmony_ci uint16_t out_cables; /* bitmask */ 1562306a36Sopenharmony_ci uint16_t in_cables; /* bitmask */ 1662306a36Sopenharmony_ci int16_t assoc_in_jacks[16]; 1762306a36Sopenharmony_ci int16_t assoc_out_jacks[16]; 1862306a36Sopenharmony_ci}; 1962306a36Sopenharmony_ci 2062306a36Sopenharmony_ci/* for QUIRK_MIDI_YAMAHA, data is NULL */ 2162306a36Sopenharmony_ci 2262306a36Sopenharmony_ci/* for QUIRK_MIDI_MIDIMAN, data points to a snd_usb_midi_endpoint_info 2362306a36Sopenharmony_ci * structure (out_cables and in_cables only) */ 2462306a36Sopenharmony_ci 2562306a36Sopenharmony_ci/* for QUIRK_COMPOSITE, data points to an array of snd_usb_audio_quirk 2662306a36Sopenharmony_ci * structures, terminated with .ifnum = -1 */ 2762306a36Sopenharmony_ci 2862306a36Sopenharmony_ci/* for QUIRK_AUDIO_FIXED_ENDPOINT, data points to an audioformat structure */ 2962306a36Sopenharmony_ci 3062306a36Sopenharmony_ci/* for QUIRK_AUDIO/MIDI_STANDARD_INTERFACE, data is NULL */ 3162306a36Sopenharmony_ci 3262306a36Sopenharmony_ci/* for QUIRK_AUDIO_EDIROL_UA700_UA25/UA1000, data is NULL */ 3362306a36Sopenharmony_ci 3462306a36Sopenharmony_ci/* for QUIRK_IGNORE_INTERFACE, data is NULL */ 3562306a36Sopenharmony_ci 3662306a36Sopenharmony_ci/* for QUIRK_MIDI_NOVATION and _RAW, data is NULL */ 3762306a36Sopenharmony_ci 3862306a36Sopenharmony_ci/* for QUIRK_MIDI_EMAGIC, data points to a snd_usb_midi_endpoint_info 3962306a36Sopenharmony_ci * structure (out_cables and in_cables only) */ 4062306a36Sopenharmony_ci 4162306a36Sopenharmony_ci/* for QUIRK_MIDI_CME, data is NULL */ 4262306a36Sopenharmony_ci 4362306a36Sopenharmony_ci/* for QUIRK_MIDI_AKAI, data is NULL */ 4462306a36Sopenharmony_ci 4562306a36Sopenharmony_ciint __snd_usbmidi_create(struct snd_card *card, 4662306a36Sopenharmony_ci struct usb_interface *iface, 4762306a36Sopenharmony_ci struct list_head *midi_list, 4862306a36Sopenharmony_ci const struct snd_usb_audio_quirk *quirk, 4962306a36Sopenharmony_ci unsigned int usb_id, 5062306a36Sopenharmony_ci unsigned int *num_rawmidis); 5162306a36Sopenharmony_ci 5262306a36Sopenharmony_cistatic inline int snd_usbmidi_create(struct snd_card *card, 5362306a36Sopenharmony_ci struct usb_interface *iface, 5462306a36Sopenharmony_ci struct list_head *midi_list, 5562306a36Sopenharmony_ci const struct snd_usb_audio_quirk *quirk) 5662306a36Sopenharmony_ci{ 5762306a36Sopenharmony_ci return __snd_usbmidi_create(card, iface, midi_list, quirk, 0, NULL); 5862306a36Sopenharmony_ci} 5962306a36Sopenharmony_ci 6062306a36Sopenharmony_civoid snd_usbmidi_input_stop(struct list_head *p); 6162306a36Sopenharmony_civoid snd_usbmidi_input_start(struct list_head *p); 6262306a36Sopenharmony_civoid snd_usbmidi_disconnect(struct list_head *p); 6362306a36Sopenharmony_civoid snd_usbmidi_suspend(struct list_head *p); 6462306a36Sopenharmony_civoid snd_usbmidi_resume(struct list_head *p); 6562306a36Sopenharmony_ci 6662306a36Sopenharmony_ci#endif /* __USBMIDI_H */ 67