Orange Pi5 kernel

Deprecated Linux kernel 5.10.110 for OrangePi 5/5B/5+ boards

3 Commits   0 Branches   0 Tags
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300    1) /* SPDX-License-Identifier: GPL-2.0-or-later */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300    2) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300    3)  * ALSA USB Audio Driver
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300    4)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300    5)  * Copyright (c) 2002 by Takashi Iwai <tiwai@suse.de>,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300    6)  *                       Clemens Ladisch <clemens@ladisch.de>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300    7)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300    8) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300    9) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   10)  * The contents of this file are part of the driver's id_table.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   11)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   12)  * In a perfect world, this file would be empty.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   13)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   14) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   15) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   16)  * Use this for devices where other interfaces are standard compliant,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   17)  * to prevent the quirk being applied to those interfaces. (To work with
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   18)  * hotplugging, bDeviceClass must be set to USB_CLASS_PER_INTERFACE.)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   19)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   20) #define USB_DEVICE_VENDOR_SPEC(vend, prod) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   21) 	.match_flags = USB_DEVICE_ID_MATCH_VENDOR | \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   22) 		       USB_DEVICE_ID_MATCH_PRODUCT | \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   23) 		       USB_DEVICE_ID_MATCH_INT_CLASS, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   24) 	.idVendor = vend, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   25) 	.idProduct = prod, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   26) 	.bInterfaceClass = USB_CLASS_VENDOR_SPEC
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   27) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   28) /* A standard entry matching with vid/pid and the audio class/subclass */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   29) #define USB_AUDIO_DEVICE(vend, prod) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   30) 	.match_flags = USB_DEVICE_ID_MATCH_DEVICE | \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   31) 		       USB_DEVICE_ID_MATCH_INT_CLASS | \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   32) 		       USB_DEVICE_ID_MATCH_INT_SUBCLASS, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   33) 	.idVendor = vend, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   34) 	.idProduct = prod, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   35) 	.bInterfaceClass = USB_CLASS_AUDIO, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   36) 	.bInterfaceSubClass = USB_SUBCLASS_AUDIOCONTROL
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   37) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   38) /* FTDI devices */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   39) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   40) 	USB_DEVICE(0x0403, 0xb8d8),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   41) 	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   42) 		/* .vendor_name = "STARR LABS", */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   43) 		/* .product_name = "Starr Labs MIDI USB device", */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   44) 		.ifnum = 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   45) 		.type = QUIRK_MIDI_FTDI
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   46) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   47) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   48) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   49) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   50) 	/* Creative BT-D1 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   51) 	USB_DEVICE(0x041e, 0x0005),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   52) 	.driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   53) 		.ifnum = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   54) 		.type = QUIRK_AUDIO_FIXED_ENDPOINT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   55) 		.data = &(const struct audioformat) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   56) 			.formats = SNDRV_PCM_FMTBIT_S16_LE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   57) 			.channels = 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   58) 			.iface = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   59) 			.altsetting = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   60) 			.altset_idx = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   61) 			.endpoint = 0x03,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   62) 			.ep_attr = USB_ENDPOINT_XFER_ISOC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   63) 			.attributes = 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   64) 			.rates = SNDRV_PCM_RATE_CONTINUOUS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   65) 			.rate_min = 48000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   66) 			.rate_max = 48000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   67) 		}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   68) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   69) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   70) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   71) /* E-Mu 0202 USB */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   72) { USB_DEVICE_VENDOR_SPEC(0x041e, 0x3f02) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   73) /* E-Mu 0404 USB */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   74) { USB_DEVICE_VENDOR_SPEC(0x041e, 0x3f04) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   75) /* E-Mu Tracker Pre */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   76) { USB_DEVICE_VENDOR_SPEC(0x041e, 0x3f0a) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   77) /* E-Mu 0204 USB */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   78) { USB_DEVICE_VENDOR_SPEC(0x041e, 0x3f19) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   79) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   80) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   81)  * Creative Technology, Ltd Live! Cam Sync HD [VF0770]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   82)  * The device advertises 8 formats, but only a rate of 48kHz is honored by the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   83)  * hardware and 24 bits give chopped audio, so only report the one working
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   84)  * combination.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   85)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   86) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   87) 	USB_AUDIO_DEVICE(0x041e, 0x4095),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   88) 	.driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   89) 		.ifnum = QUIRK_ANY_INTERFACE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   90) 		.type = QUIRK_COMPOSITE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   91) 		.data = &(const struct snd_usb_audio_quirk[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   92) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   93) 				.ifnum = 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   94) 				.type = QUIRK_AUDIO_STANDARD_MIXER,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   95) 			},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   96) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   97) 				.ifnum = 3,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   98) 				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   99) 				.data = &(const struct audioformat) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  100) 					.formats = SNDRV_PCM_FMTBIT_S16_LE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  101) 					.channels = 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  102) 					.fmt_bits = 16,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  103) 					.iface = 3,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  104) 					.altsetting = 4,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  105) 					.altset_idx = 4,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  106) 					.endpoint = 0x82,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  107) 					.ep_attr = 0x05,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  108) 					.rates = SNDRV_PCM_RATE_48000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  109) 					.rate_min = 48000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  110) 					.rate_max = 48000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  111) 					.nr_rates = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  112) 					.rate_table = (unsigned int[]) { 48000 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  113) 				},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  114) 			},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  115) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  116) 				.ifnum = -1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  117) 			},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  118) 		},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  119) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  120) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  121) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  122) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  123)  * HP Wireless Audio
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  124)  * When not ignored, causes instability issues for some users, forcing them to
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  125)  * skip the entire module.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  126)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  127) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  128) 	USB_DEVICE(0x0424, 0xb832),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  129) 	.driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  130) 		.vendor_name = "Standard Microsystems Corp.",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  131) 		.product_name = "HP Wireless Audio",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  132) 		.ifnum = QUIRK_ANY_INTERFACE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  133) 		.type = QUIRK_COMPOSITE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  134) 		.data = (const struct snd_usb_audio_quirk[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  135) 			/* Mixer */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  136) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  137) 				.ifnum = 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  138) 				.type = QUIRK_IGNORE_INTERFACE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  139) 			},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  140) 			/* Playback */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  141) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  142) 				.ifnum = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  143) 				.type = QUIRK_IGNORE_INTERFACE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  144) 			},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  145) 			/* Capture */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  146) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  147) 				.ifnum = 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  148) 				.type = QUIRK_IGNORE_INTERFACE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  149) 			},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  150) 			/* HID Device, .ifnum = 3 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  151) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  152) 				.ifnum = -1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  153) 			}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  154) 		}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  155) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  156) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  157) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  158) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  159)  * Logitech QuickCam: bDeviceClass is vendor-specific, so generic interface
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  160)  * class matches do not take effect without an explicit ID match.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  161)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  162) { USB_AUDIO_DEVICE(0x046d, 0x0850) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  163) { USB_AUDIO_DEVICE(0x046d, 0x08ae) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  164) { USB_AUDIO_DEVICE(0x046d, 0x08c6) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  165) { USB_AUDIO_DEVICE(0x046d, 0x08f0) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  166) { USB_AUDIO_DEVICE(0x046d, 0x08f5) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  167) { USB_AUDIO_DEVICE(0x046d, 0x08f6) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  168) { USB_AUDIO_DEVICE(0x046d, 0x0990) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  169) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  170) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  171)  * Yamaha devices
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  172)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  173) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  174) #define YAMAHA_DEVICE(id, name) { \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  175) 	USB_DEVICE(0x0499, id), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  176) 	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  177) 		.vendor_name = "Yamaha", \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  178) 		.product_name = name, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  179) 		.ifnum = QUIRK_ANY_INTERFACE, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  180) 		.type = QUIRK_MIDI_YAMAHA \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  181) 	} \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  182) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  183) #define YAMAHA_INTERFACE(id, intf, name) { \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  184) 	USB_DEVICE_VENDOR_SPEC(0x0499, id), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  185) 	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  186) 		.vendor_name = "Yamaha", \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  187) 		.product_name = name, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  188) 		.ifnum = intf, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  189) 		.type = QUIRK_MIDI_YAMAHA \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  190) 	} \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  191) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  192) YAMAHA_DEVICE(0x1000, "UX256"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  193) YAMAHA_DEVICE(0x1001, "MU1000"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  194) YAMAHA_DEVICE(0x1002, "MU2000"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  195) YAMAHA_DEVICE(0x1003, "MU500"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  196) YAMAHA_INTERFACE(0x1004, 3, "UW500"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  197) YAMAHA_DEVICE(0x1005, "MOTIF6"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  198) YAMAHA_DEVICE(0x1006, "MOTIF7"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  199) YAMAHA_DEVICE(0x1007, "MOTIF8"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  200) YAMAHA_DEVICE(0x1008, "UX96"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  201) YAMAHA_DEVICE(0x1009, "UX16"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  202) YAMAHA_INTERFACE(0x100a, 3, "EOS BX"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  203) YAMAHA_DEVICE(0x100c, "UC-MX"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  204) YAMAHA_DEVICE(0x100d, "UC-KX"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  205) YAMAHA_DEVICE(0x100e, "S08"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  206) YAMAHA_DEVICE(0x100f, "CLP-150"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  207) YAMAHA_DEVICE(0x1010, "CLP-170"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  208) YAMAHA_DEVICE(0x1011, "P-250"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  209) YAMAHA_DEVICE(0x1012, "TYROS"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  210) YAMAHA_DEVICE(0x1013, "PF-500"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  211) YAMAHA_DEVICE(0x1014, "S90"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  212) YAMAHA_DEVICE(0x1015, "MOTIF-R"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  213) YAMAHA_DEVICE(0x1016, "MDP-5"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  214) YAMAHA_DEVICE(0x1017, "CVP-204"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  215) YAMAHA_DEVICE(0x1018, "CVP-206"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  216) YAMAHA_DEVICE(0x1019, "CVP-208"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  217) YAMAHA_DEVICE(0x101a, "CVP-210"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  218) YAMAHA_DEVICE(0x101b, "PSR-1100"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  219) YAMAHA_DEVICE(0x101c, "PSR-2100"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  220) YAMAHA_DEVICE(0x101d, "CLP-175"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  221) YAMAHA_DEVICE(0x101e, "PSR-K1"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  222) YAMAHA_DEVICE(0x101f, "EZ-J24"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  223) YAMAHA_DEVICE(0x1020, "EZ-250i"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  224) YAMAHA_DEVICE(0x1021, "MOTIF ES 6"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  225) YAMAHA_DEVICE(0x1022, "MOTIF ES 7"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  226) YAMAHA_DEVICE(0x1023, "MOTIF ES 8"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  227) YAMAHA_DEVICE(0x1024, "CVP-301"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  228) YAMAHA_DEVICE(0x1025, "CVP-303"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  229) YAMAHA_DEVICE(0x1026, "CVP-305"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  230) YAMAHA_DEVICE(0x1027, "CVP-307"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  231) YAMAHA_DEVICE(0x1028, "CVP-309"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  232) YAMAHA_DEVICE(0x1029, "CVP-309GP"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  233) YAMAHA_DEVICE(0x102a, "PSR-1500"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  234) YAMAHA_DEVICE(0x102b, "PSR-3000"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  235) YAMAHA_DEVICE(0x102e, "ELS-01/01C"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  236) YAMAHA_DEVICE(0x1030, "PSR-295/293"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  237) YAMAHA_DEVICE(0x1031, "DGX-205/203"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  238) YAMAHA_DEVICE(0x1032, "DGX-305"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  239) YAMAHA_DEVICE(0x1033, "DGX-505"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  240) YAMAHA_DEVICE(0x1034, NULL),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  241) YAMAHA_DEVICE(0x1035, NULL),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  242) YAMAHA_DEVICE(0x1036, NULL),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  243) YAMAHA_DEVICE(0x1037, NULL),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  244) YAMAHA_DEVICE(0x1038, NULL),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  245) YAMAHA_DEVICE(0x1039, NULL),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  246) YAMAHA_DEVICE(0x103a, NULL),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  247) YAMAHA_DEVICE(0x103b, NULL),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  248) YAMAHA_DEVICE(0x103c, NULL),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  249) YAMAHA_DEVICE(0x103d, NULL),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  250) YAMAHA_DEVICE(0x103e, NULL),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  251) YAMAHA_DEVICE(0x103f, NULL),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  252) YAMAHA_DEVICE(0x1040, NULL),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  253) YAMAHA_DEVICE(0x1041, NULL),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  254) YAMAHA_DEVICE(0x1042, NULL),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  255) YAMAHA_DEVICE(0x1043, NULL),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  256) YAMAHA_DEVICE(0x1044, NULL),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  257) YAMAHA_DEVICE(0x1045, NULL),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  258) YAMAHA_INTERFACE(0x104e, 0, NULL),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  259) YAMAHA_DEVICE(0x104f, NULL),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  260) YAMAHA_DEVICE(0x1050, NULL),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  261) YAMAHA_DEVICE(0x1051, NULL),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  262) YAMAHA_DEVICE(0x1052, NULL),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  263) YAMAHA_INTERFACE(0x1053, 0, NULL),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  264) YAMAHA_INTERFACE(0x1054, 0, NULL),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  265) YAMAHA_DEVICE(0x1055, NULL),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  266) YAMAHA_DEVICE(0x1056, NULL),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  267) YAMAHA_DEVICE(0x1057, NULL),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  268) YAMAHA_DEVICE(0x1058, NULL),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  269) YAMAHA_DEVICE(0x1059, NULL),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  270) YAMAHA_DEVICE(0x105a, NULL),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  271) YAMAHA_DEVICE(0x105b, NULL),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  272) YAMAHA_DEVICE(0x105c, NULL),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  273) YAMAHA_DEVICE(0x105d, NULL),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  274) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  275) 	USB_DEVICE(0x0499, 0x1503),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  276) 	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  277) 		/* .vendor_name = "Yamaha", */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  278) 		/* .product_name = "MOX6/MOX8", */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  279) 		.ifnum = QUIRK_ANY_INTERFACE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  280) 		.type = QUIRK_COMPOSITE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  281) 		.data = (const struct snd_usb_audio_quirk[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  282) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  283) 				.ifnum = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  284) 				.type = QUIRK_AUDIO_STANDARD_INTERFACE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  285) 			},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  286) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  287) 				.ifnum = 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  288) 				.type = QUIRK_AUDIO_STANDARD_INTERFACE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  289) 			},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  290) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  291) 				.ifnum = 3,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  292) 				.type = QUIRK_MIDI_YAMAHA
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  293) 			},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  294) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  295) 				.ifnum = -1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  296) 			}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  297) 		}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  298) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  299) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  300) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  301) 	USB_DEVICE(0x0499, 0x1507),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  302) 	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  303) 		/* .vendor_name = "Yamaha", */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  304) 		/* .product_name = "THR10", */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  305) 		.ifnum = QUIRK_ANY_INTERFACE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  306) 		.type = QUIRK_COMPOSITE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  307) 		.data = (const struct snd_usb_audio_quirk[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  308) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  309) 				.ifnum = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  310) 				.type = QUIRK_AUDIO_STANDARD_INTERFACE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  311) 			},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  312) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  313) 				.ifnum = 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  314) 				.type = QUIRK_AUDIO_STANDARD_INTERFACE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  315) 			},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  316) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  317) 				.ifnum = 3,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  318) 				.type = QUIRK_MIDI_YAMAHA
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  319) 			},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  320) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  321) 				.ifnum = -1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  322) 			}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  323) 		}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  324) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  325) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  326) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  327) 	USB_DEVICE(0x0499, 0x1509),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  328) 	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  329) 		/* .vendor_name = "Yamaha", */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  330) 		/* .product_name = "Steinberg UR22", */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  331) 		.ifnum = QUIRK_ANY_INTERFACE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  332) 		.type = QUIRK_COMPOSITE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  333) 		.data = (const struct snd_usb_audio_quirk[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  334) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  335) 				.ifnum = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  336) 				.type = QUIRK_AUDIO_STANDARD_INTERFACE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  337) 			},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  338) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  339) 				.ifnum = 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  340) 				.type = QUIRK_AUDIO_STANDARD_INTERFACE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  341) 			},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  342) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  343) 				.ifnum = 3,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  344) 				.type = QUIRK_MIDI_YAMAHA
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  345) 			},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  346) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  347) 				.ifnum = 4,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  348) 				.type = QUIRK_IGNORE_INTERFACE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  349) 			},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  350) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  351) 				.ifnum = -1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  352) 			}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  353) 		}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  354) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  355) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  356) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  357) 	USB_DEVICE(0x0499, 0x150a),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  358) 	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  359) 		/* .vendor_name = "Yamaha", */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  360) 		/* .product_name = "THR5A", */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  361) 		.ifnum = QUIRK_ANY_INTERFACE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  362) 		.type = QUIRK_COMPOSITE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  363) 		.data = (const struct snd_usb_audio_quirk[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  364) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  365) 				.ifnum = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  366) 				.type = QUIRK_AUDIO_STANDARD_INTERFACE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  367) 			},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  368) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  369) 				.ifnum = 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  370) 				.type = QUIRK_AUDIO_STANDARD_INTERFACE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  371) 			},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  372) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  373) 				.ifnum = 3,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  374) 				.type = QUIRK_MIDI_YAMAHA
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  375) 			},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  376) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  377) 				.ifnum = -1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  378) 			}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  379) 		}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  380) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  381) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  382) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  383) 	USB_DEVICE(0x0499, 0x150c),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  384) 	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  385) 		/* .vendor_name = "Yamaha", */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  386) 		/* .product_name = "THR10C", */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  387) 		.ifnum = QUIRK_ANY_INTERFACE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  388) 		.type = QUIRK_COMPOSITE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  389) 		.data = (const struct snd_usb_audio_quirk[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  390) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  391) 				.ifnum = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  392) 				.type = QUIRK_AUDIO_STANDARD_INTERFACE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  393) 			},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  394) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  395) 				.ifnum = 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  396) 				.type = QUIRK_AUDIO_STANDARD_INTERFACE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  397) 			},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  398) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  399) 				.ifnum = 3,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  400) 				.type = QUIRK_MIDI_YAMAHA
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  401) 			},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  402) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  403) 				.ifnum = -1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  404) 			}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  405) 		}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  406) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  407) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  408) YAMAHA_DEVICE(0x2000, "DGP-7"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  409) YAMAHA_DEVICE(0x2001, "DGP-5"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  410) YAMAHA_DEVICE(0x2002, NULL),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  411) YAMAHA_DEVICE(0x2003, NULL),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  412) YAMAHA_DEVICE(0x5000, "CS1D"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  413) YAMAHA_DEVICE(0x5001, "DSP1D"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  414) YAMAHA_DEVICE(0x5002, "DME32"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  415) YAMAHA_DEVICE(0x5003, "DM2000"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  416) YAMAHA_DEVICE(0x5004, "02R96"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  417) YAMAHA_DEVICE(0x5005, "ACU16-C"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  418) YAMAHA_DEVICE(0x5006, "NHB32-C"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  419) YAMAHA_DEVICE(0x5007, "DM1000"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  420) YAMAHA_DEVICE(0x5008, "01V96"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  421) YAMAHA_DEVICE(0x5009, "SPX2000"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  422) YAMAHA_DEVICE(0x500a, "PM5D"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  423) YAMAHA_DEVICE(0x500b, "DME64N"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  424) YAMAHA_DEVICE(0x500c, "DME24N"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  425) YAMAHA_DEVICE(0x500d, NULL),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  426) YAMAHA_DEVICE(0x500e, NULL),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  427) YAMAHA_DEVICE(0x500f, NULL),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  428) YAMAHA_DEVICE(0x7000, "DTX"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  429) YAMAHA_DEVICE(0x7010, "UB99"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  430) #undef YAMAHA_DEVICE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  431) #undef YAMAHA_INTERFACE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  432) /* this catches most recent vendor-specific Yamaha devices */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  433) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  434) 	.match_flags = USB_DEVICE_ID_MATCH_VENDOR |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  435) 	               USB_DEVICE_ID_MATCH_INT_CLASS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  436) 	.idVendor = 0x0499,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  437) 	.bInterfaceClass = USB_CLASS_VENDOR_SPEC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  438) 	.driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  439) 		.ifnum = QUIRK_ANY_INTERFACE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  440) 		.type = QUIRK_AUTODETECT
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  441) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  442) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  443) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  444) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  445)  * Roland/RolandED/Edirol/BOSS devices
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  446)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  447) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  448) 	USB_DEVICE(0x0582, 0x0000),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  449) 	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  450) 		.vendor_name = "Roland",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  451) 		.product_name = "UA-100",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  452) 		.ifnum = QUIRK_ANY_INTERFACE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  453) 		.type = QUIRK_COMPOSITE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  454) 		.data = (const struct snd_usb_audio_quirk[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  455) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  456) 				.ifnum = 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  457) 				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  458) 				.data = & (const struct audioformat) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  459) 					.formats = SNDRV_PCM_FMTBIT_S16_LE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  460) 					.channels = 4,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  461) 					.iface = 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  462) 					.altsetting = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  463) 					.altset_idx = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  464) 					.attributes = 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  465) 					.endpoint = 0x01,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  466) 					.ep_attr = 0x09,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  467) 					.rates = SNDRV_PCM_RATE_CONTINUOUS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  468) 					.rate_min = 44100,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  469) 					.rate_max = 44100,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  470) 				}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  471) 			},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  472) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  473) 				.ifnum = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  474) 				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  475) 				.data = & (const struct audioformat) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  476) 					.formats = SNDRV_PCM_FMTBIT_S16_LE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  477) 					.channels = 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  478) 					.iface = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  479) 					.altsetting = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  480) 					.altset_idx = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  481) 					.attributes = UAC_EP_CS_ATTR_FILL_MAX,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  482) 					.endpoint = 0x81,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  483) 					.ep_attr = 0x05,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  484) 					.rates = SNDRV_PCM_RATE_CONTINUOUS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  485) 					.rate_min = 44100,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  486) 					.rate_max = 44100,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  487) 				}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  488) 			},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  489) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  490) 				.ifnum = 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  491) 				.type = QUIRK_MIDI_FIXED_ENDPOINT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  492) 				.data = & (const struct snd_usb_midi_endpoint_info) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  493) 					.out_cables = 0x0007,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  494) 					.in_cables  = 0x0007
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  495) 				}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  496) 			},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  497) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  498) 				.ifnum = -1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  499) 			}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  500) 		}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  501) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  502) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  503) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  504) 	USB_DEVICE(0x0582, 0x0002),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  505) 	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  506) 		.vendor_name = "EDIROL",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  507) 		.product_name = "UM-4",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  508) 		.ifnum = QUIRK_ANY_INTERFACE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  509) 		.type = QUIRK_COMPOSITE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  510) 		.data = (const struct snd_usb_audio_quirk[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  511) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  512) 				.ifnum = 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  513) 				.type = QUIRK_IGNORE_INTERFACE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  514) 			},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  515) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  516) 				.ifnum = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  517) 				.type = QUIRK_IGNORE_INTERFACE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  518) 			},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  519) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  520) 				.ifnum = 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  521) 				.type = QUIRK_MIDI_FIXED_ENDPOINT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  522) 				.data = & (const struct snd_usb_midi_endpoint_info) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  523) 					.out_cables = 0x000f,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  524) 					.in_cables  = 0x000f
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  525) 				}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  526) 			},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  527) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  528) 				.ifnum = -1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  529) 			}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  530) 		}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  531) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  532) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  533) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  534) 	USB_DEVICE(0x0582, 0x0003),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  535) 	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  536) 		.vendor_name = "Roland",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  537) 		.product_name = "SC-8850",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  538) 		.ifnum = QUIRK_ANY_INTERFACE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  539) 		.type = QUIRK_COMPOSITE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  540) 		.data = (const struct snd_usb_audio_quirk[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  541) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  542) 				.ifnum = 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  543) 				.type = QUIRK_IGNORE_INTERFACE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  544) 			},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  545) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  546) 				.ifnum = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  547) 				.type = QUIRK_IGNORE_INTERFACE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  548) 			},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  549) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  550) 				.ifnum = 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  551) 				.type = QUIRK_MIDI_FIXED_ENDPOINT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  552) 				.data = & (const struct snd_usb_midi_endpoint_info) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  553) 					.out_cables = 0x003f,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  554) 					.in_cables  = 0x003f
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  555) 				}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  556) 			},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  557) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  558) 				.ifnum = -1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  559) 			}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  560) 		}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  561) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  562) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  563) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  564) 	USB_DEVICE(0x0582, 0x0004),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  565) 	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  566) 		.vendor_name = "Roland",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  567) 		.product_name = "U-8",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  568) 		.ifnum = QUIRK_ANY_INTERFACE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  569) 		.type = QUIRK_COMPOSITE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  570) 		.data = (const struct snd_usb_audio_quirk[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  571) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  572) 				.ifnum = 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  573) 				.type = QUIRK_IGNORE_INTERFACE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  574) 			},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  575) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  576) 				.ifnum = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  577) 				.type = QUIRK_IGNORE_INTERFACE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  578) 			},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  579) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  580) 				.ifnum = 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  581) 				.type = QUIRK_MIDI_FIXED_ENDPOINT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  582) 				.data = & (const struct snd_usb_midi_endpoint_info) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  583) 					.out_cables = 0x0005,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  584) 					.in_cables  = 0x0005
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  585) 				}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  586) 			},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  587) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  588) 				.ifnum = -1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  589) 			}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  590) 		}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  591) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  592) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  593) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  594) 	/* Has ID 0x0099 when not in "Advanced Driver" mode.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  595) 	 * The UM-2EX has only one input, but we cannot detect this. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  596) 	USB_DEVICE(0x0582, 0x0005),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  597) 	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  598) 		.vendor_name = "EDIROL",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  599) 		.product_name = "UM-2",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  600) 		.ifnum = QUIRK_ANY_INTERFACE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  601) 		.type = QUIRK_COMPOSITE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  602) 		.data = (const struct snd_usb_audio_quirk[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  603) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  604) 				.ifnum = 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  605) 				.type = QUIRK_IGNORE_INTERFACE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  606) 			},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  607) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  608) 				.ifnum = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  609) 				.type = QUIRK_IGNORE_INTERFACE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  610) 			},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  611) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  612) 				.ifnum = 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  613) 				.type = QUIRK_MIDI_FIXED_ENDPOINT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  614) 				.data = & (const struct snd_usb_midi_endpoint_info) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  615) 					.out_cables = 0x0003,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  616) 					.in_cables  = 0x0003
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  617) 				}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  618) 			},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  619) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  620) 				.ifnum = -1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  621) 			}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  622) 		}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  623) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  624) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  625) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  626) 	USB_DEVICE(0x0582, 0x0007),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  627) 	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  628) 		.vendor_name = "Roland",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  629) 		.product_name = "SC-8820",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  630) 		.ifnum = QUIRK_ANY_INTERFACE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  631) 		.type = QUIRK_COMPOSITE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  632) 		.data = (const struct snd_usb_audio_quirk[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  633) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  634) 				.ifnum = 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  635) 				.type = QUIRK_IGNORE_INTERFACE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  636) 			},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  637) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  638) 				.ifnum = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  639) 				.type = QUIRK_IGNORE_INTERFACE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  640) 			},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  641) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  642) 				.ifnum = 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  643) 				.type = QUIRK_MIDI_FIXED_ENDPOINT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  644) 				.data = & (const struct snd_usb_midi_endpoint_info) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  645) 					.out_cables = 0x0013,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  646) 					.in_cables  = 0x0013
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  647) 				}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  648) 			},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  649) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  650) 				.ifnum = -1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  651) 			}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  652) 		}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  653) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  654) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  655) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  656) 	USB_DEVICE(0x0582, 0x0008),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  657) 	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  658) 		.vendor_name = "Roland",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  659) 		.product_name = "PC-300",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  660) 		.ifnum = QUIRK_ANY_INTERFACE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  661) 		.type = QUIRK_COMPOSITE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  662) 		.data = (const struct snd_usb_audio_quirk[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  663) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  664) 				.ifnum = 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  665) 				.type = QUIRK_IGNORE_INTERFACE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  666) 			},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  667) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  668) 				.ifnum = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  669) 				.type = QUIRK_IGNORE_INTERFACE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  670) 			},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  671) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  672) 				.ifnum = 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  673) 				.type = QUIRK_MIDI_FIXED_ENDPOINT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  674) 				.data = & (const struct snd_usb_midi_endpoint_info) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  675) 					.out_cables = 0x0001,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  676) 					.in_cables  = 0x0001
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  677) 				}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  678) 			},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  679) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  680) 				.ifnum = -1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  681) 			}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  682) 		}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  683) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  684) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  685) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  686) 	/* has ID 0x009d when not in "Advanced Driver" mode */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  687) 	USB_DEVICE(0x0582, 0x0009),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  688) 	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  689) 		.vendor_name = "EDIROL",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  690) 		.product_name = "UM-1",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  691) 		.ifnum = QUIRK_ANY_INTERFACE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  692) 		.type = QUIRK_COMPOSITE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  693) 		.data = (const struct snd_usb_audio_quirk[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  694) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  695) 				.ifnum = 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  696) 				.type = QUIRK_IGNORE_INTERFACE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  697) 			},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  698) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  699) 				.ifnum = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  700) 				.type = QUIRK_IGNORE_INTERFACE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  701) 			},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  702) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  703) 				.ifnum = 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  704) 				.type = QUIRK_MIDI_FIXED_ENDPOINT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  705) 				.data = & (const struct snd_usb_midi_endpoint_info) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  706) 					.out_cables = 0x0001,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  707) 					.in_cables  = 0x0001
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  708) 				}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  709) 			},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  710) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  711) 				.ifnum = -1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  712) 			}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  713) 		}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  714) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  715) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  716) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  717) 	USB_DEVICE(0x0582, 0x000b),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  718) 	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  719) 		.vendor_name = "Roland",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  720) 		.product_name = "SK-500",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  721) 		.ifnum = QUIRK_ANY_INTERFACE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  722) 		.type = QUIRK_COMPOSITE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  723) 		.data = (const struct snd_usb_audio_quirk[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  724) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  725) 				.ifnum = 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  726) 				.type = QUIRK_IGNORE_INTERFACE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  727) 			},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  728) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  729) 				.ifnum = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  730) 				.type = QUIRK_IGNORE_INTERFACE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  731) 			},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  732) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  733) 				.ifnum = 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  734) 				.type = QUIRK_MIDI_FIXED_ENDPOINT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  735) 				.data = & (const struct snd_usb_midi_endpoint_info) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  736) 					.out_cables = 0x0013,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  737) 					.in_cables  = 0x0013
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  738) 				}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  739) 			},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  740) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  741) 				.ifnum = -1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  742) 			}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  743) 		}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  744) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  745) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  746) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  747) 	/* thanks to Emiliano Grilli <emillo@libero.it>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  748) 	 * for helping researching this data */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  749) 	USB_DEVICE(0x0582, 0x000c),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  750) 	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  751) 		.vendor_name = "Roland",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  752) 		.product_name = "SC-D70",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  753) 		.ifnum = QUIRK_ANY_INTERFACE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  754) 		.type = QUIRK_COMPOSITE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  755) 		.data = (const struct snd_usb_audio_quirk[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  756) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  757) 				.ifnum = 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  758) 				.type = QUIRK_AUDIO_STANDARD_INTERFACE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  759) 			},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  760) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  761) 				.ifnum = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  762) 				.type = QUIRK_AUDIO_STANDARD_INTERFACE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  763) 			},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  764) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  765) 				.ifnum = 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  766) 				.type = QUIRK_MIDI_FIXED_ENDPOINT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  767) 				.data = & (const struct snd_usb_midi_endpoint_info) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  768) 					.out_cables = 0x0007,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  769) 					.in_cables  = 0x0007
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  770) 				}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  771) 			},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  772) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  773) 				.ifnum = -1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  774) 			}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  775) 		}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  776) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  777) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  778) {	/*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  779) 	 * This quirk is for the "Advanced Driver" mode of the Edirol UA-5.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  780) 	 * If the advanced mode switch at the back of the unit is off, the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  781) 	 * UA-5 has ID 0x0582/0x0011 and is standard compliant (no quirks),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  782) 	 * but offers only 16-bit PCM.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  783) 	 * In advanced mode, the UA-5 will output S24_3LE samples (two
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  784) 	 * channels) at the rate indicated on the front switch, including
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  785) 	 * the 96kHz sample rate.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  786) 	 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  787) 	USB_DEVICE(0x0582, 0x0010),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  788) 	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  789) 		.vendor_name = "EDIROL",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  790) 		.product_name = "UA-5",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  791) 		.ifnum = QUIRK_ANY_INTERFACE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  792) 		.type = QUIRK_COMPOSITE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  793) 		.data = (const struct snd_usb_audio_quirk[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  794) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  795) 				.ifnum = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  796) 				.type = QUIRK_AUDIO_STANDARD_INTERFACE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  797) 			},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  798) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  799) 				.ifnum = 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  800) 				.type = QUIRK_AUDIO_STANDARD_INTERFACE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  801) 			},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  802) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  803) 				.ifnum = -1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  804) 			}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  805) 		}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  806) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  807) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  808) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  809) 	/* has ID 0x0013 when not in "Advanced Driver" mode */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  810) 	USB_DEVICE(0x0582, 0x0012),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  811) 	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  812) 		.vendor_name = "Roland",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  813) 		.product_name = "XV-5050",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  814) 		.ifnum = 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  815) 		.type = QUIRK_MIDI_FIXED_ENDPOINT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  816) 		.data = & (const struct snd_usb_midi_endpoint_info) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  817) 			.out_cables = 0x0001,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  818) 			.in_cables  = 0x0001
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  819) 		}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  820) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  821) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  822) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  823) 	/* has ID 0x0015 when not in "Advanced Driver" mode */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  824) 	USB_DEVICE(0x0582, 0x0014),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  825) 	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  826) 		.vendor_name = "EDIROL",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  827) 		.product_name = "UM-880",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  828) 		.ifnum = 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  829) 		.type = QUIRK_MIDI_FIXED_ENDPOINT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  830) 		.data = & (const struct snd_usb_midi_endpoint_info) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  831) 			.out_cables = 0x01ff,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  832) 			.in_cables  = 0x01ff
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  833) 		}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  834) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  835) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  836) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  837) 	/* has ID 0x0017 when not in "Advanced Driver" mode */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  838) 	USB_DEVICE(0x0582, 0x0016),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  839) 	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  840) 		.vendor_name = "EDIROL",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  841) 		.product_name = "SD-90",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  842) 		.ifnum = QUIRK_ANY_INTERFACE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  843) 		.type = QUIRK_COMPOSITE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  844) 		.data = (const struct snd_usb_audio_quirk[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  845) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  846) 				.ifnum = 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  847) 				.type = QUIRK_AUDIO_STANDARD_INTERFACE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  848) 			},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  849) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  850) 				.ifnum = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  851) 				.type = QUIRK_AUDIO_STANDARD_INTERFACE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  852) 			},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  853) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  854) 				.ifnum = 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  855) 				.type = QUIRK_MIDI_FIXED_ENDPOINT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  856) 				.data = & (const struct snd_usb_midi_endpoint_info) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  857) 					.out_cables = 0x000f,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  858) 					.in_cables  = 0x000f
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  859) 				}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  860) 			},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  861) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  862) 				.ifnum = -1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  863) 			}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  864) 		}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  865) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  866) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  867) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  868) 	/* has ID 0x001c when not in "Advanced Driver" mode */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  869) 	USB_DEVICE(0x0582, 0x001b),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  870) 	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  871) 		.vendor_name = "Roland",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  872) 		.product_name = "MMP-2",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  873) 		.ifnum = QUIRK_ANY_INTERFACE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  874) 		.type = QUIRK_COMPOSITE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  875) 		.data = (const struct snd_usb_audio_quirk[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  876) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  877) 				.ifnum = 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  878) 				.type = QUIRK_IGNORE_INTERFACE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  879) 			},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  880) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  881) 				.ifnum = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  882) 				.type = QUIRK_IGNORE_INTERFACE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  883) 			},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  884) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  885) 				.ifnum = 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  886) 				.type = QUIRK_MIDI_FIXED_ENDPOINT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  887) 				.data = & (const struct snd_usb_midi_endpoint_info) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  888) 					.out_cables = 0x0001,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  889) 					.in_cables  = 0x0001
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  890) 				}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  891) 			},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  892) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  893) 				.ifnum = -1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  894) 			}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  895) 		}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  896) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  897) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  898) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  899) 	/* has ID 0x001e when not in "Advanced Driver" mode */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  900) 	USB_DEVICE(0x0582, 0x001d),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  901) 	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  902) 		.vendor_name = "Roland",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  903) 		.product_name = "V-SYNTH",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  904) 		.ifnum = 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  905) 		.type = QUIRK_MIDI_FIXED_ENDPOINT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  906) 		.data = & (const struct snd_usb_midi_endpoint_info) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  907) 			.out_cables = 0x0001,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  908) 			.in_cables  = 0x0001
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  909) 		}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  910) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  911) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  912) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  913) 	/* has ID 0x0024 when not in "Advanced Driver" mode */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  914) 	USB_DEVICE(0x0582, 0x0023),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  915) 	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  916) 		.vendor_name = "EDIROL",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  917) 		.product_name = "UM-550",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  918) 		.ifnum = 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  919) 		.type = QUIRK_MIDI_FIXED_ENDPOINT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  920) 		.data = & (const struct snd_usb_midi_endpoint_info) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  921) 			.out_cables = 0x003f,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  922) 			.in_cables  = 0x003f
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  923) 		}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  924) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  925) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  926) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  927) 	/*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  928) 	 * This quirk is for the "Advanced Driver" mode. If off, the UA-20
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  929) 	 * has ID 0x0026 and is standard compliant, but has only 16-bit PCM
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  930) 	 * and no MIDI.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  931) 	 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  932) 	USB_DEVICE(0x0582, 0x0025),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  933) 	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  934) 		.vendor_name = "EDIROL",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  935) 		.product_name = "UA-20",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  936) 		.ifnum = QUIRK_ANY_INTERFACE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  937) 		.type = QUIRK_COMPOSITE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  938) 		.data = (const struct snd_usb_audio_quirk[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  939) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  940) 				.ifnum = 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  941) 				.type = QUIRK_IGNORE_INTERFACE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  942) 			},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  943) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  944) 				.ifnum = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  945) 				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  946) 				.data = & (const struct audioformat) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  947) 					.formats = SNDRV_PCM_FMTBIT_S24_3LE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  948) 					.channels = 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  949) 					.iface = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  950) 					.altsetting = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  951) 					.altset_idx = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  952) 					.attributes = 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  953) 					.endpoint = 0x01,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  954) 					.ep_attr = 0x01,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  955) 					.rates = SNDRV_PCM_RATE_CONTINUOUS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  956) 					.rate_min = 44100,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  957) 					.rate_max = 44100,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  958) 				}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  959) 			},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  960) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  961) 				.ifnum = 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  962) 				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  963) 				.data = & (const struct audioformat) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  964) 					.formats = SNDRV_PCM_FMTBIT_S24_3LE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  965) 					.channels = 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  966) 					.iface = 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  967) 					.altsetting = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  968) 					.altset_idx = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  969) 					.attributes = 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  970) 					.endpoint = 0x82,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  971) 					.ep_attr = 0x01,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  972) 					.rates = SNDRV_PCM_RATE_CONTINUOUS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  973) 					.rate_min = 44100,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  974) 					.rate_max = 44100,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  975) 				}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  976) 			},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  977) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  978) 				.ifnum = 3,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  979) 				.type = QUIRK_MIDI_FIXED_ENDPOINT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  980) 				.data = & (const struct snd_usb_midi_endpoint_info) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  981) 					.out_cables = 0x0001,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  982) 					.in_cables  = 0x0001
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  983) 				}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  984) 			},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  985) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  986) 				.ifnum = -1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  987) 			}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  988) 		}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  989) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  990) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  991) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  992) 	/* has ID 0x0028 when not in "Advanced Driver" mode */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  993) 	USB_DEVICE(0x0582, 0x0027),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  994) 	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  995) 		.vendor_name = "EDIROL",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  996) 		.product_name = "SD-20",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  997) 		.ifnum = 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  998) 		.type = QUIRK_MIDI_FIXED_ENDPOINT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  999) 		.data = & (const struct snd_usb_midi_endpoint_info) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1000) 			.out_cables = 0x0003,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1001) 			.in_cables  = 0x0007
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1002) 		}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1003) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1004) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1005) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1006) 	/* has ID 0x002a when not in "Advanced Driver" mode */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1007) 	USB_DEVICE(0x0582, 0x0029),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1008) 	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1009) 		.vendor_name = "EDIROL",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1010) 		.product_name = "SD-80",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1011) 		.ifnum = 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1012) 		.type = QUIRK_MIDI_FIXED_ENDPOINT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1013) 		.data = & (const struct snd_usb_midi_endpoint_info) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1014) 			.out_cables = 0x000f,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1015) 			.in_cables  = 0x000f
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1016) 		}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1017) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1018) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1019) {	/*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1020) 	 * This quirk is for the "Advanced" modes of the Edirol UA-700.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1021) 	 * If the sample format switch is not in an advanced setting, the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1022) 	 * UA-700 has ID 0x0582/0x002c and is standard compliant (no quirks),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1023) 	 * but offers only 16-bit PCM and no MIDI.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1024) 	 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1025) 	USB_DEVICE_VENDOR_SPEC(0x0582, 0x002b),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1026) 	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1027) 		.vendor_name = "EDIROL",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1028) 		.product_name = "UA-700",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1029) 		.ifnum = QUIRK_ANY_INTERFACE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1030) 		.type = QUIRK_COMPOSITE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1031) 		.data = (const struct snd_usb_audio_quirk[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1032) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1033) 				.ifnum = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1034) 				.type = QUIRK_AUDIO_EDIROL_UAXX
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1035) 			},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1036) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1037) 				.ifnum = 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1038) 				.type = QUIRK_AUDIO_EDIROL_UAXX
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1039) 			},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1040) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1041) 				.ifnum = 3,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1042) 				.type = QUIRK_AUDIO_EDIROL_UAXX
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1043) 			},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1044) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1045) 				.ifnum = -1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1046) 			}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1047) 		}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1048) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1049) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1050) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1051) 	/* has ID 0x002e when not in "Advanced Driver" mode */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1052) 	USB_DEVICE(0x0582, 0x002d),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1053) 	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1054) 		.vendor_name = "Roland",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1055) 		.product_name = "XV-2020",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1056) 		.ifnum = 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1057) 		.type = QUIRK_MIDI_FIXED_ENDPOINT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1058) 		.data = & (const struct snd_usb_midi_endpoint_info) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1059) 			.out_cables = 0x0001,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1060) 			.in_cables  = 0x0001
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1061) 		}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1062) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1063) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1064) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1065) 	/* has ID 0x0030 when not in "Advanced Driver" mode */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1066) 	USB_DEVICE(0x0582, 0x002f),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1067) 	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1068) 		.vendor_name = "Roland",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1069) 		.product_name = "VariOS",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1070) 		.ifnum = 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1071) 		.type = QUIRK_MIDI_FIXED_ENDPOINT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1072) 		.data = & (const struct snd_usb_midi_endpoint_info) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1073) 			.out_cables = 0x0007,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1074) 			.in_cables  = 0x0007
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1075) 		}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1076) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1077) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1078) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1079) 	/* has ID 0x0034 when not in "Advanced Driver" mode */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1080) 	USB_DEVICE(0x0582, 0x0033),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1081) 	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1082) 		.vendor_name = "EDIROL",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1083) 		.product_name = "PCR",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1084) 		.ifnum = 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1085) 		.type = QUIRK_MIDI_FIXED_ENDPOINT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1086) 		.data = & (const struct snd_usb_midi_endpoint_info) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1087) 			.out_cables = 0x0003,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1088) 			.in_cables  = 0x0007
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1089) 		}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1090) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1091) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1092) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1093) 	/*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1094) 	 * Has ID 0x0038 when not in "Advanced Driver" mode;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1095) 	 * later revisions use IDs 0x0054 and 0x00a2.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1096) 	 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1097) 	USB_DEVICE(0x0582, 0x0037),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1098) 	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1099) 		.vendor_name = "Roland",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1100) 		.product_name = "Digital Piano",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1101) 		.ifnum = 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1102) 		.type = QUIRK_MIDI_FIXED_ENDPOINT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1103) 		.data = & (const struct snd_usb_midi_endpoint_info) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1104) 			.out_cables = 0x0001,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1105) 			.in_cables  = 0x0001
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1106) 		}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1107) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1108) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1109) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1110) 	/*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1111) 	 * This quirk is for the "Advanced Driver" mode.  If off, the GS-10
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1112) 	 * has ID 0x003c and is standard compliant, but has only 16-bit PCM
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1113) 	 * and no MIDI.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1114) 	 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1115) 	USB_DEVICE_VENDOR_SPEC(0x0582, 0x003b),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1116) 	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1117) 		.vendor_name = "BOSS",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1118) 		.product_name = "GS-10",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1119) 		.ifnum = QUIRK_ANY_INTERFACE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1120) 		.type = QUIRK_COMPOSITE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1121) 		.data = & (const struct snd_usb_audio_quirk[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1122) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1123) 				.ifnum = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1124) 				.type = QUIRK_AUDIO_STANDARD_INTERFACE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1125) 			},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1126) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1127) 				.ifnum = 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1128) 				.type = QUIRK_AUDIO_STANDARD_INTERFACE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1129) 			},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1130) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1131) 				.ifnum = 3,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1132) 				.type = QUIRK_MIDI_STANDARD_INTERFACE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1133) 			},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1134) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1135) 				.ifnum = -1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1136) 			}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1137) 		}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1138) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1139) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1140) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1141) 	/* has ID 0x0041 when not in "Advanced Driver" mode */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1142) 	USB_DEVICE(0x0582, 0x0040),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1143) 	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1144) 		.vendor_name = "Roland",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1145) 		.product_name = "GI-20",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1146) 		.ifnum = 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1147) 		.type = QUIRK_MIDI_FIXED_ENDPOINT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1148) 		.data = & (const struct snd_usb_midi_endpoint_info) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1149) 			.out_cables = 0x0001,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1150) 			.in_cables  = 0x0001
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1151) 		}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1152) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1153) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1154) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1155) 	/* has ID 0x0043 when not in "Advanced Driver" mode */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1156) 	USB_DEVICE(0x0582, 0x0042),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1157) 	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1158) 		.vendor_name = "Roland",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1159) 		.product_name = "RS-70",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1160) 		.ifnum = 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1161) 		.type = QUIRK_MIDI_FIXED_ENDPOINT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1162) 		.data = & (const struct snd_usb_midi_endpoint_info) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1163) 			.out_cables = 0x0001,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1164) 			.in_cables  = 0x0001
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1165) 		}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1166) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1167) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1168) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1169) 	/* has ID 0x0049 when not in "Advanced Driver" mode */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1170) 	USB_DEVICE(0x0582, 0x0047),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1171) 	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1172) 		/* .vendor_name = "EDIROL", */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1173) 		/* .product_name = "UR-80", */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1174) 		.ifnum = QUIRK_ANY_INTERFACE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1175) 		.type = QUIRK_COMPOSITE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1176) 		.data = (const struct snd_usb_audio_quirk[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1177) 			/* in the 96 kHz modes, only interface 1 is there */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1178) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1179) 				.ifnum = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1180) 				.type = QUIRK_AUDIO_STANDARD_INTERFACE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1181) 			},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1182) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1183) 				.ifnum = 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1184) 				.type = QUIRK_AUDIO_STANDARD_INTERFACE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1185) 			},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1186) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1187) 				.ifnum = -1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1188) 			}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1189) 		}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1190) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1191) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1192) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1193) 	/* has ID 0x004a when not in "Advanced Driver" mode */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1194) 	USB_DEVICE(0x0582, 0x0048),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1195) 	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1196) 		/* .vendor_name = "EDIROL", */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1197) 		/* .product_name = "UR-80", */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1198) 		.ifnum = 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1199) 		.type = QUIRK_MIDI_FIXED_ENDPOINT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1200) 		.data = & (const struct snd_usb_midi_endpoint_info) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1201) 			.out_cables = 0x0003,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1202) 			.in_cables  = 0x0007
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1203) 		}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1204) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1205) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1206) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1207) 	/* has ID 0x004e when not in "Advanced Driver" mode */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1208) 	USB_DEVICE(0x0582, 0x004c),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1209) 	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1210) 		.vendor_name = "EDIROL",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1211) 		.product_name = "PCR-A",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1212) 		.ifnum = QUIRK_ANY_INTERFACE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1213) 		.type = QUIRK_COMPOSITE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1214) 		.data = (const struct snd_usb_audio_quirk[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1215) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1216) 				.ifnum = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1217) 				.type = QUIRK_AUDIO_STANDARD_INTERFACE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1218) 			},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1219) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1220) 				.ifnum = 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1221) 				.type = QUIRK_AUDIO_STANDARD_INTERFACE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1222) 			},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1223) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1224) 				.ifnum = -1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1225) 			}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1226) 		}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1227) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1228) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1229) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1230) 	/* has ID 0x004f when not in "Advanced Driver" mode */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1231) 	USB_DEVICE(0x0582, 0x004d),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1232) 	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1233) 		.vendor_name = "EDIROL",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1234) 		.product_name = "PCR-A",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1235) 		.ifnum = 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1236) 		.type = QUIRK_MIDI_FIXED_ENDPOINT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1237) 		.data = & (const struct snd_usb_midi_endpoint_info) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1238) 			.out_cables = 0x0003,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1239) 			.in_cables  = 0x0007
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1240) 		}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1241) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1242) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1243) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1244) 	/*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1245) 	 * This quirk is for the "Advanced Driver" mode. If off, the UA-3FX
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1246) 	 * is standard compliant, but has only 16-bit PCM.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1247) 	 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1248) 	USB_DEVICE(0x0582, 0x0050),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1249) 	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1250) 		.vendor_name = "EDIROL",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1251) 		.product_name = "UA-3FX",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1252) 		.ifnum = QUIRK_ANY_INTERFACE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1253) 		.type = QUIRK_COMPOSITE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1254) 		.data = (const struct snd_usb_audio_quirk[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1255) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1256) 				.ifnum = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1257) 				.type = QUIRK_AUDIO_STANDARD_INTERFACE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1258) 			},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1259) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1260) 				.ifnum = 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1261) 				.type = QUIRK_AUDIO_STANDARD_INTERFACE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1262) 			},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1263) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1264) 				.ifnum = -1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1265) 			}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1266) 		}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1267) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1268) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1269) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1270) 	USB_DEVICE(0x0582, 0x0052),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1271) 	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1272) 		.vendor_name = "EDIROL",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1273) 		.product_name = "UM-1SX",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1274) 		.ifnum = 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1275) 		.type = QUIRK_MIDI_STANDARD_INTERFACE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1276) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1277) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1278) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1279) 	USB_DEVICE(0x0582, 0x0060),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1280) 	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1281) 		.vendor_name = "Roland",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1282) 		.product_name = "EXR Series",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1283) 		.ifnum = 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1284) 		.type = QUIRK_MIDI_STANDARD_INTERFACE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1285) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1286) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1287) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1288) 	/* has ID 0x0066 when not in "Advanced Driver" mode */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1289) 	USB_DEVICE(0x0582, 0x0064),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1290) 	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1291) 		/* .vendor_name = "EDIROL", */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1292) 		/* .product_name = "PCR-1", */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1293) 		.ifnum = QUIRK_ANY_INTERFACE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1294) 		.type = QUIRK_COMPOSITE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1295) 		.data = (const struct snd_usb_audio_quirk[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1296) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1297) 				.ifnum = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1298) 				.type = QUIRK_AUDIO_STANDARD_INTERFACE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1299) 			},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1300) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1301) 				.ifnum = 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1302) 				.type = QUIRK_AUDIO_STANDARD_INTERFACE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1303) 			},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1304) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1305) 				.ifnum = -1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1306) 			}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1307) 		}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1308) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1309) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1310) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1311) 	/* has ID 0x0067 when not in "Advanced Driver" mode */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1312) 	USB_DEVICE(0x0582, 0x0065),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1313) 	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1314) 		/* .vendor_name = "EDIROL", */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1315) 		/* .product_name = "PCR-1", */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1316) 		.ifnum = 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1317) 		.type = QUIRK_MIDI_FIXED_ENDPOINT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1318) 		.data = & (const struct snd_usb_midi_endpoint_info) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1319) 			.out_cables = 0x0001,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1320) 			.in_cables  = 0x0003
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1321) 		}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1322) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1323) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1324) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1325) 	/* has ID 0x006e when not in "Advanced Driver" mode */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1326) 	USB_DEVICE(0x0582, 0x006d),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1327) 	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1328) 		.vendor_name = "Roland",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1329) 		.product_name = "FANTOM-X",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1330) 		.ifnum = 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1331) 		.type = QUIRK_MIDI_FIXED_ENDPOINT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1332) 		.data = & (const struct snd_usb_midi_endpoint_info) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1333) 			.out_cables = 0x0001,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1334) 			.in_cables  = 0x0001
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1335) 		}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1336) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1337) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1338) {	/*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1339) 	 * This quirk is for the "Advanced" modes of the Edirol UA-25.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1340) 	 * If the switch is not in an advanced setting, the UA-25 has
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1341) 	 * ID 0x0582/0x0073 and is standard compliant (no quirks), but
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1342) 	 * offers only 16-bit PCM at 44.1 kHz and no MIDI.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1343) 	 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1344) 	USB_DEVICE_VENDOR_SPEC(0x0582, 0x0074),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1345) 	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1346) 		.vendor_name = "EDIROL",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1347) 		.product_name = "UA-25",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1348) 		.ifnum = QUIRK_ANY_INTERFACE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1349) 		.type = QUIRK_COMPOSITE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1350) 		.data = (const struct snd_usb_audio_quirk[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1351) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1352) 				.ifnum = 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1353) 				.type = QUIRK_AUDIO_EDIROL_UAXX
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1354) 			},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1355) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1356) 				.ifnum = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1357) 				.type = QUIRK_AUDIO_EDIROL_UAXX
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1358) 			},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1359) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1360) 				.ifnum = 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1361) 				.type = QUIRK_AUDIO_EDIROL_UAXX
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1362) 			},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1363) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1364) 				.ifnum = -1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1365) 			}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1366) 		}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1367) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1368) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1369) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1370) 	/* has ID 0x0076 when not in "Advanced Driver" mode */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1371) 	USB_DEVICE(0x0582, 0x0075),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1372) 	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1373) 		.vendor_name = "BOSS",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1374) 		.product_name = "DR-880",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1375) 		.ifnum = 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1376) 		.type = QUIRK_MIDI_FIXED_ENDPOINT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1377) 		.data = & (const struct snd_usb_midi_endpoint_info) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1378) 			.out_cables = 0x0001,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1379) 			.in_cables  = 0x0001
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1380) 		}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1381) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1382) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1383) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1384) 	/* has ID 0x007b when not in "Advanced Driver" mode */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1385) 	USB_DEVICE_VENDOR_SPEC(0x0582, 0x007a),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1386) 	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1387) 		.vendor_name = "Roland",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1388) 		/* "RD" or "RD-700SX"? */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1389) 		.ifnum = 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1390) 		.type = QUIRK_MIDI_FIXED_ENDPOINT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1391) 		.data = & (const struct snd_usb_midi_endpoint_info) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1392) 			.out_cables = 0x0003,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1393) 			.in_cables  = 0x0003
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1394) 		}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1395) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1396) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1397) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1398) 	/* has ID 0x0081 when not in "Advanced Driver" mode */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1399) 	USB_DEVICE(0x0582, 0x0080),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1400) 	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1401) 		.vendor_name = "Roland",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1402) 		.product_name = "G-70",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1403) 		.ifnum = 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1404) 		.type = QUIRK_MIDI_FIXED_ENDPOINT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1405) 		.data = & (const struct snd_usb_midi_endpoint_info) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1406) 			.out_cables = 0x0001,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1407) 			.in_cables  = 0x0001
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1408) 		}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1409) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1410) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1411) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1412) 	/* has ID 0x008c when not in "Advanced Driver" mode */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1413) 	USB_DEVICE(0x0582, 0x008b),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1414) 	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1415) 		.vendor_name = "EDIROL",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1416) 		.product_name = "PC-50",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1417) 		.ifnum = 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1418) 		.type = QUIRK_MIDI_FIXED_ENDPOINT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1419) 		.data = & (const struct snd_usb_midi_endpoint_info) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1420) 			.out_cables = 0x0001,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1421) 			.in_cables  = 0x0001
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1422) 		}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1423) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1424) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1425) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1426) 	/*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1427) 	 * This quirk is for the "Advanced Driver" mode. If off, the UA-4FX
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1428) 	 * is standard compliant, but has only 16-bit PCM and no MIDI.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1429) 	 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1430) 	USB_DEVICE(0x0582, 0x00a3),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1431) 	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1432) 		.vendor_name = "EDIROL",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1433) 		.product_name = "UA-4FX",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1434) 		.ifnum = QUIRK_ANY_INTERFACE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1435) 		.type = QUIRK_COMPOSITE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1436) 		.data = (const struct snd_usb_audio_quirk[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1437) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1438) 				.ifnum = 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1439) 				.type = QUIRK_AUDIO_EDIROL_UAXX
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1440) 			},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1441) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1442) 				.ifnum = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1443) 				.type = QUIRK_AUDIO_EDIROL_UAXX
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1444) 			},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1445) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1446) 				.ifnum = 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1447) 				.type = QUIRK_AUDIO_EDIROL_UAXX
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1448) 			},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1449) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1450) 				.ifnum = -1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1451) 			}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1452) 		}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1453) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1454) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1455) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1456) 	/* Edirol M-16DX */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1457) 	USB_DEVICE(0x0582, 0x00c4),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1458) 	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1459) 		.ifnum = QUIRK_ANY_INTERFACE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1460) 		.type = QUIRK_COMPOSITE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1461) 		.data = (const struct snd_usb_audio_quirk[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1462) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1463) 				.ifnum = 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1464) 				.type = QUIRK_AUDIO_STANDARD_INTERFACE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1465) 			},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1466) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1467) 				.ifnum = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1468) 				.type = QUIRK_AUDIO_STANDARD_INTERFACE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1469) 			},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1470) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1471) 				.ifnum = 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1472) 				.type = QUIRK_MIDI_FIXED_ENDPOINT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1473) 				.data = & (const struct snd_usb_midi_endpoint_info) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1474) 					.out_cables = 0x0001,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1475) 					.in_cables  = 0x0001
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1476) 				}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1477) 			},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1478) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1479) 				.ifnum = -1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1480) 			}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1481) 		}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1482) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1483) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1484) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1485) 	/* Advanced modes of the Edirol UA-25EX.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1486) 	 * For the standard mode, UA-25EX has ID 0582:00e7, which
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1487) 	 * offers only 16-bit PCM at 44.1 kHz and no MIDI.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1488) 	 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1489) 	USB_DEVICE_VENDOR_SPEC(0x0582, 0x00e6),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1490) 	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1491) 		.vendor_name = "EDIROL",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1492) 		.product_name = "UA-25EX",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1493) 		.ifnum = QUIRK_ANY_INTERFACE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1494) 		.type = QUIRK_COMPOSITE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1495) 		.data = (const struct snd_usb_audio_quirk[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1496) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1497) 				.ifnum = 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1498) 				.type = QUIRK_AUDIO_EDIROL_UAXX
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1499) 			},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1500) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1501) 				.ifnum = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1502) 				.type = QUIRK_AUDIO_EDIROL_UAXX
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1503) 			},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1504) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1505) 				.ifnum = 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1506) 				.type = QUIRK_AUDIO_EDIROL_UAXX
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1507) 			},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1508) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1509) 				.ifnum = -1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1510) 			}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1511) 		}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1512) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1513) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1514) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1515) 	/* Edirol UM-3G */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1516) 	USB_DEVICE_VENDOR_SPEC(0x0582, 0x0108),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1517) 	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1518) 		.ifnum = 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1519) 		.type = QUIRK_MIDI_FIXED_ENDPOINT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1520) 		.data = & (const struct snd_usb_midi_endpoint_info) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1521) 			.out_cables = 0x0007,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1522) 			.in_cables  = 0x0007
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1523) 		}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1524) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1525) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1526) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1527) 	/* BOSS ME-25 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1528) 	USB_DEVICE(0x0582, 0x0113),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1529) 	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1530) 		.ifnum = QUIRK_ANY_INTERFACE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1531) 		.type = QUIRK_COMPOSITE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1532) 		.data = (const struct snd_usb_audio_quirk[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1533) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1534) 				.ifnum = 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1535) 				.type = QUIRK_AUDIO_STANDARD_INTERFACE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1536) 			},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1537) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1538) 				.ifnum = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1539) 				.type = QUIRK_AUDIO_STANDARD_INTERFACE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1540) 			},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1541) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1542) 				.ifnum = 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1543) 				.type = QUIRK_MIDI_FIXED_ENDPOINT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1544) 				.data = & (const struct snd_usb_midi_endpoint_info) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1545) 					.out_cables = 0x0001,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1546) 					.in_cables  = 0x0001
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1547) 				}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1548) 			},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1549) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1550) 				.ifnum = -1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1551) 			}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1552) 		}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1553) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1554) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1555) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1556) 	/* only 44.1 kHz works at the moment */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1557) 	USB_DEVICE(0x0582, 0x0120),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1558) 	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1559) 		/* .vendor_name = "Roland", */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1560) 		/* .product_name = "OCTO-CAPTURE", */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1561) 		.ifnum = QUIRK_ANY_INTERFACE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1562) 		.type = QUIRK_COMPOSITE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1563) 		.data = (const struct snd_usb_audio_quirk[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1564) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1565) 				.ifnum = 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1566) 				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1567) 				.data = & (const struct audioformat) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1568) 					.formats = SNDRV_PCM_FMTBIT_S32_LE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1569) 					.channels = 10,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1570) 					.iface = 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1571) 					.altsetting = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1572) 					.altset_idx = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1573) 					.endpoint = 0x05,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1574) 					.ep_attr = 0x05,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1575) 					.rates = SNDRV_PCM_RATE_44100,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1576) 					.rate_min = 44100,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1577) 					.rate_max = 44100,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1578) 					.nr_rates = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1579) 					.rate_table = (unsigned int[]) { 44100 }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1580) 				}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1581) 			},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1582) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1583) 				.ifnum = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1584) 				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1585) 				.data = & (const struct audioformat) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1586) 					.formats = SNDRV_PCM_FMTBIT_S32_LE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1587) 					.channels = 12,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1588) 					.iface = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1589) 					.altsetting = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1590) 					.altset_idx = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1591) 					.endpoint = 0x85,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1592) 					.ep_attr = 0x25,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1593) 					.rates = SNDRV_PCM_RATE_44100,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1594) 					.rate_min = 44100,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1595) 					.rate_max = 44100,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1596) 					.nr_rates = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1597) 					.rate_table = (unsigned int[]) { 44100 }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1598) 				}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1599) 			},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1600) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1601) 				.ifnum = 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1602) 				.type = QUIRK_MIDI_FIXED_ENDPOINT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1603) 				.data = & (const struct snd_usb_midi_endpoint_info) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1604) 					.out_cables = 0x0001,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1605) 					.in_cables  = 0x0001
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1606) 				}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1607) 			},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1608) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1609) 				.ifnum = 3,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1610) 				.type = QUIRK_IGNORE_INTERFACE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1611) 			},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1612) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1613) 				.ifnum = 4,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1614) 				.type = QUIRK_IGNORE_INTERFACE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1615) 			},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1616) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1617) 				.ifnum = -1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1618) 			}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1619) 		}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1620) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1621) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1622) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1623) 	/* only 44.1 kHz works at the moment */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1624) 	USB_DEVICE(0x0582, 0x012f),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1625) 	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1626) 		/* .vendor_name = "Roland", */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1627) 		/* .product_name = "QUAD-CAPTURE", */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1628) 		.ifnum = QUIRK_ANY_INTERFACE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1629) 		.type = QUIRK_COMPOSITE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1630) 		.data = (const struct snd_usb_audio_quirk[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1631) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1632) 				.ifnum = 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1633) 				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1634) 				.data = & (const struct audioformat) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1635) 					.formats = SNDRV_PCM_FMTBIT_S32_LE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1636) 					.channels = 4,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1637) 					.iface = 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1638) 					.altsetting = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1639) 					.altset_idx = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1640) 					.endpoint = 0x05,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1641) 					.ep_attr = 0x05,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1642) 					.rates = SNDRV_PCM_RATE_44100,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1643) 					.rate_min = 44100,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1644) 					.rate_max = 44100,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1645) 					.nr_rates = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1646) 					.rate_table = (unsigned int[]) { 44100 }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1647) 				}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1648) 			},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1649) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1650) 				.ifnum = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1651) 				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1652) 				.data = & (const struct audioformat) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1653) 					.formats = SNDRV_PCM_FMTBIT_S32_LE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1654) 					.channels = 6,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1655) 					.iface = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1656) 					.altsetting = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1657) 					.altset_idx = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1658) 					.endpoint = 0x85,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1659) 					.ep_attr = 0x25,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1660) 					.rates = SNDRV_PCM_RATE_44100,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1661) 					.rate_min = 44100,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1662) 					.rate_max = 44100,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1663) 					.nr_rates = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1664) 					.rate_table = (unsigned int[]) { 44100 }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1665) 				}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1666) 			},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1667) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1668) 				.ifnum = 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1669) 				.type = QUIRK_MIDI_FIXED_ENDPOINT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1670) 				.data = & (const struct snd_usb_midi_endpoint_info) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1671) 					.out_cables = 0x0001,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1672) 					.in_cables  = 0x0001
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1673) 				}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1674) 			},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1675) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1676) 				.ifnum = 3,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1677) 				.type = QUIRK_IGNORE_INTERFACE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1678) 			},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1679) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1680) 				.ifnum = 4,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1681) 				.type = QUIRK_IGNORE_INTERFACE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1682) 			},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1683) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1684) 				.ifnum = -1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1685) 			}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1686) 		}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1687) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1688) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1689) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1690) 	USB_DEVICE(0x0582, 0x0159),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1691) 	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1692) 		/* .vendor_name = "Roland", */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1693) 		/* .product_name = "UA-22", */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1694) 		.ifnum = QUIRK_ANY_INTERFACE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1695) 		.type = QUIRK_COMPOSITE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1696) 		.data = (const struct snd_usb_audio_quirk[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1697) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1698) 				.ifnum = 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1699) 				.type = QUIRK_AUDIO_STANDARD_INTERFACE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1700) 			},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1701) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1702) 				.ifnum = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1703) 				.type = QUIRK_AUDIO_STANDARD_INTERFACE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1704) 			},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1705) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1706) 				.ifnum = 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1707) 				.type = QUIRK_MIDI_FIXED_ENDPOINT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1708) 				.data = & (const struct snd_usb_midi_endpoint_info) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1709) 					.out_cables = 0x0001,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1710) 					.in_cables = 0x0001
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1711) 				}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1712) 			},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1713) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1714) 				.ifnum = -1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1715) 			}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1716) 		}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1717) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1718) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1719) /* this catches most recent vendor-specific Roland devices */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1720) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1721) 	.match_flags = USB_DEVICE_ID_MATCH_VENDOR |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1722) 	               USB_DEVICE_ID_MATCH_INT_CLASS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1723) 	.idVendor = 0x0582,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1724) 	.bInterfaceClass = USB_CLASS_VENDOR_SPEC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1725) 	.driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1726) 		.ifnum = QUIRK_ANY_INTERFACE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1727) 		.type = QUIRK_AUTODETECT
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1728) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1729) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1730) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1731) /* Guillemot devices */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1732) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1733) 	/*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1734) 	 * This is for the "Windows Edition" where the external MIDI ports are
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1735) 	 * the only MIDI ports; the control data is reported through HID
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1736) 	 * interfaces.  The "Macintosh Edition" has ID 0xd002 and uses standard
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1737) 	 * compliant USB MIDI ports for external MIDI and controls.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1738) 	 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1739) 	USB_DEVICE_VENDOR_SPEC(0x06f8, 0xb000),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1740) 	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1741) 		.vendor_name = "Hercules",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1742) 		.product_name = "DJ Console (WE)",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1743) 		.ifnum = 4,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1744) 		.type = QUIRK_MIDI_FIXED_ENDPOINT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1745) 		.data = & (const struct snd_usb_midi_endpoint_info) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1746) 			.out_cables = 0x0001,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1747) 			.in_cables = 0x0001
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1748) 		}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1749) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1750) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1751) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1752) /* Midiman/M-Audio devices */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1753) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1754) 	USB_DEVICE_VENDOR_SPEC(0x0763, 0x1002),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1755) 	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1756) 		.vendor_name = "M-Audio",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1757) 		.product_name = "MidiSport 2x2",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1758) 		.ifnum = QUIRK_ANY_INTERFACE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1759) 		.type = QUIRK_MIDI_MIDIMAN,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1760) 		.data = & (const struct snd_usb_midi_endpoint_info) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1761) 			.out_cables = 0x0003,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1762) 			.in_cables  = 0x0003
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1763) 		}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1764) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1765) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1766) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1767) 	USB_DEVICE_VENDOR_SPEC(0x0763, 0x1011),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1768) 	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1769) 		.vendor_name = "M-Audio",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1770) 		.product_name = "MidiSport 1x1",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1771) 		.ifnum = QUIRK_ANY_INTERFACE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1772) 		.type = QUIRK_MIDI_MIDIMAN,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1773) 		.data = & (const struct snd_usb_midi_endpoint_info) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1774) 			.out_cables = 0x0001,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1775) 			.in_cables  = 0x0001
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1776) 		}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1777) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1778) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1779) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1780) 	USB_DEVICE_VENDOR_SPEC(0x0763, 0x1015),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1781) 	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1782) 		.vendor_name = "M-Audio",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1783) 		.product_name = "Keystation",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1784) 		.ifnum = QUIRK_ANY_INTERFACE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1785) 		.type = QUIRK_MIDI_MIDIMAN,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1786) 		.data = & (const struct snd_usb_midi_endpoint_info) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1787) 			.out_cables = 0x0001,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1788) 			.in_cables  = 0x0001
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1789) 		}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1790) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1791) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1792) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1793) 	USB_DEVICE_VENDOR_SPEC(0x0763, 0x1021),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1794) 	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1795) 		.vendor_name = "M-Audio",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1796) 		.product_name = "MidiSport 4x4",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1797) 		.ifnum = QUIRK_ANY_INTERFACE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1798) 		.type = QUIRK_MIDI_MIDIMAN,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1799) 		.data = & (const struct snd_usb_midi_endpoint_info) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1800) 			.out_cables = 0x000f,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1801) 			.in_cables  = 0x000f
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1802) 		}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1803) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1804) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1805) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1806) 	/*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1807) 	 * For hardware revision 1.05; in the later revisions (1.10 and
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1808) 	 * 1.21), 0x1031 is the ID for the device without firmware.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1809) 	 * Thanks to Olaf Giesbrecht <Olaf_Giesbrecht@yahoo.de>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1810) 	 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1811) 	USB_DEVICE_VER(0x0763, 0x1031, 0x0100, 0x0109),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1812) 	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1813) 		.vendor_name = "M-Audio",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1814) 		.product_name = "MidiSport 8x8",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1815) 		.ifnum = QUIRK_ANY_INTERFACE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1816) 		.type = QUIRK_MIDI_MIDIMAN,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1817) 		.data = & (const struct snd_usb_midi_endpoint_info) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1818) 			.out_cables = 0x01ff,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1819) 			.in_cables  = 0x01ff
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1820) 		}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1821) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1822) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1823) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1824) 	USB_DEVICE_VENDOR_SPEC(0x0763, 0x1033),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1825) 	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1826) 		.vendor_name = "M-Audio",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1827) 		.product_name = "MidiSport 8x8",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1828) 		.ifnum = QUIRK_ANY_INTERFACE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1829) 		.type = QUIRK_MIDI_MIDIMAN,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1830) 		.data = & (const struct snd_usb_midi_endpoint_info) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1831) 			.out_cables = 0x01ff,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1832) 			.in_cables  = 0x01ff
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1833) 		}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1834) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1835) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1836) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1837) 	USB_DEVICE_VENDOR_SPEC(0x0763, 0x1041),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1838) 	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1839) 		.vendor_name = "M-Audio",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1840) 		.product_name = "MidiSport 2x4",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1841) 		.ifnum = QUIRK_ANY_INTERFACE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1842) 		.type = QUIRK_MIDI_MIDIMAN,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1843) 		.data = & (const struct snd_usb_midi_endpoint_info) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1844) 			.out_cables = 0x000f,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1845) 			.in_cables  = 0x0003
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1846) 		}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1847) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1848) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1849) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1850) 	USB_DEVICE_VENDOR_SPEC(0x0763, 0x2001),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1851) 	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1852) 		.vendor_name = "M-Audio",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1853) 		.product_name = "Quattro",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1854) 		.ifnum = QUIRK_ANY_INTERFACE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1855) 		.type = QUIRK_COMPOSITE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1856) 		.data = & (const struct snd_usb_audio_quirk[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1857) 			/*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1858) 			 * Interfaces 0-2 are "Windows-compatible", 16-bit only,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1859) 			 * and share endpoints with the other interfaces.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1860) 			 * Ignore them.  The other interfaces can do 24 bits,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1861) 			 * but captured samples are big-endian (see usbaudio.c).
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1862) 			 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1863) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1864) 				.ifnum = 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1865) 				.type = QUIRK_IGNORE_INTERFACE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1866) 			},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1867) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1868) 				.ifnum = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1869) 				.type = QUIRK_IGNORE_INTERFACE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1870) 			},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1871) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1872) 				.ifnum = 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1873) 				.type = QUIRK_IGNORE_INTERFACE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1874) 			},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1875) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1876) 				.ifnum = 3,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1877) 				.type = QUIRK_IGNORE_INTERFACE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1878) 			},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1879) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1880) 				.ifnum = 4,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1881) 				.type = QUIRK_AUDIO_STANDARD_INTERFACE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1882) 			},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1883) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1884) 				.ifnum = 5,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1885) 				.type = QUIRK_AUDIO_STANDARD_INTERFACE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1886) 			},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1887) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1888) 				.ifnum = 6,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1889) 				.type = QUIRK_IGNORE_INTERFACE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1890) 			},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1891) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1892) 				.ifnum = 7,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1893) 				.type = QUIRK_AUDIO_STANDARD_INTERFACE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1894) 			},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1895) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1896) 				.ifnum = 8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1897) 				.type = QUIRK_AUDIO_STANDARD_INTERFACE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1898) 			},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1899) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1900) 				.ifnum = 9,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1901) 				.type = QUIRK_MIDI_MIDIMAN,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1902) 				.data = & (const struct snd_usb_midi_endpoint_info) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1903) 					.out_cables = 0x0001,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1904) 					.in_cables  = 0x0001
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1905) 				}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1906) 			},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1907) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1908) 				.ifnum = -1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1909) 			}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1910) 		}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1911) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1912) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1913) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1914) 	USB_DEVICE_VENDOR_SPEC(0x0763, 0x2003),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1915) 	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1916) 		.vendor_name = "M-Audio",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1917) 		.product_name = "AudioPhile",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1918) 		.ifnum = 6,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1919) 		.type = QUIRK_MIDI_MIDIMAN,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1920) 		.data = & (const struct snd_usb_midi_endpoint_info) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1921) 			.out_cables = 0x0001,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1922) 			.in_cables  = 0x0001
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1923) 		}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1924) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1925) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1926) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1927) 	USB_DEVICE_VENDOR_SPEC(0x0763, 0x2008),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1928) 	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1929) 		.vendor_name = "M-Audio",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1930) 		.product_name = "Ozone",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1931) 		.ifnum = 3,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1932) 		.type = QUIRK_MIDI_MIDIMAN,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1933) 		.data = & (const struct snd_usb_midi_endpoint_info) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1934) 			.out_cables = 0x0001,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1935) 			.in_cables  = 0x0001
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1936) 		}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1937) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1938) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1939) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1940) 	USB_DEVICE_VENDOR_SPEC(0x0763, 0x200d),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1941) 	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1942) 		.vendor_name = "M-Audio",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1943) 		.product_name = "OmniStudio",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1944) 		.ifnum = QUIRK_ANY_INTERFACE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1945) 		.type = QUIRK_COMPOSITE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1946) 		.data = & (const struct snd_usb_audio_quirk[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1947) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1948) 				.ifnum = 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1949) 				.type = QUIRK_IGNORE_INTERFACE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1950) 			},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1951) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1952) 				.ifnum = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1953) 				.type = QUIRK_IGNORE_INTERFACE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1954) 			},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1955) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1956) 				.ifnum = 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1957) 				.type = QUIRK_IGNORE_INTERFACE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1958) 			},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1959) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1960) 				.ifnum = 3,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1961) 				.type = QUIRK_IGNORE_INTERFACE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1962) 			},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1963) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1964) 				.ifnum = 4,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1965) 				.type = QUIRK_AUDIO_STANDARD_INTERFACE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1966) 			},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1967) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1968) 				.ifnum = 5,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1969) 				.type = QUIRK_AUDIO_STANDARD_INTERFACE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1970) 			},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1971) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1972) 				.ifnum = 6,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1973) 				.type = QUIRK_IGNORE_INTERFACE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1974) 			},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1975) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1976) 				.ifnum = 7,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1977) 				.type = QUIRK_AUDIO_STANDARD_INTERFACE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1978) 			},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1979) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1980) 				.ifnum = 8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1981) 				.type = QUIRK_AUDIO_STANDARD_INTERFACE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1982) 			},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1983) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1984) 				.ifnum = 9,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1985) 				.type = QUIRK_MIDI_MIDIMAN,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1986) 				.data = & (const struct snd_usb_midi_endpoint_info) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1987) 					.out_cables = 0x0001,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1988) 					.in_cables  = 0x0001
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1989) 				}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1990) 			},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1991) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1992) 				.ifnum = -1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1993) 			}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1994) 		}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1995) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1996) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1997) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1998) 	USB_DEVICE(0x0763, 0x2019),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1999) 	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2000) 		/* .vendor_name = "M-Audio", */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2001) 		/* .product_name = "Ozone Academic", */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2002) 		.ifnum = QUIRK_ANY_INTERFACE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2003) 		.type = QUIRK_COMPOSITE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2004) 		.data = & (const struct snd_usb_audio_quirk[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2005) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2006) 				.ifnum = 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2007) 				.type = QUIRK_AUDIO_STANDARD_INTERFACE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2008) 			},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2009) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2010) 				.ifnum = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2011) 				.type = QUIRK_AUDIO_STANDARD_INTERFACE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2012) 			},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2013) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2014) 				.ifnum = 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2015) 				.type = QUIRK_AUDIO_STANDARD_INTERFACE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2016) 			},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2017) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2018) 				.ifnum = 3,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2019) 				.type = QUIRK_MIDI_MIDIMAN,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2020) 				.data = & (const struct snd_usb_midi_endpoint_info) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2021) 					.out_cables = 0x0001,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2022) 					.in_cables  = 0x0001
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2023) 				}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2024) 			},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2025) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2026) 				.ifnum = -1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2027) 			}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2028) 		}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2029) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2030) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2031) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2032) 	USB_DEVICE_VENDOR_SPEC(0x0763, 0x2030),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2033) 	.driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2034) 		/* .vendor_name = "M-Audio", */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2035) 		/* .product_name = "Fast Track C400", */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2036) 		.ifnum = QUIRK_ANY_INTERFACE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2037) 		.type = QUIRK_COMPOSITE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2038) 		.data = &(const struct snd_usb_audio_quirk[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2039) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2040) 				.ifnum = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2041) 				.type = QUIRK_AUDIO_STANDARD_MIXER,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2042) 			},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2043) 			/* Playback */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2044) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2045) 				.ifnum = 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2046) 				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2047) 				.data = &(const struct audioformat) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2048) 					.formats = SNDRV_PCM_FMTBIT_S24_3LE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2049) 					.channels = 6,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2050) 					.iface = 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2051) 					.altsetting = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2052) 					.altset_idx = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2053) 					.attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2054) 					.endpoint = 0x01,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2055) 					.ep_attr = 0x09,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2056) 					.rates = SNDRV_PCM_RATE_44100 |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2057) 						 SNDRV_PCM_RATE_48000 |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2058) 						 SNDRV_PCM_RATE_88200 |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2059) 						 SNDRV_PCM_RATE_96000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2060) 					.rate_min = 44100,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2061) 					.rate_max = 96000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2062) 					.nr_rates = 4,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2063) 					.rate_table = (unsigned int[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2064) 							44100, 48000, 88200, 96000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2065) 					},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2066) 					.clock = 0x80,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2067) 				}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2068) 			},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2069) 			/* Capture */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2070) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2071) 				.ifnum = 3,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2072) 				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2073) 				.data = &(const struct audioformat) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2074) 					.formats = SNDRV_PCM_FMTBIT_S24_3LE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2075) 					.channels = 4,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2076) 					.iface = 3,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2077) 					.altsetting = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2078) 					.altset_idx = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2079) 					.attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2080) 					.endpoint = 0x81,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2081) 					.ep_attr = 0x05,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2082) 					.rates = SNDRV_PCM_RATE_44100 |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2083) 						 SNDRV_PCM_RATE_48000 |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2084) 						 SNDRV_PCM_RATE_88200 |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2085) 						 SNDRV_PCM_RATE_96000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2086) 					.rate_min = 44100,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2087) 					.rate_max = 96000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2088) 					.nr_rates = 4,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2089) 					.rate_table = (unsigned int[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2090) 						44100, 48000, 88200, 96000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2091) 					},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2092) 					.clock = 0x80,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2093) 				}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2094) 			},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2095) 			/* MIDI */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2096) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2097) 				.ifnum = -1 /* Interface = 4 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2098) 			}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2099) 		}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2100) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2101) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2102) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2103) 	USB_DEVICE_VENDOR_SPEC(0x0763, 0x2031),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2104) 	.driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2105) 		/* .vendor_name = "M-Audio", */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2106) 		/* .product_name = "Fast Track C600", */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2107) 		.ifnum = QUIRK_ANY_INTERFACE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2108) 		.type = QUIRK_COMPOSITE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2109) 		.data = &(const struct snd_usb_audio_quirk[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2110) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2111) 				.ifnum = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2112) 				.type = QUIRK_AUDIO_STANDARD_MIXER,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2113) 			},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2114) 			/* Playback */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2115) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2116) 				.ifnum = 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2117) 				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2118) 				.data = &(const struct audioformat) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2119) 					.formats = SNDRV_PCM_FMTBIT_S24_3LE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2120) 					.channels = 8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2121) 					.iface = 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2122) 					.altsetting = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2123) 					.altset_idx = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2124) 					.attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2125) 					.endpoint = 0x01,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2126) 					.ep_attr = 0x09,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2127) 					.rates = SNDRV_PCM_RATE_44100 |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2128) 						 SNDRV_PCM_RATE_48000 |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2129) 						 SNDRV_PCM_RATE_88200 |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2130) 						 SNDRV_PCM_RATE_96000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2131) 					.rate_min = 44100,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2132) 					.rate_max = 96000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2133) 					.nr_rates = 4,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2134) 					.rate_table = (unsigned int[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2135) 							44100, 48000, 88200, 96000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2136) 					},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2137) 					.clock = 0x80,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2138) 				}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2139) 			},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2140) 			/* Capture */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2141) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2142) 				.ifnum = 3,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2143) 				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2144) 				.data = &(const struct audioformat) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2145) 					.formats = SNDRV_PCM_FMTBIT_S24_3LE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2146) 					.channels = 6,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2147) 					.iface = 3,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2148) 					.altsetting = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2149) 					.altset_idx = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2150) 					.attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2151) 					.endpoint = 0x81,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2152) 					.ep_attr = 0x05,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2153) 					.rates = SNDRV_PCM_RATE_44100 |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2154) 						 SNDRV_PCM_RATE_48000 |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2155) 						 SNDRV_PCM_RATE_88200 |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2156) 						 SNDRV_PCM_RATE_96000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2157) 					.rate_min = 44100,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2158) 					.rate_max = 96000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2159) 					.nr_rates = 4,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2160) 					.rate_table = (unsigned int[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2161) 						44100, 48000, 88200, 96000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2162) 					},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2163) 					.clock = 0x80,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2164) 				}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2165) 			},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2166) 			/* MIDI */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2167) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2168) 				.ifnum = -1 /* Interface = 4 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2169) 			}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2170) 		}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2171) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2172) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2173) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2174) 	USB_DEVICE_VENDOR_SPEC(0x0763, 0x2080),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2175) 	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2176) 		/* .vendor_name = "M-Audio", */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2177) 		/* .product_name = "Fast Track Ultra", */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2178) 		.ifnum = QUIRK_ANY_INTERFACE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2179) 		.type = QUIRK_COMPOSITE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2180) 		.data = & (const struct snd_usb_audio_quirk[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2181) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2182) 				.ifnum = 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2183) 				.type = QUIRK_AUDIO_STANDARD_MIXER,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2184) 			},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2185) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2186) 				.ifnum = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2187) 				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2188) 				.data = & (const struct audioformat) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2189) 					.formats = SNDRV_PCM_FMTBIT_S24_3LE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2190) 					.channels = 8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2191) 					.iface = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2192) 					.altsetting = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2193) 					.altset_idx = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2194) 					.attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2195) 					.endpoint = 0x01,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2196) 					.ep_attr = 0x09,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2197) 					.rates = SNDRV_PCM_RATE_44100 |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2198) 						 SNDRV_PCM_RATE_48000 |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2199) 						 SNDRV_PCM_RATE_88200 |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2200) 						 SNDRV_PCM_RATE_96000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2201) 					.rate_min = 44100,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2202) 					.rate_max = 96000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2203) 					.nr_rates = 4,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2204) 					.rate_table = (unsigned int[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2205) 						44100, 48000, 88200, 96000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2206) 					}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2207) 				}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2208) 			},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2209) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2210) 				.ifnum = 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2211) 				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2212) 				.data = & (const struct audioformat) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2213) 					.formats = SNDRV_PCM_FMTBIT_S24_3LE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2214) 					.channels = 8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2215) 					.iface = 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2216) 					.altsetting = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2217) 					.altset_idx = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2218) 					.attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2219) 					.endpoint = 0x81,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2220) 					.ep_attr = 0x05,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2221) 					.rates = SNDRV_PCM_RATE_44100 |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2222) 						 SNDRV_PCM_RATE_48000 |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2223) 						 SNDRV_PCM_RATE_88200 |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2224) 						 SNDRV_PCM_RATE_96000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2225) 					.rate_min = 44100,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2226) 					.rate_max = 96000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2227) 					.nr_rates = 4,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2228) 					.rate_table = (unsigned int[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2229) 						44100, 48000, 88200, 96000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2230) 					}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2231) 				}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2232) 			},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2233) 			/* interface 3 (MIDI) is standard compliant */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2234) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2235) 				.ifnum = -1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2236) 			}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2237) 		}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2238) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2239) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2240) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2241) 	USB_DEVICE_VENDOR_SPEC(0x0763, 0x2081),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2242) 	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2243) 		/* .vendor_name = "M-Audio", */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2244) 		/* .product_name = "Fast Track Ultra 8R", */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2245) 		.ifnum = QUIRK_ANY_INTERFACE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2246) 		.type = QUIRK_COMPOSITE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2247) 		.data = & (const struct snd_usb_audio_quirk[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2248) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2249) 				.ifnum = 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2250) 				.type = QUIRK_AUDIO_STANDARD_MIXER,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2251) 			},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2252) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2253) 				.ifnum = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2254) 				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2255) 				.data = & (const struct audioformat) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2256) 					.formats = SNDRV_PCM_FMTBIT_S24_3LE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2257) 					.channels = 8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2258) 					.iface = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2259) 					.altsetting = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2260) 					.altset_idx = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2261) 					.attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2262) 					.endpoint = 0x01,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2263) 					.ep_attr = 0x09,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2264) 					.rates = SNDRV_PCM_RATE_44100 |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2265) 						 SNDRV_PCM_RATE_48000 |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2266) 						 SNDRV_PCM_RATE_88200 |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2267) 						 SNDRV_PCM_RATE_96000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2268) 					.rate_min = 44100,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2269) 					.rate_max = 96000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2270) 					.nr_rates = 4,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2271) 					.rate_table = (unsigned int[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2272) 							44100, 48000, 88200, 96000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2273) 					}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2274) 				}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2275) 			},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2276) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2277) 				.ifnum = 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2278) 				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2279) 				.data = & (const struct audioformat) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2280) 					.formats = SNDRV_PCM_FMTBIT_S24_3LE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2281) 					.channels = 8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2282) 					.iface = 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2283) 					.altsetting = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2284) 					.altset_idx = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2285) 					.attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2286) 					.endpoint = 0x81,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2287) 					.ep_attr = 0x05,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2288) 					.rates = SNDRV_PCM_RATE_44100 |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2289) 						 SNDRV_PCM_RATE_48000 |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2290) 						 SNDRV_PCM_RATE_88200 |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2291) 						 SNDRV_PCM_RATE_96000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2292) 					.rate_min = 44100,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2293) 					.rate_max = 96000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2294) 					.nr_rates = 4,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2295) 					.rate_table = (unsigned int[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2296) 						44100, 48000, 88200, 96000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2297) 					}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2298) 				}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2299) 			},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2300) 			/* interface 3 (MIDI) is standard compliant */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2301) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2302) 				.ifnum = -1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2303) 			}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2304) 		}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2305) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2306) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2307) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2308) /* Casio devices */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2309) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2310) 	USB_DEVICE(0x07cf, 0x6801),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2311) 	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2312) 		.vendor_name = "Casio",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2313) 		.product_name = "PL-40R",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2314) 		.ifnum = 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2315) 		.type = QUIRK_MIDI_YAMAHA
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2316) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2317) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2318) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2319) 	/* this ID is used by several devices without a product ID */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2320) 	USB_DEVICE(0x07cf, 0x6802),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2321) 	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2322) 		.vendor_name = "Casio",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2323) 		.product_name = "Keyboard",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2324) 		.ifnum = 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2325) 		.type = QUIRK_MIDI_YAMAHA
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2326) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2327) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2328) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2329) /* Mark of the Unicorn devices */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2330) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2331) 	/* thanks to Robert A. Lerche <ral 'at' msbit.com> */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2332) 	.match_flags = USB_DEVICE_ID_MATCH_VENDOR |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2333) 		       USB_DEVICE_ID_MATCH_PRODUCT |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2334) 		       USB_DEVICE_ID_MATCH_DEV_SUBCLASS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2335) 	.idVendor = 0x07fd,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2336) 	.idProduct = 0x0001,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2337) 	.bDeviceSubClass = 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2338) 	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2339) 		.vendor_name = "MOTU",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2340) 		.product_name = "Fastlane",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2341) 		.ifnum = QUIRK_ANY_INTERFACE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2342) 		.type = QUIRK_COMPOSITE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2343) 		.data = & (const struct snd_usb_audio_quirk[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2344) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2345) 				.ifnum = 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2346) 				.type = QUIRK_MIDI_RAW_BYTES
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2347) 			},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2348) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2349) 				.ifnum = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2350) 				.type = QUIRK_IGNORE_INTERFACE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2351) 			},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2352) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2353) 				.ifnum = -1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2354) 			}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2355) 		}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2356) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2357) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2358) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2359) /* Emagic devices */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2360) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2361) 	USB_DEVICE(0x086a, 0x0001),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2362) 	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2363) 		.vendor_name = "Emagic",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2364) 		.product_name = "Unitor8",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2365) 		.ifnum = 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2366) 		.type = QUIRK_MIDI_EMAGIC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2367) 		.data = & (const struct snd_usb_midi_endpoint_info) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2368) 			.out_cables = 0x80ff,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2369) 			.in_cables  = 0x80ff
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2370) 		}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2371) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2372) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2373) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2374) 	USB_DEVICE(0x086a, 0x0002),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2375) 	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2376) 		.vendor_name = "Emagic",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2377) 		/* .product_name = "AMT8", */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2378) 		.ifnum = 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2379) 		.type = QUIRK_MIDI_EMAGIC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2380) 		.data = & (const struct snd_usb_midi_endpoint_info) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2381) 			.out_cables = 0x80ff,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2382) 			.in_cables  = 0x80ff
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2383) 		}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2384) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2385) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2386) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2387) 	USB_DEVICE(0x086a, 0x0003),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2388) 	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2389) 		.vendor_name = "Emagic",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2390) 		/* .product_name = "MT4", */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2391) 		.ifnum = 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2392) 		.type = QUIRK_MIDI_EMAGIC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2393) 		.data = & (const struct snd_usb_midi_endpoint_info) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2394) 			.out_cables = 0x800f,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2395) 			.in_cables  = 0x8003
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2396) 		}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2397) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2398) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2399) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2400) /* KORG devices */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2401) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2402) 	USB_DEVICE_VENDOR_SPEC(0x0944, 0x0200),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2403) 	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2404) 		.vendor_name = "KORG, Inc.",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2405) 		/* .product_name = "PANDORA PX5D", */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2406) 		.ifnum = 3,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2407) 		.type = QUIRK_MIDI_STANDARD_INTERFACE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2408) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2409) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2410) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2411) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2412) 	USB_DEVICE_VENDOR_SPEC(0x0944, 0x0201),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2413) 	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2414) 		.vendor_name = "KORG, Inc.",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2415) 		/* .product_name = "ToneLab ST", */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2416) 		.ifnum = 3,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2417) 		.type = QUIRK_MIDI_STANDARD_INTERFACE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2418) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2419) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2420) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2421) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2422) 	USB_DEVICE_VENDOR_SPEC(0x0944, 0x0204),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2423) 	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2424) 		.vendor_name = "KORG, Inc.",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2425) 		/* .product_name = "ToneLab EX", */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2426) 		.ifnum = 3,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2427) 		.type = QUIRK_MIDI_STANDARD_INTERFACE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2428) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2429) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2430) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2431) /* AKAI devices */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2432) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2433) 	USB_DEVICE(0x09e8, 0x0062),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2434) 	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2435) 		.vendor_name = "AKAI",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2436) 		.product_name = "MPD16",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2437) 		.ifnum = 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2438) 		.type = QUIRK_MIDI_AKAI,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2439) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2440) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2441) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2442) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2443) 	/* Akai MPC Element */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2444) 	USB_DEVICE(0x09e8, 0x0021),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2445) 	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2446) 		.ifnum = QUIRK_ANY_INTERFACE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2447) 		.type = QUIRK_COMPOSITE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2448) 		.data = & (const struct snd_usb_audio_quirk[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2449) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2450) 				.ifnum = 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2451) 				.type = QUIRK_IGNORE_INTERFACE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2452) 			},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2453) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2454) 				.ifnum = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2455) 				.type = QUIRK_MIDI_STANDARD_INTERFACE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2456) 			},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2457) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2458) 				.ifnum = -1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2459) 			}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2460) 		}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2461) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2462) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2463) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2464) /* Steinberg devices */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2465) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2466) 	/* Steinberg MI2 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2467) 	USB_DEVICE_VENDOR_SPEC(0x0a4e, 0x2040),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2468) 	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2469) 		.ifnum = QUIRK_ANY_INTERFACE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2470) 		.type = QUIRK_COMPOSITE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2471) 		.data = & (const struct snd_usb_audio_quirk[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2472) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2473) 				.ifnum = 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2474) 				.type = QUIRK_AUDIO_STANDARD_INTERFACE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2475) 			},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2476) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2477) 				.ifnum = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2478) 				.type = QUIRK_AUDIO_STANDARD_INTERFACE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2479) 			},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2480) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2481) 				.ifnum = 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2482) 				.type = QUIRK_AUDIO_STANDARD_INTERFACE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2483) 			},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2484) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2485) 				.ifnum = 3,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2486) 				.type = QUIRK_MIDI_FIXED_ENDPOINT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2487) 				.data = &(const struct snd_usb_midi_endpoint_info) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2488) 					.out_cables = 0x0001,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2489) 					.in_cables  = 0x0001
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2490) 				}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2491) 			},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2492) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2493) 				.ifnum = -1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2494) 			}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2495) 		}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2496) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2497) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2498) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2499) 	/* Steinberg MI4 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2500) 	USB_DEVICE_VENDOR_SPEC(0x0a4e, 0x4040),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2501) 	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2502) 		.ifnum = QUIRK_ANY_INTERFACE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2503) 		.type = QUIRK_COMPOSITE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2504) 		.data = & (const struct snd_usb_audio_quirk[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2505) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2506) 				.ifnum = 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2507) 				.type = QUIRK_AUDIO_STANDARD_INTERFACE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2508) 			},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2509) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2510) 				.ifnum = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2511) 				.type = QUIRK_AUDIO_STANDARD_INTERFACE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2512) 			},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2513) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2514) 				.ifnum = 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2515) 				.type = QUIRK_AUDIO_STANDARD_INTERFACE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2516) 			},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2517) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2518) 				.ifnum = 3,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2519) 				.type = QUIRK_MIDI_FIXED_ENDPOINT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2520) 				.data = &(const struct snd_usb_midi_endpoint_info) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2521) 					.out_cables = 0x0001,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2522) 					.in_cables  = 0x0001
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2523) 				}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2524) 			},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2525) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2526) 				.ifnum = -1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2527) 			}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2528) 		}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2529) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2530) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2531) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2532) /* TerraTec devices */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2533) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2534) 	USB_DEVICE_VENDOR_SPEC(0x0ccd, 0x0012),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2535) 	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2536) 		.vendor_name = "TerraTec",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2537) 		.product_name = "PHASE 26",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2538) 		.ifnum = 3,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2539) 		.type = QUIRK_MIDI_STANDARD_INTERFACE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2540) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2541) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2542) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2543) 	USB_DEVICE_VENDOR_SPEC(0x0ccd, 0x0013),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2544) 	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2545) 		.vendor_name = "TerraTec",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2546) 		.product_name = "PHASE 26",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2547) 		.ifnum = 3,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2548) 		.type = QUIRK_MIDI_STANDARD_INTERFACE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2549) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2550) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2551) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2552) 	USB_DEVICE_VENDOR_SPEC(0x0ccd, 0x0014),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2553) 	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2554) 		.vendor_name = "TerraTec",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2555) 		.product_name = "PHASE 26",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2556) 		.ifnum = 3,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2557) 		.type = QUIRK_MIDI_STANDARD_INTERFACE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2558) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2559) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2560) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2561) 	USB_DEVICE(0x0ccd, 0x0035),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2562) 	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2563) 		.vendor_name = "Miditech",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2564) 		.product_name = "Play'n Roll",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2565) 		.ifnum = 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2566) 		.type = QUIRK_MIDI_CME
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2567) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2568) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2569) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2570) /* Novation EMS devices */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2571) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2572) 	USB_DEVICE_VENDOR_SPEC(0x1235, 0x0001),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2573) 	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2574) 		.vendor_name = "Novation",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2575) 		.product_name = "ReMOTE Audio/XStation",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2576) 		.ifnum = 4,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2577) 		.type = QUIRK_MIDI_NOVATION
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2578) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2579) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2580) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2581) 	USB_DEVICE_VENDOR_SPEC(0x1235, 0x0002),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2582) 	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2583) 		.vendor_name = "Novation",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2584) 		.product_name = "Speedio",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2585) 		.ifnum = 3,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2586) 		.type = QUIRK_MIDI_NOVATION
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2587) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2588) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2589) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2590) 	USB_DEVICE(0x1235, 0x000a),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2591) 	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2592) 		/* .vendor_name = "Novation", */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2593) 		/* .product_name = "Nocturn", */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2594) 		.ifnum = 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2595) 		.type = QUIRK_MIDI_RAW_BYTES
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2596) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2597) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2598) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2599) 	USB_DEVICE(0x1235, 0x000e),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2600) 	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2601) 		/* .vendor_name = "Novation", */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2602) 		/* .product_name = "Launchpad", */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2603) 		.ifnum = 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2604) 		.type = QUIRK_MIDI_RAW_BYTES
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2605) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2606) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2607) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2608) 	USB_DEVICE(0x1235, 0x0010),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2609) 	.driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2610) 		.vendor_name = "Focusrite",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2611) 		.product_name = "Saffire 6 USB",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2612) 		.ifnum = QUIRK_ANY_INTERFACE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2613) 		.type = QUIRK_COMPOSITE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2614) 		.data = (const struct snd_usb_audio_quirk[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2615) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2616) 				.ifnum = 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2617) 				.type = QUIRK_AUDIO_STANDARD_MIXER,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2618) 			},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2619) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2620) 				.ifnum = 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2621) 				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2622) 				.data = &(const struct audioformat) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2623) 					.formats = SNDRV_PCM_FMTBIT_S24_3LE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2624) 					.channels = 4,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2625) 					.iface = 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2626) 					.altsetting = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2627) 					.altset_idx = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2628) 					.attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2629) 					.endpoint = 0x01,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2630) 					.ep_attr = USB_ENDPOINT_XFER_ISOC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2631) 					.datainterval = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2632) 					.maxpacksize = 0x024c,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2633) 					.rates = SNDRV_PCM_RATE_44100 |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2634) 						 SNDRV_PCM_RATE_48000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2635) 					.rate_min = 44100,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2636) 					.rate_max = 48000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2637) 					.nr_rates = 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2638) 					.rate_table = (unsigned int[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2639) 						44100, 48000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2640) 					}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2641) 				}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2642) 			},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2643) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2644) 				.ifnum = 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2645) 				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2646) 				.data = &(const struct audioformat) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2647) 					.formats = SNDRV_PCM_FMTBIT_S24_3LE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2648) 					.channels = 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2649) 					.iface = 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2650) 					.altsetting = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2651) 					.altset_idx = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2652) 					.attributes = 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2653) 					.endpoint = 0x82,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2654) 					.ep_attr = USB_ENDPOINT_XFER_ISOC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2655) 					.datainterval = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2656) 					.maxpacksize = 0x0126,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2657) 					.rates = SNDRV_PCM_RATE_44100 |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2658) 						 SNDRV_PCM_RATE_48000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2659) 					.rate_min = 44100,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2660) 					.rate_max = 48000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2661) 					.nr_rates = 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2662) 					.rate_table = (unsigned int[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2663) 						44100, 48000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2664) 					}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2665) 				}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2666) 			},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2667) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2668) 				.ifnum = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2669) 				.type = QUIRK_MIDI_RAW_BYTES
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2670) 			},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2671) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2672) 				.ifnum = -1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2673) 			}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2674) 		}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2675) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2676) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2677) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2678) 	USB_DEVICE(0x1235, 0x0018),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2679) 	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2680) 		.vendor_name = "Novation",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2681) 		.product_name = "Twitch",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2682) 		.ifnum = QUIRK_ANY_INTERFACE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2683) 		.type = QUIRK_COMPOSITE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2684) 		.data = (const struct snd_usb_audio_quirk[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2685) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2686) 				.ifnum = 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2687) 				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2688) 				.data = & (const struct audioformat) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2689) 					.formats = SNDRV_PCM_FMTBIT_S24_3LE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2690) 					.channels = 4,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2691) 					.iface = 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2692) 					.altsetting = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2693) 					.altset_idx = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2694) 					.attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2695) 					.endpoint = 0x01,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2696) 					.ep_attr = USB_ENDPOINT_XFER_ISOC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2697) 					.rates = SNDRV_PCM_RATE_44100 |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2698) 						 SNDRV_PCM_RATE_48000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2699) 					.rate_min = 44100,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2700) 					.rate_max = 48000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2701) 					.nr_rates = 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2702) 					.rate_table = (unsigned int[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2703) 						44100, 48000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2704) 					}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2705) 				}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2706) 			},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2707) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2708) 				.ifnum = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2709) 				.type = QUIRK_MIDI_RAW_BYTES
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2710) 			},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2711) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2712) 				.ifnum = -1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2713) 			}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2714) 		}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2715) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2716) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2717) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2718) 	USB_DEVICE_VENDOR_SPEC(0x1235, 0x4661),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2719) 	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2720) 		.vendor_name = "Novation",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2721) 		.product_name = "ReMOTE25",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2722) 		.ifnum = 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2723) 		.type = QUIRK_MIDI_NOVATION
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2724) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2725) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2726) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2727) /* Access Music devices */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2728) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2729) 	/* VirusTI Desktop */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2730) 	USB_DEVICE_VENDOR_SPEC(0x133e, 0x0815),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2731) 	.driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2732) 		.ifnum = QUIRK_ANY_INTERFACE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2733) 		.type = QUIRK_COMPOSITE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2734) 		.data = &(const struct snd_usb_audio_quirk[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2735) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2736) 				.ifnum = 3,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2737) 				.type = QUIRK_MIDI_FIXED_ENDPOINT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2738) 				.data = &(const struct snd_usb_midi_endpoint_info) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2739) 					.out_cables = 0x0003,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2740) 					.in_cables  = 0x0003
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2741) 				}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2742) 			},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2743) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2744) 				.ifnum = 4,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2745) 				.type = QUIRK_IGNORE_INTERFACE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2746) 			},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2747) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2748) 				.ifnum = -1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2749) 			}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2750) 		}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2751) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2752) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2753) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2754) /* Lenovo ThinkStation P620 Rear Line-in, Line-out and Microphone */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2755) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2756) 	USB_DEVICE(0x17aa, 0x1046),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2757) 	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2758) 		.ifnum = QUIRK_ANY_INTERFACE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2759) 		.type = QUIRK_SETUP_DISABLE_AUTOSUSPEND
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2760) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2761) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2762) /* Lenovo ThinkStation P620 Internal Speaker + Front Headset */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2763) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2764) 	USB_DEVICE(0x17aa, 0x104d),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2765) 	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2766) 		.ifnum = QUIRK_ANY_INTERFACE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2767) 		.type = QUIRK_SETUP_DISABLE_AUTOSUSPEND
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2768) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2769) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2770) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2771) /* Native Instruments MK2 series */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2772) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2773) 	/* Komplete Audio 6 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2774) 	.match_flags = USB_DEVICE_ID_MATCH_DEVICE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2775) 	.idVendor = 0x17cc,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2776) 	.idProduct = 0x1000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2777) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2778) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2779) 	/* Traktor Audio 6 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2780) 	.match_flags = USB_DEVICE_ID_MATCH_DEVICE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2781) 	.idVendor = 0x17cc,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2782) 	.idProduct = 0x1010,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2783) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2784) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2785) 	/* Traktor Audio 10 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2786) 	.match_flags = USB_DEVICE_ID_MATCH_DEVICE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2787) 	.idVendor = 0x17cc,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2788) 	.idProduct = 0x1020,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2789) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2790) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2791) /* QinHeng devices */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2792) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2793) 	USB_DEVICE(0x1a86, 0x752d),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2794) 	.driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2795) 		.vendor_name = "QinHeng",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2796) 		.product_name = "CH345",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2797) 		.ifnum = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2798) 		.type = QUIRK_MIDI_CH345
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2799) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2800) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2801) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2802) /* KeithMcMillen Stringport */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2803) { USB_DEVICE(0x1f38, 0x0001) }, /* FIXME: should be more restrictive matching */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2804) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2805) /* Miditech devices */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2806) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2807) 	USB_DEVICE(0x4752, 0x0011),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2808) 	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2809) 		.vendor_name = "Miditech",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2810) 		.product_name = "Midistart-2",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2811) 		.ifnum = 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2812) 		.type = QUIRK_MIDI_CME
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2813) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2814) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2815) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2816) /* Central Music devices */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2817) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2818) 	/* this ID used by both Miditech MidiStudio-2 and CME UF-x */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2819) 	USB_DEVICE(0x7104, 0x2202),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2820) 	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2821) 		.ifnum = 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2822) 		.type = QUIRK_MIDI_CME
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2823) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2824) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2825) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2826) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2827)  * Auvitek au0828 devices with audio interface.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2828)  * This should be kept in sync with drivers/media/usb/au0828/au0828-cards.c
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2829)  * Please notice that some drivers are DVB only, and don't need to be
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2830)  * here. That's the case, for example, of DVICO_FUSIONHDTV7.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2831)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2832) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2833) #define AU0828_DEVICE(vid, pid, vname, pname) { \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2834) 	USB_AUDIO_DEVICE(vid, pid), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2835) 	.driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) { \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2836) 		.vendor_name = vname, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2837) 		.product_name = pname, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2838) 		.ifnum = QUIRK_ANY_INTERFACE, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2839) 		.type = QUIRK_AUDIO_ALIGN_TRANSFER, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2840) 		.shares_media_device = 1, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2841) 	} \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2842) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2843) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2844) AU0828_DEVICE(0x2040, 0x7200, "Hauppauge", "HVR-950Q"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2845) AU0828_DEVICE(0x2040, 0x7240, "Hauppauge", "HVR-850"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2846) AU0828_DEVICE(0x2040, 0x7210, "Hauppauge", "HVR-950Q"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2847) AU0828_DEVICE(0x2040, 0x7217, "Hauppauge", "HVR-950Q"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2848) AU0828_DEVICE(0x2040, 0x721b, "Hauppauge", "HVR-950Q"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2849) AU0828_DEVICE(0x2040, 0x721e, "Hauppauge", "HVR-950Q"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2850) AU0828_DEVICE(0x2040, 0x721f, "Hauppauge", "HVR-950Q"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2851) AU0828_DEVICE(0x2040, 0x7280, "Hauppauge", "HVR-950Q"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2852) AU0828_DEVICE(0x0fd9, 0x0008, "Hauppauge", "HVR-950Q"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2853) AU0828_DEVICE(0x2040, 0x7201, "Hauppauge", "HVR-950Q-MXL"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2854) AU0828_DEVICE(0x2040, 0x7211, "Hauppauge", "HVR-950Q-MXL"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2855) AU0828_DEVICE(0x2040, 0x7281, "Hauppauge", "HVR-950Q-MXL"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2856) AU0828_DEVICE(0x05e1, 0x0480, "Hauppauge", "Woodbury"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2857) AU0828_DEVICE(0x2040, 0x8200, "Hauppauge", "Woodbury"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2858) AU0828_DEVICE(0x2040, 0x7260, "Hauppauge", "HVR-950Q"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2859) AU0828_DEVICE(0x2040, 0x7213, "Hauppauge", "HVR-950Q"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2860) AU0828_DEVICE(0x2040, 0x7270, "Hauppauge", "HVR-950Q"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2861) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2862) /* Syntek STK1160 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2863) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2864) 	USB_AUDIO_DEVICE(0x05e1, 0x0408),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2865) 	.driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2866) 		.vendor_name = "Syntek",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2867) 		.product_name = "STK1160",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2868) 		.ifnum = QUIRK_ANY_INTERFACE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2869) 		.type = QUIRK_AUDIO_ALIGN_TRANSFER
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2870) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2871) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2872) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2873) /* Digidesign Mbox */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2874) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2875) 	/* Thanks to Clemens Ladisch <clemens@ladisch.de> */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2876) 	USB_DEVICE(0x0dba, 0x1000),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2877) 	.driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2878) 		.vendor_name = "Digidesign",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2879) 		.product_name = "MBox",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2880) 		.ifnum = QUIRK_ANY_INTERFACE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2881) 		.type = QUIRK_COMPOSITE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2882) 		.data = (const struct snd_usb_audio_quirk[]){
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2883) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2884) 				.ifnum = 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2885) 				.type = QUIRK_AUDIO_STANDARD_MIXER,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2886) 			},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2887) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2888) 				.ifnum = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2889) 				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2890) 				.data = &(const struct audioformat) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2891) 					.formats = SNDRV_PCM_FMTBIT_S24_3BE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2892) 					.channels = 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2893) 					.iface = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2894) 					.altsetting = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2895) 					.altset_idx = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2896) 					.attributes = 0x4,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2897) 					.endpoint = 0x02,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2898) 					.ep_attr = USB_ENDPOINT_XFER_ISOC |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2899) 						USB_ENDPOINT_SYNC_SYNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2900) 					.maxpacksize = 0x130,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2901) 					.rates = SNDRV_PCM_RATE_48000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2902) 					.rate_min = 48000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2903) 					.rate_max = 48000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2904) 					.nr_rates = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2905) 					.rate_table = (unsigned int[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2906) 						48000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2907) 					}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2908) 				}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2909) 			},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2910) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2911) 				.ifnum = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2912) 				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2913) 				.data = &(const struct audioformat) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2914) 					.formats = SNDRV_PCM_FMTBIT_S24_3BE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2915) 					.channels = 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2916) 					.iface = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2917) 					.altsetting = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2918) 					.altset_idx = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2919) 					.attributes = 0x4,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2920) 					.endpoint = 0x81,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2921) 					.ep_attr = USB_ENDPOINT_XFER_ISOC |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2922) 						USB_ENDPOINT_SYNC_ASYNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2923) 					.maxpacksize = 0x130,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2924) 					.rates = SNDRV_PCM_RATE_48000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2925) 					.rate_min = 48000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2926) 					.rate_max = 48000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2927) 					.nr_rates = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2928) 					.rate_table = (unsigned int[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2929) 						48000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2930) 					}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2931) 				}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2932) 			},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2933) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2934) 				.ifnum = -1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2935) 			}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2936) 		}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2937) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2938) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2939) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2940) /* DIGIDESIGN MBOX 2 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2941) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2942) 	USB_DEVICE(0x0dba, 0x3000),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2943) 	.driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2944) 		.vendor_name = "Digidesign",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2945) 		.product_name = "Mbox 2",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2946) 		.ifnum = QUIRK_ANY_INTERFACE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2947) 		.type = QUIRK_COMPOSITE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2948) 		.data = (const struct snd_usb_audio_quirk[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2949) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2950) 				.ifnum = 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2951) 				.type = QUIRK_IGNORE_INTERFACE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2952) 			},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2953) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2954) 				.ifnum = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2955) 				.type = QUIRK_IGNORE_INTERFACE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2956) 			},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2957) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2958) 				.ifnum = 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2959) 				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2960) 				.data = &(const struct audioformat) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2961) 					.formats = SNDRV_PCM_FMTBIT_S24_3BE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2962) 					.channels = 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2963) 					.iface = 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2964) 					.altsetting = 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2965) 					.altset_idx = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2966) 					.attributes = 0x00,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2967) 					.endpoint = 0x03,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2968) 					.ep_attr = USB_ENDPOINT_SYNC_ASYNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2969) 					.rates = SNDRV_PCM_RATE_48000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2970) 					.rate_min = 48000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2971) 					.rate_max = 48000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2972) 					.nr_rates = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2973) 					.rate_table = (unsigned int[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2974) 						48000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2975) 					}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2976) 				}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2977) 			},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2978) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2979) 				.ifnum = 3,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2980) 				.type = QUIRK_IGNORE_INTERFACE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2981) 			},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2982) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2983) 				.ifnum = 4,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2984) 				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2985) 				.data = &(const struct audioformat) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2986) 				.formats = SNDRV_PCM_FMTBIT_S24_3BE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2987) 					.channels = 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2988) 					.iface = 4,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2989) 					.altsetting = 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2990) 					.altset_idx = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2991) 					.attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2992) 					.endpoint = 0x85,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2993) 					.ep_attr = USB_ENDPOINT_SYNC_SYNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2994) 					.rates = SNDRV_PCM_RATE_48000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2995) 					.rate_min = 48000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2996) 					.rate_max = 48000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2997) 					.nr_rates = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2998) 					.rate_table = (unsigned int[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2999) 						48000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3000) 					}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3001) 				}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3002) 			},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3003) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3004) 				.ifnum = 5,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3005) 				.type = QUIRK_IGNORE_INTERFACE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3006) 			},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3007) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3008) 				.ifnum = 6,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3009) 				.type = QUIRK_MIDI_MIDIMAN,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3010) 				.data = &(const struct snd_usb_midi_endpoint_info) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3011) 					.out_ep =  0x02,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3012) 					.out_cables = 0x0001,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3013) 					.in_ep = 0x81,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3014) 					.in_interval = 0x01,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3015) 					.in_cables = 0x0001
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3016) 				}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3017) 			},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3018) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3019) 				.ifnum = -1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3020) 			}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3021) 		}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3022) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3023) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3024) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3025) 	/* Tascam US122 MKII - playback-only support */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3026) 	USB_DEVICE_VENDOR_SPEC(0x0644, 0x8021),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3027) 	.driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3028) 		.vendor_name = "TASCAM",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3029) 		.product_name = "US122 MKII",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3030) 		.ifnum = QUIRK_ANY_INTERFACE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3031) 		.type = QUIRK_COMPOSITE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3032) 		.data = (const struct snd_usb_audio_quirk[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3033) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3034) 				.ifnum = 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3035) 				.type = QUIRK_IGNORE_INTERFACE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3036) 			},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3037) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3038) 				.ifnum = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3039) 				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3040) 				.data = &(const struct audioformat) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3041) 					.formats = SNDRV_PCM_FMTBIT_S24_3LE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3042) 					.channels = 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3043) 					.iface = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3044) 					.altsetting = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3045) 					.altset_idx = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3046) 					.attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3047) 					.endpoint = 0x02,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3048) 					.ep_attr = USB_ENDPOINT_XFER_ISOC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3049) 					.rates = SNDRV_PCM_RATE_44100 |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3050) 						 SNDRV_PCM_RATE_48000 |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3051) 						 SNDRV_PCM_RATE_88200 |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3052) 						 SNDRV_PCM_RATE_96000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3053) 					.rate_min = 44100,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3054) 					.rate_max = 96000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3055) 					.nr_rates = 4,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3056) 					.rate_table = (unsigned int[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3057) 						44100, 48000, 88200, 96000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3058) 					}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3059) 				}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3060) 			},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3061) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3062) 				.ifnum = -1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3063) 			}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3064) 		}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3065) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3066) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3067) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3068) /* Microsoft XboxLive Headset/Xbox Communicator */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3069) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3070) 	USB_DEVICE(0x045e, 0x0283),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3071) 	.bInterfaceClass = USB_CLASS_PER_INTERFACE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3072) 	.driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3073) 		.vendor_name = "Microsoft",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3074) 		.product_name = "XboxLive Headset/Xbox Communicator",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3075) 		.ifnum = QUIRK_ANY_INTERFACE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3076) 		.type = QUIRK_COMPOSITE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3077) 		.data = &(const struct snd_usb_audio_quirk[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3078) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3079) 				/* playback */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3080) 				.ifnum = 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3081) 				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3082) 				.data = &(const struct audioformat) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3083) 					.formats = SNDRV_PCM_FMTBIT_S16_LE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3084) 					.channels = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3085) 					.iface = 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3086) 					.altsetting = 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3087) 					.altset_idx = 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3088) 					.attributes = 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3089) 					.endpoint = 0x04,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3090) 					.ep_attr = 0x05,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3091) 					.rates = SNDRV_PCM_RATE_CONTINUOUS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3092) 					.rate_min = 22050,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3093) 					.rate_max = 22050
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3094) 				}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3095) 			},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3096) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3097) 				/* capture */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3098) 				.ifnum = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3099) 				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3100) 				.data = &(const struct audioformat) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3101) 					.formats = SNDRV_PCM_FMTBIT_S16_LE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3102) 					.channels = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3103) 					.iface = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3104) 					.altsetting = 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3105) 					.altset_idx = 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3106) 					.attributes = 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3107) 					.endpoint = 0x85,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3108) 					.ep_attr = 0x05,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3109) 					.rates = SNDRV_PCM_RATE_CONTINUOUS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3110) 					.rate_min = 16000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3111) 					.rate_max = 16000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3112) 				}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3113) 			},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3114) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3115) 				.ifnum = -1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3116) 			}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3117) 		}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3118) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3119) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3120) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3121) /* Reloop Play */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3122) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3123) 	USB_DEVICE(0x200c, 0x100b),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3124) 	.bInterfaceClass = USB_CLASS_PER_INTERFACE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3125) 	.driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3126) 		.ifnum = QUIRK_ANY_INTERFACE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3127) 		.type = QUIRK_COMPOSITE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3128) 		.data = &(const struct snd_usb_audio_quirk[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3129) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3130) 				.ifnum = 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3131) 				.type = QUIRK_AUDIO_STANDARD_MIXER,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3132) 			},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3133) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3134) 				.ifnum = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3135) 				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3136) 				.data = &(const struct audioformat) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3137) 					.formats = SNDRV_PCM_FMTBIT_S24_3LE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3138) 					.channels = 4,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3139) 					.iface = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3140) 					.altsetting = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3141) 					.altset_idx = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3142) 					.attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3143) 					.endpoint = 0x01,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3144) 					.ep_attr = USB_ENDPOINT_SYNC_ADAPTIVE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3145) 					.rates = SNDRV_PCM_RATE_44100 |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3146) 						 SNDRV_PCM_RATE_48000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3147) 					.rate_min = 44100,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3148) 					.rate_max = 48000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3149) 					.nr_rates = 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3150) 					.rate_table = (unsigned int[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3151) 						44100, 48000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3152) 					}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3153) 				}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3154) 			},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3155) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3156) 				.ifnum = -1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3157) 			}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3158) 		}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3159) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3160) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3161) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3162) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3163) 	/*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3164) 	 * ZOOM R16/24 in audio interface mode.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3165) 	 * Playback requires an extra four byte LE length indicator
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3166) 	 * at the start of each isochronous packet. This quirk is
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3167) 	 * enabled in create_standard_audio_quirk().
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3168) 	 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3169) 	USB_DEVICE(0x1686, 0x00dd),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3170) 	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3171) 		.ifnum = QUIRK_ANY_INTERFACE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3172) 		.type = QUIRK_COMPOSITE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3173) 		.data = (const struct snd_usb_audio_quirk[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3174) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3175) 				/* Playback  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3176) 				.ifnum = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3177) 				.type = QUIRK_AUDIO_STANDARD_INTERFACE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3178) 			},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3179) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3180) 				/* Capture */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3181) 				.ifnum = 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3182) 				.type = QUIRK_AUDIO_STANDARD_INTERFACE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3183) 			},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3184) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3185) 				/* Midi */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3186) 				.ifnum = 3,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3187) 				.type = QUIRK_MIDI_STANDARD_INTERFACE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3188) 			},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3189) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3190) 				.ifnum = -1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3191) 			},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3192) 		}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3193) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3194) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3195) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3196) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3197) 	/*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3198) 	 * Some USB MIDI devices don't have an audio control interface,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3199) 	 * so we have to grab MIDI streaming interfaces here.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3200) 	 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3201) 	.match_flags = USB_DEVICE_ID_MATCH_INT_CLASS |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3202) 		       USB_DEVICE_ID_MATCH_INT_SUBCLASS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3203) 	.bInterfaceClass = USB_CLASS_AUDIO,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3204) 	.bInterfaceSubClass = USB_SUBCLASS_MIDISTREAMING,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3205) 	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3206) 		.ifnum = QUIRK_ANY_INTERFACE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3207) 		.type = QUIRK_MIDI_STANDARD_INTERFACE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3208) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3209) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3210) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3211) /* disabled due to regression for other devices;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3212)  * see https://bugzilla.kernel.org/show_bug.cgi?id=199905
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3213)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3214) #if 0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3215) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3216) 	/*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3217) 	 * Nura's first gen headphones use Cambridge Silicon Radio's vendor
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3218) 	 * ID, but it looks like the product ID actually is only for Nura.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3219) 	 * The capture interface does not work at all (even on Windows),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3220) 	 * and only the 48 kHz sample rate works for the playback interface.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3221) 	 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3222) 	USB_DEVICE(0x0a12, 0x1243),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3223) 	.driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3224) 		.ifnum = QUIRK_ANY_INTERFACE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3225) 		.type = QUIRK_COMPOSITE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3226) 		.data = (const struct snd_usb_audio_quirk[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3227) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3228) 				.ifnum = 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3229) 				.type = QUIRK_AUDIO_STANDARD_MIXER,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3230) 			},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3231) 			/* Capture */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3232) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3233) 				.ifnum = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3234) 				.type = QUIRK_IGNORE_INTERFACE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3235) 			},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3236) 			/* Playback */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3237) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3238) 				.ifnum = 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3239) 				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3240) 				.data = &(const struct audioformat) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3241) 					.formats = SNDRV_PCM_FMTBIT_S16_LE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3242) 					.channels = 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3243) 					.iface = 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3244) 					.altsetting = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3245) 					.altset_idx = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3246) 					.attributes = UAC_EP_CS_ATTR_FILL_MAX |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3247) 						UAC_EP_CS_ATTR_SAMPLE_RATE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3248) 					.endpoint = 0x03,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3249) 					.ep_attr = USB_ENDPOINT_XFER_ISOC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3250) 					.rates = SNDRV_PCM_RATE_48000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3251) 					.rate_min = 48000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3252) 					.rate_max = 48000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3253) 					.nr_rates = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3254) 					.rate_table = (unsigned int[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3255) 						48000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3256) 					}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3257) 				}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3258) 			},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3259) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3260) 				.ifnum = -1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3261) 			},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3262) 		}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3263) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3264) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3265) #endif /* disabled */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3266) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3267) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3268) 	/*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3269) 	 * Bower's & Wilkins PX headphones only support the 48 kHz sample rate
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3270) 	 * even though it advertises more. The capture interface doesn't work
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3271) 	 * even on windows.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3272) 	 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3273) 	USB_DEVICE(0x19b5, 0x0021),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3274) 	.driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3275) 		.ifnum = QUIRK_ANY_INTERFACE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3276) 		.type = QUIRK_COMPOSITE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3277) 		.data = (const struct snd_usb_audio_quirk[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3278) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3279) 				.ifnum = 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3280) 				.type = QUIRK_AUDIO_STANDARD_MIXER,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3281) 			},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3282) 			/* Playback */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3283) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3284) 				.ifnum = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3285) 				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3286) 				.data = &(const struct audioformat) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3287) 					.formats = SNDRV_PCM_FMTBIT_S16_LE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3288) 					.channels = 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3289) 					.iface = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3290) 					.altsetting = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3291) 					.altset_idx = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3292) 					.attributes = UAC_EP_CS_ATTR_FILL_MAX |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3293) 						UAC_EP_CS_ATTR_SAMPLE_RATE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3294) 					.endpoint = 0x03,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3295) 					.ep_attr = USB_ENDPOINT_XFER_ISOC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3296) 					.rates = SNDRV_PCM_RATE_48000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3297) 					.rate_min = 48000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3298) 					.rate_max = 48000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3299) 					.nr_rates = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3300) 					.rate_table = (unsigned int[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3301) 						48000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3302) 					}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3303) 				}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3304) 			},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3305) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3306) 				.ifnum = -1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3307) 			},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3308) 		}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3309) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3310) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3311) /* Dell WD19 Dock */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3312) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3313) 	USB_DEVICE(0x0bda, 0x402e),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3314) 	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3315) 		.ifnum = QUIRK_ANY_INTERFACE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3316) 		.type = QUIRK_SETUP_FMT_AFTER_RESUME
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3317) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3318) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3319) /* MOTU Microbook II */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3320) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3321) 	USB_DEVICE_VENDOR_SPEC(0x07fd, 0x0004),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3322) 	.driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3323) 		.vendor_name = "MOTU",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3324) 		.product_name = "MicroBookII",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3325) 		.ifnum = QUIRK_ANY_INTERFACE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3326) 		.type = QUIRK_COMPOSITE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3327) 		.data = (const struct snd_usb_audio_quirk[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3328) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3329) 				.ifnum = 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3330) 				.type = QUIRK_AUDIO_STANDARD_MIXER,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3331) 			},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3332) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3333) 				.ifnum = 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3334) 				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3335) 				.data = &(const struct audioformat) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3336) 					.formats = SNDRV_PCM_FMTBIT_S24_3BE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3337) 					.channels = 6,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3338) 					.iface = 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3339) 					.altsetting = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3340) 					.altset_idx = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3341) 					.attributes = 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3342) 					.endpoint = 0x84,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3343) 					.rates = SNDRV_PCM_RATE_96000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3344) 					.ep_attr = USB_ENDPOINT_XFER_ISOC |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3345) 						   USB_ENDPOINT_SYNC_ASYNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3346) 					.rate_min = 96000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3347) 					.rate_max = 96000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3348) 					.nr_rates = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3349) 					.maxpacksize = 0x00d8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3350) 					.rate_table = (unsigned int[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3351) 						96000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3352) 					}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3353) 				}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3354) 			},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3355) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3356) 				.ifnum = 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3357) 				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3358) 				.data = &(const struct audioformat) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3359) 					.formats = SNDRV_PCM_FMTBIT_S24_3BE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3360) 					.channels = 8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3361) 					.iface = 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3362) 					.altsetting = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3363) 					.altset_idx = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3364) 					.attributes = 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3365) 					.endpoint = 0x03,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3366) 					.rates = SNDRV_PCM_RATE_96000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3367) 					.ep_attr = USB_ENDPOINT_XFER_ISOC |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3368) 						   USB_ENDPOINT_SYNC_ASYNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3369) 					.rate_min = 96000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3370) 					.rate_max = 96000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3371) 					.nr_rates = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3372) 					.maxpacksize = 0x0120,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3373) 					.rate_table = (unsigned int[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3374) 						96000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3375) 					}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3376) 				}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3377) 			},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3378) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3379) 				.ifnum = -1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3380) 			}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3381) 		}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3382) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3383) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3384) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3385) 	/*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3386) 	 * PIONEER DJ DDJ-SX3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3387) 	 * PCM is 12 channels out, 10 channels in @ 44.1 fixed
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3388) 	 * interface 0, vendor class alt setting 1 for endpoints 5 and 0x86
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3389) 	 * The feedback for the output is the input.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3390) 	 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3391) 	USB_DEVICE_VENDOR_SPEC(0x2b73, 0x0023),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3392) 	.driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3393) 		.ifnum = QUIRK_ANY_INTERFACE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3394) 		.type = QUIRK_COMPOSITE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3395) 		.data = (const struct snd_usb_audio_quirk[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3396) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3397) 				.ifnum = 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3398) 				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3399) 				.data = &(const struct audioformat) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3400) 					.formats = SNDRV_PCM_FMTBIT_S32_LE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3401) 					.channels = 12,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3402) 					.iface = 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3403) 					.altsetting = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3404) 					.altset_idx = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3405) 					.endpoint = 0x05,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3406) 					.ep_attr = USB_ENDPOINT_XFER_ISOC|
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3407) 						   USB_ENDPOINT_SYNC_ASYNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3408) 					.rates = SNDRV_PCM_RATE_44100,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3409) 					.rate_min = 44100,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3410) 					.rate_max = 44100,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3411) 					.nr_rates = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3412) 					.rate_table = (unsigned int[]) { 44100 }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3413) 				}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3414) 			},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3415) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3416) 				.ifnum = 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3417) 				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3418) 				.data = &(const struct audioformat) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3419) 					.formats = SNDRV_PCM_FMTBIT_S32_LE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3420) 					.channels = 10,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3421) 					.iface = 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3422) 					.altsetting = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3423) 					.altset_idx = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3424) 					.endpoint = 0x86,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3425) 					.ep_attr = USB_ENDPOINT_XFER_ISOC|
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3426) 						 USB_ENDPOINT_SYNC_ASYNC|
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3427) 						 USB_ENDPOINT_USAGE_IMPLICIT_FB,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3428) 					.rates = SNDRV_PCM_RATE_44100,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3429) 					.rate_min = 44100,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3430) 					.rate_max = 44100,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3431) 					.nr_rates = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3432) 					.rate_table = (unsigned int[]) { 44100 }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3433) 				}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3434) 			},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3435) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3436) 				.ifnum = -1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3437) 			}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3438) 		}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3439) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3440) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3441) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3442) 	/*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3443) 	 * Pioneer DJ DJM-250MK2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3444) 	 * PCM is 8 channels out @ 48 fixed (endpoint 0x01)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3445) 	 * and 8 channels in @ 48 fixed (endpoint 0x82).
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3446) 	 *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3447) 	 * Both playback and recording is working, even simultaneously.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3448) 	 *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3449) 	 * Playback channels could be mapped to:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3450) 	 *  - CH1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3451) 	 *  - CH2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3452) 	 *  - AUX
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3453) 	 *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3454) 	 * Recording channels could be mapped to:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3455) 	 *  - Post CH1 Fader
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3456) 	 *  - Post CH2 Fader
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3457) 	 *  - Cross Fader A
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3458) 	 *  - Cross Fader B
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3459) 	 *  - MIC
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3460) 	 *  - AUX
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3461) 	 *  - REC OUT
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3462) 	 *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3463) 	 * There is remaining problem with recording directly from PHONO/LINE.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3464) 	 * If we map a channel to:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3465) 	 *  - CH1 Control Tone PHONO
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3466) 	 *  - CH1 Control Tone LINE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3467) 	 *  - CH2 Control Tone PHONO
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3468) 	 *  - CH2 Control Tone LINE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3469) 	 * it is silent.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3470) 	 * There is no signal even on other operating systems with official drivers.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3471) 	 * The signal appears only when a supported application is started.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3472) 	 * This needs to be investigated yet...
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3473) 	 * (there is quite a lot communication on the USB in both directions)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3474) 	 *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3475) 	 * In current version this mixer could be used for playback
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3476) 	 * and for recording from vinyls (through Post CH* Fader)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3477) 	 * but not for DVS (Digital Vinyl Systems) like in Mixxx.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3478) 	 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3479) 	USB_DEVICE_VENDOR_SPEC(0x2b73, 0x0017),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3480) 	.driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3481) 		.ifnum = QUIRK_ANY_INTERFACE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3482) 		.type = QUIRK_COMPOSITE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3483) 		.data = (const struct snd_usb_audio_quirk[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3484) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3485) 				.ifnum = 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3486) 				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3487) 				.data = &(const struct audioformat) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3488) 					.formats = SNDRV_PCM_FMTBIT_S24_3LE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3489) 					.channels = 8, // outputs
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3490) 					.iface = 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3491) 					.altsetting = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3492) 					.altset_idx = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3493) 					.endpoint = 0x01,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3494) 					.ep_attr = USB_ENDPOINT_XFER_ISOC|
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3495) 						USB_ENDPOINT_SYNC_ASYNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3496) 					.rates = SNDRV_PCM_RATE_48000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3497) 					.rate_min = 48000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3498) 					.rate_max = 48000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3499) 					.nr_rates = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3500) 					.rate_table = (unsigned int[]) { 48000 }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3501) 					}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3502) 			},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3503) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3504) 				.ifnum = 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3505) 				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3506) 				.data = &(const struct audioformat) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3507) 					.formats = SNDRV_PCM_FMTBIT_S24_3LE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3508) 					.channels = 8, // inputs
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3509) 					.iface = 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3510) 					.altsetting = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3511) 					.altset_idx = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3512) 					.endpoint = 0x82,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3513) 					.ep_attr = USB_ENDPOINT_XFER_ISOC|
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3514) 						USB_ENDPOINT_SYNC_ASYNC|
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3515) 						USB_ENDPOINT_USAGE_IMPLICIT_FB,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3516) 					.rates = SNDRV_PCM_RATE_48000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3517) 					.rate_min = 48000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3518) 					.rate_max = 48000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3519) 					.nr_rates = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3520) 					.rate_table = (unsigned int[]) { 48000 }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3521) 				}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3522) 			},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3523) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3524) 				.ifnum = -1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3525) 			}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3526) 		}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3527) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3528) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3529) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3530) 	/*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3531) 	 * PIONEER DJ DDJ-RB
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3532) 	 * PCM is 4 channels out, 2 dummy channels in @ 44.1 fixed
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3533) 	 * The feedback for the output is the dummy input.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3534) 	 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3535) 	USB_DEVICE_VENDOR_SPEC(0x2b73, 0x000e),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3536) 	.driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3537) 		.ifnum = QUIRK_ANY_INTERFACE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3538) 		.type = QUIRK_COMPOSITE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3539) 		.data = (const struct snd_usb_audio_quirk[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3540) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3541) 				.ifnum = 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3542) 				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3543) 				.data = &(const struct audioformat) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3544) 					.formats = SNDRV_PCM_FMTBIT_S24_3LE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3545) 					.channels = 4,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3546) 					.iface = 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3547) 					.altsetting = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3548) 					.altset_idx = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3549) 					.endpoint = 0x01,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3550) 					.ep_attr = USB_ENDPOINT_XFER_ISOC|
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3551) 						   USB_ENDPOINT_SYNC_ASYNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3552) 					.rates = SNDRV_PCM_RATE_44100,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3553) 					.rate_min = 44100,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3554) 					.rate_max = 44100,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3555) 					.nr_rates = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3556) 					.rate_table = (unsigned int[]) { 44100 }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3557) 				}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3558) 			},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3559) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3560) 				.ifnum = 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3561) 				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3562) 				.data = &(const struct audioformat) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3563) 					.formats = SNDRV_PCM_FMTBIT_S24_3LE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3564) 					.channels = 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3565) 					.iface = 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3566) 					.altsetting = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3567) 					.altset_idx = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3568) 					.endpoint = 0x82,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3569) 					.ep_attr = USB_ENDPOINT_XFER_ISOC|
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3570) 						 USB_ENDPOINT_SYNC_ASYNC|
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3571) 						 USB_ENDPOINT_USAGE_IMPLICIT_FB,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3572) 					.rates = SNDRV_PCM_RATE_44100,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3573) 					.rate_min = 44100,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3574) 					.rate_max = 44100,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3575) 					.nr_rates = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3576) 					.rate_table = (unsigned int[]) { 44100 }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3577) 				}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3578) 			},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3579) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3580) 				.ifnum = -1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3581) 			}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3582) 		}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3583) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3584) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3585) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3586) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3587) 	/*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3588) 	 * Pioneer DJ DJM-900NXS2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3589) 	 * 10 channels playback & 12 channels capture @ 44.1/48/96kHz S24LE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3590) 	 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3591) 	USB_DEVICE_VENDOR_SPEC(0x2b73, 0x000a),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3592) 	.driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3593) 		.ifnum = QUIRK_ANY_INTERFACE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3594) 		.type = QUIRK_COMPOSITE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3595) 		.data = (const struct snd_usb_audio_quirk[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3596) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3597) 				.ifnum = 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3598) 				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3599) 				.data = &(const struct audioformat) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3600) 					.formats = SNDRV_PCM_FMTBIT_S24_3LE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3601) 					.channels = 10,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3602) 					.iface = 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3603) 					.altsetting = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3604) 					.altset_idx = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3605) 					.endpoint = 0x01,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3606) 					.ep_attr = USB_ENDPOINT_XFER_ISOC|
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3607) 					    USB_ENDPOINT_SYNC_ASYNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3608) 					.rates = SNDRV_PCM_RATE_44100|
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3609) 					    SNDRV_PCM_RATE_48000|
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3610) 					    SNDRV_PCM_RATE_96000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3611) 					.rate_min = 44100,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3612) 					.rate_max = 96000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3613) 					.nr_rates = 3,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3614) 					.rate_table = (unsigned int[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3615) 						44100, 48000, 96000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3616) 					}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3617) 				}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3618) 			},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3619) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3620) 				.ifnum = 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3621) 				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3622) 				.data = &(const struct audioformat) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3623) 					.formats = SNDRV_PCM_FMTBIT_S24_3LE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3624) 					.channels = 12,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3625) 					.iface = 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3626) 					.altsetting = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3627) 					.altset_idx = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3628) 					.endpoint = 0x82,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3629) 					.ep_attr = USB_ENDPOINT_XFER_ISOC|
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3630) 					    USB_ENDPOINT_SYNC_ASYNC|
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3631) 					    USB_ENDPOINT_USAGE_IMPLICIT_FB,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3632) 					.rates = SNDRV_PCM_RATE_44100|
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3633) 					    SNDRV_PCM_RATE_48000|
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3634) 					    SNDRV_PCM_RATE_96000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3635) 					.rate_min = 44100,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3636) 					.rate_max = 96000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3637) 					.nr_rates = 3,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3638) 					.rate_table = (unsigned int[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3639) 						44100, 48000, 96000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3640) 					}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3641) 				}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3642) 			},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3643) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3644) 				.ifnum = -1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3645) 			}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3646) 		}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3647) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3648) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3649) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3650) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3651)  * MacroSilicon MS2109 based HDMI capture cards
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3652)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3653)  * These claim 96kHz 1ch in the descriptors, but are actually 48kHz 2ch.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3654)  * They also need QUIRK_AUDIO_ALIGN_TRANSFER, which makes one wonder if
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3655)  * they pretend to be 96kHz mono as a workaround for stereo being broken
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3656)  * by that...
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3657)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3658)  * They also have an issue with initial stream alignment that causes the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3659)  * channels to be swapped and out of phase, which is dealt with in quirks.c.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3660)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3661) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3662) 	USB_AUDIO_DEVICE(0x534d, 0x2109),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3663) 	.driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3664) 		.vendor_name = "MacroSilicon",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3665) 		.product_name = "MS2109",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3666) 		.ifnum = QUIRK_ANY_INTERFACE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3667) 		.type = QUIRK_COMPOSITE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3668) 		.data = &(const struct snd_usb_audio_quirk[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3669) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3670) 				.ifnum = 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3671) 				.type = QUIRK_AUDIO_ALIGN_TRANSFER,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3672) 			},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3673) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3674) 				.ifnum = 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3675) 				.type = QUIRK_AUDIO_STANDARD_MIXER,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3676) 			},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3677) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3678) 				.ifnum = 3,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3679) 				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3680) 				.data = &(const struct audioformat) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3681) 					.formats = SNDRV_PCM_FMTBIT_S16_LE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3682) 					.channels = 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3683) 					.iface = 3,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3684) 					.altsetting = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3685) 					.altset_idx = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3686) 					.attributes = 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3687) 					.endpoint = 0x82,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3688) 					.ep_attr = USB_ENDPOINT_XFER_ISOC |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3689) 						USB_ENDPOINT_SYNC_ASYNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3690) 					.rates = SNDRV_PCM_RATE_CONTINUOUS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3691) 					.rate_min = 48000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3692) 					.rate_max = 48000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3693) 				}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3694) 			},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3695) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3696) 				.ifnum = -1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3697) 			}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3698) 		}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3699) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3700) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3701) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3702) 	/*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3703) 	 * Sennheiser GSP670
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3704) 	 * Change order of interfaces loaded
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3705) 	 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3706) 	USB_DEVICE(0x1395, 0x0300),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3707) 	.bInterfaceClass = USB_CLASS_PER_INTERFACE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3708) 	.driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3709) 		.ifnum = QUIRK_ANY_INTERFACE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3710) 		.type = QUIRK_COMPOSITE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3711) 		.data = &(const struct snd_usb_audio_quirk[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3712) 			// Communication
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3713) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3714) 				.ifnum = 3,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3715) 				.type = QUIRK_AUDIO_STANDARD_INTERFACE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3716) 			},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3717) 			// Recording
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3718) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3719) 				.ifnum = 4,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3720) 				.type = QUIRK_AUDIO_STANDARD_INTERFACE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3721) 			},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3722) 			// Main
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3723) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3724) 				.ifnum = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3725) 				.type = QUIRK_AUDIO_STANDARD_INTERFACE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3726) 			},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3727) 			{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3728) 				.ifnum = -1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3729) 			}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3730) 		}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3731) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3732) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3733) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3734) #undef USB_DEVICE_VENDOR_SPEC
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3735) #undef USB_AUDIO_DEVICE