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