xref: /openbmc/linux/sound/usb/quirks-table.h (revision ecc23d0a422a3118fcf6e4f0a46e17a6c2047b02)
11a59d1b8SThomas Gleixner /* SPDX-License-Identifier: GPL-2.0-or-later */
2e5779998SDaniel Mack /*
3e5779998SDaniel Mack  * ALSA USB Audio Driver
4e5779998SDaniel Mack  *
5e5779998SDaniel Mack  * Copyright (c) 2002 by Takashi Iwai <tiwai@suse.de>,
6e5779998SDaniel Mack  *                       Clemens Ladisch <clemens@ladisch.de>
7e5779998SDaniel Mack  */
8e5779998SDaniel Mack 
9e5779998SDaniel Mack /*
10e5779998SDaniel Mack  * The contents of this file are part of the driver's id_table.
11e5779998SDaniel Mack  *
12e5779998SDaniel Mack  * In a perfect world, this file would be empty.
13e5779998SDaniel Mack  */
14e5779998SDaniel Mack 
15e5779998SDaniel Mack /*
16e5779998SDaniel Mack  * Use this for devices where other interfaces are standard compliant,
17e5779998SDaniel Mack  * to prevent the quirk being applied to those interfaces. (To work with
18e5779998SDaniel Mack  * hotplugging, bDeviceClass must be set to USB_CLASS_PER_INTERFACE.)
19e5779998SDaniel Mack  */
20e5779998SDaniel Mack #define USB_DEVICE_VENDOR_SPEC(vend, prod) \
21e5779998SDaniel Mack 	.match_flags = USB_DEVICE_ID_MATCH_VENDOR | \
22e5779998SDaniel Mack 		       USB_DEVICE_ID_MATCH_PRODUCT | \
23e5779998SDaniel Mack 		       USB_DEVICE_ID_MATCH_INT_CLASS, \
24e5779998SDaniel Mack 	.idVendor = vend, \
25e5779998SDaniel Mack 	.idProduct = prod, \
26e5779998SDaniel Mack 	.bInterfaceClass = USB_CLASS_VENDOR_SPEC
27e5779998SDaniel Mack 
28fa10635fSTakashi Iwai /* A standard entry matching with vid/pid and the audio class/subclass */
29fa10635fSTakashi Iwai #define USB_AUDIO_DEVICE(vend, prod) \
30fa10635fSTakashi Iwai 	.match_flags = USB_DEVICE_ID_MATCH_DEVICE | \
31fa10635fSTakashi Iwai 		       USB_DEVICE_ID_MATCH_INT_CLASS | \
32fa10635fSTakashi Iwai 		       USB_DEVICE_ID_MATCH_INT_SUBCLASS, \
33fa10635fSTakashi Iwai 	.idVendor = vend, \
34fa10635fSTakashi Iwai 	.idProduct = prod, \
35fa10635fSTakashi Iwai 	.bInterfaceClass = USB_CLASS_AUDIO, \
36fa10635fSTakashi Iwai 	.bInterfaceSubClass = USB_SUBCLASS_AUDIOCONTROL
37fa10635fSTakashi Iwai 
380bf9779cSTakashi Iwai /* Quirk .driver_info, followed by the definition of the quirk entry;
390bf9779cSTakashi Iwai  * put like QUIRK_DRIVER_INFO { ... } in each entry of the quirk table
400bf9779cSTakashi Iwai  */
410bf9779cSTakashi Iwai #define QUIRK_DRIVER_INFO \
420bf9779cSTakashi Iwai 	.driver_info = (unsigned long)&(const struct snd_usb_audio_quirk)
430bf9779cSTakashi Iwai 
440bf9779cSTakashi Iwai /*
450bf9779cSTakashi Iwai  * Macros for quirk data entries
460bf9779cSTakashi Iwai  */
470bf9779cSTakashi Iwai 
480bf9779cSTakashi Iwai /* Quirk data entry for ignoring the interface */
490bf9779cSTakashi Iwai #define QUIRK_DATA_IGNORE(_ifno) \
500bf9779cSTakashi Iwai 	.ifnum = (_ifno), .type = QUIRK_IGNORE_INTERFACE
510bf9779cSTakashi Iwai /* Quirk data entry for a standard audio interface */
520bf9779cSTakashi Iwai #define QUIRK_DATA_STANDARD_AUDIO(_ifno) \
530bf9779cSTakashi Iwai 	.ifnum = (_ifno), .type = QUIRK_AUDIO_STANDARD_INTERFACE
540bf9779cSTakashi Iwai /* Quirk data entry for a standard MIDI interface */
550bf9779cSTakashi Iwai #define QUIRK_DATA_STANDARD_MIDI(_ifno) \
560bf9779cSTakashi Iwai 	.ifnum = (_ifno), .type = QUIRK_MIDI_STANDARD_INTERFACE
570bf9779cSTakashi Iwai /* Quirk data entry for a standard mixer interface */
580bf9779cSTakashi Iwai #define QUIRK_DATA_STANDARD_MIXER(_ifno) \
590bf9779cSTakashi Iwai 	.ifnum = (_ifno), .type = QUIRK_AUDIO_STANDARD_MIXER
600bf9779cSTakashi Iwai 
610bf9779cSTakashi Iwai /* Quirk data entry for Yamaha MIDI */
620bf9779cSTakashi Iwai #define QUIRK_DATA_MIDI_YAMAHA(_ifno) \
630bf9779cSTakashi Iwai 	.ifnum = (_ifno), .type = QUIRK_MIDI_YAMAHA
640bf9779cSTakashi Iwai /* Quirk data entry for Edirol UAxx */
650bf9779cSTakashi Iwai #define QUIRK_DATA_EDIROL_UAXX(_ifno) \
660bf9779cSTakashi Iwai 	.ifnum = (_ifno), .type = QUIRK_AUDIO_EDIROL_UAXX
670bf9779cSTakashi Iwai /* Quirk data entry for raw bytes interface */
680bf9779cSTakashi Iwai #define QUIRK_DATA_RAW_BYTES(_ifno) \
690bf9779cSTakashi Iwai 	.ifnum = (_ifno), .type = QUIRK_MIDI_RAW_BYTES
700bf9779cSTakashi Iwai 
710bf9779cSTakashi Iwai /* Quirk composite array terminator */
720bf9779cSTakashi Iwai #define QUIRK_COMPOSITE_END	{ .ifnum = -1 }
730bf9779cSTakashi Iwai 
740bf9779cSTakashi Iwai /* Quirk data entry for composite quirks;
750bf9779cSTakashi Iwai  * followed by the quirk array that is terminated with QUIRK_COMPOSITE_END
760bf9779cSTakashi Iwai  * e.g. QUIRK_DATA_COMPOSITE { { quirk1 }, { quirk2 },..., QUIRK_COMPOSITE_END }
770bf9779cSTakashi Iwai  */
780bf9779cSTakashi Iwai #define QUIRK_DATA_COMPOSITE \
790bf9779cSTakashi Iwai 	.ifnum = QUIRK_ANY_INTERFACE, \
800bf9779cSTakashi Iwai 	.type = QUIRK_COMPOSITE, \
810bf9779cSTakashi Iwai 	.data = &(const struct snd_usb_audio_quirk[])
820bf9779cSTakashi Iwai 
830bf9779cSTakashi Iwai /* Quirk data entry for a fixed audio endpoint;
840bf9779cSTakashi Iwai  * followed by audioformat definition
850bf9779cSTakashi Iwai  * e.g. QUIRK_DATA_AUDIOFORMAT(n) { .formats = xxx, ... }
860bf9779cSTakashi Iwai  */
870bf9779cSTakashi Iwai #define QUIRK_DATA_AUDIOFORMAT(_ifno)	    \
880bf9779cSTakashi Iwai 	.ifnum = (_ifno),		    \
890bf9779cSTakashi Iwai 	.type = QUIRK_AUDIO_FIXED_ENDPOINT, \
900bf9779cSTakashi Iwai 	.data = &(const struct audioformat)
910bf9779cSTakashi Iwai 
920bf9779cSTakashi Iwai /* Quirk data entry for a fixed MIDI endpoint;
930bf9779cSTakashi Iwai  * followed by snd_usb_midi_endpoint_info definition
940bf9779cSTakashi Iwai  * e.g. QUIRK_DATA_MIDI_FIXED_ENDPOINT(n) { .out_cables = x, .in_cables = y }
950bf9779cSTakashi Iwai  */
960bf9779cSTakashi Iwai #define QUIRK_DATA_MIDI_FIXED_ENDPOINT(_ifno) \
970bf9779cSTakashi Iwai 	.ifnum = (_ifno),		      \
980bf9779cSTakashi Iwai 	.type = QUIRK_MIDI_FIXED_ENDPOINT,    \
990bf9779cSTakashi Iwai 	.data = &(const struct snd_usb_midi_endpoint_info)
1000bf9779cSTakashi Iwai /* Quirk data entry for a MIDIMAN MIDI endpoint */
1010bf9779cSTakashi Iwai #define QUIRK_DATA_MIDI_MIDIMAN(_ifno) \
1020bf9779cSTakashi Iwai 	.ifnum = (_ifno),	       \
1030bf9779cSTakashi Iwai 	.type = QUIRK_MIDI_MIDIMAN,    \
1040bf9779cSTakashi Iwai 	.data = &(const struct snd_usb_midi_endpoint_info)
1050bf9779cSTakashi Iwai /* Quirk data entry for a EMAGIC MIDI endpoint */
1060bf9779cSTakashi Iwai #define QUIRK_DATA_MIDI_EMAGIC(_ifno) \
1070bf9779cSTakashi Iwai 	.ifnum = (_ifno),	      \
1080bf9779cSTakashi Iwai 	.type = QUIRK_MIDI_EMAGIC,    \
1090bf9779cSTakashi Iwai 	.data = &(const struct snd_usb_midi_endpoint_info)
1100bf9779cSTakashi Iwai 
1110bf9779cSTakashi Iwai /*
1120bf9779cSTakashi Iwai  * Here we go... the quirk table definition begins:
1130bf9779cSTakashi Iwai  */
1140bf9779cSTakashi Iwai 
1151ef0e0a0SKristian Amlie /* FTDI devices */
1161ef0e0a0SKristian Amlie {
1171ef0e0a0SKristian Amlie 	USB_DEVICE(0x0403, 0xb8d8),
118fb2ed616STakashi Iwai 	QUIRK_DRIVER_INFO {
1191ef0e0a0SKristian Amlie 		/* .vendor_name = "STARR LABS", */
1201ef0e0a0SKristian Amlie 		/* .product_name = "Starr Labs MIDI USB device", */
1211ef0e0a0SKristian Amlie 		.ifnum = 0,
1221ef0e0a0SKristian Amlie 		.type = QUIRK_MIDI_FTDI
1231ef0e0a0SKristian Amlie 	}
1241ef0e0a0SKristian Amlie },
1251ef0e0a0SKristian Amlie 
1268f7f3ab1SAlexander Schremmer {
1278f7f3ab1SAlexander Schremmer 	/* Creative BT-D1 */
1288f7f3ab1SAlexander Schremmer 	USB_DEVICE(0x041e, 0x0005),
129fb2ed616STakashi Iwai 	QUIRK_DRIVER_INFO {
130fb2ed616STakashi Iwai 		QUIRK_DATA_AUDIOFORMAT(1) {
1318f7f3ab1SAlexander Schremmer 			.formats = SNDRV_PCM_FMTBIT_S16_LE,
1328f7f3ab1SAlexander Schremmer 			.channels = 2,
1338f7f3ab1SAlexander Schremmer 			.iface = 1,
1348f7f3ab1SAlexander Schremmer 			.altsetting = 1,
1358f7f3ab1SAlexander Schremmer 			.altset_idx = 1,
1368f7f3ab1SAlexander Schremmer 			.endpoint = 0x03,
1378f7f3ab1SAlexander Schremmer 			.ep_attr = USB_ENDPOINT_XFER_ISOC,
1388f7f3ab1SAlexander Schremmer 			.attributes = 0,
1398f7f3ab1SAlexander Schremmer 			.rates = SNDRV_PCM_RATE_CONTINUOUS,
1408f7f3ab1SAlexander Schremmer 			.rate_min = 48000,
1418f7f3ab1SAlexander Schremmer 			.rate_max = 48000,
1428f7f3ab1SAlexander Schremmer 		}
1438f7f3ab1SAlexander Schremmer 	}
1448f7f3ab1SAlexander Schremmer },
1458f7f3ab1SAlexander Schremmer 
146e5779998SDaniel Mack /* E-Mu 0202 USB */
14714b51ccdSTakashi Iwai { USB_DEVICE_VENDOR_SPEC(0x041e, 0x3f02) },
148e5779998SDaniel Mack /* E-Mu 0404 USB */
14914b51ccdSTakashi Iwai { USB_DEVICE_VENDOR_SPEC(0x041e, 0x3f04) },
150e5779998SDaniel Mack /* E-Mu Tracker Pre */
15114b51ccdSTakashi Iwai { USB_DEVICE_VENDOR_SPEC(0x041e, 0x3f0a) },
1521cdfa9f3SJoseph Teichman /* E-Mu 0204 USB */
15314b51ccdSTakashi Iwai { USB_DEVICE_VENDOR_SPEC(0x041e, 0x3f19) },
154696b66acSwangdicheng /* Ktmicro Usb_audio device */
155696b66acSwangdicheng { USB_DEVICE_VENDOR_SPEC(0x31b2, 0x0011) },
156e5779998SDaniel Mack 
157e5779998SDaniel Mack /*
15848827e1dSJonas Hahnfeld  * Creative Technology, Ltd Live! Cam Sync HD [VF0770]
15948827e1dSJonas Hahnfeld  * The device advertises 8 formats, but only a rate of 48kHz is honored by the
16048827e1dSJonas Hahnfeld  * hardware and 24 bits give chopped audio, so only report the one working
16148827e1dSJonas Hahnfeld  * combination.
16248827e1dSJonas Hahnfeld  */
16348827e1dSJonas Hahnfeld {
1644ee02e20SJonas Hahnfeld 	USB_AUDIO_DEVICE(0x041e, 0x4095),
165fb2ed616STakashi Iwai 	QUIRK_DRIVER_INFO {
166fb2ed616STakashi Iwai 		QUIRK_DATA_COMPOSITE {
167fb2ed616STakashi Iwai 			{ QUIRK_DATA_STANDARD_MIXER(2) },
16848827e1dSJonas Hahnfeld 			{
169fb2ed616STakashi Iwai 				QUIRK_DATA_AUDIOFORMAT(3) {
17048827e1dSJonas Hahnfeld 					.formats = SNDRV_PCM_FMTBIT_S16_LE,
17148827e1dSJonas Hahnfeld 					.channels = 2,
17248827e1dSJonas Hahnfeld 					.fmt_bits = 16,
17348827e1dSJonas Hahnfeld 					.iface = 3,
17448827e1dSJonas Hahnfeld 					.altsetting = 4,
17548827e1dSJonas Hahnfeld 					.altset_idx = 4,
17648827e1dSJonas Hahnfeld 					.endpoint = 0x82,
17748827e1dSJonas Hahnfeld 					.ep_attr = 0x05,
17848827e1dSJonas Hahnfeld 					.rates = SNDRV_PCM_RATE_48000,
17948827e1dSJonas Hahnfeld 					.rate_min = 48000,
18048827e1dSJonas Hahnfeld 					.rate_max = 48000,
18148827e1dSJonas Hahnfeld 					.nr_rates = 1,
18248827e1dSJonas Hahnfeld 					.rate_table = (unsigned int[]) { 48000 },
18348827e1dSJonas Hahnfeld 				},
18448827e1dSJonas Hahnfeld 			},
185fb2ed616STakashi Iwai 			QUIRK_COMPOSITE_END
18648827e1dSJonas Hahnfeld 		},
18748827e1dSJonas Hahnfeld 	},
18848827e1dSJonas Hahnfeld },
18948827e1dSJonas Hahnfeld 
19048827e1dSJonas Hahnfeld /*
191df68f106SEldad Zack  * HP Wireless Audio
192df68f106SEldad Zack  * When not ignored, causes instability issues for some users, forcing them to
19352bedfbdSTakashi Iwai  * skip the entire module.
194df68f106SEldad Zack  */
195df68f106SEldad Zack {
196df68f106SEldad Zack 	USB_DEVICE(0x0424, 0xb832),
197fb2ed616STakashi Iwai 	QUIRK_DRIVER_INFO {
198df68f106SEldad Zack 		.vendor_name = "Standard Microsystems Corp.",
199df68f106SEldad Zack 		.product_name = "HP Wireless Audio",
200fb2ed616STakashi Iwai 		QUIRK_DATA_COMPOSITE {
201df68f106SEldad Zack 			/* Mixer */
202fb2ed616STakashi Iwai 			{ QUIRK_DATA_IGNORE(0) },
203df68f106SEldad Zack 			/* Playback */
204fb2ed616STakashi Iwai 			{ QUIRK_DATA_IGNORE(1) },
205df68f106SEldad Zack 			/* Capture */
206fb2ed616STakashi Iwai 			{ QUIRK_DATA_IGNORE(2) },
207df68f106SEldad Zack 			/* HID Device, .ifnum = 3 */
208fb2ed616STakashi Iwai 			QUIRK_COMPOSITE_END
209df68f106SEldad Zack 		}
210df68f106SEldad Zack 	}
211df68f106SEldad Zack },
212df68f106SEldad Zack 
213df68f106SEldad Zack /*
214e5779998SDaniel Mack  * Logitech QuickCam: bDeviceClass is vendor-specific, so generic interface
215e5779998SDaniel Mack  * class matches do not take effect without an explicit ID match.
216e5779998SDaniel Mack  */
217fa10635fSTakashi Iwai { USB_AUDIO_DEVICE(0x046d, 0x0850) },
218fa10635fSTakashi Iwai { USB_AUDIO_DEVICE(0x046d, 0x08ae) },
219fa10635fSTakashi Iwai { USB_AUDIO_DEVICE(0x046d, 0x08c6) },
220fa10635fSTakashi Iwai { USB_AUDIO_DEVICE(0x046d, 0x08f0) },
221fa10635fSTakashi Iwai { USB_AUDIO_DEVICE(0x046d, 0x08f5) },
222fa10635fSTakashi Iwai { USB_AUDIO_DEVICE(0x046d, 0x08f6) },
223fa10635fSTakashi Iwai { USB_AUDIO_DEVICE(0x046d, 0x0990) },
224e5779998SDaniel Mack 
225e5779998SDaniel Mack /*
226e5779998SDaniel Mack  * Yamaha devices
227e5779998SDaniel Mack  */
228e5779998SDaniel Mack 
229e5779998SDaniel Mack #define YAMAHA_DEVICE(id, name) { \
230e5779998SDaniel Mack 	USB_DEVICE(0x0499, id), \
231fb2ed616STakashi Iwai 	QUIRK_DRIVER_INFO { \
232e5779998SDaniel Mack 		.vendor_name = "Yamaha", \
233e5779998SDaniel Mack 		.product_name = name, \
234fb2ed616STakashi Iwai 		QUIRK_DATA_MIDI_YAMAHA(QUIRK_ANY_INTERFACE) \
235e5779998SDaniel Mack 	} \
236e5779998SDaniel Mack }
237e5779998SDaniel Mack #define YAMAHA_INTERFACE(id, intf, name) { \
238e5779998SDaniel Mack 	USB_DEVICE_VENDOR_SPEC(0x0499, id), \
239fb2ed616STakashi Iwai 	QUIRK_DRIVER_INFO { \
240e5779998SDaniel Mack 		.vendor_name = "Yamaha", \
241e5779998SDaniel Mack 		.product_name = name, \
242fb2ed616STakashi Iwai 		QUIRK_DATA_MIDI_YAMAHA(intf) \
243e5779998SDaniel Mack 	} \
244e5779998SDaniel Mack }
245e5779998SDaniel Mack YAMAHA_DEVICE(0x1000, "UX256"),
246e5779998SDaniel Mack YAMAHA_DEVICE(0x1001, "MU1000"),
247e5779998SDaniel Mack YAMAHA_DEVICE(0x1002, "MU2000"),
248e5779998SDaniel Mack YAMAHA_DEVICE(0x1003, "MU500"),
249e5779998SDaniel Mack YAMAHA_INTERFACE(0x1004, 3, "UW500"),
250e5779998SDaniel Mack YAMAHA_DEVICE(0x1005, "MOTIF6"),
251e5779998SDaniel Mack YAMAHA_DEVICE(0x1006, "MOTIF7"),
252e5779998SDaniel Mack YAMAHA_DEVICE(0x1007, "MOTIF8"),
253e5779998SDaniel Mack YAMAHA_DEVICE(0x1008, "UX96"),
254e5779998SDaniel Mack YAMAHA_DEVICE(0x1009, "UX16"),
255e5779998SDaniel Mack YAMAHA_INTERFACE(0x100a, 3, "EOS BX"),
256e5779998SDaniel Mack YAMAHA_DEVICE(0x100c, "UC-MX"),
257e5779998SDaniel Mack YAMAHA_DEVICE(0x100d, "UC-KX"),
258e5779998SDaniel Mack YAMAHA_DEVICE(0x100e, "S08"),
259e5779998SDaniel Mack YAMAHA_DEVICE(0x100f, "CLP-150"),
260e5779998SDaniel Mack YAMAHA_DEVICE(0x1010, "CLP-170"),
261e5779998SDaniel Mack YAMAHA_DEVICE(0x1011, "P-250"),
262e5779998SDaniel Mack YAMAHA_DEVICE(0x1012, "TYROS"),
263e5779998SDaniel Mack YAMAHA_DEVICE(0x1013, "PF-500"),
264e5779998SDaniel Mack YAMAHA_DEVICE(0x1014, "S90"),
265e5779998SDaniel Mack YAMAHA_DEVICE(0x1015, "MOTIF-R"),
266e5779998SDaniel Mack YAMAHA_DEVICE(0x1016, "MDP-5"),
267e5779998SDaniel Mack YAMAHA_DEVICE(0x1017, "CVP-204"),
268e5779998SDaniel Mack YAMAHA_DEVICE(0x1018, "CVP-206"),
269e5779998SDaniel Mack YAMAHA_DEVICE(0x1019, "CVP-208"),
270e5779998SDaniel Mack YAMAHA_DEVICE(0x101a, "CVP-210"),
271e5779998SDaniel Mack YAMAHA_DEVICE(0x101b, "PSR-1100"),
272e5779998SDaniel Mack YAMAHA_DEVICE(0x101c, "PSR-2100"),
273e5779998SDaniel Mack YAMAHA_DEVICE(0x101d, "CLP-175"),
274e5779998SDaniel Mack YAMAHA_DEVICE(0x101e, "PSR-K1"),
275e5779998SDaniel Mack YAMAHA_DEVICE(0x101f, "EZ-J24"),
276e5779998SDaniel Mack YAMAHA_DEVICE(0x1020, "EZ-250i"),
277e5779998SDaniel Mack YAMAHA_DEVICE(0x1021, "MOTIF ES 6"),
278e5779998SDaniel Mack YAMAHA_DEVICE(0x1022, "MOTIF ES 7"),
279e5779998SDaniel Mack YAMAHA_DEVICE(0x1023, "MOTIF ES 8"),
280e5779998SDaniel Mack YAMAHA_DEVICE(0x1024, "CVP-301"),
281e5779998SDaniel Mack YAMAHA_DEVICE(0x1025, "CVP-303"),
282e5779998SDaniel Mack YAMAHA_DEVICE(0x1026, "CVP-305"),
283e5779998SDaniel Mack YAMAHA_DEVICE(0x1027, "CVP-307"),
284e5779998SDaniel Mack YAMAHA_DEVICE(0x1028, "CVP-309"),
285e5779998SDaniel Mack YAMAHA_DEVICE(0x1029, "CVP-309GP"),
286e5779998SDaniel Mack YAMAHA_DEVICE(0x102a, "PSR-1500"),
287e5779998SDaniel Mack YAMAHA_DEVICE(0x102b, "PSR-3000"),
288e5779998SDaniel Mack YAMAHA_DEVICE(0x102e, "ELS-01/01C"),
289e5779998SDaniel Mack YAMAHA_DEVICE(0x1030, "PSR-295/293"),
290e5779998SDaniel Mack YAMAHA_DEVICE(0x1031, "DGX-205/203"),
291e5779998SDaniel Mack YAMAHA_DEVICE(0x1032, "DGX-305"),
292e5779998SDaniel Mack YAMAHA_DEVICE(0x1033, "DGX-505"),
293e5779998SDaniel Mack YAMAHA_DEVICE(0x1034, NULL),
294e5779998SDaniel Mack YAMAHA_DEVICE(0x1035, NULL),
295e5779998SDaniel Mack YAMAHA_DEVICE(0x1036, NULL),
296e5779998SDaniel Mack YAMAHA_DEVICE(0x1037, NULL),
297e5779998SDaniel Mack YAMAHA_DEVICE(0x1038, NULL),
298e5779998SDaniel Mack YAMAHA_DEVICE(0x1039, NULL),
299e5779998SDaniel Mack YAMAHA_DEVICE(0x103a, NULL),
300e5779998SDaniel Mack YAMAHA_DEVICE(0x103b, NULL),
301e5779998SDaniel Mack YAMAHA_DEVICE(0x103c, NULL),
302e5779998SDaniel Mack YAMAHA_DEVICE(0x103d, NULL),
303e5779998SDaniel Mack YAMAHA_DEVICE(0x103e, NULL),
304e5779998SDaniel Mack YAMAHA_DEVICE(0x103f, NULL),
305e5779998SDaniel Mack YAMAHA_DEVICE(0x1040, NULL),
306e5779998SDaniel Mack YAMAHA_DEVICE(0x1041, NULL),
307e5779998SDaniel Mack YAMAHA_DEVICE(0x1042, NULL),
308e5779998SDaniel Mack YAMAHA_DEVICE(0x1043, NULL),
309e5779998SDaniel Mack YAMAHA_DEVICE(0x1044, NULL),
310e5779998SDaniel Mack YAMAHA_DEVICE(0x1045, NULL),
311e5779998SDaniel Mack YAMAHA_INTERFACE(0x104e, 0, NULL),
312e5779998SDaniel Mack YAMAHA_DEVICE(0x104f, NULL),
313e5779998SDaniel Mack YAMAHA_DEVICE(0x1050, NULL),
314e5779998SDaniel Mack YAMAHA_DEVICE(0x1051, NULL),
315e5779998SDaniel Mack YAMAHA_DEVICE(0x1052, NULL),
316422fdc31SClemens Ladisch YAMAHA_INTERFACE(0x1053, 0, NULL),
317422fdc31SClemens Ladisch YAMAHA_INTERFACE(0x1054, 0, NULL),
318422fdc31SClemens Ladisch YAMAHA_DEVICE(0x1055, NULL),
319422fdc31SClemens Ladisch YAMAHA_DEVICE(0x1056, NULL),
320422fdc31SClemens Ladisch YAMAHA_DEVICE(0x1057, NULL),
321422fdc31SClemens Ladisch YAMAHA_DEVICE(0x1058, NULL),
322422fdc31SClemens Ladisch YAMAHA_DEVICE(0x1059, NULL),
323422fdc31SClemens Ladisch YAMAHA_DEVICE(0x105a, NULL),
324422fdc31SClemens Ladisch YAMAHA_DEVICE(0x105b, NULL),
325422fdc31SClemens Ladisch YAMAHA_DEVICE(0x105c, NULL),
326422fdc31SClemens Ladisch YAMAHA_DEVICE(0x105d, NULL),
3278c3f5d8aSClemens Ladisch {
3288c3f5d8aSClemens Ladisch 	USB_DEVICE(0x0499, 0x1503),
329fb2ed616STakashi Iwai 	QUIRK_DRIVER_INFO {
3308c3f5d8aSClemens Ladisch 		/* .vendor_name = "Yamaha", */
3318c3f5d8aSClemens Ladisch 		/* .product_name = "MOX6/MOX8", */
332fb2ed616STakashi Iwai 		QUIRK_DATA_COMPOSITE {
333fb2ed616STakashi Iwai 			{ QUIRK_DATA_STANDARD_AUDIO(1) },
334fb2ed616STakashi Iwai 			{ QUIRK_DATA_STANDARD_AUDIO(2) },
335fb2ed616STakashi Iwai 			{ QUIRK_DATA_MIDI_YAMAHA(3) },
336fb2ed616STakashi Iwai 			QUIRK_COMPOSITE_END
3378c3f5d8aSClemens Ladisch 		}
3388c3f5d8aSClemens Ladisch 	}
3398c3f5d8aSClemens Ladisch },
340ae3f0c26STrulan Martin {
341ae3f0c26STrulan Martin 	USB_DEVICE(0x0499, 0x1507),
342fb2ed616STakashi Iwai 	QUIRK_DRIVER_INFO {
343ae3f0c26STrulan Martin 		/* .vendor_name = "Yamaha", */
344ae3f0c26STrulan Martin 		/* .product_name = "THR10", */
345fb2ed616STakashi Iwai 		QUIRK_DATA_COMPOSITE {
346fb2ed616STakashi Iwai 			{ QUIRK_DATA_STANDARD_AUDIO(1) },
347fb2ed616STakashi Iwai 			{ QUIRK_DATA_STANDARD_AUDIO(2) },
348fb2ed616STakashi Iwai 			{ QUIRK_DATA_MIDI_YAMAHA(3) },
349fb2ed616STakashi Iwai 			QUIRK_COMPOSITE_END
350ae3f0c26STrulan Martin 		}
351ae3f0c26STrulan Martin 	}
352ae3f0c26STrulan Martin },
3531b15362cSTrulan Martin {
354f0b127fbSVlad Catoi 	USB_DEVICE(0x0499, 0x1509),
355fb2ed616STakashi Iwai 	QUIRK_DRIVER_INFO {
356f0b127fbSVlad Catoi 		/* .vendor_name = "Yamaha", */
357f0b127fbSVlad Catoi 		/* .product_name = "Steinberg UR22", */
358fb2ed616STakashi Iwai 		QUIRK_DATA_COMPOSITE {
359fb2ed616STakashi Iwai 			{ QUIRK_DATA_STANDARD_AUDIO(1) },
360fb2ed616STakashi Iwai 			{ QUIRK_DATA_STANDARD_AUDIO(2) },
361fb2ed616STakashi Iwai 			{ QUIRK_DATA_MIDI_YAMAHA(3) },
362fb2ed616STakashi Iwai 			{ QUIRK_DATA_IGNORE(4) },
363fb2ed616STakashi Iwai 			QUIRK_COMPOSITE_END
364f0b127fbSVlad Catoi 		}
365f0b127fbSVlad Catoi 	}
366f0b127fbSVlad Catoi },
367f0b127fbSVlad Catoi {
3681b15362cSTrulan Martin 	USB_DEVICE(0x0499, 0x150a),
369fb2ed616STakashi Iwai 	QUIRK_DRIVER_INFO {
3701b15362cSTrulan Martin 		/* .vendor_name = "Yamaha", */
3711b15362cSTrulan Martin 		/* .product_name = "THR5A", */
372fb2ed616STakashi Iwai 		QUIRK_DATA_COMPOSITE {
373fb2ed616STakashi Iwai 			{ QUIRK_DATA_STANDARD_AUDIO(1) },
374fb2ed616STakashi Iwai 			{ QUIRK_DATA_STANDARD_AUDIO(2) },
375fb2ed616STakashi Iwai 			{ QUIRK_DATA_MIDI_YAMAHA(3) },
376fb2ed616STakashi Iwai 			QUIRK_COMPOSITE_END
3771b15362cSTrulan Martin 		}
3781b15362cSTrulan Martin 	}
3791b15362cSTrulan Martin },
38003e02214STrulan Martin {
38103e02214STrulan Martin 	USB_DEVICE(0x0499, 0x150c),
382fb2ed616STakashi Iwai 	QUIRK_DRIVER_INFO {
38303e02214STrulan Martin 		/* .vendor_name = "Yamaha", */
38403e02214STrulan Martin 		/* .product_name = "THR10C", */
385fb2ed616STakashi Iwai 		QUIRK_DATA_COMPOSITE {
386fb2ed616STakashi Iwai 			{ QUIRK_DATA_STANDARD_AUDIO(1) },
387fb2ed616STakashi Iwai 			{ QUIRK_DATA_STANDARD_AUDIO(2) },
388fb2ed616STakashi Iwai 			{ QUIRK_DATA_MIDI_YAMAHA(3) },
389fb2ed616STakashi Iwai 			QUIRK_COMPOSITE_END
39003e02214STrulan Martin 		}
39103e02214STrulan Martin 	}
39203e02214STrulan Martin },
393*344fb3c5SEryk Zagorski {
394*344fb3c5SEryk Zagorski 	USB_DEVICE(0x0499, 0x1718),
395*344fb3c5SEryk Zagorski 	QUIRK_DRIVER_INFO {
396*344fb3c5SEryk Zagorski 		/* .vendor_name = "Yamaha", */
397*344fb3c5SEryk Zagorski 		/* .product_name = "P-125", */
398*344fb3c5SEryk Zagorski 		QUIRK_DATA_COMPOSITE {
399*344fb3c5SEryk Zagorski 			{ QUIRK_DATA_STANDARD_AUDIO(1) },
400*344fb3c5SEryk Zagorski 			{ QUIRK_DATA_STANDARD_AUDIO(2) },
401*344fb3c5SEryk Zagorski 			{ QUIRK_DATA_MIDI_YAMAHA(3) },
402*344fb3c5SEryk Zagorski 			QUIRK_COMPOSITE_END
403*344fb3c5SEryk Zagorski 		}
404*344fb3c5SEryk Zagorski 	}
405*344fb3c5SEryk Zagorski },
406e5779998SDaniel Mack YAMAHA_DEVICE(0x2000, "DGP-7"),
407e5779998SDaniel Mack YAMAHA_DEVICE(0x2001, "DGP-5"),
408e5779998SDaniel Mack YAMAHA_DEVICE(0x2002, NULL),
409422fdc31SClemens Ladisch YAMAHA_DEVICE(0x2003, NULL),
410e5779998SDaniel Mack YAMAHA_DEVICE(0x5000, "CS1D"),
411e5779998SDaniel Mack YAMAHA_DEVICE(0x5001, "DSP1D"),
412e5779998SDaniel Mack YAMAHA_DEVICE(0x5002, "DME32"),
413e5779998SDaniel Mack YAMAHA_DEVICE(0x5003, "DM2000"),
414e5779998SDaniel Mack YAMAHA_DEVICE(0x5004, "02R96"),
415e5779998SDaniel Mack YAMAHA_DEVICE(0x5005, "ACU16-C"),
416e5779998SDaniel Mack YAMAHA_DEVICE(0x5006, "NHB32-C"),
417e5779998SDaniel Mack YAMAHA_DEVICE(0x5007, "DM1000"),
418e5779998SDaniel Mack YAMAHA_DEVICE(0x5008, "01V96"),
419e5779998SDaniel Mack YAMAHA_DEVICE(0x5009, "SPX2000"),
420e5779998SDaniel Mack YAMAHA_DEVICE(0x500a, "PM5D"),
421e5779998SDaniel Mack YAMAHA_DEVICE(0x500b, "DME64N"),
422e5779998SDaniel Mack YAMAHA_DEVICE(0x500c, "DME24N"),
423e5779998SDaniel Mack YAMAHA_DEVICE(0x500d, NULL),
424e5779998SDaniel Mack YAMAHA_DEVICE(0x500e, NULL),
425e5779998SDaniel Mack YAMAHA_DEVICE(0x500f, NULL),
426e5779998SDaniel Mack YAMAHA_DEVICE(0x7000, "DTX"),
427e5779998SDaniel Mack YAMAHA_DEVICE(0x7010, "UB99"),
428e5779998SDaniel Mack #undef YAMAHA_DEVICE
429e5779998SDaniel Mack #undef YAMAHA_INTERFACE
430aafe77ccSClemens Ladisch /* this catches most recent vendor-specific Yamaha devices */
431aafe77ccSClemens Ladisch {
432aafe77ccSClemens Ladisch 	.match_flags = USB_DEVICE_ID_MATCH_VENDOR |
433aafe77ccSClemens Ladisch 	               USB_DEVICE_ID_MATCH_INT_CLASS,
434aafe77ccSClemens Ladisch 	.idVendor = 0x0499,
435aafe77ccSClemens Ladisch 	.bInterfaceClass = USB_CLASS_VENDOR_SPEC,
436fb2ed616STakashi Iwai 	QUIRK_DRIVER_INFO {
437aafe77ccSClemens Ladisch 		.ifnum = QUIRK_ANY_INTERFACE,
438aafe77ccSClemens Ladisch 		.type = QUIRK_AUTODETECT
439aafe77ccSClemens Ladisch 	}
440aafe77ccSClemens Ladisch },
441e5779998SDaniel Mack 
442e5779998SDaniel Mack /*
443e5779998SDaniel Mack  * Roland/RolandED/Edirol/BOSS devices
444e5779998SDaniel Mack  */
445e5779998SDaniel Mack {
446e5779998SDaniel Mack 	USB_DEVICE(0x0582, 0x0000),
447fb2ed616STakashi Iwai 	QUIRK_DRIVER_INFO {
448e5779998SDaniel Mack 		.vendor_name = "Roland",
449e5779998SDaniel Mack 		.product_name = "UA-100",
450fb2ed616STakashi Iwai 		QUIRK_DATA_COMPOSITE {
451e5779998SDaniel Mack 			{
452fb2ed616STakashi Iwai 				QUIRK_DATA_AUDIOFORMAT(0) {
453015eb0b0SClemens Ladisch 					.formats = SNDRV_PCM_FMTBIT_S16_LE,
454e5779998SDaniel Mack 					.channels = 4,
455e5779998SDaniel Mack 					.iface = 0,
456e5779998SDaniel Mack 					.altsetting = 1,
457e5779998SDaniel Mack 					.altset_idx = 1,
458e5779998SDaniel Mack 					.attributes = 0,
459e5779998SDaniel Mack 					.endpoint = 0x01,
460e5779998SDaniel Mack 					.ep_attr = 0x09,
461e5779998SDaniel Mack 					.rates = SNDRV_PCM_RATE_CONTINUOUS,
462e5779998SDaniel Mack 					.rate_min = 44100,
463e5779998SDaniel Mack 					.rate_max = 44100,
464e5779998SDaniel Mack 				}
465e5779998SDaniel Mack 			},
466e5779998SDaniel Mack 			{
467fb2ed616STakashi Iwai 				QUIRK_DATA_AUDIOFORMAT(1) {
468015eb0b0SClemens Ladisch 					.formats = SNDRV_PCM_FMTBIT_S16_LE,
469e5779998SDaniel Mack 					.channels = 2,
470e5779998SDaniel Mack 					.iface = 1,
471e5779998SDaniel Mack 					.altsetting = 1,
472e5779998SDaniel Mack 					.altset_idx = 1,
473e5779998SDaniel Mack 					.attributes = UAC_EP_CS_ATTR_FILL_MAX,
474e5779998SDaniel Mack 					.endpoint = 0x81,
475e5779998SDaniel Mack 					.ep_attr = 0x05,
476e5779998SDaniel Mack 					.rates = SNDRV_PCM_RATE_CONTINUOUS,
477e5779998SDaniel Mack 					.rate_min = 44100,
478e5779998SDaniel Mack 					.rate_max = 44100,
479e5779998SDaniel Mack 				}
480e5779998SDaniel Mack 			},
481e5779998SDaniel Mack 			{
482fb2ed616STakashi Iwai 				QUIRK_DATA_MIDI_FIXED_ENDPOINT(2) {
483e5779998SDaniel Mack 					.out_cables = 0x0007,
484e5779998SDaniel Mack 					.in_cables  = 0x0007
485e5779998SDaniel Mack 				}
486e5779998SDaniel Mack 			},
487fb2ed616STakashi Iwai 			QUIRK_COMPOSITE_END
488e5779998SDaniel Mack 		}
489e5779998SDaniel Mack 	}
490e5779998SDaniel Mack },
491e5779998SDaniel Mack {
492e5779998SDaniel Mack 	USB_DEVICE(0x0582, 0x0002),
493fb2ed616STakashi Iwai 	QUIRK_DRIVER_INFO {
494e5779998SDaniel Mack 		.vendor_name = "EDIROL",
495e5779998SDaniel Mack 		.product_name = "UM-4",
496fb2ed616STakashi Iwai 		QUIRK_DATA_COMPOSITE {
497fb2ed616STakashi Iwai 			{ QUIRK_DATA_IGNORE(0) },
498fb2ed616STakashi Iwai 			{ QUIRK_DATA_IGNORE(1) },
499e5779998SDaniel Mack 			{
500fb2ed616STakashi Iwai 				QUIRK_DATA_MIDI_FIXED_ENDPOINT(2) {
501e5779998SDaniel Mack 					.out_cables = 0x000f,
502e5779998SDaniel Mack 					.in_cables  = 0x000f
503e5779998SDaniel Mack 				}
504e5779998SDaniel Mack 			},
505fb2ed616STakashi Iwai 			QUIRK_COMPOSITE_END
506e5779998SDaniel Mack 		}
507e5779998SDaniel Mack 	}
508e5779998SDaniel Mack },
509e5779998SDaniel Mack {
510e5779998SDaniel Mack 	USB_DEVICE(0x0582, 0x0003),
511fb2ed616STakashi Iwai 	QUIRK_DRIVER_INFO {
512e5779998SDaniel Mack 		.vendor_name = "Roland",
513e5779998SDaniel Mack 		.product_name = "SC-8850",
514fb2ed616STakashi Iwai 		QUIRK_DATA_COMPOSITE {
515fb2ed616STakashi Iwai 			{ QUIRK_DATA_IGNORE(0) },
516fb2ed616STakashi Iwai 			{ QUIRK_DATA_IGNORE(1) },
517e5779998SDaniel Mack 			{
518fb2ed616STakashi Iwai 				QUIRK_DATA_MIDI_FIXED_ENDPOINT(2) {
519e5779998SDaniel Mack 					.out_cables = 0x003f,
520e5779998SDaniel Mack 					.in_cables  = 0x003f
521e5779998SDaniel Mack 				}
522e5779998SDaniel Mack 			},
523fb2ed616STakashi Iwai 			QUIRK_COMPOSITE_END
524e5779998SDaniel Mack 		}
525e5779998SDaniel Mack 	}
526e5779998SDaniel Mack },
527e5779998SDaniel Mack {
528e5779998SDaniel Mack 	USB_DEVICE(0x0582, 0x0004),
529fb2ed616STakashi Iwai 	QUIRK_DRIVER_INFO {
530e5779998SDaniel Mack 		.vendor_name = "Roland",
531e5779998SDaniel Mack 		.product_name = "U-8",
532fb2ed616STakashi Iwai 		QUIRK_DATA_COMPOSITE {
533fb2ed616STakashi Iwai 			{ QUIRK_DATA_IGNORE(0) },
534fb2ed616STakashi Iwai 			{ QUIRK_DATA_IGNORE(1) },
535e5779998SDaniel Mack 			{
536fb2ed616STakashi Iwai 				QUIRK_DATA_MIDI_FIXED_ENDPOINT(2) {
537e5779998SDaniel Mack 					.out_cables = 0x0005,
538e5779998SDaniel Mack 					.in_cables  = 0x0005
539e5779998SDaniel Mack 				}
540e5779998SDaniel Mack 			},
541fb2ed616STakashi Iwai 			QUIRK_COMPOSITE_END
542e5779998SDaniel Mack 		}
543e5779998SDaniel Mack 	}
544e5779998SDaniel Mack },
545e5779998SDaniel Mack {
546e5779998SDaniel Mack 	/* Has ID 0x0099 when not in "Advanced Driver" mode.
547e5779998SDaniel Mack 	 * The UM-2EX has only one input, but we cannot detect this. */
548e5779998SDaniel Mack 	USB_DEVICE(0x0582, 0x0005),
549fb2ed616STakashi Iwai 	QUIRK_DRIVER_INFO {
550e5779998SDaniel Mack 		.vendor_name = "EDIROL",
551e5779998SDaniel Mack 		.product_name = "UM-2",
552fb2ed616STakashi Iwai 		QUIRK_DATA_COMPOSITE {
553fb2ed616STakashi Iwai 			{ QUIRK_DATA_IGNORE(0) },
554fb2ed616STakashi Iwai 			{ QUIRK_DATA_IGNORE(1) },
555e5779998SDaniel Mack 			{
556fb2ed616STakashi Iwai 				QUIRK_DATA_MIDI_FIXED_ENDPOINT(2) {
557e5779998SDaniel Mack 					.out_cables = 0x0003,
558e5779998SDaniel Mack 					.in_cables  = 0x0003
559e5779998SDaniel Mack 				}
560e5779998SDaniel Mack 			},
561fb2ed616STakashi Iwai 			QUIRK_COMPOSITE_END
562e5779998SDaniel Mack 		}
563e5779998SDaniel Mack 	}
564e5779998SDaniel Mack },
565e5779998SDaniel Mack {
566e5779998SDaniel Mack 	USB_DEVICE(0x0582, 0x0007),
567fb2ed616STakashi Iwai 	QUIRK_DRIVER_INFO {
568e5779998SDaniel Mack 		.vendor_name = "Roland",
569e5779998SDaniel Mack 		.product_name = "SC-8820",
570fb2ed616STakashi Iwai 		QUIRK_DATA_COMPOSITE {
571fb2ed616STakashi Iwai 			{ QUIRK_DATA_IGNORE(0) },
572fb2ed616STakashi Iwai 			{ QUIRK_DATA_IGNORE(1) },
573e5779998SDaniel Mack 			{
574fb2ed616STakashi Iwai 				QUIRK_DATA_MIDI_FIXED_ENDPOINT(2) {
575e5779998SDaniel Mack 					.out_cables = 0x0013,
576e5779998SDaniel Mack 					.in_cables  = 0x0013
577e5779998SDaniel Mack 				}
578e5779998SDaniel Mack 			},
579fb2ed616STakashi Iwai 			QUIRK_COMPOSITE_END
580e5779998SDaniel Mack 		}
581e5779998SDaniel Mack 	}
582e5779998SDaniel Mack },
583e5779998SDaniel Mack {
584e5779998SDaniel Mack 	USB_DEVICE(0x0582, 0x0008),
585fb2ed616STakashi Iwai 	QUIRK_DRIVER_INFO {
586e5779998SDaniel Mack 		.vendor_name = "Roland",
587e5779998SDaniel Mack 		.product_name = "PC-300",
588fb2ed616STakashi Iwai 		QUIRK_DATA_COMPOSITE {
589fb2ed616STakashi Iwai 			{ QUIRK_DATA_IGNORE(0) },
590fb2ed616STakashi Iwai 			{ QUIRK_DATA_IGNORE(1) },
591e5779998SDaniel Mack 			{
592fb2ed616STakashi Iwai 				QUIRK_DATA_MIDI_FIXED_ENDPOINT(2) {
593e5779998SDaniel Mack 					.out_cables = 0x0001,
594e5779998SDaniel Mack 					.in_cables  = 0x0001
595e5779998SDaniel Mack 				}
596e5779998SDaniel Mack 			},
597fb2ed616STakashi Iwai 			QUIRK_COMPOSITE_END
598e5779998SDaniel Mack 		}
599e5779998SDaniel Mack 	}
600e5779998SDaniel Mack },
601e5779998SDaniel Mack {
602e5779998SDaniel Mack 	/* has ID 0x009d when not in "Advanced Driver" mode */
603e5779998SDaniel Mack 	USB_DEVICE(0x0582, 0x0009),
604fb2ed616STakashi Iwai 	QUIRK_DRIVER_INFO {
605e5779998SDaniel Mack 		.vendor_name = "EDIROL",
606e5779998SDaniel Mack 		.product_name = "UM-1",
607fb2ed616STakashi Iwai 		QUIRK_DATA_COMPOSITE {
608fb2ed616STakashi Iwai 			{ QUIRK_DATA_IGNORE(0) },
609fb2ed616STakashi Iwai 			{ QUIRK_DATA_IGNORE(1) },
610e5779998SDaniel Mack 			{
611fb2ed616STakashi Iwai 				QUIRK_DATA_MIDI_FIXED_ENDPOINT(2) {
612e5779998SDaniel Mack 					.out_cables = 0x0001,
613e5779998SDaniel Mack 					.in_cables  = 0x0001
614e5779998SDaniel Mack 				}
615e5779998SDaniel Mack 			},
616fb2ed616STakashi Iwai 			QUIRK_COMPOSITE_END
617e5779998SDaniel Mack 		}
618e5779998SDaniel Mack 	}
619e5779998SDaniel Mack },
620e5779998SDaniel Mack {
621e5779998SDaniel Mack 	USB_DEVICE(0x0582, 0x000b),
622fb2ed616STakashi Iwai 	QUIRK_DRIVER_INFO {
623e5779998SDaniel Mack 		.vendor_name = "Roland",
624e5779998SDaniel Mack 		.product_name = "SK-500",
625fb2ed616STakashi Iwai 		QUIRK_DATA_COMPOSITE {
626fb2ed616STakashi Iwai 			{ QUIRK_DATA_IGNORE(0) },
627fb2ed616STakashi Iwai 			{ QUIRK_DATA_IGNORE(1) },
628e5779998SDaniel Mack 			{
629fb2ed616STakashi Iwai 				QUIRK_DATA_MIDI_FIXED_ENDPOINT(2) {
630e5779998SDaniel Mack 					.out_cables = 0x0013,
631e5779998SDaniel Mack 					.in_cables  = 0x0013
632e5779998SDaniel Mack 				}
633e5779998SDaniel Mack 			},
634fb2ed616STakashi Iwai 			QUIRK_COMPOSITE_END
635e5779998SDaniel Mack 		}
636e5779998SDaniel Mack 	}
637e5779998SDaniel Mack },
638e5779998SDaniel Mack {
639e5779998SDaniel Mack 	/* thanks to Emiliano Grilli <emillo@libero.it>
640e5779998SDaniel Mack 	 * for helping researching this data */
641e5779998SDaniel Mack 	USB_DEVICE(0x0582, 0x000c),
642fb2ed616STakashi Iwai 	QUIRK_DRIVER_INFO {
643e5779998SDaniel Mack 		.vendor_name = "Roland",
644e5779998SDaniel Mack 		.product_name = "SC-D70",
645fb2ed616STakashi Iwai 		QUIRK_DATA_COMPOSITE {
646fb2ed616STakashi Iwai 			{ QUIRK_DATA_STANDARD_AUDIO(0) },
647fb2ed616STakashi Iwai 			{ QUIRK_DATA_STANDARD_AUDIO(1) },
648e5779998SDaniel Mack 			{
649fb2ed616STakashi Iwai 				QUIRK_DATA_MIDI_FIXED_ENDPOINT(2) {
650e5779998SDaniel Mack 					.out_cables = 0x0007,
651e5779998SDaniel Mack 					.in_cables  = 0x0007
652e5779998SDaniel Mack 				}
653e5779998SDaniel Mack 			},
654fb2ed616STakashi Iwai 			QUIRK_COMPOSITE_END
655e5779998SDaniel Mack 		}
656e5779998SDaniel Mack 	}
657e5779998SDaniel Mack },
658e5779998SDaniel Mack {	/*
659e5779998SDaniel Mack 	 * This quirk is for the "Advanced Driver" mode of the Edirol UA-5.
660e5779998SDaniel Mack 	 * If the advanced mode switch at the back of the unit is off, the
661e5779998SDaniel Mack 	 * UA-5 has ID 0x0582/0x0011 and is standard compliant (no quirks),
662e5779998SDaniel Mack 	 * but offers only 16-bit PCM.
663e5779998SDaniel Mack 	 * In advanced mode, the UA-5 will output S24_3LE samples (two
664e5779998SDaniel Mack 	 * channels) at the rate indicated on the front switch, including
665e5779998SDaniel Mack 	 * the 96kHz sample rate.
666e5779998SDaniel Mack 	 */
667e5779998SDaniel Mack 	USB_DEVICE(0x0582, 0x0010),
668fb2ed616STakashi Iwai 	QUIRK_DRIVER_INFO {
669e5779998SDaniel Mack 		.vendor_name = "EDIROL",
670e5779998SDaniel Mack 		.product_name = "UA-5",
671fb2ed616STakashi Iwai 		QUIRK_DATA_COMPOSITE {
672fb2ed616STakashi Iwai 			{ QUIRK_DATA_STANDARD_AUDIO(1) },
673fb2ed616STakashi Iwai 			{ QUIRK_DATA_STANDARD_AUDIO(2) },
674fb2ed616STakashi Iwai 			QUIRK_COMPOSITE_END
675e5779998SDaniel Mack 		}
676e5779998SDaniel Mack 	}
677e5779998SDaniel Mack },
678e5779998SDaniel Mack {
679e5779998SDaniel Mack 	/* has ID 0x0013 when not in "Advanced Driver" mode */
680e5779998SDaniel Mack 	USB_DEVICE(0x0582, 0x0012),
681fb2ed616STakashi Iwai 	QUIRK_DRIVER_INFO {
682e5779998SDaniel Mack 		.vendor_name = "Roland",
683e5779998SDaniel Mack 		.product_name = "XV-5050",
684fb2ed616STakashi Iwai 		QUIRK_DATA_MIDI_FIXED_ENDPOINT(0) {
685e5779998SDaniel Mack 			.out_cables = 0x0001,
686e5779998SDaniel Mack 			.in_cables  = 0x0001
687e5779998SDaniel Mack 		}
688e5779998SDaniel Mack 	}
689e5779998SDaniel Mack },
690e5779998SDaniel Mack {
691e5779998SDaniel Mack 	/* has ID 0x0015 when not in "Advanced Driver" mode */
692e5779998SDaniel Mack 	USB_DEVICE(0x0582, 0x0014),
693fb2ed616STakashi Iwai 	QUIRK_DRIVER_INFO {
694e5779998SDaniel Mack 		.vendor_name = "EDIROL",
695e5779998SDaniel Mack 		.product_name = "UM-880",
696fb2ed616STakashi Iwai 		QUIRK_DATA_MIDI_FIXED_ENDPOINT(0) {
697e5779998SDaniel Mack 			.out_cables = 0x01ff,
698e5779998SDaniel Mack 			.in_cables  = 0x01ff
699e5779998SDaniel Mack 		}
700e5779998SDaniel Mack 	}
701e5779998SDaniel Mack },
702e5779998SDaniel Mack {
703e5779998SDaniel Mack 	/* has ID 0x0017 when not in "Advanced Driver" mode */
704e5779998SDaniel Mack 	USB_DEVICE(0x0582, 0x0016),
705fb2ed616STakashi Iwai 	QUIRK_DRIVER_INFO {
706e5779998SDaniel Mack 		.vendor_name = "EDIROL",
707e5779998SDaniel Mack 		.product_name = "SD-90",
708fb2ed616STakashi Iwai 		QUIRK_DATA_COMPOSITE {
709fb2ed616STakashi Iwai 			{ QUIRK_DATA_STANDARD_AUDIO(0) },
710fb2ed616STakashi Iwai 			{ QUIRK_DATA_STANDARD_AUDIO(1) },
711e5779998SDaniel Mack 			{
712fb2ed616STakashi Iwai 				QUIRK_DATA_MIDI_FIXED_ENDPOINT(2) {
713e5779998SDaniel Mack 					.out_cables = 0x000f,
714e5779998SDaniel Mack 					.in_cables  = 0x000f
715e5779998SDaniel Mack 				}
716e5779998SDaniel Mack 			},
717fb2ed616STakashi Iwai 			QUIRK_COMPOSITE_END
718e5779998SDaniel Mack 		}
719e5779998SDaniel Mack 	}
720e5779998SDaniel Mack },
721e5779998SDaniel Mack {
722e5779998SDaniel Mack 	/* has ID 0x001c when not in "Advanced Driver" mode */
723e5779998SDaniel Mack 	USB_DEVICE(0x0582, 0x001b),
724fb2ed616STakashi Iwai 	QUIRK_DRIVER_INFO {
725e5779998SDaniel Mack 		.vendor_name = "Roland",
726e5779998SDaniel Mack 		.product_name = "MMP-2",
727fb2ed616STakashi Iwai 		QUIRK_DATA_COMPOSITE {
728fb2ed616STakashi Iwai 			{ QUIRK_DATA_IGNORE(0) },
729fb2ed616STakashi Iwai 			{ QUIRK_DATA_IGNORE(1) },
730e5779998SDaniel Mack 			{
731fb2ed616STakashi Iwai 				QUIRK_DATA_MIDI_FIXED_ENDPOINT(2) {
732e5779998SDaniel Mack 					.out_cables = 0x0001,
733e5779998SDaniel Mack 					.in_cables  = 0x0001
734e5779998SDaniel Mack 				}
735e5779998SDaniel Mack 			},
736fb2ed616STakashi Iwai 			QUIRK_COMPOSITE_END
737e5779998SDaniel Mack 		}
738e5779998SDaniel Mack 	}
739e5779998SDaniel Mack },
740e5779998SDaniel Mack {
741e5779998SDaniel Mack 	/* has ID 0x001e when not in "Advanced Driver" mode */
742e5779998SDaniel Mack 	USB_DEVICE(0x0582, 0x001d),
743fb2ed616STakashi Iwai 	QUIRK_DRIVER_INFO {
744e5779998SDaniel Mack 		.vendor_name = "Roland",
745e5779998SDaniel Mack 		.product_name = "V-SYNTH",
746fb2ed616STakashi Iwai 		QUIRK_DATA_MIDI_FIXED_ENDPOINT(0) {
747e5779998SDaniel Mack 			.out_cables = 0x0001,
748e5779998SDaniel Mack 			.in_cables  = 0x0001
749e5779998SDaniel Mack 		}
750e5779998SDaniel Mack 	}
751e5779998SDaniel Mack },
752e5779998SDaniel Mack {
753e5779998SDaniel Mack 	/* has ID 0x0024 when not in "Advanced Driver" mode */
754e5779998SDaniel Mack 	USB_DEVICE(0x0582, 0x0023),
755fb2ed616STakashi Iwai 	QUIRK_DRIVER_INFO {
756e5779998SDaniel Mack 		.vendor_name = "EDIROL",
757e5779998SDaniel Mack 		.product_name = "UM-550",
758fb2ed616STakashi Iwai 		QUIRK_DATA_MIDI_FIXED_ENDPOINT(0) {
759e5779998SDaniel Mack 			.out_cables = 0x003f,
760e5779998SDaniel Mack 			.in_cables  = 0x003f
761e5779998SDaniel Mack 		}
762e5779998SDaniel Mack 	}
763e5779998SDaniel Mack },
764e5779998SDaniel Mack {
765e5779998SDaniel Mack 	/*
766e5779998SDaniel Mack 	 * This quirk is for the "Advanced Driver" mode. If off, the UA-20
767e5779998SDaniel Mack 	 * has ID 0x0026 and is standard compliant, but has only 16-bit PCM
768e5779998SDaniel Mack 	 * and no MIDI.
769e5779998SDaniel Mack 	 */
770e5779998SDaniel Mack 	USB_DEVICE(0x0582, 0x0025),
771fb2ed616STakashi Iwai 	QUIRK_DRIVER_INFO {
772e5779998SDaniel Mack 		.vendor_name = "EDIROL",
773e5779998SDaniel Mack 		.product_name = "UA-20",
774fb2ed616STakashi Iwai 		QUIRK_DATA_COMPOSITE {
775fb2ed616STakashi Iwai 			{ QUIRK_DATA_IGNORE(0) },
776e5779998SDaniel Mack 			{
777fb2ed616STakashi Iwai 				QUIRK_DATA_AUDIOFORMAT(1) {
778015eb0b0SClemens Ladisch 					.formats = SNDRV_PCM_FMTBIT_S24_3LE,
779e5779998SDaniel Mack 					.channels = 2,
780e5779998SDaniel Mack 					.iface = 1,
781e5779998SDaniel Mack 					.altsetting = 1,
782e5779998SDaniel Mack 					.altset_idx = 1,
783e5779998SDaniel Mack 					.attributes = 0,
784e5779998SDaniel Mack 					.endpoint = 0x01,
785e5779998SDaniel Mack 					.ep_attr = 0x01,
786e5779998SDaniel Mack 					.rates = SNDRV_PCM_RATE_CONTINUOUS,
787e5779998SDaniel Mack 					.rate_min = 44100,
788e5779998SDaniel Mack 					.rate_max = 44100,
789e5779998SDaniel Mack 				}
790e5779998SDaniel Mack 			},
791e5779998SDaniel Mack 			{
792fb2ed616STakashi Iwai 				QUIRK_DATA_AUDIOFORMAT(2) {
793015eb0b0SClemens Ladisch 					.formats = SNDRV_PCM_FMTBIT_S24_3LE,
794e5779998SDaniel Mack 					.channels = 2,
795e5779998SDaniel Mack 					.iface = 2,
796e5779998SDaniel Mack 					.altsetting = 1,
797e5779998SDaniel Mack 					.altset_idx = 1,
798e5779998SDaniel Mack 					.attributes = 0,
799e5779998SDaniel Mack 					.endpoint = 0x82,
800e5779998SDaniel Mack 					.ep_attr = 0x01,
801e5779998SDaniel Mack 					.rates = SNDRV_PCM_RATE_CONTINUOUS,
802e5779998SDaniel Mack 					.rate_min = 44100,
803e5779998SDaniel Mack 					.rate_max = 44100,
804e5779998SDaniel Mack 				}
805e5779998SDaniel Mack 			},
806e5779998SDaniel Mack 			{
807fb2ed616STakashi Iwai 				QUIRK_DATA_MIDI_FIXED_ENDPOINT(3) {
808e5779998SDaniel Mack 					.out_cables = 0x0001,
809e5779998SDaniel Mack 					.in_cables  = 0x0001
810e5779998SDaniel Mack 				}
811e5779998SDaniel Mack 			},
812fb2ed616STakashi Iwai 			QUIRK_COMPOSITE_END
813e5779998SDaniel Mack 		}
814e5779998SDaniel Mack 	}
815e5779998SDaniel Mack },
816e5779998SDaniel Mack {
817e5779998SDaniel Mack 	/* has ID 0x0028 when not in "Advanced Driver" mode */
818e5779998SDaniel Mack 	USB_DEVICE(0x0582, 0x0027),
819fb2ed616STakashi Iwai 	QUIRK_DRIVER_INFO {
820e5779998SDaniel Mack 		.vendor_name = "EDIROL",
821e5779998SDaniel Mack 		.product_name = "SD-20",
822fb2ed616STakashi Iwai 		QUIRK_DATA_MIDI_FIXED_ENDPOINT(0) {
823e5779998SDaniel Mack 			.out_cables = 0x0003,
824e5779998SDaniel Mack 			.in_cables  = 0x0007
825e5779998SDaniel Mack 		}
826e5779998SDaniel Mack 	}
827e5779998SDaniel Mack },
828e5779998SDaniel Mack {
829e5779998SDaniel Mack 	/* has ID 0x002a when not in "Advanced Driver" mode */
830e5779998SDaniel Mack 	USB_DEVICE(0x0582, 0x0029),
831fb2ed616STakashi Iwai 	QUIRK_DRIVER_INFO {
832e5779998SDaniel Mack 		.vendor_name = "EDIROL",
833e5779998SDaniel Mack 		.product_name = "SD-80",
834fb2ed616STakashi Iwai 		QUIRK_DATA_MIDI_FIXED_ENDPOINT(0) {
835e5779998SDaniel Mack 			.out_cables = 0x000f,
836e5779998SDaniel Mack 			.in_cables  = 0x000f
837e5779998SDaniel Mack 		}
838e5779998SDaniel Mack 	}
839e5779998SDaniel Mack },
840e5779998SDaniel Mack {	/*
841e5779998SDaniel Mack 	 * This quirk is for the "Advanced" modes of the Edirol UA-700.
842e5779998SDaniel Mack 	 * If the sample format switch is not in an advanced setting, the
843e5779998SDaniel Mack 	 * UA-700 has ID 0x0582/0x002c and is standard compliant (no quirks),
844e5779998SDaniel Mack 	 * but offers only 16-bit PCM and no MIDI.
845e5779998SDaniel Mack 	 */
846e5779998SDaniel Mack 	USB_DEVICE_VENDOR_SPEC(0x0582, 0x002b),
847fb2ed616STakashi Iwai 	QUIRK_DRIVER_INFO {
848e5779998SDaniel Mack 		.vendor_name = "EDIROL",
849e5779998SDaniel Mack 		.product_name = "UA-700",
850fb2ed616STakashi Iwai 		QUIRK_DATA_COMPOSITE {
851fb2ed616STakashi Iwai 			{ QUIRK_DATA_EDIROL_UAXX(1) },
852fb2ed616STakashi Iwai 			{ QUIRK_DATA_EDIROL_UAXX(2) },
853fb2ed616STakashi Iwai 			{ QUIRK_DATA_EDIROL_UAXX(3) },
854fb2ed616STakashi Iwai 			QUIRK_COMPOSITE_END
855e5779998SDaniel Mack 		}
856e5779998SDaniel Mack 	}
857e5779998SDaniel Mack },
858e5779998SDaniel Mack {
859e5779998SDaniel Mack 	/* has ID 0x002e when not in "Advanced Driver" mode */
860e5779998SDaniel Mack 	USB_DEVICE(0x0582, 0x002d),
861fb2ed616STakashi Iwai 	QUIRK_DRIVER_INFO {
862e5779998SDaniel Mack 		.vendor_name = "Roland",
863e5779998SDaniel Mack 		.product_name = "XV-2020",
864fb2ed616STakashi Iwai 		QUIRK_DATA_MIDI_FIXED_ENDPOINT(0) {
865e5779998SDaniel Mack 			.out_cables = 0x0001,
866e5779998SDaniel Mack 			.in_cables  = 0x0001
867e5779998SDaniel Mack 		}
868e5779998SDaniel Mack 	}
869e5779998SDaniel Mack },
870e5779998SDaniel Mack {
871e5779998SDaniel Mack 	/* has ID 0x0030 when not in "Advanced Driver" mode */
872e5779998SDaniel Mack 	USB_DEVICE(0x0582, 0x002f),
873fb2ed616STakashi Iwai 	QUIRK_DRIVER_INFO {
874e5779998SDaniel Mack 		.vendor_name = "Roland",
875e5779998SDaniel Mack 		.product_name = "VariOS",
876fb2ed616STakashi Iwai 		QUIRK_DATA_MIDI_FIXED_ENDPOINT(0) {
877e5779998SDaniel Mack 			.out_cables = 0x0007,
878e5779998SDaniel Mack 			.in_cables  = 0x0007
879e5779998SDaniel Mack 		}
880e5779998SDaniel Mack 	}
881e5779998SDaniel Mack },
882e5779998SDaniel Mack {
883e5779998SDaniel Mack 	/* has ID 0x0034 when not in "Advanced Driver" mode */
884e5779998SDaniel Mack 	USB_DEVICE(0x0582, 0x0033),
885fb2ed616STakashi Iwai 	QUIRK_DRIVER_INFO {
886e5779998SDaniel Mack 		.vendor_name = "EDIROL",
887e5779998SDaniel Mack 		.product_name = "PCR",
888fb2ed616STakashi Iwai 		QUIRK_DATA_MIDI_FIXED_ENDPOINT(0) {
889e5779998SDaniel Mack 			.out_cables = 0x0003,
890e5779998SDaniel Mack 			.in_cables  = 0x0007
891e5779998SDaniel Mack 		}
892e5779998SDaniel Mack 	}
893e5779998SDaniel Mack },
894e5779998SDaniel Mack {
895e5779998SDaniel Mack 	/*
896e5779998SDaniel Mack 	 * Has ID 0x0038 when not in "Advanced Driver" mode;
897e5779998SDaniel Mack 	 * later revisions use IDs 0x0054 and 0x00a2.
898e5779998SDaniel Mack 	 */
899e5779998SDaniel Mack 	USB_DEVICE(0x0582, 0x0037),
900fb2ed616STakashi Iwai 	QUIRK_DRIVER_INFO {
901e5779998SDaniel Mack 		.vendor_name = "Roland",
902e5779998SDaniel Mack 		.product_name = "Digital Piano",
903fb2ed616STakashi Iwai 		QUIRK_DATA_MIDI_FIXED_ENDPOINT(0) {
904e5779998SDaniel Mack 			.out_cables = 0x0001,
905e5779998SDaniel Mack 			.in_cables  = 0x0001
906e5779998SDaniel Mack 		}
907e5779998SDaniel Mack 	}
908e5779998SDaniel Mack },
909e5779998SDaniel Mack {
910e5779998SDaniel Mack 	/*
911e5779998SDaniel Mack 	 * This quirk is for the "Advanced Driver" mode.  If off, the GS-10
912e5779998SDaniel Mack 	 * has ID 0x003c and is standard compliant, but has only 16-bit PCM
913e5779998SDaniel Mack 	 * and no MIDI.
914e5779998SDaniel Mack 	 */
915e5779998SDaniel Mack 	USB_DEVICE_VENDOR_SPEC(0x0582, 0x003b),
916fb2ed616STakashi Iwai 	QUIRK_DRIVER_INFO {
917e5779998SDaniel Mack 		.vendor_name = "BOSS",
918e5779998SDaniel Mack 		.product_name = "GS-10",
919fb2ed616STakashi Iwai 		QUIRK_DATA_COMPOSITE {
920fb2ed616STakashi Iwai 			{ QUIRK_DATA_STANDARD_AUDIO(1) },
921fb2ed616STakashi Iwai 			{ QUIRK_DATA_STANDARD_AUDIO(2) },
922fb2ed616STakashi Iwai 			{ QUIRK_DATA_STANDARD_MIDI(3) },
923fb2ed616STakashi Iwai 			QUIRK_COMPOSITE_END
924e5779998SDaniel Mack 		}
925e5779998SDaniel Mack 	}
926e5779998SDaniel Mack },
927e5779998SDaniel Mack {
928e5779998SDaniel Mack 	/* has ID 0x0041 when not in "Advanced Driver" mode */
929e5779998SDaniel Mack 	USB_DEVICE(0x0582, 0x0040),
930fb2ed616STakashi Iwai 	QUIRK_DRIVER_INFO {
931e5779998SDaniel Mack 		.vendor_name = "Roland",
932e5779998SDaniel Mack 		.product_name = "GI-20",
933fb2ed616STakashi Iwai 		QUIRK_DATA_MIDI_FIXED_ENDPOINT(0) {
934e5779998SDaniel Mack 			.out_cables = 0x0001,
935e5779998SDaniel Mack 			.in_cables  = 0x0001
936e5779998SDaniel Mack 		}
937e5779998SDaniel Mack 	}
938e5779998SDaniel Mack },
939e5779998SDaniel Mack {
940e5779998SDaniel Mack 	/* has ID 0x0043 when not in "Advanced Driver" mode */
941e5779998SDaniel Mack 	USB_DEVICE(0x0582, 0x0042),
942fb2ed616STakashi Iwai 	QUIRK_DRIVER_INFO {
943e5779998SDaniel Mack 		.vendor_name = "Roland",
944e5779998SDaniel Mack 		.product_name = "RS-70",
945fb2ed616STakashi Iwai 		QUIRK_DATA_MIDI_FIXED_ENDPOINT(0) {
946e5779998SDaniel Mack 			.out_cables = 0x0001,
947e5779998SDaniel Mack 			.in_cables  = 0x0001
948e5779998SDaniel Mack 		}
949e5779998SDaniel Mack 	}
950e5779998SDaniel Mack },
951e5779998SDaniel Mack {
952e5779998SDaniel Mack 	/* has ID 0x0049 when not in "Advanced Driver" mode */
953e5779998SDaniel Mack 	USB_DEVICE(0x0582, 0x0047),
954fb2ed616STakashi Iwai 	QUIRK_DRIVER_INFO {
955e5779998SDaniel Mack 		/* .vendor_name = "EDIROL", */
956e5779998SDaniel Mack 		/* .product_name = "UR-80", */
957fb2ed616STakashi Iwai 		QUIRK_DATA_COMPOSITE {
958e5779998SDaniel Mack 			/* in the 96 kHz modes, only interface 1 is there */
959fb2ed616STakashi Iwai 			{ QUIRK_DATA_STANDARD_AUDIO(1) },
960fb2ed616STakashi Iwai 			{ QUIRK_DATA_STANDARD_AUDIO(2) },
961fb2ed616STakashi Iwai 			QUIRK_COMPOSITE_END
962e5779998SDaniel Mack 		}
963e5779998SDaniel Mack 	}
964e5779998SDaniel Mack },
965e5779998SDaniel Mack {
966e5779998SDaniel Mack 	/* has ID 0x004a when not in "Advanced Driver" mode */
967e5779998SDaniel Mack 	USB_DEVICE(0x0582, 0x0048),
968fb2ed616STakashi Iwai 	QUIRK_DRIVER_INFO {
969e5779998SDaniel Mack 		/* .vendor_name = "EDIROL", */
970e5779998SDaniel Mack 		/* .product_name = "UR-80", */
971fb2ed616STakashi Iwai 		QUIRK_DATA_MIDI_FIXED_ENDPOINT(0) {
972e5779998SDaniel Mack 			.out_cables = 0x0003,
973e5779998SDaniel Mack 			.in_cables  = 0x0007
974e5779998SDaniel Mack 		}
975e5779998SDaniel Mack 	}
976e5779998SDaniel Mack },
977e5779998SDaniel Mack {
978e5779998SDaniel Mack 	/* has ID 0x004e when not in "Advanced Driver" mode */
979e5779998SDaniel Mack 	USB_DEVICE(0x0582, 0x004c),
980fb2ed616STakashi Iwai 	QUIRK_DRIVER_INFO {
981e5779998SDaniel Mack 		.vendor_name = "EDIROL",
982e5779998SDaniel Mack 		.product_name = "PCR-A",
983fb2ed616STakashi Iwai 		QUIRK_DATA_COMPOSITE {
984fb2ed616STakashi Iwai 			{ QUIRK_DATA_STANDARD_AUDIO(1) },
985fb2ed616STakashi Iwai 			{ QUIRK_DATA_STANDARD_AUDIO(2) },
986fb2ed616STakashi Iwai 			QUIRK_COMPOSITE_END
987e5779998SDaniel Mack 		}
988e5779998SDaniel Mack 	}
989e5779998SDaniel Mack },
990e5779998SDaniel Mack {
991e5779998SDaniel Mack 	/* has ID 0x004f when not in "Advanced Driver" mode */
992e5779998SDaniel Mack 	USB_DEVICE(0x0582, 0x004d),
993fb2ed616STakashi Iwai 	QUIRK_DRIVER_INFO {
994e5779998SDaniel Mack 		.vendor_name = "EDIROL",
995e5779998SDaniel Mack 		.product_name = "PCR-A",
996fb2ed616STakashi Iwai 		QUIRK_DATA_MIDI_FIXED_ENDPOINT(0) {
997e5779998SDaniel Mack 			.out_cables = 0x0003,
998e5779998SDaniel Mack 			.in_cables  = 0x0007
999e5779998SDaniel Mack 		}
1000e5779998SDaniel Mack 	}
1001e5779998SDaniel Mack },
1002e5779998SDaniel Mack {
1003e5779998SDaniel Mack 	/*
1004e5779998SDaniel Mack 	 * This quirk is for the "Advanced Driver" mode. If off, the UA-3FX
1005e5779998SDaniel Mack 	 * is standard compliant, but has only 16-bit PCM.
1006e5779998SDaniel Mack 	 */
1007e5779998SDaniel Mack 	USB_DEVICE(0x0582, 0x0050),
1008fb2ed616STakashi Iwai 	QUIRK_DRIVER_INFO {
1009e5779998SDaniel Mack 		.vendor_name = "EDIROL",
1010e5779998SDaniel Mack 		.product_name = "UA-3FX",
1011fb2ed616STakashi Iwai 		QUIRK_DATA_COMPOSITE {
1012fb2ed616STakashi Iwai 			{ QUIRK_DATA_STANDARD_AUDIO(1) },
1013fb2ed616STakashi Iwai 			{ QUIRK_DATA_STANDARD_AUDIO(2) },
1014fb2ed616STakashi Iwai 			QUIRK_COMPOSITE_END
1015e5779998SDaniel Mack 		}
1016e5779998SDaniel Mack 	}
1017e5779998SDaniel Mack },
1018e5779998SDaniel Mack {
1019e5779998SDaniel Mack 	USB_DEVICE(0x0582, 0x0052),
1020fb2ed616STakashi Iwai 	QUIRK_DRIVER_INFO {
1021e5779998SDaniel Mack 		.vendor_name = "EDIROL",
1022e5779998SDaniel Mack 		.product_name = "UM-1SX",
1023fb2ed616STakashi Iwai 		QUIRK_DATA_STANDARD_MIDI(0)
1024e5779998SDaniel Mack 	}
1025e5779998SDaniel Mack },
1026e5779998SDaniel Mack {
1027e5779998SDaniel Mack 	USB_DEVICE(0x0582, 0x0060),
1028fb2ed616STakashi Iwai 	QUIRK_DRIVER_INFO {
1029e5779998SDaniel Mack 		.vendor_name = "Roland",
1030e5779998SDaniel Mack 		.product_name = "EXR Series",
1031fb2ed616STakashi Iwai 		QUIRK_DATA_STANDARD_MIDI(0)
1032e5779998SDaniel Mack 	}
1033e5779998SDaniel Mack },
1034e5779998SDaniel Mack {
1035aa70201fSClemens Ladisch 	/* has ID 0x0066 when not in "Advanced Driver" mode */
1036aa70201fSClemens Ladisch 	USB_DEVICE(0x0582, 0x0064),
1037fb2ed616STakashi Iwai 	QUIRK_DRIVER_INFO {
1038aa70201fSClemens Ladisch 		/* .vendor_name = "EDIROL", */
1039aa70201fSClemens Ladisch 		/* .product_name = "PCR-1", */
1040fb2ed616STakashi Iwai 		QUIRK_DATA_COMPOSITE {
1041fb2ed616STakashi Iwai 			{ QUIRK_DATA_STANDARD_AUDIO(1) },
1042fb2ed616STakashi Iwai 			{ QUIRK_DATA_STANDARD_AUDIO(2) },
1043fb2ed616STakashi Iwai 			QUIRK_COMPOSITE_END
1044aa70201fSClemens Ladisch 		}
1045aa70201fSClemens Ladisch 	}
1046aa70201fSClemens Ladisch },
1047aa70201fSClemens Ladisch {
1048e5779998SDaniel Mack 	/* has ID 0x0067 when not in "Advanced Driver" mode */
1049e5779998SDaniel Mack 	USB_DEVICE(0x0582, 0x0065),
1050fb2ed616STakashi Iwai 	QUIRK_DRIVER_INFO {
1051aa70201fSClemens Ladisch 		/* .vendor_name = "EDIROL", */
1052aa70201fSClemens Ladisch 		/* .product_name = "PCR-1", */
1053fb2ed616STakashi Iwai 		QUIRK_DATA_MIDI_FIXED_ENDPOINT(0) {
1054e5779998SDaniel Mack 			.out_cables = 0x0001,
1055e5779998SDaniel Mack 			.in_cables  = 0x0003
1056e5779998SDaniel Mack 		}
1057e5779998SDaniel Mack 	}
1058e5779998SDaniel Mack },
1059e5779998SDaniel Mack {
1060e5779998SDaniel Mack 	/* has ID 0x006e when not in "Advanced Driver" mode */
1061e5779998SDaniel Mack 	USB_DEVICE(0x0582, 0x006d),
1062fb2ed616STakashi Iwai 	QUIRK_DRIVER_INFO {
1063e5779998SDaniel Mack 		.vendor_name = "Roland",
1064e5779998SDaniel Mack 		.product_name = "FANTOM-X",
1065fb2ed616STakashi Iwai 		QUIRK_DATA_MIDI_FIXED_ENDPOINT(0) {
1066e5779998SDaniel Mack 			.out_cables = 0x0001,
1067e5779998SDaniel Mack 			.in_cables  = 0x0001
1068e5779998SDaniel Mack 		}
1069e5779998SDaniel Mack 	}
1070e5779998SDaniel Mack },
1071e5779998SDaniel Mack {	/*
1072e5779998SDaniel Mack 	 * This quirk is for the "Advanced" modes of the Edirol UA-25.
1073e5779998SDaniel Mack 	 * If the switch is not in an advanced setting, the UA-25 has
1074e5779998SDaniel Mack 	 * ID 0x0582/0x0073 and is standard compliant (no quirks), but
1075e5779998SDaniel Mack 	 * offers only 16-bit PCM at 44.1 kHz and no MIDI.
1076e5779998SDaniel Mack 	 */
1077e5779998SDaniel Mack 	USB_DEVICE_VENDOR_SPEC(0x0582, 0x0074),
1078fb2ed616STakashi Iwai 	QUIRK_DRIVER_INFO {
1079e5779998SDaniel Mack 		.vendor_name = "EDIROL",
1080e5779998SDaniel Mack 		.product_name = "UA-25",
1081fb2ed616STakashi Iwai 		QUIRK_DATA_COMPOSITE {
1082fb2ed616STakashi Iwai 			{ QUIRK_DATA_EDIROL_UAXX(0) },
1083fb2ed616STakashi Iwai 			{ QUIRK_DATA_EDIROL_UAXX(1) },
1084fb2ed616STakashi Iwai 			{ QUIRK_DATA_EDIROL_UAXX(2) },
1085fb2ed616STakashi Iwai 			QUIRK_COMPOSITE_END
1086e5779998SDaniel Mack 		}
1087e5779998SDaniel Mack 	}
1088e5779998SDaniel Mack },
1089e5779998SDaniel Mack {
1090e5779998SDaniel Mack 	/* has ID 0x0076 when not in "Advanced Driver" mode */
1091e5779998SDaniel Mack 	USB_DEVICE(0x0582, 0x0075),
1092fb2ed616STakashi Iwai 	QUIRK_DRIVER_INFO {
1093e5779998SDaniel Mack 		.vendor_name = "BOSS",
1094e5779998SDaniel Mack 		.product_name = "DR-880",
1095fb2ed616STakashi Iwai 		QUIRK_DATA_MIDI_FIXED_ENDPOINT(0) {
1096e5779998SDaniel Mack 			.out_cables = 0x0001,
1097e5779998SDaniel Mack 			.in_cables  = 0x0001
1098e5779998SDaniel Mack 		}
1099e5779998SDaniel Mack 	}
1100e5779998SDaniel Mack },
1101e5779998SDaniel Mack {
1102e5779998SDaniel Mack 	/* has ID 0x007b when not in "Advanced Driver" mode */
1103e5779998SDaniel Mack 	USB_DEVICE_VENDOR_SPEC(0x0582, 0x007a),
1104fb2ed616STakashi Iwai 	QUIRK_DRIVER_INFO {
1105e5779998SDaniel Mack 		.vendor_name = "Roland",
1106e5779998SDaniel Mack 		/* "RD" or "RD-700SX"? */
1107fb2ed616STakashi Iwai 		QUIRK_DATA_MIDI_FIXED_ENDPOINT(0) {
1108e5779998SDaniel Mack 			.out_cables = 0x0003,
1109e5779998SDaniel Mack 			.in_cables  = 0x0003
1110e5779998SDaniel Mack 		}
1111e5779998SDaniel Mack 	}
1112e5779998SDaniel Mack },
1113e5779998SDaniel Mack {
1114e5779998SDaniel Mack 	/* has ID 0x0081 when not in "Advanced Driver" mode */
1115e5779998SDaniel Mack 	USB_DEVICE(0x0582, 0x0080),
1116fb2ed616STakashi Iwai 	QUIRK_DRIVER_INFO {
1117e5779998SDaniel Mack 		.vendor_name = "Roland",
1118e5779998SDaniel Mack 		.product_name = "G-70",
1119fb2ed616STakashi Iwai 		QUIRK_DATA_MIDI_FIXED_ENDPOINT(0) {
1120e5779998SDaniel Mack 			.out_cables = 0x0001,
1121e5779998SDaniel Mack 			.in_cables  = 0x0001
1122e5779998SDaniel Mack 		}
1123e5779998SDaniel Mack 	}
1124e5779998SDaniel Mack },
1125e5779998SDaniel Mack {
1126e5779998SDaniel Mack 	/* has ID 0x008c when not in "Advanced Driver" mode */
1127e5779998SDaniel Mack 	USB_DEVICE(0x0582, 0x008b),
1128fb2ed616STakashi Iwai 	QUIRK_DRIVER_INFO {
1129e5779998SDaniel Mack 		.vendor_name = "EDIROL",
1130e5779998SDaniel Mack 		.product_name = "PC-50",
1131fb2ed616STakashi Iwai 		QUIRK_DATA_MIDI_FIXED_ENDPOINT(0) {
1132e5779998SDaniel Mack 			.out_cables = 0x0001,
1133e5779998SDaniel Mack 			.in_cables  = 0x0001
1134e5779998SDaniel Mack 		}
1135e5779998SDaniel Mack 	}
1136e5779998SDaniel Mack },
1137e5779998SDaniel Mack {
1138e5779998SDaniel Mack 	/*
1139e5779998SDaniel Mack 	 * This quirk is for the "Advanced Driver" mode. If off, the UA-4FX
1140e5779998SDaniel Mack 	 * is standard compliant, but has only 16-bit PCM and no MIDI.
1141e5779998SDaniel Mack 	 */
1142e5779998SDaniel Mack 	USB_DEVICE(0x0582, 0x00a3),
1143fb2ed616STakashi Iwai 	QUIRK_DRIVER_INFO {
1144e5779998SDaniel Mack 		.vendor_name = "EDIROL",
1145e5779998SDaniel Mack 		.product_name = "UA-4FX",
1146fb2ed616STakashi Iwai 		QUIRK_DATA_COMPOSITE {
1147fb2ed616STakashi Iwai 			{ QUIRK_DATA_EDIROL_UAXX(0) },
1148fb2ed616STakashi Iwai 			{ QUIRK_DATA_EDIROL_UAXX(1) },
1149fb2ed616STakashi Iwai 			{ QUIRK_DATA_EDIROL_UAXX(2) },
1150fb2ed616STakashi Iwai 			QUIRK_COMPOSITE_END
1151e5779998SDaniel Mack 		}
1152e5779998SDaniel Mack 	}
1153e5779998SDaniel Mack },
1154e5779998SDaniel Mack {
1155e5779998SDaniel Mack 	/* Edirol M-16DX */
1156e5779998SDaniel Mack 	USB_DEVICE(0x0582, 0x00c4),
1157fb2ed616STakashi Iwai 	QUIRK_DRIVER_INFO {
1158fb2ed616STakashi Iwai 		QUIRK_DATA_COMPOSITE {
1159fb2ed616STakashi Iwai 			{ QUIRK_DATA_STANDARD_AUDIO(0) },
1160fb2ed616STakashi Iwai 			{ QUIRK_DATA_STANDARD_AUDIO(1) },
1161e5779998SDaniel Mack 			{
1162fb2ed616STakashi Iwai 				QUIRK_DATA_MIDI_FIXED_ENDPOINT(2) {
1163e5779998SDaniel Mack 					.out_cables = 0x0001,
1164e5779998SDaniel Mack 					.in_cables  = 0x0001
1165e5779998SDaniel Mack 				}
1166e5779998SDaniel Mack 			},
1167fb2ed616STakashi Iwai 			QUIRK_COMPOSITE_END
1168e5779998SDaniel Mack 		}
1169e5779998SDaniel Mack 	}
1170e5779998SDaniel Mack },
1171e5779998SDaniel Mack {
1172e5779998SDaniel Mack 	/* Advanced modes of the Edirol UA-25EX.
1173e5779998SDaniel Mack 	 * For the standard mode, UA-25EX has ID 0582:00e7, which
1174e5779998SDaniel Mack 	 * offers only 16-bit PCM at 44.1 kHz and no MIDI.
1175e5779998SDaniel Mack 	 */
1176e5779998SDaniel Mack 	USB_DEVICE_VENDOR_SPEC(0x0582, 0x00e6),
1177fb2ed616STakashi Iwai 	QUIRK_DRIVER_INFO {
1178e5779998SDaniel Mack 		.vendor_name = "EDIROL",
1179e5779998SDaniel Mack 		.product_name = "UA-25EX",
1180fb2ed616STakashi Iwai 		QUIRK_DATA_COMPOSITE {
1181fb2ed616STakashi Iwai 			{ QUIRK_DATA_EDIROL_UAXX(0) },
1182fb2ed616STakashi Iwai 			{ QUIRK_DATA_EDIROL_UAXX(1) },
1183fb2ed616STakashi Iwai 			{ QUIRK_DATA_EDIROL_UAXX(2) },
1184fb2ed616STakashi Iwai 			QUIRK_COMPOSITE_END
1185e5779998SDaniel Mack 		}
1186e5779998SDaniel Mack 	}
1187e5779998SDaniel Mack },
1188e5779998SDaniel Mack {
1189927c9423SClemens Ladisch 	/* Edirol UM-3G */
1190927c9423SClemens Ladisch 	USB_DEVICE_VENDOR_SPEC(0x0582, 0x0108),
1191fb2ed616STakashi Iwai 	QUIRK_DRIVER_INFO {
1192fb2ed616STakashi Iwai 		QUIRK_DATA_MIDI_FIXED_ENDPOINT(0) {
1193a0c6d309SClemens Ladisch 			.out_cables = 0x0007,
1194a0c6d309SClemens Ladisch 			.in_cables  = 0x0007
1195a0c6d309SClemens Ladisch 		}
1196927c9423SClemens Ladisch 	}
1197927c9423SClemens Ladisch },
1198927c9423SClemens Ladisch {
119953da5ebfSClemens Ladisch 	/* BOSS ME-25 */
120053da5ebfSClemens Ladisch 	USB_DEVICE(0x0582, 0x0113),
1201fb2ed616STakashi Iwai 	QUIRK_DRIVER_INFO {
1202fb2ed616STakashi Iwai 		QUIRK_DATA_COMPOSITE {
1203fb2ed616STakashi Iwai 			{ QUIRK_DATA_STANDARD_AUDIO(0) },
1204fb2ed616STakashi Iwai 			{ QUIRK_DATA_STANDARD_AUDIO(1) },
120553da5ebfSClemens Ladisch 			{
1206fb2ed616STakashi Iwai 				QUIRK_DATA_MIDI_FIXED_ENDPOINT(2) {
120753da5ebfSClemens Ladisch 					.out_cables = 0x0001,
120853da5ebfSClemens Ladisch 					.in_cables  = 0x0001
120953da5ebfSClemens Ladisch 				}
121053da5ebfSClemens Ladisch 			},
1211fb2ed616STakashi Iwai 			QUIRK_COMPOSITE_END
121253da5ebfSClemens Ladisch 		}
121353da5ebfSClemens Ladisch 	}
121453da5ebfSClemens Ladisch },
121553da5ebfSClemens Ladisch {
1216b7f33917SClemens Ladisch 	/* only 44.1 kHz works at the moment */
1217b7f33917SClemens Ladisch 	USB_DEVICE(0x0582, 0x0120),
1218fb2ed616STakashi Iwai 	QUIRK_DRIVER_INFO {
12199d0c9193SClemens Ladisch 		/* .vendor_name = "Roland", */
1220b7f33917SClemens Ladisch 		/* .product_name = "OCTO-CAPTURE", */
1221fb2ed616STakashi Iwai 		QUIRK_DATA_COMPOSITE {
1222ae7cc709SJohn F Leach 			{
1223fb2ed616STakashi Iwai 				QUIRK_DATA_AUDIOFORMAT(0) {
1224b7f33917SClemens Ladisch 					.formats = SNDRV_PCM_FMTBIT_S32_LE,
1225b7f33917SClemens Ladisch 					.channels = 10,
1226b7f33917SClemens Ladisch 					.iface = 0,
1227b7f33917SClemens Ladisch 					.altsetting = 1,
1228b7f33917SClemens Ladisch 					.altset_idx = 1,
1229b7f33917SClemens Ladisch 					.endpoint = 0x05,
1230b7f33917SClemens Ladisch 					.ep_attr = 0x05,
1231b7f33917SClemens Ladisch 					.rates = SNDRV_PCM_RATE_44100,
1232b7f33917SClemens Ladisch 					.rate_min = 44100,
1233b7f33917SClemens Ladisch 					.rate_max = 44100,
1234b7f33917SClemens Ladisch 					.nr_rates = 1,
1235b7f33917SClemens Ladisch 					.rate_table = (unsigned int[]) { 44100 }
1236b7f33917SClemens Ladisch 				}
1237ae7cc709SJohn F Leach 			},
1238ae7cc709SJohn F Leach 			{
1239fb2ed616STakashi Iwai 				QUIRK_DATA_AUDIOFORMAT(1) {
1240b7f33917SClemens Ladisch 					.formats = SNDRV_PCM_FMTBIT_S32_LE,
1241b7f33917SClemens Ladisch 					.channels = 12,
1242b7f33917SClemens Ladisch 					.iface = 1,
1243b7f33917SClemens Ladisch 					.altsetting = 1,
1244b7f33917SClemens Ladisch 					.altset_idx = 1,
1245b7f33917SClemens Ladisch 					.endpoint = 0x85,
1246b7f33917SClemens Ladisch 					.ep_attr = 0x25,
1247b7f33917SClemens Ladisch 					.rates = SNDRV_PCM_RATE_44100,
1248b7f33917SClemens Ladisch 					.rate_min = 44100,
1249b7f33917SClemens Ladisch 					.rate_max = 44100,
1250b7f33917SClemens Ladisch 					.nr_rates = 1,
1251b7f33917SClemens Ladisch 					.rate_table = (unsigned int[]) { 44100 }
1252ae7cc709SJohn F Leach 				}
1253ae7cc709SJohn F Leach 			},
1254ae7cc709SJohn F Leach 			{
1255fb2ed616STakashi Iwai 				QUIRK_DATA_MIDI_FIXED_ENDPOINT(2) {
12567b28079bSClemens Ladisch 					.out_cables = 0x0001,
12577b28079bSClemens Ladisch 					.in_cables  = 0x0001
12587b28079bSClemens Ladisch 				}
12597b28079bSClemens Ladisch 			},
1260fb2ed616STakashi Iwai 			{ QUIRK_DATA_IGNORE(3) },
1261fb2ed616STakashi Iwai 			{ QUIRK_DATA_IGNORE(4) },
1262fb2ed616STakashi Iwai 			QUIRK_COMPOSITE_END
1263c9c9e4e4SKazutomo Yoshii 		}
1264c9c9e4e4SKazutomo Yoshii 	}
1265c9c9e4e4SKazutomo Yoshii },
126674953e20SClemens Ladisch {
1267b7f33917SClemens Ladisch 	/* only 44.1 kHz works at the moment */
1268b7f33917SClemens Ladisch 	USB_DEVICE(0x0582, 0x012f),
1269fb2ed616STakashi Iwai 	QUIRK_DRIVER_INFO {
1270b7f33917SClemens Ladisch 		/* .vendor_name = "Roland", */
1271b7f33917SClemens Ladisch 		/* .product_name = "QUAD-CAPTURE", */
1272fb2ed616STakashi Iwai 		QUIRK_DATA_COMPOSITE {
127374953e20SClemens Ladisch 			{
1274fb2ed616STakashi Iwai 				QUIRK_DATA_AUDIOFORMAT(0) {
1275b7f33917SClemens Ladisch 					.formats = SNDRV_PCM_FMTBIT_S32_LE,
1276b7f33917SClemens Ladisch 					.channels = 4,
1277b7f33917SClemens Ladisch 					.iface = 0,
1278b7f33917SClemens Ladisch 					.altsetting = 1,
1279b7f33917SClemens Ladisch 					.altset_idx = 1,
1280b7f33917SClemens Ladisch 					.endpoint = 0x05,
1281b7f33917SClemens Ladisch 					.ep_attr = 0x05,
1282b7f33917SClemens Ladisch 					.rates = SNDRV_PCM_RATE_44100,
1283b7f33917SClemens Ladisch 					.rate_min = 44100,
1284b7f33917SClemens Ladisch 					.rate_max = 44100,
1285b7f33917SClemens Ladisch 					.nr_rates = 1,
1286b7f33917SClemens Ladisch 					.rate_table = (unsigned int[]) { 44100 }
1287b7f33917SClemens Ladisch 				}
1288b7f33917SClemens Ladisch 			},
1289b7f33917SClemens Ladisch 			{
1290fb2ed616STakashi Iwai 				QUIRK_DATA_AUDIOFORMAT(1) {
1291b7f33917SClemens Ladisch 					.formats = SNDRV_PCM_FMTBIT_S32_LE,
1292b7f33917SClemens Ladisch 					.channels = 6,
1293b7f33917SClemens Ladisch 					.iface = 1,
1294b7f33917SClemens Ladisch 					.altsetting = 1,
1295b7f33917SClemens Ladisch 					.altset_idx = 1,
1296b7f33917SClemens Ladisch 					.endpoint = 0x85,
1297b7f33917SClemens Ladisch 					.ep_attr = 0x25,
1298b7f33917SClemens Ladisch 					.rates = SNDRV_PCM_RATE_44100,
1299b7f33917SClemens Ladisch 					.rate_min = 44100,
1300b7f33917SClemens Ladisch 					.rate_max = 44100,
1301b7f33917SClemens Ladisch 					.nr_rates = 1,
1302b7f33917SClemens Ladisch 					.rate_table = (unsigned int[]) { 44100 }
1303b7f33917SClemens Ladisch 				}
130474953e20SClemens Ladisch 			},
130574953e20SClemens Ladisch 			{
1306fb2ed616STakashi Iwai 				QUIRK_DATA_MIDI_FIXED_ENDPOINT(2) {
130774953e20SClemens Ladisch 					.out_cables = 0x0001,
130874953e20SClemens Ladisch 					.in_cables  = 0x0001
130974953e20SClemens Ladisch 				}
131074953e20SClemens Ladisch 			},
1311fb2ed616STakashi Iwai 			{ QUIRK_DATA_IGNORE(3) },
1312fb2ed616STakashi Iwai 			{ QUIRK_DATA_IGNORE(4) },
1313fb2ed616STakashi Iwai 			QUIRK_COMPOSITE_END
131474953e20SClemens Ladisch 		}
131574953e20SClemens Ladisch 	}
131674953e20SClemens Ladisch },
1317fcdcd1deSDaniel Mack {
1318fcdcd1deSDaniel Mack 	USB_DEVICE(0x0582, 0x0159),
1319fb2ed616STakashi Iwai 	QUIRK_DRIVER_INFO {
1320fcdcd1deSDaniel Mack 		/* .vendor_name = "Roland", */
1321fcdcd1deSDaniel Mack 		/* .product_name = "UA-22", */
1322fb2ed616STakashi Iwai 		QUIRK_DATA_COMPOSITE {
1323fb2ed616STakashi Iwai 			{ QUIRK_DATA_STANDARD_AUDIO(0) },
1324fb2ed616STakashi Iwai 			{ QUIRK_DATA_STANDARD_AUDIO(1) },
1325fcdcd1deSDaniel Mack 			{
1326fb2ed616STakashi Iwai 				QUIRK_DATA_MIDI_FIXED_ENDPOINT(2) {
1327fcdcd1deSDaniel Mack 					.out_cables = 0x0001,
1328fcdcd1deSDaniel Mack 					.in_cables = 0x0001
1329fcdcd1deSDaniel Mack 				}
1330fcdcd1deSDaniel Mack 			},
1331fb2ed616STakashi Iwai 			QUIRK_COMPOSITE_END
1332fcdcd1deSDaniel Mack 		}
1333fcdcd1deSDaniel Mack 	}
1334fcdcd1deSDaniel Mack },
1335d7631453STakashi Iwai 
1336d7631453STakashi Iwai /* UA101 and co are supported by another driver */
1337d7631453STakashi Iwai {
1338d7631453STakashi Iwai 	USB_DEVICE(0x0582, 0x0044), /* UA-1000 high speed */
1339fb2ed616STakashi Iwai 	QUIRK_DRIVER_INFO {
1340d7631453STakashi Iwai 		.ifnum = QUIRK_NODEV_INTERFACE
1341d7631453STakashi Iwai 	},
1342d7631453STakashi Iwai },
1343d7631453STakashi Iwai {
1344d7631453STakashi Iwai 	USB_DEVICE(0x0582, 0x007d), /* UA-101 high speed */
1345fb2ed616STakashi Iwai 	QUIRK_DRIVER_INFO {
1346d7631453STakashi Iwai 		.ifnum = QUIRK_NODEV_INTERFACE
1347d7631453STakashi Iwai 	},
1348d7631453STakashi Iwai },
1349d7631453STakashi Iwai {
1350d7631453STakashi Iwai 	USB_DEVICE(0x0582, 0x008d), /* UA-101 full speed */
1351fb2ed616STakashi Iwai 	QUIRK_DRIVER_INFO {
1352d7631453STakashi Iwai 		.ifnum = QUIRK_NODEV_INTERFACE
1353d7631453STakashi Iwai 	},
1354d7631453STakashi Iwai },
1355d7631453STakashi Iwai 
1356aafe77ccSClemens Ladisch /* this catches most recent vendor-specific Roland devices */
1357aafe77ccSClemens Ladisch {
1358aafe77ccSClemens Ladisch 	.match_flags = USB_DEVICE_ID_MATCH_VENDOR |
1359aafe77ccSClemens Ladisch 	               USB_DEVICE_ID_MATCH_INT_CLASS,
1360aafe77ccSClemens Ladisch 	.idVendor = 0x0582,
1361aafe77ccSClemens Ladisch 	.bInterfaceClass = USB_CLASS_VENDOR_SPEC,
1362fb2ed616STakashi Iwai 	QUIRK_DRIVER_INFO {
1363aafe77ccSClemens Ladisch 		.ifnum = QUIRK_ANY_INTERFACE,
1364aafe77ccSClemens Ladisch 		.type = QUIRK_AUTODETECT
1365aafe77ccSClemens Ladisch 	}
1366aafe77ccSClemens Ladisch },
1367e5779998SDaniel Mack 
1368e5779998SDaniel Mack /* Guillemot devices */
1369e5779998SDaniel Mack {
1370e5779998SDaniel Mack 	/*
1371e5779998SDaniel Mack 	 * This is for the "Windows Edition" where the external MIDI ports are
1372e5779998SDaniel Mack 	 * the only MIDI ports; the control data is reported through HID
1373e5779998SDaniel Mack 	 * interfaces.  The "Macintosh Edition" has ID 0xd002 and uses standard
1374e5779998SDaniel Mack 	 * compliant USB MIDI ports for external MIDI and controls.
1375e5779998SDaniel Mack 	 */
1376e5779998SDaniel Mack 	USB_DEVICE_VENDOR_SPEC(0x06f8, 0xb000),
1377fb2ed616STakashi Iwai 	QUIRK_DRIVER_INFO {
1378e5779998SDaniel Mack 		.vendor_name = "Hercules",
1379e5779998SDaniel Mack 		.product_name = "DJ Console (WE)",
1380fb2ed616STakashi Iwai 		QUIRK_DATA_MIDI_FIXED_ENDPOINT(4) {
1381e5779998SDaniel Mack 			.out_cables = 0x0001,
1382e5779998SDaniel Mack 			.in_cables = 0x0001
1383e5779998SDaniel Mack 		}
1384e5779998SDaniel Mack 	}
1385e5779998SDaniel Mack },
1386e5779998SDaniel Mack 
1387e5779998SDaniel Mack /* Midiman/M-Audio devices */
1388e5779998SDaniel Mack {
1389e5779998SDaniel Mack 	USB_DEVICE_VENDOR_SPEC(0x0763, 0x1002),
1390fb2ed616STakashi Iwai 	QUIRK_DRIVER_INFO {
1391e5779998SDaniel Mack 		.vendor_name = "M-Audio",
1392e5779998SDaniel Mack 		.product_name = "MidiSport 2x2",
1393fb2ed616STakashi Iwai 		QUIRK_DATA_MIDI_MIDIMAN(QUIRK_ANY_INTERFACE) {
1394e5779998SDaniel Mack 			.out_cables = 0x0003,
1395e5779998SDaniel Mack 			.in_cables  = 0x0003
1396e5779998SDaniel Mack 		}
1397e5779998SDaniel Mack 	}
1398e5779998SDaniel Mack },
1399e5779998SDaniel Mack {
1400e5779998SDaniel Mack 	USB_DEVICE_VENDOR_SPEC(0x0763, 0x1011),
1401fb2ed616STakashi Iwai 	QUIRK_DRIVER_INFO {
1402e5779998SDaniel Mack 		.vendor_name = "M-Audio",
1403e5779998SDaniel Mack 		.product_name = "MidiSport 1x1",
1404fb2ed616STakashi Iwai 		QUIRK_DATA_MIDI_MIDIMAN(QUIRK_ANY_INTERFACE) {
1405e5779998SDaniel Mack 			.out_cables = 0x0001,
1406e5779998SDaniel Mack 			.in_cables  = 0x0001
1407e5779998SDaniel Mack 		}
1408e5779998SDaniel Mack 	}
1409e5779998SDaniel Mack },
1410e5779998SDaniel Mack {
1411e5779998SDaniel Mack 	USB_DEVICE_VENDOR_SPEC(0x0763, 0x1015),
1412fb2ed616STakashi Iwai 	QUIRK_DRIVER_INFO {
1413e5779998SDaniel Mack 		.vendor_name = "M-Audio",
1414e5779998SDaniel Mack 		.product_name = "Keystation",
1415fb2ed616STakashi Iwai 		QUIRK_DATA_MIDI_MIDIMAN(QUIRK_ANY_INTERFACE) {
1416e5779998SDaniel Mack 			.out_cables = 0x0001,
1417e5779998SDaniel Mack 			.in_cables  = 0x0001
1418e5779998SDaniel Mack 		}
1419e5779998SDaniel Mack 	}
1420e5779998SDaniel Mack },
1421e5779998SDaniel Mack {
1422e5779998SDaniel Mack 	USB_DEVICE_VENDOR_SPEC(0x0763, 0x1021),
1423fb2ed616STakashi Iwai 	QUIRK_DRIVER_INFO {
1424e5779998SDaniel Mack 		.vendor_name = "M-Audio",
1425e5779998SDaniel Mack 		.product_name = "MidiSport 4x4",
1426fb2ed616STakashi Iwai 		QUIRK_DATA_MIDI_MIDIMAN(QUIRK_ANY_INTERFACE) {
1427e5779998SDaniel Mack 			.out_cables = 0x000f,
1428e5779998SDaniel Mack 			.in_cables  = 0x000f
1429e5779998SDaniel Mack 		}
1430e5779998SDaniel Mack 	}
1431e5779998SDaniel Mack },
1432e5779998SDaniel Mack {
1433e5779998SDaniel Mack 	/*
1434e5779998SDaniel Mack 	 * For hardware revision 1.05; in the later revisions (1.10 and
1435e5779998SDaniel Mack 	 * 1.21), 0x1031 is the ID for the device without firmware.
1436e5779998SDaniel Mack 	 * Thanks to Olaf Giesbrecht <Olaf_Giesbrecht@yahoo.de>
1437e5779998SDaniel Mack 	 */
1438e5779998SDaniel Mack 	USB_DEVICE_VER(0x0763, 0x1031, 0x0100, 0x0109),
1439fb2ed616STakashi Iwai 	QUIRK_DRIVER_INFO {
1440e5779998SDaniel Mack 		.vendor_name = "M-Audio",
1441e5779998SDaniel Mack 		.product_name = "MidiSport 8x8",
1442fb2ed616STakashi Iwai 		QUIRK_DATA_MIDI_MIDIMAN(QUIRK_ANY_INTERFACE) {
1443e5779998SDaniel Mack 			.out_cables = 0x01ff,
1444e5779998SDaniel Mack 			.in_cables  = 0x01ff
1445e5779998SDaniel Mack 		}
1446e5779998SDaniel Mack 	}
1447e5779998SDaniel Mack },
1448e5779998SDaniel Mack {
1449e5779998SDaniel Mack 	USB_DEVICE_VENDOR_SPEC(0x0763, 0x1033),
1450fb2ed616STakashi Iwai 	QUIRK_DRIVER_INFO {
1451e5779998SDaniel Mack 		.vendor_name = "M-Audio",
1452e5779998SDaniel Mack 		.product_name = "MidiSport 8x8",
1453fb2ed616STakashi Iwai 		QUIRK_DATA_MIDI_MIDIMAN(QUIRK_ANY_INTERFACE) {
1454e5779998SDaniel Mack 			.out_cables = 0x01ff,
1455e5779998SDaniel Mack 			.in_cables  = 0x01ff
1456e5779998SDaniel Mack 		}
1457e5779998SDaniel Mack 	}
1458e5779998SDaniel Mack },
1459e5779998SDaniel Mack {
1460e5779998SDaniel Mack 	USB_DEVICE_VENDOR_SPEC(0x0763, 0x1041),
1461fb2ed616STakashi Iwai 	QUIRK_DRIVER_INFO {
1462e5779998SDaniel Mack 		.vendor_name = "M-Audio",
1463e5779998SDaniel Mack 		.product_name = "MidiSport 2x4",
1464fb2ed616STakashi Iwai 		QUIRK_DATA_MIDI_MIDIMAN(QUIRK_ANY_INTERFACE) {
1465e5779998SDaniel Mack 			.out_cables = 0x000f,
1466e5779998SDaniel Mack 			.in_cables  = 0x0003
1467e5779998SDaniel Mack 		}
1468e5779998SDaniel Mack 	}
1469e5779998SDaniel Mack },
1470e5779998SDaniel Mack {
1471e5779998SDaniel Mack 	USB_DEVICE_VENDOR_SPEC(0x0763, 0x2001),
1472fb2ed616STakashi Iwai 	QUIRK_DRIVER_INFO {
1473e5779998SDaniel Mack 		.vendor_name = "M-Audio",
1474e5779998SDaniel Mack 		.product_name = "Quattro",
1475fb2ed616STakashi Iwai 		QUIRK_DATA_COMPOSITE {
1476e5779998SDaniel Mack 			/*
1477e5779998SDaniel Mack 			 * Interfaces 0-2 are "Windows-compatible", 16-bit only,
1478e5779998SDaniel Mack 			 * and share endpoints with the other interfaces.
1479e5779998SDaniel Mack 			 * Ignore them.  The other interfaces can do 24 bits,
1480e5779998SDaniel Mack 			 * but captured samples are big-endian (see usbaudio.c).
1481e5779998SDaniel Mack 			 */
1482fb2ed616STakashi Iwai 			{ QUIRK_DATA_IGNORE(0) },
1483fb2ed616STakashi Iwai 			{ QUIRK_DATA_IGNORE(1) },
1484fb2ed616STakashi Iwai 			{ QUIRK_DATA_IGNORE(2) },
1485fb2ed616STakashi Iwai 			{ QUIRK_DATA_IGNORE(3) },
1486fb2ed616STakashi Iwai 			{ QUIRK_DATA_STANDARD_AUDIO(4) },
1487fb2ed616STakashi Iwai 			{ QUIRK_DATA_STANDARD_AUDIO(5) },
1488fb2ed616STakashi Iwai 			{ QUIRK_DATA_IGNORE(6) },
1489fb2ed616STakashi Iwai 			{ QUIRK_DATA_STANDARD_AUDIO(7) },
1490fb2ed616STakashi Iwai 			{ QUIRK_DATA_STANDARD_AUDIO(8) },
1491e5779998SDaniel Mack 			{
1492fb2ed616STakashi Iwai 				QUIRK_DATA_MIDI_MIDIMAN(9) {
1493e5779998SDaniel Mack 					.out_cables = 0x0001,
1494e5779998SDaniel Mack 					.in_cables  = 0x0001
1495e5779998SDaniel Mack 				}
1496e5779998SDaniel Mack 			},
1497fb2ed616STakashi Iwai 			QUIRK_COMPOSITE_END
1498e5779998SDaniel Mack 		}
1499e5779998SDaniel Mack 	}
1500e5779998SDaniel Mack },
1501e5779998SDaniel Mack {
1502e5779998SDaniel Mack 	USB_DEVICE_VENDOR_SPEC(0x0763, 0x2003),
1503fb2ed616STakashi Iwai 	QUIRK_DRIVER_INFO {
1504e5779998SDaniel Mack 		.vendor_name = "M-Audio",
1505e5779998SDaniel Mack 		.product_name = "AudioPhile",
1506fb2ed616STakashi Iwai 		QUIRK_DATA_MIDI_MIDIMAN(6) {
1507e5779998SDaniel Mack 			.out_cables = 0x0001,
1508e5779998SDaniel Mack 			.in_cables  = 0x0001
1509e5779998SDaniel Mack 		}
1510e5779998SDaniel Mack 	}
1511e5779998SDaniel Mack },
1512e5779998SDaniel Mack {
1513e5779998SDaniel Mack 	USB_DEVICE_VENDOR_SPEC(0x0763, 0x2008),
1514fb2ed616STakashi Iwai 	QUIRK_DRIVER_INFO {
1515e5779998SDaniel Mack 		.vendor_name = "M-Audio",
1516e5779998SDaniel Mack 		.product_name = "Ozone",
1517fb2ed616STakashi Iwai 		QUIRK_DATA_MIDI_MIDIMAN(3) {
1518e5779998SDaniel Mack 			.out_cables = 0x0001,
1519e5779998SDaniel Mack 			.in_cables  = 0x0001
1520e5779998SDaniel Mack 		}
1521e5779998SDaniel Mack 	}
1522e5779998SDaniel Mack },
1523e5779998SDaniel Mack {
1524e5779998SDaniel Mack 	USB_DEVICE_VENDOR_SPEC(0x0763, 0x200d),
1525fb2ed616STakashi Iwai 	QUIRK_DRIVER_INFO {
1526e5779998SDaniel Mack 		.vendor_name = "M-Audio",
1527e5779998SDaniel Mack 		.product_name = "OmniStudio",
1528fb2ed616STakashi Iwai 		QUIRK_DATA_COMPOSITE {
1529fb2ed616STakashi Iwai 			{ QUIRK_DATA_IGNORE(0) },
1530fb2ed616STakashi Iwai 			{ QUIRK_DATA_IGNORE(1) },
1531fb2ed616STakashi Iwai 			{ QUIRK_DATA_IGNORE(2) },
1532fb2ed616STakashi Iwai 			{ QUIRK_DATA_IGNORE(3) },
1533fb2ed616STakashi Iwai 			{ QUIRK_DATA_STANDARD_AUDIO(4) },
1534fb2ed616STakashi Iwai 			{ QUIRK_DATA_STANDARD_AUDIO(5) },
1535fb2ed616STakashi Iwai 			{ QUIRK_DATA_IGNORE(6) },
1536fb2ed616STakashi Iwai 			{ QUIRK_DATA_STANDARD_AUDIO(7) },
1537fb2ed616STakashi Iwai 			{ QUIRK_DATA_STANDARD_AUDIO(8) },
1538e5779998SDaniel Mack 			{
1539fb2ed616STakashi Iwai 				QUIRK_DATA_MIDI_MIDIMAN(9) {
1540e5779998SDaniel Mack 					.out_cables = 0x0001,
1541e5779998SDaniel Mack 					.in_cables  = 0x0001
1542e5779998SDaniel Mack 				}
1543e5779998SDaniel Mack 			},
1544fb2ed616STakashi Iwai 			QUIRK_COMPOSITE_END
1545e5779998SDaniel Mack 		}
1546e5779998SDaniel Mack 	}
1547e5779998SDaniel Mack },
1548e5779998SDaniel Mack {
1549e5779998SDaniel Mack 	USB_DEVICE(0x0763, 0x2019),
1550fb2ed616STakashi Iwai 	QUIRK_DRIVER_INFO {
1551e5779998SDaniel Mack 		/* .vendor_name = "M-Audio", */
1552e5779998SDaniel Mack 		/* .product_name = "Ozone Academic", */
1553fb2ed616STakashi Iwai 		QUIRK_DATA_COMPOSITE {
1554fb2ed616STakashi Iwai 			{ QUIRK_DATA_STANDARD_AUDIO(0) },
1555fb2ed616STakashi Iwai 			{ QUIRK_DATA_STANDARD_AUDIO(1) },
1556fb2ed616STakashi Iwai 			{ QUIRK_DATA_STANDARD_AUDIO(2) },
1557e5779998SDaniel Mack 			{
1558fb2ed616STakashi Iwai 				QUIRK_DATA_MIDI_MIDIMAN(3) {
1559e5779998SDaniel Mack 					.out_cables = 0x0001,
1560e5779998SDaniel Mack 					.in_cables  = 0x0001
1561e5779998SDaniel Mack 				}
1562e5779998SDaniel Mack 			},
1563fb2ed616STakashi Iwai 			QUIRK_COMPOSITE_END
1564e5779998SDaniel Mack 		}
1565e5779998SDaniel Mack 	}
1566e5779998SDaniel Mack },
1567fca5bca4SFelix Homann {
15682f01a612STakashi Iwai 	/* M-Audio Micro */
15692f01a612STakashi Iwai 	USB_DEVICE_VENDOR_SPEC(0x0763, 0x201a),
15702f01a612STakashi Iwai },
15712f01a612STakashi Iwai {
157276f74bcaSEldad Zack 	USB_DEVICE_VENDOR_SPEC(0x0763, 0x2030),
1573fb2ed616STakashi Iwai 	QUIRK_DRIVER_INFO {
157476f74bcaSEldad Zack 		/* .vendor_name = "M-Audio", */
157576f74bcaSEldad Zack 		/* .product_name = "Fast Track C400", */
1576fb2ed616STakashi Iwai 		QUIRK_DATA_COMPOSITE {
1577fb2ed616STakashi Iwai 			{ QUIRK_DATA_STANDARD_MIXER(1) },
157876f74bcaSEldad Zack 			/* Playback */
157976f74bcaSEldad Zack 			{
1580fb2ed616STakashi Iwai 				QUIRK_DATA_AUDIOFORMAT(2) {
158176f74bcaSEldad Zack 					.formats = SNDRV_PCM_FMTBIT_S24_3LE,
158276f74bcaSEldad Zack 					.channels = 6,
158376f74bcaSEldad Zack 					.iface = 2,
158476f74bcaSEldad Zack 					.altsetting = 1,
158576f74bcaSEldad Zack 					.altset_idx = 1,
158676f74bcaSEldad Zack 					.attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
158776f74bcaSEldad Zack 					.endpoint = 0x01,
158876f74bcaSEldad Zack 					.ep_attr = 0x09,
158976f74bcaSEldad Zack 					.rates = SNDRV_PCM_RATE_44100 |
159076f74bcaSEldad Zack 						 SNDRV_PCM_RATE_48000 |
159176f74bcaSEldad Zack 						 SNDRV_PCM_RATE_88200 |
159276f74bcaSEldad Zack 						 SNDRV_PCM_RATE_96000,
159376f74bcaSEldad Zack 					.rate_min = 44100,
159476f74bcaSEldad Zack 					.rate_max = 96000,
159576f74bcaSEldad Zack 					.nr_rates = 4,
159676f74bcaSEldad Zack 					.rate_table = (unsigned int[]) {
159776f74bcaSEldad Zack 							44100, 48000, 88200, 96000
159876f74bcaSEldad Zack 					},
15992aad272bSEldad Zack 					.clock = 0x80,
160076f74bcaSEldad Zack 				}
160176f74bcaSEldad Zack 			},
160276f74bcaSEldad Zack 			/* Capture */
160376f74bcaSEldad Zack 			{
1604fb2ed616STakashi Iwai 				QUIRK_DATA_AUDIOFORMAT(3) {
160576f74bcaSEldad Zack 					.formats = SNDRV_PCM_FMTBIT_S24_3LE,
160676f74bcaSEldad Zack 					.channels = 4,
160776f74bcaSEldad Zack 					.iface = 3,
160876f74bcaSEldad Zack 					.altsetting = 1,
160976f74bcaSEldad Zack 					.altset_idx = 1,
161076f74bcaSEldad Zack 					.attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
161176f74bcaSEldad Zack 					.endpoint = 0x81,
161276f74bcaSEldad Zack 					.ep_attr = 0x05,
161376f74bcaSEldad Zack 					.rates = SNDRV_PCM_RATE_44100 |
161476f74bcaSEldad Zack 						 SNDRV_PCM_RATE_48000 |
161576f74bcaSEldad Zack 						 SNDRV_PCM_RATE_88200 |
161676f74bcaSEldad Zack 						 SNDRV_PCM_RATE_96000,
161776f74bcaSEldad Zack 					.rate_min = 44100,
161876f74bcaSEldad Zack 					.rate_max = 96000,
161976f74bcaSEldad Zack 					.nr_rates = 4,
162076f74bcaSEldad Zack 					.rate_table = (unsigned int[]) {
162176f74bcaSEldad Zack 						44100, 48000, 88200, 96000
162276f74bcaSEldad Zack 					},
16232aad272bSEldad Zack 					.clock = 0x80,
162476f74bcaSEldad Zack 				}
162576f74bcaSEldad Zack 			},
1626fb2ed616STakashi Iwai 			/* MIDI: Interface = 4*/
1627fb2ed616STakashi Iwai 			QUIRK_COMPOSITE_END
162876f74bcaSEldad Zack 		}
162976f74bcaSEldad Zack 	}
163076f74bcaSEldad Zack },
163176f74bcaSEldad Zack {
1632e9a25e04SMatt Gruskin 	USB_DEVICE_VENDOR_SPEC(0x0763, 0x2031),
1633fb2ed616STakashi Iwai 	QUIRK_DRIVER_INFO {
1634e9a25e04SMatt Gruskin 		/* .vendor_name = "M-Audio", */
1635e9a25e04SMatt Gruskin 		/* .product_name = "Fast Track C600", */
1636fb2ed616STakashi Iwai 		QUIRK_DATA_COMPOSITE {
1637fb2ed616STakashi Iwai 			{ QUIRK_DATA_STANDARD_MIXER(1) },
1638e9a25e04SMatt Gruskin 			/* Playback */
1639e9a25e04SMatt Gruskin 			{
1640fb2ed616STakashi Iwai 				QUIRK_DATA_AUDIOFORMAT(2) {
1641e9a25e04SMatt Gruskin 					.formats = SNDRV_PCM_FMTBIT_S24_3LE,
1642e9a25e04SMatt Gruskin 					.channels = 8,
1643e9a25e04SMatt Gruskin 					.iface = 2,
1644e9a25e04SMatt Gruskin 					.altsetting = 1,
1645e9a25e04SMatt Gruskin 					.altset_idx = 1,
1646e9a25e04SMatt Gruskin 					.attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
1647e9a25e04SMatt Gruskin 					.endpoint = 0x01,
1648e9a25e04SMatt Gruskin 					.ep_attr = 0x09,
1649e9a25e04SMatt Gruskin 					.rates = SNDRV_PCM_RATE_44100 |
1650e9a25e04SMatt Gruskin 						 SNDRV_PCM_RATE_48000 |
1651e9a25e04SMatt Gruskin 						 SNDRV_PCM_RATE_88200 |
1652e9a25e04SMatt Gruskin 						 SNDRV_PCM_RATE_96000,
1653e9a25e04SMatt Gruskin 					.rate_min = 44100,
1654e9a25e04SMatt Gruskin 					.rate_max = 96000,
1655e9a25e04SMatt Gruskin 					.nr_rates = 4,
1656e9a25e04SMatt Gruskin 					.rate_table = (unsigned int[]) {
1657e9a25e04SMatt Gruskin 							44100, 48000, 88200, 96000
1658e9a25e04SMatt Gruskin 					},
1659e9a25e04SMatt Gruskin 					.clock = 0x80,
1660e9a25e04SMatt Gruskin 				}
1661e9a25e04SMatt Gruskin 			},
1662e9a25e04SMatt Gruskin 			/* Capture */
1663e9a25e04SMatt Gruskin 			{
1664fb2ed616STakashi Iwai 				QUIRK_DATA_AUDIOFORMAT(3) {
1665e9a25e04SMatt Gruskin 					.formats = SNDRV_PCM_FMTBIT_S24_3LE,
1666e9a25e04SMatt Gruskin 					.channels = 6,
1667e9a25e04SMatt Gruskin 					.iface = 3,
1668e9a25e04SMatt Gruskin 					.altsetting = 1,
1669e9a25e04SMatt Gruskin 					.altset_idx = 1,
1670e9a25e04SMatt Gruskin 					.attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
1671e9a25e04SMatt Gruskin 					.endpoint = 0x81,
1672e9a25e04SMatt Gruskin 					.ep_attr = 0x05,
1673e9a25e04SMatt Gruskin 					.rates = SNDRV_PCM_RATE_44100 |
1674e9a25e04SMatt Gruskin 						 SNDRV_PCM_RATE_48000 |
1675e9a25e04SMatt Gruskin 						 SNDRV_PCM_RATE_88200 |
1676e9a25e04SMatt Gruskin 						 SNDRV_PCM_RATE_96000,
1677e9a25e04SMatt Gruskin 					.rate_min = 44100,
1678e9a25e04SMatt Gruskin 					.rate_max = 96000,
1679e9a25e04SMatt Gruskin 					.nr_rates = 4,
1680e9a25e04SMatt Gruskin 					.rate_table = (unsigned int[]) {
1681e9a25e04SMatt Gruskin 						44100, 48000, 88200, 96000
1682e9a25e04SMatt Gruskin 					},
1683e9a25e04SMatt Gruskin 					.clock = 0x80,
1684e9a25e04SMatt Gruskin 				}
1685e9a25e04SMatt Gruskin 			},
1686fb2ed616STakashi Iwai 			/* MIDI: Interface = 4 */
1687fb2ed616STakashi Iwai 			QUIRK_COMPOSITE_END
1688e9a25e04SMatt Gruskin 		}
1689e9a25e04SMatt Gruskin 	}
1690e9a25e04SMatt Gruskin },
1691e9a25e04SMatt Gruskin {
1692c91d9cdaSDaniel Mack 	USB_DEVICE_VENDOR_SPEC(0x0763, 0x2080),
1693fb2ed616STakashi Iwai 	QUIRK_DRIVER_INFO {
1694fca5bca4SFelix Homann 		/* .vendor_name = "M-Audio", */
169565f04443SClemens Ladisch 		/* .product_name = "Fast Track Ultra", */
1696fb2ed616STakashi Iwai 		QUIRK_DATA_COMPOSITE {
1697fb2ed616STakashi Iwai 			{ QUIRK_DATA_STANDARD_MIXER(0) },
1698fca5bca4SFelix Homann 			{
1699fb2ed616STakashi Iwai 				QUIRK_DATA_AUDIOFORMAT(1) {
170065f04443SClemens Ladisch 					.formats = SNDRV_PCM_FMTBIT_S24_3LE,
170165f04443SClemens Ladisch 					.channels = 8,
170265f04443SClemens Ladisch 					.iface = 1,
170365f04443SClemens Ladisch 					.altsetting = 1,
170465f04443SClemens Ladisch 					.altset_idx = 1,
170565f04443SClemens Ladisch 					.attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
170665f04443SClemens Ladisch 					.endpoint = 0x01,
170765f04443SClemens Ladisch 					.ep_attr = 0x09,
170865f04443SClemens Ladisch 					.rates = SNDRV_PCM_RATE_44100 |
170965f04443SClemens Ladisch 						 SNDRV_PCM_RATE_48000 |
171065f04443SClemens Ladisch 						 SNDRV_PCM_RATE_88200 |
171165f04443SClemens Ladisch 						 SNDRV_PCM_RATE_96000,
171265f04443SClemens Ladisch 					.rate_min = 44100,
171365f04443SClemens Ladisch 					.rate_max = 96000,
171465f04443SClemens Ladisch 					.nr_rates = 4,
171565f04443SClemens Ladisch 					.rate_table = (unsigned int[]) {
171665f04443SClemens Ladisch 						44100, 48000, 88200, 96000
171765f04443SClemens Ladisch 					}
171865f04443SClemens Ladisch 				}
1719fca5bca4SFelix Homann 			},
1720fca5bca4SFelix Homann 			{
1721fb2ed616STakashi Iwai 				QUIRK_DATA_AUDIOFORMAT(2) {
172265f04443SClemens Ladisch 					.formats = SNDRV_PCM_FMTBIT_S24_3LE,
172365f04443SClemens Ladisch 					.channels = 8,
172465f04443SClemens Ladisch 					.iface = 2,
172565f04443SClemens Ladisch 					.altsetting = 1,
172665f04443SClemens Ladisch 					.altset_idx = 1,
172765f04443SClemens Ladisch 					.attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
172865f04443SClemens Ladisch 					.endpoint = 0x81,
172965f04443SClemens Ladisch 					.ep_attr = 0x05,
173065f04443SClemens Ladisch 					.rates = SNDRV_PCM_RATE_44100 |
173165f04443SClemens Ladisch 						 SNDRV_PCM_RATE_48000 |
173265f04443SClemens Ladisch 						 SNDRV_PCM_RATE_88200 |
173365f04443SClemens Ladisch 						 SNDRV_PCM_RATE_96000,
173465f04443SClemens Ladisch 					.rate_min = 44100,
173565f04443SClemens Ladisch 					.rate_max = 96000,
173665f04443SClemens Ladisch 					.nr_rates = 4,
173765f04443SClemens Ladisch 					.rate_table = (unsigned int[]) {
173865f04443SClemens Ladisch 						44100, 48000, 88200, 96000
173965f04443SClemens Ladisch 					}
174065f04443SClemens Ladisch 				}
1741fca5bca4SFelix Homann 			},
1742fca5bca4SFelix Homann 			/* interface 3 (MIDI) is standard compliant */
1743fb2ed616STakashi Iwai 			QUIRK_COMPOSITE_END
1744fca5bca4SFelix Homann 		}
1745fca5bca4SFelix Homann 	}
1746fca5bca4SFelix Homann },
1747fca5bca4SFelix Homann {
1748c91d9cdaSDaniel Mack 	USB_DEVICE_VENDOR_SPEC(0x0763, 0x2081),
1749fb2ed616STakashi Iwai 	QUIRK_DRIVER_INFO {
1750fca5bca4SFelix Homann 		/* .vendor_name = "M-Audio", */
1751fca5bca4SFelix Homann 		/* .product_name = "Fast Track Ultra 8R", */
1752fb2ed616STakashi Iwai 		QUIRK_DATA_COMPOSITE {
1753fb2ed616STakashi Iwai 			{ QUIRK_DATA_STANDARD_MIXER(0) },
1754fca5bca4SFelix Homann 			{
1755fb2ed616STakashi Iwai 				QUIRK_DATA_AUDIOFORMAT(1) {
175665f04443SClemens Ladisch 					.formats = SNDRV_PCM_FMTBIT_S24_3LE,
175765f04443SClemens Ladisch 					.channels = 8,
175865f04443SClemens Ladisch 					.iface = 1,
175965f04443SClemens Ladisch 					.altsetting = 1,
176065f04443SClemens Ladisch 					.altset_idx = 1,
176165f04443SClemens Ladisch 					.attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
176265f04443SClemens Ladisch 					.endpoint = 0x01,
176365f04443SClemens Ladisch 					.ep_attr = 0x09,
176465f04443SClemens Ladisch 					.rates = SNDRV_PCM_RATE_44100 |
176565f04443SClemens Ladisch 						 SNDRV_PCM_RATE_48000 |
176665f04443SClemens Ladisch 						 SNDRV_PCM_RATE_88200 |
176765f04443SClemens Ladisch 						 SNDRV_PCM_RATE_96000,
176865f04443SClemens Ladisch 					.rate_min = 44100,
176965f04443SClemens Ladisch 					.rate_max = 96000,
177065f04443SClemens Ladisch 					.nr_rates = 4,
177165f04443SClemens Ladisch 					.rate_table = (unsigned int[]) {
177265f04443SClemens Ladisch 							44100, 48000, 88200, 96000
177365f04443SClemens Ladisch 					}
177465f04443SClemens Ladisch 				}
1775fca5bca4SFelix Homann 			},
1776fca5bca4SFelix Homann 			{
1777fb2ed616STakashi Iwai 				QUIRK_DATA_AUDIOFORMAT(2) {
177865f04443SClemens Ladisch 					.formats = SNDRV_PCM_FMTBIT_S24_3LE,
177965f04443SClemens Ladisch 					.channels = 8,
178065f04443SClemens Ladisch 					.iface = 2,
178165f04443SClemens Ladisch 					.altsetting = 1,
178265f04443SClemens Ladisch 					.altset_idx = 1,
178365f04443SClemens Ladisch 					.attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
178465f04443SClemens Ladisch 					.endpoint = 0x81,
178565f04443SClemens Ladisch 					.ep_attr = 0x05,
178665f04443SClemens Ladisch 					.rates = SNDRV_PCM_RATE_44100 |
178765f04443SClemens Ladisch 						 SNDRV_PCM_RATE_48000 |
178865f04443SClemens Ladisch 						 SNDRV_PCM_RATE_88200 |
178965f04443SClemens Ladisch 						 SNDRV_PCM_RATE_96000,
179065f04443SClemens Ladisch 					.rate_min = 44100,
179165f04443SClemens Ladisch 					.rate_max = 96000,
179265f04443SClemens Ladisch 					.nr_rates = 4,
179365f04443SClemens Ladisch 					.rate_table = (unsigned int[]) {
179465f04443SClemens Ladisch 						44100, 48000, 88200, 96000
179565f04443SClemens Ladisch 					}
179665f04443SClemens Ladisch 				}
1797fca5bca4SFelix Homann 			},
1798fca5bca4SFelix Homann 			/* interface 3 (MIDI) is standard compliant */
1799fb2ed616STakashi Iwai 			QUIRK_COMPOSITE_END
1800fca5bca4SFelix Homann 		}
1801fca5bca4SFelix Homann 	}
1802fca5bca4SFelix Homann },
1803e5779998SDaniel Mack 
1804e5779998SDaniel Mack /* Casio devices */
1805e5779998SDaniel Mack {
1806e5779998SDaniel Mack 	USB_DEVICE(0x07cf, 0x6801),
1807fb2ed616STakashi Iwai 	QUIRK_DRIVER_INFO {
1808e5779998SDaniel Mack 		.vendor_name = "Casio",
1809e5779998SDaniel Mack 		.product_name = "PL-40R",
1810fb2ed616STakashi Iwai 		QUIRK_DATA_MIDI_YAMAHA(0)
1811e5779998SDaniel Mack 	}
1812e5779998SDaniel Mack },
1813e5779998SDaniel Mack {
1814e5779998SDaniel Mack 	/* this ID is used by several devices without a product ID */
1815e5779998SDaniel Mack 	USB_DEVICE(0x07cf, 0x6802),
1816fb2ed616STakashi Iwai 	QUIRK_DRIVER_INFO {
1817e5779998SDaniel Mack 		.vendor_name = "Casio",
1818e5779998SDaniel Mack 		.product_name = "Keyboard",
1819fb2ed616STakashi Iwai 		QUIRK_DATA_MIDI_YAMAHA(0)
1820e5779998SDaniel Mack 	}
1821e5779998SDaniel Mack },
1822e5779998SDaniel Mack 
1823e5779998SDaniel Mack /* Mark of the Unicorn devices */
1824e5779998SDaniel Mack {
1825e5779998SDaniel Mack 	/* thanks to Robert A. Lerche <ral 'at' msbit.com> */
1826e5779998SDaniel Mack 	.match_flags = USB_DEVICE_ID_MATCH_VENDOR |
1827e5779998SDaniel Mack 		       USB_DEVICE_ID_MATCH_PRODUCT |
1828e5779998SDaniel Mack 		       USB_DEVICE_ID_MATCH_DEV_SUBCLASS,
1829e5779998SDaniel Mack 	.idVendor = 0x07fd,
1830e5779998SDaniel Mack 	.idProduct = 0x0001,
1831e5779998SDaniel Mack 	.bDeviceSubClass = 2,
1832fb2ed616STakashi Iwai 	QUIRK_DRIVER_INFO {
1833e5779998SDaniel Mack 		.vendor_name = "MOTU",
1834e5779998SDaniel Mack 		.product_name = "Fastlane",
1835fb2ed616STakashi Iwai 		QUIRK_DATA_COMPOSITE {
1836fb2ed616STakashi Iwai 			{ QUIRK_DATA_RAW_BYTES(0) },
1837fb2ed616STakashi Iwai 			{ QUIRK_DATA_IGNORE(1) },
1838fb2ed616STakashi Iwai 			QUIRK_COMPOSITE_END
1839e5779998SDaniel Mack 		}
1840e5779998SDaniel Mack 	}
1841e5779998SDaniel Mack },
1842e5779998SDaniel Mack 
1843e5779998SDaniel Mack /* Emagic devices */
1844e5779998SDaniel Mack {
1845e5779998SDaniel Mack 	USB_DEVICE(0x086a, 0x0001),
1846fb2ed616STakashi Iwai 	QUIRK_DRIVER_INFO {
1847e5779998SDaniel Mack 		.vendor_name = "Emagic",
1848861bee5aSStefan Sauer 		.product_name = "Unitor8",
1849fb2ed616STakashi Iwai 		QUIRK_DATA_MIDI_EMAGIC(2) {
1850e5779998SDaniel Mack 			.out_cables = 0x80ff,
1851e5779998SDaniel Mack 			.in_cables  = 0x80ff
1852e5779998SDaniel Mack 		}
1853e5779998SDaniel Mack 	}
1854e5779998SDaniel Mack },
1855e5779998SDaniel Mack {
1856e5779998SDaniel Mack 	USB_DEVICE(0x086a, 0x0002),
1857fb2ed616STakashi Iwai 	QUIRK_DRIVER_INFO {
1858e5779998SDaniel Mack 		.vendor_name = "Emagic",
1859e5779998SDaniel Mack 		/* .product_name = "AMT8", */
1860fb2ed616STakashi Iwai 		QUIRK_DATA_MIDI_EMAGIC(2) {
1861e5779998SDaniel Mack 			.out_cables = 0x80ff,
1862e5779998SDaniel Mack 			.in_cables  = 0x80ff
1863e5779998SDaniel Mack 		}
1864e5779998SDaniel Mack 	}
1865e5779998SDaniel Mack },
1866e5779998SDaniel Mack {
1867e5779998SDaniel Mack 	USB_DEVICE(0x086a, 0x0003),
1868fb2ed616STakashi Iwai 	QUIRK_DRIVER_INFO {
1869e5779998SDaniel Mack 		.vendor_name = "Emagic",
1870e5779998SDaniel Mack 		/* .product_name = "MT4", */
1871fb2ed616STakashi Iwai 		QUIRK_DATA_MIDI_EMAGIC(2) {
1872e5779998SDaniel Mack 			.out_cables = 0x800f,
1873e5779998SDaniel Mack 			.in_cables  = 0x8003
1874e5779998SDaniel Mack 		}
1875e5779998SDaniel Mack 	}
1876e5779998SDaniel Mack },
1877e5779998SDaniel Mack 
187856a9eb1fSDaniel Mack /* KORG devices */
187956a9eb1fSDaniel Mack {
188056a9eb1fSDaniel Mack 	USB_DEVICE_VENDOR_SPEC(0x0944, 0x0200),
1881fb2ed616STakashi Iwai 	QUIRK_DRIVER_INFO {
188256a9eb1fSDaniel Mack 		.vendor_name = "KORG, Inc.",
188356a9eb1fSDaniel Mack 		/* .product_name = "PANDORA PX5D", */
1884fb2ed616STakashi Iwai 		QUIRK_DATA_STANDARD_MIDI(3)
188556a9eb1fSDaniel Mack 	}
188656a9eb1fSDaniel Mack },
188756a9eb1fSDaniel Mack 
18881bba160aSSergiusz Urbaniak {
18891bba160aSSergiusz Urbaniak 	USB_DEVICE_VENDOR_SPEC(0x0944, 0x0201),
1890fb2ed616STakashi Iwai 	QUIRK_DRIVER_INFO {
18911bba160aSSergiusz Urbaniak 		.vendor_name = "KORG, Inc.",
18921bba160aSSergiusz Urbaniak 		/* .product_name = "ToneLab ST", */
1893fb2ed616STakashi Iwai 		QUIRK_DATA_STANDARD_MIDI(3)
18941bba160aSSergiusz Urbaniak 	}
18951bba160aSSergiusz Urbaniak },
18961bba160aSSergiusz Urbaniak 
189764f40f9bSTakashi Iwai {
189864f40f9bSTakashi Iwai 	USB_DEVICE_VENDOR_SPEC(0x0944, 0x0204),
1899fb2ed616STakashi Iwai 	QUIRK_DRIVER_INFO {
190064f40f9bSTakashi Iwai 		.vendor_name = "KORG, Inc.",
190164f40f9bSTakashi Iwai 		/* .product_name = "ToneLab EX", */
1902fb2ed616STakashi Iwai 		QUIRK_DATA_STANDARD_MIDI(3)
190364f40f9bSTakashi Iwai 	}
190464f40f9bSTakashi Iwai },
190564f40f9bSTakashi Iwai 
19064434ade8SKrzysztof Foltman /* AKAI devices */
19074434ade8SKrzysztof Foltman {
19084434ade8SKrzysztof Foltman 	USB_DEVICE(0x09e8, 0x0062),
1909fb2ed616STakashi Iwai 	QUIRK_DRIVER_INFO {
19104434ade8SKrzysztof Foltman 		.vendor_name = "AKAI",
19114434ade8SKrzysztof Foltman 		.product_name = "MPD16",
19124434ade8SKrzysztof Foltman 		.ifnum = 0,
19134434ade8SKrzysztof Foltman 		.type = QUIRK_MIDI_AKAI,
19144434ade8SKrzysztof Foltman 	}
19154434ade8SKrzysztof Foltman },
19164434ade8SKrzysztof Foltman 
1917e9f49369SPaul Bonser {
1918e9f49369SPaul Bonser 	/* Akai MPC Element */
1919e9f49369SPaul Bonser 	USB_DEVICE(0x09e8, 0x0021),
1920fb2ed616STakashi Iwai 	QUIRK_DRIVER_INFO {
1921fb2ed616STakashi Iwai 		QUIRK_DATA_COMPOSITE {
1922fb2ed616STakashi Iwai 			{ QUIRK_DATA_IGNORE(0) },
1923fb2ed616STakashi Iwai 			{ QUIRK_DATA_STANDARD_MIDI(1) },
1924fb2ed616STakashi Iwai 			QUIRK_COMPOSITE_END
1925e9f49369SPaul Bonser 		}
1926e9f49369SPaul Bonser 	}
1927e9f49369SPaul Bonser },
1928e9f49369SPaul Bonser 
19290689a86aSDominic Sacré /* Steinberg devices */
19300689a86aSDominic Sacré {
19310689a86aSDominic Sacré 	/* Steinberg MI2 */
19320689a86aSDominic Sacré 	USB_DEVICE_VENDOR_SPEC(0x0a4e, 0x2040),
1933fb2ed616STakashi Iwai 	QUIRK_DRIVER_INFO {
1934fb2ed616STakashi Iwai 		QUIRK_DATA_COMPOSITE {
1935fb2ed616STakashi Iwai 			{ QUIRK_DATA_STANDARD_AUDIO(0) },
1936fb2ed616STakashi Iwai 			{ QUIRK_DATA_STANDARD_AUDIO(1) },
1937fb2ed616STakashi Iwai 			{ QUIRK_DATA_STANDARD_AUDIO(2) },
19380689a86aSDominic Sacré 			{
1939fb2ed616STakashi Iwai 				QUIRK_DATA_MIDI_FIXED_ENDPOINT(3) {
19400689a86aSDominic Sacré 					.out_cables = 0x0001,
19410689a86aSDominic Sacré 					.in_cables  = 0x0001
19420689a86aSDominic Sacré 				}
19430689a86aSDominic Sacré 			},
1944fb2ed616STakashi Iwai 			QUIRK_COMPOSITE_END
19450689a86aSDominic Sacré 		}
19460689a86aSDominic Sacré 	}
19470689a86aSDominic Sacré },
19480689a86aSDominic Sacré {
19490689a86aSDominic Sacré 	/* Steinberg MI4 */
19500689a86aSDominic Sacré 	USB_DEVICE_VENDOR_SPEC(0x0a4e, 0x4040),
1951fb2ed616STakashi Iwai 	QUIRK_DRIVER_INFO {
1952fb2ed616STakashi Iwai 		QUIRK_DATA_COMPOSITE {
1953fb2ed616STakashi Iwai 			{ QUIRK_DATA_STANDARD_AUDIO(0) },
1954fb2ed616STakashi Iwai 			{ QUIRK_DATA_STANDARD_AUDIO(1) },
1955fb2ed616STakashi Iwai 			{ QUIRK_DATA_STANDARD_AUDIO(2) },
19560689a86aSDominic Sacré 			{
1957fb2ed616STakashi Iwai 				QUIRK_DATA_MIDI_FIXED_ENDPOINT(3) {
19580689a86aSDominic Sacré 					.out_cables = 0x0001,
19590689a86aSDominic Sacré 					.in_cables  = 0x0001
19600689a86aSDominic Sacré 				}
19610689a86aSDominic Sacré 			},
1962fb2ed616STakashi Iwai 			QUIRK_COMPOSITE_END
19630689a86aSDominic Sacré 		}
19640689a86aSDominic Sacré 	}
19650689a86aSDominic Sacré },
19660689a86aSDominic Sacré 
1967e5779998SDaniel Mack /* TerraTec devices */
1968e5779998SDaniel Mack {
1969e5779998SDaniel Mack 	USB_DEVICE_VENDOR_SPEC(0x0ccd, 0x0012),
1970fb2ed616STakashi Iwai 	QUIRK_DRIVER_INFO {
1971e5779998SDaniel Mack 		.vendor_name = "TerraTec",
1972e5779998SDaniel Mack 		.product_name = "PHASE 26",
1973fb2ed616STakashi Iwai 		QUIRK_DATA_STANDARD_MIDI(3)
1974e5779998SDaniel Mack 	}
1975e5779998SDaniel Mack },
1976e5779998SDaniel Mack {
1977e5779998SDaniel Mack 	USB_DEVICE_VENDOR_SPEC(0x0ccd, 0x0013),
1978fb2ed616STakashi Iwai 	QUIRK_DRIVER_INFO {
1979e5779998SDaniel Mack 		.vendor_name = "TerraTec",
1980e5779998SDaniel Mack 		.product_name = "PHASE 26",
1981fb2ed616STakashi Iwai 		QUIRK_DATA_STANDARD_MIDI(3)
1982e5779998SDaniel Mack 	}
1983e5779998SDaniel Mack },
1984e5779998SDaniel Mack {
1985e5779998SDaniel Mack 	USB_DEVICE_VENDOR_SPEC(0x0ccd, 0x0014),
1986fb2ed616STakashi Iwai 	QUIRK_DRIVER_INFO {
1987e5779998SDaniel Mack 		.vendor_name = "TerraTec",
1988e5779998SDaniel Mack 		.product_name = "PHASE 26",
1989fb2ed616STakashi Iwai 		QUIRK_DATA_STANDARD_MIDI(3)
1990e5779998SDaniel Mack 	}
1991e5779998SDaniel Mack },
1992e5779998SDaniel Mack {
1993e5779998SDaniel Mack 	USB_DEVICE(0x0ccd, 0x0035),
1994fb2ed616STakashi Iwai 	QUIRK_DRIVER_INFO {
1995e5779998SDaniel Mack 		.vendor_name = "Miditech",
1996e5779998SDaniel Mack 		.product_name = "Play'n Roll",
1997e5779998SDaniel Mack 		.ifnum = 0,
1998e5779998SDaniel Mack 		.type = QUIRK_MIDI_CME
1999e5779998SDaniel Mack 	}
2000e5779998SDaniel Mack },
2001e5779998SDaniel Mack 
2002a59ee703STakashi Iwai /* Stanton ScratchAmp */
2003a59ee703STakashi Iwai { USB_DEVICE(0x103d, 0x0100) },
2004a59ee703STakashi Iwai { USB_DEVICE(0x103d, 0x0101) },
2005a59ee703STakashi Iwai 
2006e5779998SDaniel Mack /* Novation EMS devices */
2007e5779998SDaniel Mack {
2008e5779998SDaniel Mack 	USB_DEVICE_VENDOR_SPEC(0x1235, 0x0001),
2009fb2ed616STakashi Iwai 	QUIRK_DRIVER_INFO {
2010e5779998SDaniel Mack 		.vendor_name = "Novation",
2011e5779998SDaniel Mack 		.product_name = "ReMOTE Audio/XStation",
2012e5779998SDaniel Mack 		.ifnum = 4,
2013e5779998SDaniel Mack 		.type = QUIRK_MIDI_NOVATION
2014e5779998SDaniel Mack 	}
2015e5779998SDaniel Mack },
2016e5779998SDaniel Mack {
2017e5779998SDaniel Mack 	USB_DEVICE_VENDOR_SPEC(0x1235, 0x0002),
2018fb2ed616STakashi Iwai 	QUIRK_DRIVER_INFO {
2019e5779998SDaniel Mack 		.vendor_name = "Novation",
2020e5779998SDaniel Mack 		.product_name = "Speedio",
2021e5779998SDaniel Mack 		.ifnum = 3,
2022e5779998SDaniel Mack 		.type = QUIRK_MIDI_NOVATION
2023e5779998SDaniel Mack 	}
2024e5779998SDaniel Mack },
2025e5779998SDaniel Mack {
2026dab99817SRicard Wanderlof 	USB_DEVICE(0x1235, 0x000a),
2027fb2ed616STakashi Iwai 	QUIRK_DRIVER_INFO {
2028dab99817SRicard Wanderlof 		/* .vendor_name = "Novation", */
2029dab99817SRicard Wanderlof 		/* .product_name = "Nocturn", */
2030fb2ed616STakashi Iwai 		QUIRK_DATA_RAW_BYTES(0)
2031dab99817SRicard Wanderlof 	}
2032dab99817SRicard Wanderlof },
2033dab99817SRicard Wanderlof {
2034c7f57216SClemens Ladisch 	USB_DEVICE(0x1235, 0x000e),
2035fb2ed616STakashi Iwai 	QUIRK_DRIVER_INFO {
2036c7f57216SClemens Ladisch 		/* .vendor_name = "Novation", */
2037c7f57216SClemens Ladisch 		/* .product_name = "Launchpad", */
2038fb2ed616STakashi Iwai 		QUIRK_DATA_RAW_BYTES(0)
2039c7f57216SClemens Ladisch 	}
2040c7f57216SClemens Ladisch },
2041c7f57216SClemens Ladisch {
2042358b7dfaSDaniel Mack 	USB_DEVICE(0x1235, 0x0010),
2043fb2ed616STakashi Iwai 	QUIRK_DRIVER_INFO {
2044358b7dfaSDaniel Mack 		.vendor_name = "Focusrite",
2045358b7dfaSDaniel Mack 		.product_name = "Saffire 6 USB",
2046fb2ed616STakashi Iwai 		QUIRK_DATA_COMPOSITE {
2047fb2ed616STakashi Iwai 			{ QUIRK_DATA_STANDARD_MIXER(0) },
2048358b7dfaSDaniel Mack 			{
2049fb2ed616STakashi Iwai 				QUIRK_DATA_AUDIOFORMAT(0) {
2050358b7dfaSDaniel Mack 					.formats = SNDRV_PCM_FMTBIT_S24_3LE,
2051358b7dfaSDaniel Mack 					.channels = 4,
2052358b7dfaSDaniel Mack 					.iface = 0,
2053358b7dfaSDaniel Mack 					.altsetting = 1,
2054358b7dfaSDaniel Mack 					.altset_idx = 1,
2055358b7dfaSDaniel Mack 					.attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
2056358b7dfaSDaniel Mack 					.endpoint = 0x01,
2057358b7dfaSDaniel Mack 					.ep_attr = USB_ENDPOINT_XFER_ISOC,
2058470757f5SAlexander Tsoy 					.datainterval = 1,
2059470757f5SAlexander Tsoy 					.maxpacksize = 0x024c,
2060470757f5SAlexander Tsoy 					.rates = SNDRV_PCM_RATE_44100 |
2061470757f5SAlexander Tsoy 						 SNDRV_PCM_RATE_48000,
2062470757f5SAlexander Tsoy 					.rate_min = 44100,
2063470757f5SAlexander Tsoy 					.rate_max = 48000,
2064470757f5SAlexander Tsoy 					.nr_rates = 2,
2065470757f5SAlexander Tsoy 					.rate_table = (unsigned int[]) {
2066470757f5SAlexander Tsoy 						44100, 48000
2067e0469d65STakashi Iwai 					},
2068e0469d65STakashi Iwai 					.sync_ep = 0x82,
2069e0469d65STakashi Iwai 					.sync_iface = 0,
2070e0469d65STakashi Iwai 					.sync_altsetting = 1,
2071e0469d65STakashi Iwai 					.sync_ep_idx = 1,
2072e0469d65STakashi Iwai 					.implicit_fb = 1,
2073470757f5SAlexander Tsoy 				}
2074470757f5SAlexander Tsoy 			},
2075470757f5SAlexander Tsoy 			{
2076fb2ed616STakashi Iwai 				QUIRK_DATA_AUDIOFORMAT(0) {
2077470757f5SAlexander Tsoy 					.formats = SNDRV_PCM_FMTBIT_S24_3LE,
2078470757f5SAlexander Tsoy 					.channels = 2,
2079470757f5SAlexander Tsoy 					.iface = 0,
2080470757f5SAlexander Tsoy 					.altsetting = 1,
2081470757f5SAlexander Tsoy 					.altset_idx = 1,
2082470757f5SAlexander Tsoy 					.attributes = 0,
2083470757f5SAlexander Tsoy 					.endpoint = 0x82,
20847b0efea4STakashi Iwai 					.ep_idx = 1,
2085470757f5SAlexander Tsoy 					.ep_attr = USB_ENDPOINT_XFER_ISOC,
2086470757f5SAlexander Tsoy 					.datainterval = 1,
2087470757f5SAlexander Tsoy 					.maxpacksize = 0x0126,
2088358b7dfaSDaniel Mack 					.rates = SNDRV_PCM_RATE_44100 |
2089358b7dfaSDaniel Mack 						 SNDRV_PCM_RATE_48000,
2090358b7dfaSDaniel Mack 					.rate_min = 44100,
2091358b7dfaSDaniel Mack 					.rate_max = 48000,
2092358b7dfaSDaniel Mack 					.nr_rates = 2,
2093358b7dfaSDaniel Mack 					.rate_table = (unsigned int[]) {
2094358b7dfaSDaniel Mack 						44100, 48000
2095358b7dfaSDaniel Mack 					}
2096358b7dfaSDaniel Mack 				}
2097358b7dfaSDaniel Mack 			},
2098fb2ed616STakashi Iwai 			{ QUIRK_DATA_RAW_BYTES(1) },
2099fb2ed616STakashi Iwai 			QUIRK_COMPOSITE_END
2100358b7dfaSDaniel Mack 		}
2101358b7dfaSDaniel Mack 	}
2102358b7dfaSDaniel Mack },
2103358b7dfaSDaniel Mack {
21045e212332SMark Hills 	USB_DEVICE(0x1235, 0x0018),
2105fb2ed616STakashi Iwai 	QUIRK_DRIVER_INFO {
21065e212332SMark Hills 		.vendor_name = "Novation",
21075e212332SMark Hills 		.product_name = "Twitch",
2108fb2ed616STakashi Iwai 		QUIRK_DATA_COMPOSITE {
21095e212332SMark Hills 			{
2110fb2ed616STakashi Iwai 				QUIRK_DATA_AUDIOFORMAT(0) {
21115e212332SMark Hills 					.formats = SNDRV_PCM_FMTBIT_S24_3LE,
21125e212332SMark Hills 					.channels = 4,
21135e212332SMark Hills 					.iface = 0,
21145e212332SMark Hills 					.altsetting = 1,
21155e212332SMark Hills 					.altset_idx = 1,
21165e212332SMark Hills 					.attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
21175e212332SMark Hills 					.endpoint = 0x01,
21185e212332SMark Hills 					.ep_attr = USB_ENDPOINT_XFER_ISOC,
21195e212332SMark Hills 					.rates = SNDRV_PCM_RATE_44100 |
21205e212332SMark Hills 						 SNDRV_PCM_RATE_48000,
21215e212332SMark Hills 					.rate_min = 44100,
21225e212332SMark Hills 					.rate_max = 48000,
21235e212332SMark Hills 					.nr_rates = 2,
21245e212332SMark Hills 					.rate_table = (unsigned int[]) {
21255e212332SMark Hills 						44100, 48000
21265e212332SMark Hills 					}
21275e212332SMark Hills 				}
21285e212332SMark Hills 			},
2129fb2ed616STakashi Iwai 			{ QUIRK_DATA_RAW_BYTES(1) },
2130fb2ed616STakashi Iwai 			QUIRK_COMPOSITE_END
21315e212332SMark Hills 		}
21325e212332SMark Hills 	}
21335e212332SMark Hills },
21345e212332SMark Hills {
2135e5779998SDaniel Mack 	USB_DEVICE_VENDOR_SPEC(0x1235, 0x4661),
2136fb2ed616STakashi Iwai 	QUIRK_DRIVER_INFO {
2137e5779998SDaniel Mack 		.vendor_name = "Novation",
2138e5779998SDaniel Mack 		.product_name = "ReMOTE25",
2139e5779998SDaniel Mack 		.ifnum = 0,
2140e5779998SDaniel Mack 		.type = QUIRK_MIDI_NOVATION
2141e5779998SDaniel Mack 	}
2142e5779998SDaniel Mack },
2143e5779998SDaniel Mack 
2144e5779998SDaniel Mack /* Access Music devices */
2145e5779998SDaniel Mack {
2146e5779998SDaniel Mack 	/* VirusTI Desktop */
2147e5779998SDaniel Mack 	USB_DEVICE_VENDOR_SPEC(0x133e, 0x0815),
2148fb2ed616STakashi Iwai 	QUIRK_DRIVER_INFO {
2149fb2ed616STakashi Iwai 		QUIRK_DATA_COMPOSITE {
2150e5779998SDaniel Mack 			{
2151fb2ed616STakashi Iwai 				QUIRK_DATA_MIDI_FIXED_ENDPOINT(3) {
2152e5779998SDaniel Mack 					.out_cables = 0x0003,
2153e5779998SDaniel Mack 					.in_cables  = 0x0003
2154e5779998SDaniel Mack 				}
2155e5779998SDaniel Mack 			},
2156fb2ed616STakashi Iwai 			{ QUIRK_DATA_IGNORE(4) },
2157fb2ed616STakashi Iwai 			QUIRK_COMPOSITE_END
2158e5779998SDaniel Mack 		}
2159e5779998SDaniel Mack 	}
2160e5779998SDaniel Mack },
2161e5779998SDaniel Mack 
216254a8c500SDaniel Mack /* Native Instruments MK2 series */
216354a8c500SDaniel Mack {
2164759e890fSDaniel Mack 	/* Komplete Audio 6 */
21659cdc3529SDaniel Mack 	.match_flags = USB_DEVICE_ID_MATCH_DEVICE,
21669cdc3529SDaniel Mack 	.idVendor = 0x17cc,
21679cdc3529SDaniel Mack 	.idProduct = 0x1000,
21689cdc3529SDaniel Mack },
21699cdc3529SDaniel Mack {
217054a8c500SDaniel Mack 	/* Traktor Audio 6 */
217154a8c500SDaniel Mack 	.match_flags = USB_DEVICE_ID_MATCH_DEVICE,
217254a8c500SDaniel Mack 	.idVendor = 0x17cc,
217354a8c500SDaniel Mack 	.idProduct = 0x1010,
217454a8c500SDaniel Mack },
217554a8c500SDaniel Mack {
217654a8c500SDaniel Mack 	/* Traktor Audio 10 */
217754a8c500SDaniel Mack 	.match_flags = USB_DEVICE_ID_MATCH_DEVICE,
217854a8c500SDaniel Mack 	.idVendor = 0x17cc,
217954a8c500SDaniel Mack 	.idProduct = 0x1020,
218054a8c500SDaniel Mack },
218154a8c500SDaniel Mack 
21821ca8b201SClemens Ladisch /* QinHeng devices */
21831ca8b201SClemens Ladisch {
21841ca8b201SClemens Ladisch 	USB_DEVICE(0x1a86, 0x752d),
2185fb2ed616STakashi Iwai 	QUIRK_DRIVER_INFO {
21861ca8b201SClemens Ladisch 		.vendor_name = "QinHeng",
21871ca8b201SClemens Ladisch 		.product_name = "CH345",
21881ca8b201SClemens Ladisch 		.ifnum = 1,
21891ca8b201SClemens Ladisch 		.type = QUIRK_MIDI_CH345
21901ca8b201SClemens Ladisch 	}
21911ca8b201SClemens Ladisch },
21921ca8b201SClemens Ladisch 
219302651d1aSMiller Puckette /* KeithMcMillen Stringport */
219414b51ccdSTakashi Iwai { USB_DEVICE(0x1f38, 0x0001) }, /* FIXME: should be more restrictive matching */
219502651d1aSMiller Puckette 
2196e5779998SDaniel Mack /* Miditech devices */
2197e5779998SDaniel Mack {
2198e5779998SDaniel Mack 	USB_DEVICE(0x4752, 0x0011),
2199fb2ed616STakashi Iwai 	QUIRK_DRIVER_INFO {
2200e5779998SDaniel Mack 		.vendor_name = "Miditech",
2201e5779998SDaniel Mack 		.product_name = "Midistart-2",
2202e5779998SDaniel Mack 		.ifnum = 0,
2203e5779998SDaniel Mack 		.type = QUIRK_MIDI_CME
2204e5779998SDaniel Mack 	}
2205e5779998SDaniel Mack },
2206e5779998SDaniel Mack 
2207e5779998SDaniel Mack /* Central Music devices */
2208e5779998SDaniel Mack {
2209e5779998SDaniel Mack 	/* this ID used by both Miditech MidiStudio-2 and CME UF-x */
2210e5779998SDaniel Mack 	USB_DEVICE(0x7104, 0x2202),
2211fb2ed616STakashi Iwai 	QUIRK_DRIVER_INFO {
2212e5779998SDaniel Mack 		.ifnum = 0,
2213e5779998SDaniel Mack 		.type = QUIRK_MIDI_CME
2214e5779998SDaniel Mack 	}
2215e5779998SDaniel Mack },
2216e5779998SDaniel Mack 
2217e5779998SDaniel Mack /* Digidesign Mbox */
2218e5779998SDaniel Mack {
2219e5779998SDaniel Mack 	/* Thanks to Clemens Ladisch <clemens@ladisch.de> */
2220e5779998SDaniel Mack 	USB_DEVICE(0x0dba, 0x1000),
2221fb2ed616STakashi Iwai 	QUIRK_DRIVER_INFO {
2222e5779998SDaniel Mack 		.vendor_name = "Digidesign",
2223e5779998SDaniel Mack 		.product_name = "MBox",
2224fb2ed616STakashi Iwai 		QUIRK_DATA_COMPOSITE{
2225fb2ed616STakashi Iwai 			{ QUIRK_DATA_STANDARD_MIXER(0) },
2226e5779998SDaniel Mack 			{
2227fb2ed616STakashi Iwai 				QUIRK_DATA_AUDIOFORMAT(1) {
222829088fefSClemens Ladisch 					.formats = SNDRV_PCM_FMTBIT_S24_3BE,
2229e5779998SDaniel Mack 					.channels = 2,
2230e5779998SDaniel Mack 					.iface = 1,
2231e5779998SDaniel Mack 					.altsetting = 1,
2232e5779998SDaniel Mack 					.altset_idx = 1,
2233c63fcb9bSDamien Zammit 					.attributes = 0x4,
2234e5779998SDaniel Mack 					.endpoint = 0x02,
2235c63fcb9bSDamien Zammit 					.ep_attr = USB_ENDPOINT_XFER_ISOC |
2236c63fcb9bSDamien Zammit 						USB_ENDPOINT_SYNC_SYNC,
2237c63fcb9bSDamien Zammit 					.maxpacksize = 0x130,
2238c63fcb9bSDamien Zammit 					.rates = SNDRV_PCM_RATE_48000,
2239c63fcb9bSDamien Zammit 					.rate_min = 48000,
2240e5779998SDaniel Mack 					.rate_max = 48000,
2241c63fcb9bSDamien Zammit 					.nr_rates = 1,
2242e5779998SDaniel Mack 					.rate_table = (unsigned int[]) {
2243c63fcb9bSDamien Zammit 						48000
2244c63fcb9bSDamien Zammit 					}
2245c63fcb9bSDamien Zammit 				}
2246c63fcb9bSDamien Zammit 			},
2247c63fcb9bSDamien Zammit 			{
2248fb2ed616STakashi Iwai 				QUIRK_DATA_AUDIOFORMAT(1) {
2249c63fcb9bSDamien Zammit 					.formats = SNDRV_PCM_FMTBIT_S24_3BE,
2250c63fcb9bSDamien Zammit 					.channels = 2,
2251c63fcb9bSDamien Zammit 					.iface = 1,
2252c63fcb9bSDamien Zammit 					.altsetting = 1,
2253c63fcb9bSDamien Zammit 					.altset_idx = 1,
2254c63fcb9bSDamien Zammit 					.attributes = 0x4,
2255c63fcb9bSDamien Zammit 					.endpoint = 0x81,
22567b0efea4STakashi Iwai 					.ep_idx = 1,
2257c63fcb9bSDamien Zammit 					.ep_attr = USB_ENDPOINT_XFER_ISOC |
2258c63fcb9bSDamien Zammit 						USB_ENDPOINT_SYNC_ASYNC,
2259c63fcb9bSDamien Zammit 					.maxpacksize = 0x130,
2260c63fcb9bSDamien Zammit 					.rates = SNDRV_PCM_RATE_48000,
2261c63fcb9bSDamien Zammit 					.rate_min = 48000,
2262c63fcb9bSDamien Zammit 					.rate_max = 48000,
2263c63fcb9bSDamien Zammit 					.nr_rates = 1,
2264c63fcb9bSDamien Zammit 					.rate_table = (unsigned int[]) {
2265c63fcb9bSDamien Zammit 						48000
2266e5779998SDaniel Mack 					}
2267e5779998SDaniel Mack 				}
2268e5779998SDaniel Mack 			},
2269fb2ed616STakashi Iwai 			QUIRK_COMPOSITE_END
2270e5779998SDaniel Mack 		}
2271e5779998SDaniel Mack 	}
2272e5779998SDaniel Mack },
2273cb99864dSDamien Zammit 
2274cb99864dSDamien Zammit /* DIGIDESIGN MBOX 2 */
2275cb99864dSDamien Zammit {
2276cb99864dSDamien Zammit 	USB_DEVICE(0x0dba, 0x3000),
2277fb2ed616STakashi Iwai 	QUIRK_DRIVER_INFO {
2278cb99864dSDamien Zammit 		.vendor_name = "Digidesign",
2279cb99864dSDamien Zammit 		.product_name = "Mbox 2",
2280fb2ed616STakashi Iwai 		QUIRK_DATA_COMPOSITE {
2281fb2ed616STakashi Iwai 			{ QUIRK_DATA_IGNORE(0) },
2282fb2ed616STakashi Iwai 			{ QUIRK_DATA_IGNORE(1) },
2283cb99864dSDamien Zammit 			{
2284fb2ed616STakashi Iwai 				QUIRK_DATA_AUDIOFORMAT(2) {
2285cb99864dSDamien Zammit 					.formats = SNDRV_PCM_FMTBIT_S24_3BE,
2286cb99864dSDamien Zammit 					.channels = 2,
2287cb99864dSDamien Zammit 					.iface = 2,
2288cb99864dSDamien Zammit 					.altsetting = 2,
2289cb99864dSDamien Zammit 					.altset_idx = 1,
2290cb99864dSDamien Zammit 					.attributes = 0x00,
2291cb99864dSDamien Zammit 					.endpoint = 0x03,
2292cb99864dSDamien Zammit 					.ep_attr = USB_ENDPOINT_SYNC_ASYNC,
2293cb99864dSDamien Zammit 					.rates = SNDRV_PCM_RATE_48000,
2294cb99864dSDamien Zammit 					.rate_min = 48000,
2295cb99864dSDamien Zammit 					.rate_max = 48000,
2296cb99864dSDamien Zammit 					.nr_rates = 1,
2297cb99864dSDamien Zammit 					.rate_table = (unsigned int[]) {
2298cb99864dSDamien Zammit 						48000
2299cb99864dSDamien Zammit 					}
2300cb99864dSDamien Zammit 				}
2301cb99864dSDamien Zammit 			},
2302fb2ed616STakashi Iwai 			{ QUIRK_DATA_IGNORE(3) },
2303cb99864dSDamien Zammit 			{
2304fb2ed616STakashi Iwai 				QUIRK_DATA_AUDIOFORMAT(4) {
2305cb99864dSDamien Zammit 					.formats = SNDRV_PCM_FMTBIT_S24_3BE,
2306cb99864dSDamien Zammit 					.channels = 2,
2307cb99864dSDamien Zammit 					.iface = 4,
2308cb99864dSDamien Zammit 					.altsetting = 2,
2309cb99864dSDamien Zammit 					.altset_idx = 1,
2310cb99864dSDamien Zammit 					.attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
2311cb99864dSDamien Zammit 					.endpoint = 0x85,
2312cb99864dSDamien Zammit 					.ep_attr = USB_ENDPOINT_SYNC_SYNC,
2313cb99864dSDamien Zammit 					.rates = SNDRV_PCM_RATE_48000,
2314cb99864dSDamien Zammit 					.rate_min = 48000,
2315cb99864dSDamien Zammit 					.rate_max = 48000,
2316cb99864dSDamien Zammit 					.nr_rates = 1,
2317cb99864dSDamien Zammit 					.rate_table = (unsigned int[]) {
2318cb99864dSDamien Zammit 						48000
2319cb99864dSDamien Zammit 					}
2320cb99864dSDamien Zammit 				}
2321cb99864dSDamien Zammit 			},
2322fb2ed616STakashi Iwai 			{ QUIRK_DATA_IGNORE(5) },
2323cb99864dSDamien Zammit 			{
2324fb2ed616STakashi Iwai 				QUIRK_DATA_MIDI_MIDIMAN(6) {
2325cb99864dSDamien Zammit 					.out_ep =  0x02,
2326cb99864dSDamien Zammit 					.out_cables = 0x0001,
2327cb99864dSDamien Zammit 					.in_ep = 0x81,
2328cb99864dSDamien Zammit 					.in_interval = 0x01,
2329cb99864dSDamien Zammit 					.in_cables = 0x0001
2330cb99864dSDamien Zammit 				}
2331cb99864dSDamien Zammit 			},
2332fb2ed616STakashi Iwai 			QUIRK_COMPOSITE_END
2333cb99864dSDamien Zammit 		}
2334cb99864dSDamien Zammit 	}
2335cb99864dSDamien Zammit },
2336b01104fcSConner Knox /* DIGIDESIGN MBOX 3 */
2337b01104fcSConner Knox {
2338b01104fcSConner Knox 	USB_DEVICE(0x0dba, 0x5000),
2339fb2ed616STakashi Iwai 	QUIRK_DRIVER_INFO {
2340b01104fcSConner Knox 		.vendor_name = "Digidesign",
2341b01104fcSConner Knox 		.product_name = "Mbox 3",
2342fb2ed616STakashi Iwai 		QUIRK_DATA_COMPOSITE {
2343fb2ed616STakashi Iwai 			{ QUIRK_DATA_IGNORE(0) },
2344fb2ed616STakashi Iwai 			{ QUIRK_DATA_IGNORE(1) },
2345b01104fcSConner Knox 			{
2346fb2ed616STakashi Iwai 				QUIRK_DATA_AUDIOFORMAT(2) {
2347b01104fcSConner Knox 					.formats = SNDRV_PCM_FMTBIT_S24_3LE,
2348b01104fcSConner Knox 					.channels = 4,
2349b01104fcSConner Knox 					.iface = 2,
2350b01104fcSConner Knox 					.altsetting = 1,
2351b01104fcSConner Knox 					.altset_idx = 1,
2352b01104fcSConner Knox 					.attributes = 0x00,
2353b01104fcSConner Knox 					.endpoint = 0x01,
2354b01104fcSConner Knox 					.ep_attr = USB_ENDPOINT_XFER_ISOC |
2355b01104fcSConner Knox 						USB_ENDPOINT_SYNC_ASYNC,
2356b01104fcSConner Knox 					.rates = SNDRV_PCM_RATE_48000,
2357b01104fcSConner Knox 					.rate_min = 48000,
2358b01104fcSConner Knox 					.rate_max = 48000,
2359b01104fcSConner Knox 					.nr_rates = 1,
2360b01104fcSConner Knox 					.rate_table = (unsigned int[]) {
2361b01104fcSConner Knox 						48000
2362b01104fcSConner Knox 					}
2363b01104fcSConner Knox 				}
2364b01104fcSConner Knox 			},
2365b01104fcSConner Knox 			{
2366fb2ed616STakashi Iwai 				QUIRK_DATA_AUDIOFORMAT(3) {
2367b01104fcSConner Knox 					.formats = SNDRV_PCM_FMTBIT_S24_3LE,
2368b01104fcSConner Knox 					.channels = 4,
2369b01104fcSConner Knox 					.iface = 3,
2370b01104fcSConner Knox 					.altsetting = 1,
2371b01104fcSConner Knox 					.altset_idx = 1,
2372b01104fcSConner Knox 					.endpoint = 0x81,
2373b01104fcSConner Knox 					.attributes = 0x00,
2374b01104fcSConner Knox 					.ep_attr = USB_ENDPOINT_XFER_ISOC |
2375b01104fcSConner Knox 						USB_ENDPOINT_SYNC_ASYNC,
2376b01104fcSConner Knox 					.maxpacksize = 0x009c,
2377b01104fcSConner Knox 					.rates = SNDRV_PCM_RATE_48000,
2378b01104fcSConner Knox 					.rate_min = 48000,
2379b01104fcSConner Knox 					.rate_max = 48000,
2380b01104fcSConner Knox 					.nr_rates = 1,
2381b01104fcSConner Knox 					.rate_table = (unsigned int[]) {
2382b01104fcSConner Knox 						48000
2383b01104fcSConner Knox 					}
2384b01104fcSConner Knox 				}
2385b01104fcSConner Knox 			},
2386b01104fcSConner Knox 			{
2387fb2ed616STakashi Iwai 				QUIRK_DATA_MIDI_FIXED_ENDPOINT(4) {
2388b01104fcSConner Knox 					.out_cables = 0x0001,
2389b01104fcSConner Knox 					.in_cables  = 0x0001
2390b01104fcSConner Knox 				}
2391b01104fcSConner Knox 			},
2392fb2ed616STakashi Iwai 			QUIRK_COMPOSITE_END
2393b01104fcSConner Knox 		}
2394b01104fcSConner Knox 	}
2395b01104fcSConner Knox },
2396613769fcSOto Petřík {
2397613769fcSOto Petřík 	/* Tascam US122 MKII - playback-only support */
239814b51ccdSTakashi Iwai 	USB_DEVICE_VENDOR_SPEC(0x0644, 0x8021),
2399fb2ed616STakashi Iwai 	QUIRK_DRIVER_INFO {
2400613769fcSOto Petřík 		.vendor_name = "TASCAM",
2401613769fcSOto Petřík 		.product_name = "US122 MKII",
2402fb2ed616STakashi Iwai 		QUIRK_DATA_COMPOSITE {
2403fb2ed616STakashi Iwai 			{ QUIRK_DATA_IGNORE(0) },
2404613769fcSOto Petřík 			{
2405fb2ed616STakashi Iwai 				QUIRK_DATA_AUDIOFORMAT(1) {
2406613769fcSOto Petřík 					.formats = SNDRV_PCM_FMTBIT_S24_3LE,
2407613769fcSOto Petřík 					.channels = 2,
2408613769fcSOto Petřík 					.iface = 1,
2409613769fcSOto Petřík 					.altsetting = 1,
2410613769fcSOto Petřík 					.altset_idx = 1,
2411613769fcSOto Petřík 					.attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
2412613769fcSOto Petřík 					.endpoint = 0x02,
2413613769fcSOto Petřík 					.ep_attr = USB_ENDPOINT_XFER_ISOC,
2414613769fcSOto Petřík 					.rates = SNDRV_PCM_RATE_44100 |
2415613769fcSOto Petřík 						 SNDRV_PCM_RATE_48000 |
2416613769fcSOto Petřík 						 SNDRV_PCM_RATE_88200 |
2417613769fcSOto Petřík 						 SNDRV_PCM_RATE_96000,
2418613769fcSOto Petřík 					.rate_min = 44100,
2419613769fcSOto Petřík 					.rate_max = 96000,
2420613769fcSOto Petřík 					.nr_rates = 4,
2421613769fcSOto Petřík 					.rate_table = (unsigned int[]) {
2422613769fcSOto Petřík 						44100, 48000, 88200, 96000
2423613769fcSOto Petřík 					}
2424613769fcSOto Petřík 				}
2425613769fcSOto Petřík 			},
2426fb2ed616STakashi Iwai 			QUIRK_COMPOSITE_END
2427613769fcSOto Petřík 		}
2428613769fcSOto Petřík 	}
2429613769fcSOto Petřík },
2430e5779998SDaniel Mack 
24317fdabab8SDamien Zammit /* Denon DN-X1600 */
24327fdabab8SDamien Zammit {
24337fdabab8SDamien Zammit 	USB_AUDIO_DEVICE(0x154e, 0x500e),
2434fb2ed616STakashi Iwai 	QUIRK_DRIVER_INFO {
24357fdabab8SDamien Zammit 		.vendor_name = "Denon",
24367fdabab8SDamien Zammit 		.product_name = "DN-X1600",
2437fb2ed616STakashi Iwai 		QUIRK_DATA_COMPOSITE{
2438fb2ed616STakashi Iwai 			{ QUIRK_DATA_IGNORE(0) },
24397fdabab8SDamien Zammit 			{
2440fb2ed616STakashi Iwai 				QUIRK_DATA_AUDIOFORMAT(1) {
24417fdabab8SDamien Zammit 					.formats = SNDRV_PCM_FMTBIT_S24_3LE,
24427fdabab8SDamien Zammit 					.channels = 8,
24437fdabab8SDamien Zammit 					.iface = 1,
24447fdabab8SDamien Zammit 					.altsetting = 1,
24457fdabab8SDamien Zammit 					.altset_idx = 1,
24467fdabab8SDamien Zammit 					.attributes = 0x0,
24477fdabab8SDamien Zammit 					.endpoint = 0x01,
24487fdabab8SDamien Zammit 					.ep_attr = USB_ENDPOINT_XFER_ISOC |
24497fdabab8SDamien Zammit 						USB_ENDPOINT_SYNC_ADAPTIVE,
24507fdabab8SDamien Zammit 					.maxpacksize = 0x138,
24517fdabab8SDamien Zammit 					.rates = SNDRV_PCM_RATE_48000,
24527fdabab8SDamien Zammit 					.rate_min = 48000,
24537fdabab8SDamien Zammit 					.rate_max = 48000,
24547fdabab8SDamien Zammit 					.nr_rates = 1,
24557fdabab8SDamien Zammit 					.rate_table = (unsigned int[]) {
24567fdabab8SDamien Zammit 						48000
24577fdabab8SDamien Zammit 					}
24587fdabab8SDamien Zammit 				}
24597fdabab8SDamien Zammit 			},
24607fdabab8SDamien Zammit 			{
2461fb2ed616STakashi Iwai 				QUIRK_DATA_AUDIOFORMAT(2) {
24627fdabab8SDamien Zammit 					.formats = SNDRV_PCM_FMTBIT_S24_3LE,
24637fdabab8SDamien Zammit 					.channels = 8,
24647fdabab8SDamien Zammit 					.iface = 2,
24657fdabab8SDamien Zammit 					.altsetting = 1,
24667fdabab8SDamien Zammit 					.altset_idx = 1,
24677fdabab8SDamien Zammit 					.attributes = 0x0,
24687fdabab8SDamien Zammit 					.endpoint = 0x85,
24697fdabab8SDamien Zammit 					.ep_attr = USB_ENDPOINT_XFER_ISOC |
24707fdabab8SDamien Zammit 						USB_ENDPOINT_SYNC_ADAPTIVE,
24717fdabab8SDamien Zammit 					.maxpacksize = 0x138,
24727fdabab8SDamien Zammit 					.rates = SNDRV_PCM_RATE_48000,
24737fdabab8SDamien Zammit 					.rate_min = 48000,
24747fdabab8SDamien Zammit 					.rate_max = 48000,
24757fdabab8SDamien Zammit 					.nr_rates = 1,
24767fdabab8SDamien Zammit 					.rate_table = (unsigned int[]) {
24777fdabab8SDamien Zammit 						48000
24787fdabab8SDamien Zammit 					}
24797fdabab8SDamien Zammit 				}
24807fdabab8SDamien Zammit 			},
2481fb2ed616STakashi Iwai 			{ QUIRK_DATA_STANDARD_MIDI(4) },
2482fb2ed616STakashi Iwai 			QUIRK_COMPOSITE_END
24837fdabab8SDamien Zammit 		}
24847fdabab8SDamien Zammit 	}
24857fdabab8SDamien Zammit },
24867fdabab8SDamien Zammit 
2487c05fce58SMarko Friedemann /* Microsoft XboxLive Headset/Xbox Communicator */
2488c05fce58SMarko Friedemann {
2489c05fce58SMarko Friedemann 	USB_DEVICE(0x045e, 0x0283),
2490c05fce58SMarko Friedemann 	.bInterfaceClass = USB_CLASS_PER_INTERFACE,
2491fb2ed616STakashi Iwai 	QUIRK_DRIVER_INFO {
2492c05fce58SMarko Friedemann 		.vendor_name = "Microsoft",
2493c05fce58SMarko Friedemann 		.product_name = "XboxLive Headset/Xbox Communicator",
2494fb2ed616STakashi Iwai 		QUIRK_DATA_COMPOSITE {
2495c05fce58SMarko Friedemann 			{
2496c05fce58SMarko Friedemann 				/* playback */
2497fb2ed616STakashi Iwai 				QUIRK_DATA_AUDIOFORMAT(0) {
2498c05fce58SMarko Friedemann 					.formats = SNDRV_PCM_FMTBIT_S16_LE,
2499c05fce58SMarko Friedemann 					.channels = 1,
2500c05fce58SMarko Friedemann 					.iface = 0,
2501c05fce58SMarko Friedemann 					.altsetting = 0,
2502c05fce58SMarko Friedemann 					.altset_idx = 0,
2503c05fce58SMarko Friedemann 					.attributes = 0,
2504c05fce58SMarko Friedemann 					.endpoint = 0x04,
2505c05fce58SMarko Friedemann 					.ep_attr = 0x05,
2506c05fce58SMarko Friedemann 					.rates = SNDRV_PCM_RATE_CONTINUOUS,
2507c05fce58SMarko Friedemann 					.rate_min = 22050,
2508c05fce58SMarko Friedemann 					.rate_max = 22050
2509c05fce58SMarko Friedemann 				}
2510c05fce58SMarko Friedemann 			},
2511c05fce58SMarko Friedemann 			{
2512c05fce58SMarko Friedemann 				/* capture */
2513fb2ed616STakashi Iwai 				QUIRK_DATA_AUDIOFORMAT(1) {
2514c05fce58SMarko Friedemann 					.formats = SNDRV_PCM_FMTBIT_S16_LE,
2515c05fce58SMarko Friedemann 					.channels = 1,
2516c05fce58SMarko Friedemann 					.iface = 1,
2517c05fce58SMarko Friedemann 					.altsetting = 0,
2518c05fce58SMarko Friedemann 					.altset_idx = 0,
2519c05fce58SMarko Friedemann 					.attributes = 0,
2520c05fce58SMarko Friedemann 					.endpoint = 0x85,
2521c05fce58SMarko Friedemann 					.ep_attr = 0x05,
2522c05fce58SMarko Friedemann 					.rates = SNDRV_PCM_RATE_CONTINUOUS,
2523c05fce58SMarko Friedemann 					.rate_min = 16000,
2524c05fce58SMarko Friedemann 					.rate_max = 16000
2525c05fce58SMarko Friedemann 				}
2526c05fce58SMarko Friedemann 			},
2527fb2ed616STakashi Iwai 			QUIRK_COMPOSITE_END
2528c05fce58SMarko Friedemann 		}
2529c05fce58SMarko Friedemann 	}
2530c05fce58SMarko Friedemann },
2531c05fce58SMarko Friedemann 
2532c9024668SDidier Villevalois /* Reloop Play */
2533c9024668SDidier Villevalois {
2534c9024668SDidier Villevalois 	USB_DEVICE(0x200c, 0x100b),
2535c9024668SDidier Villevalois 	.bInterfaceClass = USB_CLASS_PER_INTERFACE,
2536fb2ed616STakashi Iwai 	QUIRK_DRIVER_INFO {
2537fb2ed616STakashi Iwai 		QUIRK_DATA_COMPOSITE {
2538fb2ed616STakashi Iwai 			{ QUIRK_DATA_STANDARD_MIXER(0) },
2539c9024668SDidier Villevalois 			{
2540fb2ed616STakashi Iwai 				QUIRK_DATA_AUDIOFORMAT(1) {
2541c9024668SDidier Villevalois 					.formats = SNDRV_PCM_FMTBIT_S24_3LE,
2542c9024668SDidier Villevalois 					.channels = 4,
2543c9024668SDidier Villevalois 					.iface = 1,
2544c9024668SDidier Villevalois 					.altsetting = 1,
2545c9024668SDidier Villevalois 					.altset_idx = 1,
2546c9024668SDidier Villevalois 					.attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
2547c9024668SDidier Villevalois 					.endpoint = 0x01,
2548c9024668SDidier Villevalois 					.ep_attr = USB_ENDPOINT_SYNC_ADAPTIVE,
2549c9024668SDidier Villevalois 					.rates = SNDRV_PCM_RATE_44100 |
2550c9024668SDidier Villevalois 						 SNDRV_PCM_RATE_48000,
2551c9024668SDidier Villevalois 					.rate_min = 44100,
2552c9024668SDidier Villevalois 					.rate_max = 48000,
2553c9024668SDidier Villevalois 					.nr_rates = 2,
2554c9024668SDidier Villevalois 					.rate_table = (unsigned int[]) {
2555c9024668SDidier Villevalois 						44100, 48000
2556c9024668SDidier Villevalois 					}
2557c9024668SDidier Villevalois 				}
2558c9024668SDidier Villevalois 			},
2559fb2ed616STakashi Iwai 			QUIRK_COMPOSITE_END
2560c9024668SDidier Villevalois 		}
2561c9024668SDidier Villevalois 	}
2562c9024668SDidier Villevalois },
2563c9024668SDidier Villevalois 
2564e5779998SDaniel Mack {
2565e5779998SDaniel Mack 	/*
2566dacacb0aSPanu Matilainen 	 * ZOOM R16/24 in audio interface mode.
2567e0570446SRicard Wanderlof 	 * Playback requires an extra four byte LE length indicator
2568e0570446SRicard Wanderlof 	 * at the start of each isochronous packet. This quirk is
2569e0570446SRicard Wanderlof 	 * enabled in create_standard_audio_quirk().
2570dacacb0aSPanu Matilainen 	 */
2571dacacb0aSPanu Matilainen 	USB_DEVICE(0x1686, 0x00dd),
2572fb2ed616STakashi Iwai 	QUIRK_DRIVER_INFO {
2573fb2ed616STakashi Iwai 		QUIRK_DATA_COMPOSITE {
2574fb2ed616STakashi Iwai 			{ QUIRK_DATA_STANDARD_AUDIO(1) }, /* Playback  */
2575fb2ed616STakashi Iwai 			{ QUIRK_DATA_STANDARD_AUDIO(2) }, /* Capture */
2576fb2ed616STakashi Iwai 			{ QUIRK_DATA_STANDARD_MIDI(3) }, /* Midi */
2577fb2ed616STakashi Iwai 			QUIRK_COMPOSITE_END
2578dacacb0aSPanu Matilainen 		}
2579dacacb0aSPanu Matilainen 	}
2580dacacb0aSPanu Matilainen },
2581dacacb0aSPanu Matilainen 
2582dacacb0aSPanu Matilainen {
2583dacacb0aSPanu Matilainen 	/*
2584e5779998SDaniel Mack 	 * Some USB MIDI devices don't have an audio control interface,
2585e5779998SDaniel Mack 	 * so we have to grab MIDI streaming interfaces here.
2586e5779998SDaniel Mack 	 */
2587e5779998SDaniel Mack 	.match_flags = USB_DEVICE_ID_MATCH_INT_CLASS |
2588e5779998SDaniel Mack 		       USB_DEVICE_ID_MATCH_INT_SUBCLASS,
2589e5779998SDaniel Mack 	.bInterfaceClass = USB_CLASS_AUDIO,
2590e5779998SDaniel Mack 	.bInterfaceSubClass = USB_SUBCLASS_MIDISTREAMING,
2591fb2ed616STakashi Iwai 	QUIRK_DRIVER_INFO {
2592fb2ed616STakashi Iwai 		QUIRK_DATA_STANDARD_MIDI(QUIRK_ANY_INTERFACE)
2593e5779998SDaniel Mack 	}
2594e5779998SDaniel Mack },
2595e5779998SDaniel Mack 
25965c62383cSTakashi Iwai /* Rane SL-1 */
25975c62383cSTakashi Iwai {
25985c62383cSTakashi Iwai 	USB_DEVICE(0x13e5, 0x0001),
2599fb2ed616STakashi Iwai 	QUIRK_DRIVER_INFO {
2600fb2ed616STakashi Iwai 		QUIRK_DATA_STANDARD_AUDIO(QUIRK_ANY_INTERFACE)
26015c62383cSTakashi Iwai         }
26025c62383cSTakashi Iwai },
26035c62383cSTakashi Iwai 
26045ebf6b1eSTakashi Iwai /* disabled due to regression for other devices;
26055ebf6b1eSTakashi Iwai  * see https://bugzilla.kernel.org/show_bug.cgi?id=199905
26065ebf6b1eSTakashi Iwai  */
26075ebf6b1eSTakashi Iwai #if 0
260833193dcaSMartin Peres {
260933193dcaSMartin Peres 	/*
261033193dcaSMartin Peres 	 * Nura's first gen headphones use Cambridge Silicon Radio's vendor
261133193dcaSMartin Peres 	 * ID, but it looks like the product ID actually is only for Nura.
261233193dcaSMartin Peres 	 * The capture interface does not work at all (even on Windows),
261333193dcaSMartin Peres 	 * and only the 48 kHz sample rate works for the playback interface.
261433193dcaSMartin Peres 	 */
261533193dcaSMartin Peres 	USB_DEVICE(0x0a12, 0x1243),
2616fb2ed616STakashi Iwai 	QUIRK_DRIVER_INFO {
2617fb2ed616STakashi Iwai 		QUIRK_DATA_COMPOSITE {
2618fb2ed616STakashi Iwai 			{ QUIRK_DATA_STANDARD_MIXER(0) },
2619fb2ed616STakashi Iwai 			{ QUIRK_DATA_IGNORE(1) }, /* Capture */
262033193dcaSMartin Peres 			/* Playback */
262133193dcaSMartin Peres 			{
2622fb2ed616STakashi Iwai 				QUIRK_DATA_AUDIOFORMAT(2) {
262333193dcaSMartin Peres 					.formats = SNDRV_PCM_FMTBIT_S16_LE,
262433193dcaSMartin Peres 					.channels = 2,
262533193dcaSMartin Peres 					.iface = 2,
262633193dcaSMartin Peres 					.altsetting = 1,
262733193dcaSMartin Peres 					.altset_idx = 1,
262833193dcaSMartin Peres 					.attributes = UAC_EP_CS_ATTR_FILL_MAX |
262933193dcaSMartin Peres 						UAC_EP_CS_ATTR_SAMPLE_RATE,
263033193dcaSMartin Peres 					.endpoint = 0x03,
263133193dcaSMartin Peres 					.ep_attr = USB_ENDPOINT_XFER_ISOC,
263233193dcaSMartin Peres 					.rates = SNDRV_PCM_RATE_48000,
263333193dcaSMartin Peres 					.rate_min = 48000,
263433193dcaSMartin Peres 					.rate_max = 48000,
263533193dcaSMartin Peres 					.nr_rates = 1,
263633193dcaSMartin Peres 					.rate_table = (unsigned int[]) {
263733193dcaSMartin Peres 						48000
263833193dcaSMartin Peres 					}
263933193dcaSMartin Peres 				}
264033193dcaSMartin Peres 			},
2641fb2ed616STakashi Iwai 			QUIRK_COMPOSITE_END
264233193dcaSMartin Peres 		}
264333193dcaSMartin Peres 	}
264433193dcaSMartin Peres },
26455ebf6b1eSTakashi Iwai #endif /* disabled */
264633193dcaSMartin Peres 
2647240a8af9SErik Veijola {
2648240a8af9SErik Veijola 	/*
2649240a8af9SErik Veijola 	 * Bower's & Wilkins PX headphones only support the 48 kHz sample rate
2650240a8af9SErik Veijola 	 * even though it advertises more. The capture interface doesn't work
2651240a8af9SErik Veijola 	 * even on windows.
2652240a8af9SErik Veijola 	 */
2653240a8af9SErik Veijola 	USB_DEVICE(0x19b5, 0x0021),
2654fb2ed616STakashi Iwai 	QUIRK_DRIVER_INFO {
2655fb2ed616STakashi Iwai 		QUIRK_DATA_COMPOSITE {
2656fb2ed616STakashi Iwai 			{ QUIRK_DATA_STANDARD_MIXER(0) },
2657240a8af9SErik Veijola 			/* Playback */
2658240a8af9SErik Veijola 			{
2659fb2ed616STakashi Iwai 				QUIRK_DATA_AUDIOFORMAT(1) {
2660240a8af9SErik Veijola 					.formats = SNDRV_PCM_FMTBIT_S16_LE,
2661240a8af9SErik Veijola 					.channels = 2,
2662c369c8dbSNicolas Huaman 					.iface = 1,
2663240a8af9SErik Veijola 					.altsetting = 1,
2664240a8af9SErik Veijola 					.altset_idx = 1,
2665240a8af9SErik Veijola 					.attributes = UAC_EP_CS_ATTR_FILL_MAX |
2666240a8af9SErik Veijola 						UAC_EP_CS_ATTR_SAMPLE_RATE,
2667240a8af9SErik Veijola 					.endpoint = 0x03,
2668240a8af9SErik Veijola 					.ep_attr = USB_ENDPOINT_XFER_ISOC,
2669240a8af9SErik Veijola 					.rates = SNDRV_PCM_RATE_48000,
2670240a8af9SErik Veijola 					.rate_min = 48000,
2671240a8af9SErik Veijola 					.rate_max = 48000,
2672240a8af9SErik Veijola 					.nr_rates = 1,
2673240a8af9SErik Veijola 					.rate_table = (unsigned int[]) {
2674240a8af9SErik Veijola 						48000
2675240a8af9SErik Veijola 					}
2676240a8af9SErik Veijola 				}
2677240a8af9SErik Veijola 			},
2678fb2ed616STakashi Iwai 			QUIRK_COMPOSITE_END
2679240a8af9SErik Veijola 		}
2680240a8af9SErik Veijola 	}
2681240a8af9SErik Veijola },
2682a634090aSManuel Reinhardt /* MOTU Microbook II */
2683a634090aSManuel Reinhardt {
26842edb84e3SAlexander Tsoy 	USB_DEVICE_VENDOR_SPEC(0x07fd, 0x0004),
2685fb2ed616STakashi Iwai 	QUIRK_DRIVER_INFO {
2686a634090aSManuel Reinhardt 		.vendor_name = "MOTU",
2687a634090aSManuel Reinhardt 		.product_name = "MicroBookII",
2688fb2ed616STakashi Iwai 		QUIRK_DATA_COMPOSITE {
2689fb2ed616STakashi Iwai 			{ QUIRK_DATA_STANDARD_MIXER(0) },
2690a634090aSManuel Reinhardt 			{
2691fb2ed616STakashi Iwai 				QUIRK_DATA_AUDIOFORMAT(0) {
2692a634090aSManuel Reinhardt 					.formats = SNDRV_PCM_FMTBIT_S24_3BE,
2693a634090aSManuel Reinhardt 					.channels = 6,
2694a634090aSManuel Reinhardt 					.iface = 0,
2695a634090aSManuel Reinhardt 					.altsetting = 1,
2696a634090aSManuel Reinhardt 					.altset_idx = 1,
2697a634090aSManuel Reinhardt 					.attributes = 0,
2698a634090aSManuel Reinhardt 					.endpoint = 0x84,
2699a634090aSManuel Reinhardt 					.rates = SNDRV_PCM_RATE_96000,
2700a634090aSManuel Reinhardt 					.ep_attr = USB_ENDPOINT_XFER_ISOC |
2701a634090aSManuel Reinhardt 						   USB_ENDPOINT_SYNC_ASYNC,
2702a634090aSManuel Reinhardt 					.rate_min = 96000,
2703a634090aSManuel Reinhardt 					.rate_max = 96000,
2704a634090aSManuel Reinhardt 					.nr_rates = 1,
2705a634090aSManuel Reinhardt 					.maxpacksize = 0x00d8,
2706a634090aSManuel Reinhardt 					.rate_table = (unsigned int[]) {
2707a634090aSManuel Reinhardt 						96000
2708a634090aSManuel Reinhardt 					}
2709a634090aSManuel Reinhardt 				}
2710a634090aSManuel Reinhardt 			},
2711a634090aSManuel Reinhardt 			{
2712fb2ed616STakashi Iwai 				QUIRK_DATA_AUDIOFORMAT(0) {
2713a634090aSManuel Reinhardt 					.formats = SNDRV_PCM_FMTBIT_S24_3BE,
2714a634090aSManuel Reinhardt 					.channels = 8,
2715a634090aSManuel Reinhardt 					.iface = 0,
2716a634090aSManuel Reinhardt 					.altsetting = 1,
2717a634090aSManuel Reinhardt 					.altset_idx = 1,
2718a634090aSManuel Reinhardt 					.attributes = 0,
2719a634090aSManuel Reinhardt 					.endpoint = 0x03,
27207b0efea4STakashi Iwai 					.ep_idx = 1,
2721a634090aSManuel Reinhardt 					.rates = SNDRV_PCM_RATE_96000,
2722a634090aSManuel Reinhardt 					.ep_attr = USB_ENDPOINT_XFER_ISOC |
2723a634090aSManuel Reinhardt 						   USB_ENDPOINT_SYNC_ASYNC,
2724a634090aSManuel Reinhardt 					.rate_min = 96000,
2725a634090aSManuel Reinhardt 					.rate_max = 96000,
2726a634090aSManuel Reinhardt 					.nr_rates = 1,
2727a634090aSManuel Reinhardt 					.maxpacksize = 0x0120,
2728a634090aSManuel Reinhardt 					.rate_table = (unsigned int[]) {
2729a634090aSManuel Reinhardt 						96000
2730a634090aSManuel Reinhardt 					}
2731a634090aSManuel Reinhardt 				}
2732a634090aSManuel Reinhardt 			},
2733fb2ed616STakashi Iwai 			QUIRK_COMPOSITE_END
2734a634090aSManuel Reinhardt 		}
2735a634090aSManuel Reinhardt 	}
2736a634090aSManuel Reinhardt },
2737118b2806SArd van Breemen {
2738118b2806SArd van Breemen 	/*
2739118b2806SArd van Breemen 	 * PIONEER DJ DDJ-SX3
2740118b2806SArd van Breemen 	 * PCM is 12 channels out, 10 channels in @ 44.1 fixed
2741118b2806SArd van Breemen 	 * interface 0, vendor class alt setting 1 for endpoints 5 and 0x86
2742118b2806SArd van Breemen 	 * The feedback for the output is the input.
2743118b2806SArd van Breemen 	 */
2744118b2806SArd van Breemen 	USB_DEVICE_VENDOR_SPEC(0x2b73, 0x0023),
2745fb2ed616STakashi Iwai 	QUIRK_DRIVER_INFO {
2746fb2ed616STakashi Iwai 		QUIRK_DATA_COMPOSITE {
2747118b2806SArd van Breemen 			{
2748fb2ed616STakashi Iwai 				QUIRK_DATA_AUDIOFORMAT(0) {
2749118b2806SArd van Breemen 					.formats = SNDRV_PCM_FMTBIT_S32_LE,
2750118b2806SArd van Breemen 					.channels = 12,
2751118b2806SArd van Breemen 					.iface = 0,
2752118b2806SArd van Breemen 					.altsetting = 1,
2753118b2806SArd van Breemen 					.altset_idx = 1,
2754118b2806SArd van Breemen 					.endpoint = 0x05,
2755118b2806SArd van Breemen 					.ep_attr = USB_ENDPOINT_XFER_ISOC|
2756118b2806SArd van Breemen 						   USB_ENDPOINT_SYNC_ASYNC,
2757118b2806SArd van Breemen 					.rates = SNDRV_PCM_RATE_44100,
2758118b2806SArd van Breemen 					.rate_min = 44100,
2759118b2806SArd van Breemen 					.rate_max = 44100,
2760118b2806SArd van Breemen 					.nr_rates = 1,
2761118b2806SArd van Breemen 					.rate_table = (unsigned int[]) { 44100 }
2762118b2806SArd van Breemen 				}
2763118b2806SArd van Breemen 			},
2764118b2806SArd van Breemen 			{
2765fb2ed616STakashi Iwai 				QUIRK_DATA_AUDIOFORMAT(0) {
2766118b2806SArd van Breemen 					.formats = SNDRV_PCM_FMTBIT_S32_LE,
2767118b2806SArd van Breemen 					.channels = 10,
2768118b2806SArd van Breemen 					.iface = 0,
2769118b2806SArd van Breemen 					.altsetting = 1,
2770118b2806SArd van Breemen 					.altset_idx = 1,
2771118b2806SArd van Breemen 					.endpoint = 0x86,
2772eae4d054STakashi Iwai 					.ep_idx = 1,
2773118b2806SArd van Breemen 					.ep_attr = USB_ENDPOINT_XFER_ISOC|
2774118b2806SArd van Breemen 						 USB_ENDPOINT_SYNC_ASYNC|
2775118b2806SArd van Breemen 						 USB_ENDPOINT_USAGE_IMPLICIT_FB,
2776118b2806SArd van Breemen 					.rates = SNDRV_PCM_RATE_44100,
2777118b2806SArd van Breemen 					.rate_min = 44100,
2778118b2806SArd van Breemen 					.rate_max = 44100,
2779118b2806SArd van Breemen 					.nr_rates = 1,
2780118b2806SArd van Breemen 					.rate_table = (unsigned int[]) { 44100 }
2781118b2806SArd van Breemen 				}
2782118b2806SArd van Breemen 			},
2783fb2ed616STakashi Iwai 			QUIRK_COMPOSITE_END
2784118b2806SArd van Breemen 		}
2785118b2806SArd van Breemen 	}
2786118b2806SArd van Breemen },
278773d8c940SFrantišek Kučera {
278873d8c940SFrantišek Kučera 	/*
278973d8c940SFrantišek Kučera 	 * Pioneer DJ DJM-250MK2
279014335d8bSFrantišek Kučera 	 * PCM is 8 channels out @ 48 fixed (endpoint 0x01)
279114335d8bSFrantišek Kučera 	 * and 8 channels in @ 48 fixed (endpoint 0x82).
279273d8c940SFrantišek Kučera 	 *
279314335d8bSFrantišek Kučera 	 * Both playback and recording is working, even simultaneously.
279414335d8bSFrantišek Kučera 	 *
279514335d8bSFrantišek Kučera 	 * Playback channels could be mapped to:
279614335d8bSFrantišek Kučera 	 *  - CH1
279714335d8bSFrantišek Kučera 	 *  - CH2
279814335d8bSFrantišek Kučera 	 *  - AUX
279914335d8bSFrantišek Kučera 	 *
280014335d8bSFrantišek Kučera 	 * Recording channels could be mapped to:
280114335d8bSFrantišek Kučera 	 *  - Post CH1 Fader
280214335d8bSFrantišek Kučera 	 *  - Post CH2 Fader
280314335d8bSFrantišek Kučera 	 *  - Cross Fader A
280414335d8bSFrantišek Kučera 	 *  - Cross Fader B
280514335d8bSFrantišek Kučera 	 *  - MIC
280614335d8bSFrantišek Kučera 	 *  - AUX
280714335d8bSFrantišek Kučera 	 *  - REC OUT
280814335d8bSFrantišek Kučera 	 *
280914335d8bSFrantišek Kučera 	 * There is remaining problem with recording directly from PHONO/LINE.
281014335d8bSFrantišek Kučera 	 * If we map a channel to:
281114335d8bSFrantišek Kučera 	 *  - CH1 Control Tone PHONO
281214335d8bSFrantišek Kučera 	 *  - CH1 Control Tone LINE
281314335d8bSFrantišek Kučera 	 *  - CH2 Control Tone PHONO
281414335d8bSFrantišek Kučera 	 *  - CH2 Control Tone LINE
281514335d8bSFrantišek Kučera 	 * it is silent.
281614335d8bSFrantišek Kučera 	 * There is no signal even on other operating systems with official drivers.
281714335d8bSFrantišek Kučera 	 * The signal appears only when a supported application is started.
281814335d8bSFrantišek Kučera 	 * This needs to be investigated yet...
281914335d8bSFrantišek Kučera 	 * (there is quite a lot communication on the USB in both directions)
282014335d8bSFrantišek Kučera 	 *
282114335d8bSFrantišek Kučera 	 * In current version this mixer could be used for playback
282214335d8bSFrantišek Kučera 	 * and for recording from vinyls (through Post CH* Fader)
282314335d8bSFrantišek Kučera 	 * but not for DVS (Digital Vinyl Systems) like in Mixxx.
282473d8c940SFrantišek Kučera 	 */
282573d8c940SFrantišek Kučera 	USB_DEVICE_VENDOR_SPEC(0x2b73, 0x0017),
2826fb2ed616STakashi Iwai 	QUIRK_DRIVER_INFO {
2827fb2ed616STakashi Iwai 		QUIRK_DATA_COMPOSITE {
282873d8c940SFrantišek Kučera 			{
2829fb2ed616STakashi Iwai 				QUIRK_DATA_AUDIOFORMAT(0) {
283073d8c940SFrantišek Kučera 					.formats = SNDRV_PCM_FMTBIT_S24_3LE,
283173d8c940SFrantišek Kučera 					.channels = 8, // outputs
283273d8c940SFrantišek Kučera 					.iface = 0,
283373d8c940SFrantišek Kučera 					.altsetting = 1,
283473d8c940SFrantišek Kučera 					.altset_idx = 1,
283573d8c940SFrantišek Kučera 					.endpoint = 0x01,
283673d8c940SFrantišek Kučera 					.ep_attr = USB_ENDPOINT_XFER_ISOC|
283773d8c940SFrantišek Kučera 						USB_ENDPOINT_SYNC_ASYNC,
283873d8c940SFrantišek Kučera 					.rates = SNDRV_PCM_RATE_48000,
283973d8c940SFrantišek Kučera 					.rate_min = 48000,
284073d8c940SFrantišek Kučera 					.rate_max = 48000,
284173d8c940SFrantišek Kučera 					.nr_rates = 1,
284273d8c940SFrantišek Kučera 					.rate_table = (unsigned int[]) { 48000 }
284373d8c940SFrantišek Kučera 					}
284473d8c940SFrantišek Kučera 			},
284573d8c940SFrantišek Kučera 			{
2846fb2ed616STakashi Iwai 				QUIRK_DATA_AUDIOFORMAT(0) {
284714335d8bSFrantišek Kučera 					.formats = SNDRV_PCM_FMTBIT_S24_3LE,
284814335d8bSFrantišek Kučera 					.channels = 8, // inputs
284914335d8bSFrantišek Kučera 					.iface = 0,
285014335d8bSFrantišek Kučera 					.altsetting = 1,
285114335d8bSFrantišek Kučera 					.altset_idx = 1,
285214335d8bSFrantišek Kučera 					.endpoint = 0x82,
2853eae4d054STakashi Iwai 					.ep_idx = 1,
285414335d8bSFrantišek Kučera 					.ep_attr = USB_ENDPOINT_XFER_ISOC|
285514335d8bSFrantišek Kučera 						USB_ENDPOINT_SYNC_ASYNC|
285614335d8bSFrantišek Kučera 						USB_ENDPOINT_USAGE_IMPLICIT_FB,
285714335d8bSFrantišek Kučera 					.rates = SNDRV_PCM_RATE_48000,
285814335d8bSFrantišek Kučera 					.rate_min = 48000,
285914335d8bSFrantišek Kučera 					.rate_max = 48000,
286014335d8bSFrantišek Kučera 					.nr_rates = 1,
286114335d8bSFrantišek Kučera 					.rate_table = (unsigned int[]) { 48000 }
286214335d8bSFrantišek Kučera 				}
286314335d8bSFrantišek Kučera 			},
2864fb2ed616STakashi Iwai 			QUIRK_COMPOSITE_END
286573d8c940SFrantišek Kučera 		}
286673d8c940SFrantišek Kučera 	}
286773d8c940SFrantišek Kučera },
28686e859617SHector Martin {
28696e859617SHector Martin 	/*
28706e859617SHector Martin 	 * PIONEER DJ DDJ-RB
28716e859617SHector Martin 	 * PCM is 4 channels out, 2 dummy channels in @ 44.1 fixed
28726e859617SHector Martin 	 * The feedback for the output is the dummy input.
28736e859617SHector Martin 	 */
28746e859617SHector Martin 	USB_DEVICE_VENDOR_SPEC(0x2b73, 0x000e),
2875fb2ed616STakashi Iwai 	QUIRK_DRIVER_INFO {
2876fb2ed616STakashi Iwai 		QUIRK_DATA_COMPOSITE {
28776e859617SHector Martin 			{
2878fb2ed616STakashi Iwai 				QUIRK_DATA_AUDIOFORMAT(0) {
28796e859617SHector Martin 					.formats = SNDRV_PCM_FMTBIT_S24_3LE,
28806e859617SHector Martin 					.channels = 4,
28816e859617SHector Martin 					.iface = 0,
28826e859617SHector Martin 					.altsetting = 1,
28836e859617SHector Martin 					.altset_idx = 1,
28846e859617SHector Martin 					.endpoint = 0x01,
28856e859617SHector Martin 					.ep_attr = USB_ENDPOINT_XFER_ISOC|
28866e859617SHector Martin 						   USB_ENDPOINT_SYNC_ASYNC,
28876e859617SHector Martin 					.rates = SNDRV_PCM_RATE_44100,
28886e859617SHector Martin 					.rate_min = 44100,
28896e859617SHector Martin 					.rate_max = 44100,
28906e859617SHector Martin 					.nr_rates = 1,
28916e859617SHector Martin 					.rate_table = (unsigned int[]) { 44100 }
28926e859617SHector Martin 				}
28936e859617SHector Martin 			},
28946e859617SHector Martin 			{
2895fb2ed616STakashi Iwai 				QUIRK_DATA_AUDIOFORMAT(0) {
28966e859617SHector Martin 					.formats = SNDRV_PCM_FMTBIT_S24_3LE,
28976e859617SHector Martin 					.channels = 2,
28986e859617SHector Martin 					.iface = 0,
28996e859617SHector Martin 					.altsetting = 1,
29006e859617SHector Martin 					.altset_idx = 1,
29016e859617SHector Martin 					.endpoint = 0x82,
2902eae4d054STakashi Iwai 					.ep_idx = 1,
29036e859617SHector Martin 					.ep_attr = USB_ENDPOINT_XFER_ISOC|
29046e859617SHector Martin 						 USB_ENDPOINT_SYNC_ASYNC|
29056e859617SHector Martin 						 USB_ENDPOINT_USAGE_IMPLICIT_FB,
29066e859617SHector Martin 					.rates = SNDRV_PCM_RATE_44100,
29076e859617SHector Martin 					.rate_min = 44100,
29086e859617SHector Martin 					.rate_max = 44100,
29096e859617SHector Martin 					.nr_rates = 1,
29106e859617SHector Martin 					.rate_table = (unsigned int[]) { 44100 }
29116e859617SHector Martin 				}
29126e859617SHector Martin 			},
2913fb2ed616STakashi Iwai 			QUIRK_COMPOSITE_END
29146e859617SHector Martin 		}
29156e859617SHector Martin 	}
29166e859617SHector Martin },
2917240a8af9SErik Veijola 
29187fccfecfSDmitry Panchenko {
29197fccfecfSDmitry Panchenko 	/*
292083ab7b45SDaniel Martin 	 * PIONEER DJ DDJ-RR
292183ab7b45SDaniel Martin 	 * PCM is 6 channels out & 4 channels in @ 44.1 fixed
292283ab7b45SDaniel Martin 	 */
292383ab7b45SDaniel Martin 	USB_DEVICE_VENDOR_SPEC(0x2b73, 0x000d),
2924fb2ed616STakashi Iwai 	QUIRK_DRIVER_INFO {
2925fb2ed616STakashi Iwai 		QUIRK_DATA_COMPOSITE {
292683ab7b45SDaniel Martin 			{
2927fb2ed616STakashi Iwai 				QUIRK_DATA_AUDIOFORMAT(0) {
292883ab7b45SDaniel Martin 					.formats = SNDRV_PCM_FMTBIT_S24_3LE,
292983ab7b45SDaniel Martin 					.channels = 6, //Master, Headphones & Booth
293083ab7b45SDaniel Martin 					.iface = 0,
293183ab7b45SDaniel Martin 					.altsetting = 1,
293283ab7b45SDaniel Martin 					.altset_idx = 1,
293383ab7b45SDaniel Martin 					.endpoint = 0x01,
293483ab7b45SDaniel Martin 					.ep_attr = USB_ENDPOINT_XFER_ISOC|
293583ab7b45SDaniel Martin 						   USB_ENDPOINT_SYNC_ASYNC,
293683ab7b45SDaniel Martin 					.rates = SNDRV_PCM_RATE_44100,
293783ab7b45SDaniel Martin 					.rate_min = 44100,
293883ab7b45SDaniel Martin 					.rate_max = 44100,
293983ab7b45SDaniel Martin 					.nr_rates = 1,
294083ab7b45SDaniel Martin 					.rate_table = (unsigned int[]) { 44100 }
294183ab7b45SDaniel Martin 				}
294283ab7b45SDaniel Martin 			},
294383ab7b45SDaniel Martin 			{
2944fb2ed616STakashi Iwai 				QUIRK_DATA_AUDIOFORMAT(0) {
294583ab7b45SDaniel Martin 					.formats = SNDRV_PCM_FMTBIT_S24_3LE,
294683ab7b45SDaniel Martin 					.channels = 4, //2x RCA inputs (CH1 & CH2)
294783ab7b45SDaniel Martin 					.iface = 0,
294883ab7b45SDaniel Martin 					.altsetting = 1,
294983ab7b45SDaniel Martin 					.altset_idx = 1,
295083ab7b45SDaniel Martin 					.endpoint = 0x82,
2951eae4d054STakashi Iwai 					.ep_idx = 1,
295283ab7b45SDaniel Martin 					.ep_attr = USB_ENDPOINT_XFER_ISOC|
295383ab7b45SDaniel Martin 						 USB_ENDPOINT_SYNC_ASYNC|
295483ab7b45SDaniel Martin 						 USB_ENDPOINT_USAGE_IMPLICIT_FB,
295583ab7b45SDaniel Martin 					.rates = SNDRV_PCM_RATE_44100,
295683ab7b45SDaniel Martin 					.rate_min = 44100,
295783ab7b45SDaniel Martin 					.rate_max = 44100,
295883ab7b45SDaniel Martin 					.nr_rates = 1,
295983ab7b45SDaniel Martin 					.rate_table = (unsigned int[]) { 44100 }
296083ab7b45SDaniel Martin 				}
296183ab7b45SDaniel Martin 			},
2962fb2ed616STakashi Iwai 			QUIRK_COMPOSITE_END
296383ab7b45SDaniel Martin 		}
296483ab7b45SDaniel Martin 	}
296583ab7b45SDaniel Martin },
296683ab7b45SDaniel Martin 
296783ab7b45SDaniel Martin {
296883ab7b45SDaniel Martin 	/*
29692c854e5cSTakashi Iwai 	 * PIONEER DJ DDJ-SR2
29702c854e5cSTakashi Iwai 	 * PCM is 4 channels out, 6 channels in @ 44.1 fixed
29712c854e5cSTakashi Iwai 	 * The Feedback for the output is the input
29722c854e5cSTakashi Iwai 	 */
29732c854e5cSTakashi Iwai 	USB_DEVICE_VENDOR_SPEC(0x2b73, 0x001e),
2974fb2ed616STakashi Iwai 	QUIRK_DRIVER_INFO {
2975fb2ed616STakashi Iwai 		QUIRK_DATA_COMPOSITE {
29762c854e5cSTakashi Iwai 			{
2977fb2ed616STakashi Iwai 				QUIRK_DATA_AUDIOFORMAT(0) {
29782c854e5cSTakashi Iwai 					.formats = SNDRV_PCM_FMTBIT_S24_3LE,
29792c854e5cSTakashi Iwai 					.channels = 4,
29802c854e5cSTakashi Iwai 					.iface = 0,
29812c854e5cSTakashi Iwai 					.altsetting = 1,
29822c854e5cSTakashi Iwai 					.altset_idx = 1,
29832c854e5cSTakashi Iwai 					.endpoint = 0x01,
29842c854e5cSTakashi Iwai 					.ep_attr = USB_ENDPOINT_XFER_ISOC|
29852c854e5cSTakashi Iwai 						USB_ENDPOINT_SYNC_ASYNC,
29862c854e5cSTakashi Iwai 					.rates = SNDRV_PCM_RATE_44100,
29872c854e5cSTakashi Iwai 					.rate_min = 44100,
29882c854e5cSTakashi Iwai 					.rate_max = 44100,
29892c854e5cSTakashi Iwai 					.nr_rates = 1,
29902c854e5cSTakashi Iwai 					.rate_table = (unsigned int[]) { 44100 }
29912c854e5cSTakashi Iwai 				}
29922c854e5cSTakashi Iwai 			},
29932c854e5cSTakashi Iwai 			{
2994fb2ed616STakashi Iwai 				QUIRK_DATA_AUDIOFORMAT(0) {
29952c854e5cSTakashi Iwai 					.formats = SNDRV_PCM_FMTBIT_S24_3LE,
29962c854e5cSTakashi Iwai 					.channels = 6,
29972c854e5cSTakashi Iwai 					.iface = 0,
29982c854e5cSTakashi Iwai 					.altsetting = 1,
29992c854e5cSTakashi Iwai 					.altset_idx = 1,
30002c854e5cSTakashi Iwai 					.endpoint = 0x82,
3001eae4d054STakashi Iwai 					.ep_idx = 1,
30022c854e5cSTakashi Iwai 					.ep_attr = USB_ENDPOINT_XFER_ISOC|
30032c854e5cSTakashi Iwai 						USB_ENDPOINT_SYNC_ASYNC|
30042c854e5cSTakashi Iwai 					USB_ENDPOINT_USAGE_IMPLICIT_FB,
30052c854e5cSTakashi Iwai 					.rates = SNDRV_PCM_RATE_44100,
30062c854e5cSTakashi Iwai 					.rate_min = 44100,
30072c854e5cSTakashi Iwai 					.rate_max = 44100,
30082c854e5cSTakashi Iwai 					.nr_rates = 1,
30092c854e5cSTakashi Iwai 					.rate_table = (unsigned int[]) { 44100 }
30102c854e5cSTakashi Iwai 				}
30112c854e5cSTakashi Iwai 			},
3012fb2ed616STakashi Iwai 			QUIRK_COMPOSITE_END
30132c854e5cSTakashi Iwai 		}
30142c854e5cSTakashi Iwai 	}
30152c854e5cSTakashi Iwai },
30162c854e5cSTakashi Iwai 
30172c854e5cSTakashi Iwai {
30182c854e5cSTakashi Iwai 	/*
30197fccfecfSDmitry Panchenko 	 * Pioneer DJ DJM-900NXS2
30207fccfecfSDmitry Panchenko 	 * 10 channels playback & 12 channels capture @ 44.1/48/96kHz S24LE
30217fccfecfSDmitry Panchenko 	 */
30227fccfecfSDmitry Panchenko 	USB_DEVICE_VENDOR_SPEC(0x2b73, 0x000a),
3023fb2ed616STakashi Iwai 	QUIRK_DRIVER_INFO {
3024fb2ed616STakashi Iwai 		QUIRK_DATA_COMPOSITE {
30257fccfecfSDmitry Panchenko 			{
3026fb2ed616STakashi Iwai 				QUIRK_DATA_AUDIOFORMAT(0) {
30277fccfecfSDmitry Panchenko 					.formats = SNDRV_PCM_FMTBIT_S24_3LE,
30287fccfecfSDmitry Panchenko 					.channels = 10,
30297fccfecfSDmitry Panchenko 					.iface = 0,
30307fccfecfSDmitry Panchenko 					.altsetting = 1,
30317fccfecfSDmitry Panchenko 					.altset_idx = 1,
30327fccfecfSDmitry Panchenko 					.endpoint = 0x01,
30337fccfecfSDmitry Panchenko 					.ep_attr = USB_ENDPOINT_XFER_ISOC|
30347fccfecfSDmitry Panchenko 					    USB_ENDPOINT_SYNC_ASYNC,
30357fccfecfSDmitry Panchenko 					.rates = SNDRV_PCM_RATE_44100|
30367fccfecfSDmitry Panchenko 					    SNDRV_PCM_RATE_48000|
30377fccfecfSDmitry Panchenko 					    SNDRV_PCM_RATE_96000,
30387fccfecfSDmitry Panchenko 					.rate_min = 44100,
30397fccfecfSDmitry Panchenko 					.rate_max = 96000,
30407fccfecfSDmitry Panchenko 					.nr_rates = 3,
30417fccfecfSDmitry Panchenko 					.rate_table = (unsigned int[]) {
30427fccfecfSDmitry Panchenko 						44100, 48000, 96000
30437fccfecfSDmitry Panchenko 					}
30447fccfecfSDmitry Panchenko 				}
30457fccfecfSDmitry Panchenko 			},
30467fccfecfSDmitry Panchenko 			{
3047fb2ed616STakashi Iwai 				QUIRK_DATA_AUDIOFORMAT(0) {
30487fccfecfSDmitry Panchenko 					.formats = SNDRV_PCM_FMTBIT_S24_3LE,
30497fccfecfSDmitry Panchenko 					.channels = 12,
30507fccfecfSDmitry Panchenko 					.iface = 0,
30517fccfecfSDmitry Panchenko 					.altsetting = 1,
30527fccfecfSDmitry Panchenko 					.altset_idx = 1,
30537fccfecfSDmitry Panchenko 					.endpoint = 0x82,
3054eae4d054STakashi Iwai 					.ep_idx = 1,
30557fccfecfSDmitry Panchenko 					.ep_attr = USB_ENDPOINT_XFER_ISOC|
30567fccfecfSDmitry Panchenko 					    USB_ENDPOINT_SYNC_ASYNC|
30577fccfecfSDmitry Panchenko 					    USB_ENDPOINT_USAGE_IMPLICIT_FB,
30587fccfecfSDmitry Panchenko 					.rates = SNDRV_PCM_RATE_44100|
30597fccfecfSDmitry Panchenko 					    SNDRV_PCM_RATE_48000|
30607fccfecfSDmitry Panchenko 					    SNDRV_PCM_RATE_96000,
30617fccfecfSDmitry Panchenko 					.rate_min = 44100,
30627fccfecfSDmitry Panchenko 					.rate_max = 96000,
30637fccfecfSDmitry Panchenko 					.nr_rates = 3,
30647fccfecfSDmitry Panchenko 					.rate_table = (unsigned int[]) {
30657fccfecfSDmitry Panchenko 						44100, 48000, 96000
30667fccfecfSDmitry Panchenko 					}
30677fccfecfSDmitry Panchenko 				}
30687fccfecfSDmitry Panchenko 			},
3069fb2ed616STakashi Iwai 			QUIRK_COMPOSITE_END
30707fccfecfSDmitry Panchenko 		}
30717fccfecfSDmitry Panchenko 	}
30727fccfecfSDmitry Panchenko },
30737f5ad9c9STakashi Iwai 
30747501f472SGeraldo Nascimento {
30757501f472SGeraldo Nascimento 	/*
30767501f472SGeraldo Nascimento 	 * PIONEER DJ DDJ-800
30777501f472SGeraldo Nascimento 	 * PCM is 6 channels out, 6 channels in @ 44.1 fixed
30787501f472SGeraldo Nascimento 	 * The Feedback for the output is the input
30797501f472SGeraldo Nascimento 	 */
30807501f472SGeraldo Nascimento 	USB_DEVICE_VENDOR_SPEC(0x2b73, 0x0029),
3081fb2ed616STakashi Iwai 	QUIRK_DRIVER_INFO {
3082fb2ed616STakashi Iwai 		QUIRK_DATA_COMPOSITE {
30837501f472SGeraldo Nascimento 			{
3084fb2ed616STakashi Iwai 				QUIRK_DATA_AUDIOFORMAT(0) {
30857501f472SGeraldo Nascimento 					.formats = SNDRV_PCM_FMTBIT_S24_3LE,
30867501f472SGeraldo Nascimento 					.channels = 6,
30877501f472SGeraldo Nascimento 					.iface = 0,
30887501f472SGeraldo Nascimento 					.altsetting = 1,
30897501f472SGeraldo Nascimento 					.altset_idx = 1,
30907501f472SGeraldo Nascimento 					.endpoint = 0x01,
30917501f472SGeraldo Nascimento 					.ep_attr = USB_ENDPOINT_XFER_ISOC|
30927501f472SGeraldo Nascimento 						USB_ENDPOINT_SYNC_ASYNC,
30937501f472SGeraldo Nascimento 					.rates = SNDRV_PCM_RATE_44100,
30947501f472SGeraldo Nascimento 					.rate_min = 44100,
30957501f472SGeraldo Nascimento 					.rate_max = 44100,
30967501f472SGeraldo Nascimento 					.nr_rates = 1,
30977501f472SGeraldo Nascimento 					.rate_table = (unsigned int[]) { 44100 }
30987501f472SGeraldo Nascimento 				}
30997501f472SGeraldo Nascimento 			},
31007501f472SGeraldo Nascimento 			{
3101fb2ed616STakashi Iwai 				QUIRK_DATA_AUDIOFORMAT(0) {
31027501f472SGeraldo Nascimento 					.formats = SNDRV_PCM_FMTBIT_S24_3LE,
31037501f472SGeraldo Nascimento 					.channels = 6,
31047501f472SGeraldo Nascimento 					.iface = 0,
31057501f472SGeraldo Nascimento 					.altsetting = 1,
31067501f472SGeraldo Nascimento 					.altset_idx = 1,
31077501f472SGeraldo Nascimento 					.endpoint = 0x82,
31087501f472SGeraldo Nascimento 					.ep_idx = 1,
31097501f472SGeraldo Nascimento 					.ep_attr = USB_ENDPOINT_XFER_ISOC|
31107501f472SGeraldo Nascimento 						USB_ENDPOINT_SYNC_ASYNC|
31117501f472SGeraldo Nascimento 					USB_ENDPOINT_USAGE_IMPLICIT_FB,
31127501f472SGeraldo Nascimento 					.rates = SNDRV_PCM_RATE_44100,
31137501f472SGeraldo Nascimento 					.rate_min = 44100,
31147501f472SGeraldo Nascimento 					.rate_max = 44100,
31157501f472SGeraldo Nascimento 					.nr_rates = 1,
31167501f472SGeraldo Nascimento 					.rate_table = (unsigned int[]) { 44100 }
31177501f472SGeraldo Nascimento 				}
31187501f472SGeraldo Nascimento 			},
3119fb2ed616STakashi Iwai 			QUIRK_COMPOSITE_END
31207501f472SGeraldo Nascimento 		}
31217501f472SGeraldo Nascimento 	}
31227501f472SGeraldo Nascimento },
31237501f472SGeraldo Nascimento 
3124e337bf19SHector Martin /*
31256e2c9105SJohn Veness  * MacroSilicon MS2100/MS2106 based AV capture cards
31266e2c9105SJohn Veness  *
31276e2c9105SJohn Veness  * These claim 96kHz 1ch in the descriptors, but are actually 48kHz 2ch.
31286e2c9105SJohn Veness  * They also need QUIRK_FLAG_ALIGN_TRANSFER, which makes one wonder if
31296e2c9105SJohn Veness  * they pretend to be 96kHz mono as a workaround for stereo being broken
31306e2c9105SJohn Veness  * by that...
31316e2c9105SJohn Veness  *
31326e2c9105SJohn Veness  * They also have an issue with initial stream alignment that causes the
31336e2c9105SJohn Veness  * channels to be swapped and out of phase, which is dealt with in quirks.c.
31346e2c9105SJohn Veness  */
31356e2c9105SJohn Veness {
31366e2c9105SJohn Veness 	USB_AUDIO_DEVICE(0x534d, 0x0021),
3137fb2ed616STakashi Iwai 	QUIRK_DRIVER_INFO {
31386e2c9105SJohn Veness 		.vendor_name = "MacroSilicon",
31396e2c9105SJohn Veness 		.product_name = "MS210x",
3140fb2ed616STakashi Iwai 		QUIRK_DATA_COMPOSITE {
3141fb2ed616STakashi Iwai 			{ QUIRK_DATA_STANDARD_MIXER(2) },
31426e2c9105SJohn Veness 			{
3143fb2ed616STakashi Iwai 				QUIRK_DATA_AUDIOFORMAT(3) {
31446e2c9105SJohn Veness 					.formats = SNDRV_PCM_FMTBIT_S16_LE,
31456e2c9105SJohn Veness 					.channels = 2,
31466e2c9105SJohn Veness 					.iface = 3,
31476e2c9105SJohn Veness 					.altsetting = 1,
31486e2c9105SJohn Veness 					.altset_idx = 1,
31496e2c9105SJohn Veness 					.attributes = 0,
31506e2c9105SJohn Veness 					.endpoint = 0x82,
31516e2c9105SJohn Veness 					.ep_attr = USB_ENDPOINT_XFER_ISOC |
31526e2c9105SJohn Veness 						USB_ENDPOINT_SYNC_ASYNC,
31536e2c9105SJohn Veness 					.rates = SNDRV_PCM_RATE_CONTINUOUS,
31546e2c9105SJohn Veness 					.rate_min = 48000,
31556e2c9105SJohn Veness 					.rate_max = 48000,
31566e2c9105SJohn Veness 				}
31576e2c9105SJohn Veness 			},
3158fb2ed616STakashi Iwai 			QUIRK_COMPOSITE_END
31596e2c9105SJohn Veness 		}
31606e2c9105SJohn Veness 	}
31616e2c9105SJohn Veness },
31626e2c9105SJohn Veness 
31636e2c9105SJohn Veness /*
3164e337bf19SHector Martin  * MacroSilicon MS2109 based HDMI capture cards
3165e337bf19SHector Martin  *
3166e337bf19SHector Martin  * These claim 96kHz 1ch in the descriptors, but are actually 48kHz 2ch.
3167af158a7fSTakashi Iwai  * They also need QUIRK_FLAG_ALIGN_TRANSFER, which makes one wonder if
3168e337bf19SHector Martin  * they pretend to be 96kHz mono as a workaround for stereo being broken
3169e337bf19SHector Martin  * by that...
3170e337bf19SHector Martin  *
317174a2a7deSHector Martin  * They also have an issue with initial stream alignment that causes the
317274a2a7deSHector Martin  * channels to be swapped and out of phase, which is dealt with in quirks.c.
3173e337bf19SHector Martin  */
3174e337bf19SHector Martin {
3175fa10635fSTakashi Iwai 	USB_AUDIO_DEVICE(0x534d, 0x2109),
3176fb2ed616STakashi Iwai 	QUIRK_DRIVER_INFO {
3177e337bf19SHector Martin 		.vendor_name = "MacroSilicon",
3178e337bf19SHector Martin 		.product_name = "MS2109",
3179fb2ed616STakashi Iwai 		QUIRK_DATA_COMPOSITE {
3180fb2ed616STakashi Iwai 			{ QUIRK_DATA_STANDARD_MIXER(2) },
3181e337bf19SHector Martin 			{
3182fb2ed616STakashi Iwai 				QUIRK_DATA_AUDIOFORMAT(3) {
3183e337bf19SHector Martin 					.formats = SNDRV_PCM_FMTBIT_S16_LE,
3184e337bf19SHector Martin 					.channels = 2,
3185e337bf19SHector Martin 					.iface = 3,
3186e337bf19SHector Martin 					.altsetting = 1,
3187e337bf19SHector Martin 					.altset_idx = 1,
3188e337bf19SHector Martin 					.attributes = 0,
3189e337bf19SHector Martin 					.endpoint = 0x82,
3190e337bf19SHector Martin 					.ep_attr = USB_ENDPOINT_XFER_ISOC |
3191e337bf19SHector Martin 						USB_ENDPOINT_SYNC_ASYNC,
3192e337bf19SHector Martin 					.rates = SNDRV_PCM_RATE_CONTINUOUS,
3193e337bf19SHector Martin 					.rate_min = 48000,
3194e337bf19SHector Martin 					.rate_max = 48000,
3195e337bf19SHector Martin 				}
3196e337bf19SHector Martin 			},
3197fb2ed616STakashi Iwai 			QUIRK_COMPOSITE_END
3198e337bf19SHector Martin 		}
3199e337bf19SHector Martin 	}
3200e337bf19SHector Martin },
3201b952ac76SOlivia Mackintosh {
3202b952ac76SOlivia Mackintosh 	/*
3203b952ac76SOlivia Mackintosh 	 * Pioneer DJ DJM-750
3204b952ac76SOlivia Mackintosh 	 * 8 channels playback & 8 channels capture @ 44.1/48/96kHz S24LE
3205b952ac76SOlivia Mackintosh 	 */
3206b952ac76SOlivia Mackintosh 	USB_DEVICE_VENDOR_SPEC(0x08e4, 0x017f),
3207fb2ed616STakashi Iwai 	QUIRK_DRIVER_INFO {
3208fb2ed616STakashi Iwai 		QUIRK_DATA_COMPOSITE {
3209b952ac76SOlivia Mackintosh 			{
3210fb2ed616STakashi Iwai 				QUIRK_DATA_AUDIOFORMAT(0) {
3211b952ac76SOlivia Mackintosh 					.formats = SNDRV_PCM_FMTBIT_S24_3LE,
3212b952ac76SOlivia Mackintosh 					.channels = 8,
3213b952ac76SOlivia Mackintosh 					.iface = 0,
3214b952ac76SOlivia Mackintosh 					.altsetting = 1,
3215b952ac76SOlivia Mackintosh 					.altset_idx = 1,
3216b952ac76SOlivia Mackintosh 					.endpoint = 0x05,
3217b952ac76SOlivia Mackintosh 					.ep_attr = USB_ENDPOINT_XFER_ISOC|
3218b952ac76SOlivia Mackintosh 					    USB_ENDPOINT_SYNC_ASYNC,
3219b952ac76SOlivia Mackintosh 					.rates = SNDRV_PCM_RATE_44100|
3220b952ac76SOlivia Mackintosh 						SNDRV_PCM_RATE_48000|
3221b952ac76SOlivia Mackintosh 						SNDRV_PCM_RATE_96000,
3222b952ac76SOlivia Mackintosh 					.rate_min = 44100,
3223b952ac76SOlivia Mackintosh 					.rate_max = 96000,
3224b952ac76SOlivia Mackintosh 					.nr_rates = 3,
3225b952ac76SOlivia Mackintosh 					.rate_table = (unsigned int[]) { 44100, 48000, 96000 }
3226b952ac76SOlivia Mackintosh 				}
3227b952ac76SOlivia Mackintosh 			},
3228b952ac76SOlivia Mackintosh 			{
3229fb2ed616STakashi Iwai 				QUIRK_DATA_AUDIOFORMAT(0) {
3230b952ac76SOlivia Mackintosh 					.formats = SNDRV_PCM_FMTBIT_S24_3LE,
3231b952ac76SOlivia Mackintosh 					.channels = 8,
3232b952ac76SOlivia Mackintosh 					.iface = 0,
3233b952ac76SOlivia Mackintosh 					.altsetting = 1,
3234b952ac76SOlivia Mackintosh 					.altset_idx = 1,
3235b952ac76SOlivia Mackintosh 					.endpoint = 0x86,
3236b952ac76SOlivia Mackintosh 					.ep_idx = 1,
3237b952ac76SOlivia Mackintosh 					.ep_attr = USB_ENDPOINT_XFER_ISOC|
3238b952ac76SOlivia Mackintosh 						USB_ENDPOINT_SYNC_ASYNC|
3239b952ac76SOlivia Mackintosh 						USB_ENDPOINT_USAGE_IMPLICIT_FB,
3240b952ac76SOlivia Mackintosh 					.rates = SNDRV_PCM_RATE_44100|
3241b952ac76SOlivia Mackintosh 						SNDRV_PCM_RATE_48000|
3242b952ac76SOlivia Mackintosh 						SNDRV_PCM_RATE_96000,
3243b952ac76SOlivia Mackintosh 					.rate_min = 44100,
3244b952ac76SOlivia Mackintosh 					.rate_max = 96000,
3245b952ac76SOlivia Mackintosh 					.nr_rates = 3,
3246b952ac76SOlivia Mackintosh 					.rate_table = (unsigned int[]) { 44100, 48000, 96000 }
3247b952ac76SOlivia Mackintosh 				}
3248b952ac76SOlivia Mackintosh 			},
3249fb2ed616STakashi Iwai 			QUIRK_COMPOSITE_END
3250b952ac76SOlivia Mackintosh 		}
3251b952ac76SOlivia Mackintosh 	}
3252b952ac76SOlivia Mackintosh },
32539119e566SOlivia Mackintosh {
32549119e566SOlivia Mackintosh 	/*
32556d277881SWilliam Overton 	 * Pioneer DJ DJM-750MK2
32566d277881SWilliam Overton 	 * 10 channels playback & 12 channels capture @ 48kHz S24LE
32576d277881SWilliam Overton 	 */
32586d277881SWilliam Overton 	USB_DEVICE_VENDOR_SPEC(0x2b73, 0x001b),
3259fb2ed616STakashi Iwai 	QUIRK_DRIVER_INFO {
3260fb2ed616STakashi Iwai 		QUIRK_DATA_COMPOSITE {
32616d277881SWilliam Overton 			{
3262fb2ed616STakashi Iwai 				QUIRK_DATA_AUDIOFORMAT(0) {
32636d277881SWilliam Overton 					.formats = SNDRV_PCM_FMTBIT_S24_3LE,
32646d277881SWilliam Overton 					.channels = 10,
32656d277881SWilliam Overton 					.iface = 0,
32666d277881SWilliam Overton 					.altsetting = 1,
32676d277881SWilliam Overton 					.altset_idx = 1,
32686d277881SWilliam Overton 					.endpoint = 0x01,
32696d277881SWilliam Overton 					.ep_attr = USB_ENDPOINT_XFER_ISOC|
32706d277881SWilliam Overton 					    USB_ENDPOINT_SYNC_ASYNC,
32716d277881SWilliam Overton 					.rates = SNDRV_PCM_RATE_48000,
32726d277881SWilliam Overton 					.rate_min = 48000,
32736d277881SWilliam Overton 					.rate_max = 48000,
32746d277881SWilliam Overton 					.nr_rates = 1,
32756d277881SWilliam Overton 					.rate_table = (unsigned int[]) {
32766d277881SWilliam Overton 						48000
32776d277881SWilliam Overton 					}
32786d277881SWilliam Overton 				}
32796d277881SWilliam Overton 			},
32806d277881SWilliam Overton 			{
3281fb2ed616STakashi Iwai 				QUIRK_DATA_AUDIOFORMAT(0) {
32826d277881SWilliam Overton 					.formats = SNDRV_PCM_FMTBIT_S24_3LE,
32836d277881SWilliam Overton 					.channels = 12,
32846d277881SWilliam Overton 					.iface = 0,
32856d277881SWilliam Overton 					.altsetting = 1,
32866d277881SWilliam Overton 					.altset_idx = 1,
32876d277881SWilliam Overton 					.endpoint = 0x82,
32886d277881SWilliam Overton 					.ep_idx = 1,
32896d277881SWilliam Overton 					.ep_attr = USB_ENDPOINT_XFER_ISOC|
32906d277881SWilliam Overton 						USB_ENDPOINT_SYNC_ASYNC|
32916d277881SWilliam Overton 						USB_ENDPOINT_USAGE_IMPLICIT_FB,
32926d277881SWilliam Overton 					.rates = SNDRV_PCM_RATE_48000,
32936d277881SWilliam Overton 					.rate_min = 48000,
32946d277881SWilliam Overton 					.rate_max = 48000,
32956d277881SWilliam Overton 					.nr_rates = 1,
32966d277881SWilliam Overton 					.rate_table = (unsigned int[]) { 48000 }
32976d277881SWilliam Overton 				}
32986d277881SWilliam Overton 			},
3299fb2ed616STakashi Iwai 			QUIRK_COMPOSITE_END
33006d277881SWilliam Overton 		}
33016d277881SWilliam Overton 	}
33026d277881SWilliam Overton },
33036d277881SWilliam Overton {
33046d277881SWilliam Overton 	/*
3305a3c30b0cSNicolas MURE 	 * Pioneer DJ DJM-850
3306a3c30b0cSNicolas MURE 	 * 8 channels playback and 8 channels capture @ 44.1/48/96kHz S24LE
3307a3c30b0cSNicolas MURE 	 * Playback on EP 0x05
3308a3c30b0cSNicolas MURE 	 * Capture on EP 0x86
3309a3c30b0cSNicolas MURE 	 */
3310a3c30b0cSNicolas MURE 	USB_DEVICE_VENDOR_SPEC(0x08e4, 0x0163),
3311fb2ed616STakashi Iwai 	QUIRK_DRIVER_INFO {
3312fb2ed616STakashi Iwai 		QUIRK_DATA_COMPOSITE {
3313a3c30b0cSNicolas MURE 			{
3314fb2ed616STakashi Iwai 				QUIRK_DATA_AUDIOFORMAT(0) {
3315a3c30b0cSNicolas MURE 					.formats = SNDRV_PCM_FMTBIT_S24_3LE,
3316a3c30b0cSNicolas MURE 					.channels = 8,
3317a3c30b0cSNicolas MURE 					.iface = 0,
3318a3c30b0cSNicolas MURE 					.altsetting = 1,
3319a3c30b0cSNicolas MURE 					.altset_idx = 1,
3320a3c30b0cSNicolas MURE 					.endpoint = 0x05,
3321a3c30b0cSNicolas MURE 					.ep_attr = USB_ENDPOINT_XFER_ISOC|
3322a3c30b0cSNicolas MURE 					    USB_ENDPOINT_SYNC_ASYNC|
3323a3c30b0cSNicolas MURE 						USB_ENDPOINT_USAGE_DATA,
3324a3c30b0cSNicolas MURE 					.rates = SNDRV_PCM_RATE_44100|
3325a3c30b0cSNicolas MURE 						SNDRV_PCM_RATE_48000|
3326a3c30b0cSNicolas MURE 						SNDRV_PCM_RATE_96000,
3327a3c30b0cSNicolas MURE 					.rate_min = 44100,
3328a3c30b0cSNicolas MURE 					.rate_max = 96000,
3329a3c30b0cSNicolas MURE 					.nr_rates = 3,
3330a3c30b0cSNicolas MURE 					.rate_table = (unsigned int[]) { 44100, 48000, 96000 }
3331a3c30b0cSNicolas MURE 				}
3332a3c30b0cSNicolas MURE 			},
3333a3c30b0cSNicolas MURE 			{
3334fb2ed616STakashi Iwai 				QUIRK_DATA_AUDIOFORMAT(0) {
3335a3c30b0cSNicolas MURE 					.formats = SNDRV_PCM_FMTBIT_S24_3LE,
3336a3c30b0cSNicolas MURE 					.channels = 8,
3337a3c30b0cSNicolas MURE 					.iface = 0,
3338a3c30b0cSNicolas MURE 					.altsetting = 1,
3339a3c30b0cSNicolas MURE 					.altset_idx = 1,
3340a3c30b0cSNicolas MURE 					.endpoint = 0x86,
3341a3c30b0cSNicolas MURE 					.ep_idx = 1,
3342a3c30b0cSNicolas MURE 					.ep_attr = USB_ENDPOINT_XFER_ISOC|
3343a3c30b0cSNicolas MURE 						USB_ENDPOINT_SYNC_ASYNC|
3344a3c30b0cSNicolas MURE 						USB_ENDPOINT_USAGE_DATA,
3345a3c30b0cSNicolas MURE 					.rates = SNDRV_PCM_RATE_44100|
3346a3c30b0cSNicolas MURE 						SNDRV_PCM_RATE_48000|
3347a3c30b0cSNicolas MURE 						SNDRV_PCM_RATE_96000,
3348a3c30b0cSNicolas MURE 					.rate_min = 44100,
3349a3c30b0cSNicolas MURE 					.rate_max = 96000,
3350a3c30b0cSNicolas MURE 					.nr_rates = 3,
3351a3c30b0cSNicolas MURE 					.rate_table = (unsigned int[]) { 44100, 48000, 96000 }
3352a3c30b0cSNicolas MURE 				}
3353a3c30b0cSNicolas MURE 			},
3354fb2ed616STakashi Iwai 			QUIRK_COMPOSITE_END
3355a3c30b0cSNicolas MURE 		}
3356a3c30b0cSNicolas MURE 	}
3357a3c30b0cSNicolas MURE },
3358a3c30b0cSNicolas MURE {
3359a3c30b0cSNicolas MURE 	/*
33609119e566SOlivia Mackintosh 	 * Pioneer DJ DJM-450
33619119e566SOlivia Mackintosh 	 * PCM is 8 channels out @ 48 fixed (endpoint 0x01)
33629119e566SOlivia Mackintosh 	 * and 8 channels in @ 48 fixed (endpoint 0x82).
33639119e566SOlivia Mackintosh 	 */
33649119e566SOlivia Mackintosh 	USB_DEVICE_VENDOR_SPEC(0x2b73, 0x0013),
3365fb2ed616STakashi Iwai 	QUIRK_DRIVER_INFO {
3366fb2ed616STakashi Iwai 		QUIRK_DATA_COMPOSITE {
33679119e566SOlivia Mackintosh 			{
3368fb2ed616STakashi Iwai 				QUIRK_DATA_AUDIOFORMAT(0) {
33699119e566SOlivia Mackintosh 					.formats = SNDRV_PCM_FMTBIT_S24_3LE,
33709119e566SOlivia Mackintosh 					.channels = 8, // outputs
33719119e566SOlivia Mackintosh 					.iface = 0,
33729119e566SOlivia Mackintosh 					.altsetting = 1,
33739119e566SOlivia Mackintosh 					.altset_idx = 1,
33749119e566SOlivia Mackintosh 					.endpoint = 0x01,
33759119e566SOlivia Mackintosh 					.ep_attr = USB_ENDPOINT_XFER_ISOC|
33769119e566SOlivia Mackintosh 						USB_ENDPOINT_SYNC_ASYNC,
33779119e566SOlivia Mackintosh 					.rates = SNDRV_PCM_RATE_48000,
33789119e566SOlivia Mackintosh 					.rate_min = 48000,
33799119e566SOlivia Mackintosh 					.rate_max = 48000,
33809119e566SOlivia Mackintosh 					.nr_rates = 1,
33819119e566SOlivia Mackintosh 					.rate_table = (unsigned int[]) { 48000 }
33829119e566SOlivia Mackintosh 					}
33839119e566SOlivia Mackintosh 			},
33849119e566SOlivia Mackintosh 			{
3385fb2ed616STakashi Iwai 				QUIRK_DATA_AUDIOFORMAT(0) {
33869119e566SOlivia Mackintosh 					.formats = SNDRV_PCM_FMTBIT_S24_3LE,
33879119e566SOlivia Mackintosh 					.channels = 8, // inputs
33889119e566SOlivia Mackintosh 					.iface = 0,
33899119e566SOlivia Mackintosh 					.altsetting = 1,
33909119e566SOlivia Mackintosh 					.altset_idx = 1,
33919119e566SOlivia Mackintosh 					.endpoint = 0x82,
33929119e566SOlivia Mackintosh 					.ep_idx = 1,
33939119e566SOlivia Mackintosh 					.ep_attr = USB_ENDPOINT_XFER_ISOC|
33949119e566SOlivia Mackintosh 						USB_ENDPOINT_SYNC_ASYNC|
33959119e566SOlivia Mackintosh 						USB_ENDPOINT_USAGE_IMPLICIT_FB,
33969119e566SOlivia Mackintosh 					.rates = SNDRV_PCM_RATE_48000,
33979119e566SOlivia Mackintosh 					.rate_min = 48000,
33989119e566SOlivia Mackintosh 					.rate_max = 48000,
33999119e566SOlivia Mackintosh 					.nr_rates = 1,
34009119e566SOlivia Mackintosh 					.rate_table = (unsigned int[]) { 48000 }
34019119e566SOlivia Mackintosh 				}
34029119e566SOlivia Mackintosh 			},
3403fb2ed616STakashi Iwai 			QUIRK_COMPOSITE_END
34049119e566SOlivia Mackintosh 		}
34059119e566SOlivia Mackintosh 	}
34069119e566SOlivia Mackintosh },
34073c414eb6SBrendan Grieve {
34083c414eb6SBrendan Grieve 	/*
34093c414eb6SBrendan Grieve 	 * Sennheiser GSP670
34103c414eb6SBrendan Grieve 	 * Change order of interfaces loaded
34113c414eb6SBrendan Grieve 	 */
34123c414eb6SBrendan Grieve 	USB_DEVICE(0x1395, 0x0300),
34133c414eb6SBrendan Grieve 	.bInterfaceClass = USB_CLASS_PER_INTERFACE,
3414fb2ed616STakashi Iwai 	QUIRK_DRIVER_INFO {
3415fb2ed616STakashi Iwai 		QUIRK_DATA_COMPOSITE {
34163c414eb6SBrendan Grieve 			// Communication
3417fb2ed616STakashi Iwai 			{ QUIRK_DATA_STANDARD_AUDIO(3) },
34183c414eb6SBrendan Grieve 			// Recording
3419fb2ed616STakashi Iwai 			{ QUIRK_DATA_STANDARD_AUDIO(4) },
34203c414eb6SBrendan Grieve 			// Main
3421fb2ed616STakashi Iwai 			{ QUIRK_DATA_STANDARD_AUDIO(1) },
3422fb2ed616STakashi Iwai 			QUIRK_COMPOSITE_END
34233c414eb6SBrendan Grieve 		}
34243c414eb6SBrendan Grieve 	}
34253c414eb6SBrendan Grieve },
34264fb7c24fSEgor Vorontsov {
34274fb7c24fSEgor Vorontsov 	/*
34282307a0e1SEgor Vorontsov 	 * Fiero SC-01 (firmware v1.0.0 @ 48 kHz)
34292307a0e1SEgor Vorontsov 	 */
34302307a0e1SEgor Vorontsov 	USB_DEVICE(0x2b53, 0x0023),
3431fb2ed616STakashi Iwai 	QUIRK_DRIVER_INFO {
34322307a0e1SEgor Vorontsov 		.vendor_name = "Fiero",
34332307a0e1SEgor Vorontsov 		.product_name = "SC-01",
3434fb2ed616STakashi Iwai 		QUIRK_DATA_COMPOSITE {
3435fb2ed616STakashi Iwai 			{ QUIRK_DATA_STANDARD_AUDIO(0) },
34362307a0e1SEgor Vorontsov 			/* Playback */
34372307a0e1SEgor Vorontsov 			{
3438fb2ed616STakashi Iwai 				QUIRK_DATA_AUDIOFORMAT(1) {
34392307a0e1SEgor Vorontsov 					.formats = SNDRV_PCM_FMTBIT_S32_LE,
34402307a0e1SEgor Vorontsov 					.channels = 2,
34412307a0e1SEgor Vorontsov 					.fmt_bits = 24,
34422307a0e1SEgor Vorontsov 					.iface = 1,
34432307a0e1SEgor Vorontsov 					.altsetting = 1,
34442307a0e1SEgor Vorontsov 					.altset_idx = 1,
34452307a0e1SEgor Vorontsov 					.endpoint = 0x01,
34462307a0e1SEgor Vorontsov 					.ep_attr = USB_ENDPOINT_XFER_ISOC |
34472307a0e1SEgor Vorontsov 						   USB_ENDPOINT_SYNC_ASYNC,
34482307a0e1SEgor Vorontsov 					.rates = SNDRV_PCM_RATE_48000,
34492307a0e1SEgor Vorontsov 					.rate_min = 48000,
34502307a0e1SEgor Vorontsov 					.rate_max = 48000,
34512307a0e1SEgor Vorontsov 					.nr_rates = 1,
34522307a0e1SEgor Vorontsov 					.rate_table = (unsigned int[]) { 48000 },
34532307a0e1SEgor Vorontsov 					.clock = 0x29
34542307a0e1SEgor Vorontsov 				}
34552307a0e1SEgor Vorontsov 			},
34562307a0e1SEgor Vorontsov 			/* Capture */
34572307a0e1SEgor Vorontsov 			{
3458fb2ed616STakashi Iwai 				QUIRK_DATA_AUDIOFORMAT(2) {
34592307a0e1SEgor Vorontsov 					.formats = SNDRV_PCM_FMTBIT_S32_LE,
34602307a0e1SEgor Vorontsov 					.channels = 2,
34612307a0e1SEgor Vorontsov 					.fmt_bits = 24,
34622307a0e1SEgor Vorontsov 					.iface = 2,
34632307a0e1SEgor Vorontsov 					.altsetting = 1,
34642307a0e1SEgor Vorontsov 					.altset_idx = 1,
34652307a0e1SEgor Vorontsov 					.endpoint = 0x82,
34662307a0e1SEgor Vorontsov 					.ep_attr = USB_ENDPOINT_XFER_ISOC |
34672307a0e1SEgor Vorontsov 						   USB_ENDPOINT_SYNC_ASYNC |
34682307a0e1SEgor Vorontsov 						   USB_ENDPOINT_USAGE_IMPLICIT_FB,
34692307a0e1SEgor Vorontsov 					.rates = SNDRV_PCM_RATE_48000,
34702307a0e1SEgor Vorontsov 					.rate_min = 48000,
34712307a0e1SEgor Vorontsov 					.rate_max = 48000,
34722307a0e1SEgor Vorontsov 					.nr_rates = 1,
34732307a0e1SEgor Vorontsov 					.rate_table = (unsigned int[]) { 48000 },
34742307a0e1SEgor Vorontsov 					.clock = 0x29
34752307a0e1SEgor Vorontsov 				}
34762307a0e1SEgor Vorontsov 			},
3477fb2ed616STakashi Iwai 			QUIRK_COMPOSITE_END
34782307a0e1SEgor Vorontsov 		}
34792307a0e1SEgor Vorontsov 	}
34802307a0e1SEgor Vorontsov },
34812307a0e1SEgor Vorontsov {
34822307a0e1SEgor Vorontsov 	/*
34832307a0e1SEgor Vorontsov 	 * Fiero SC-01 (firmware v1.0.0 @ 96 kHz)
34842307a0e1SEgor Vorontsov 	 */
34852307a0e1SEgor Vorontsov 	USB_DEVICE(0x2b53, 0x0024),
3486fb2ed616STakashi Iwai 	QUIRK_DRIVER_INFO {
34872307a0e1SEgor Vorontsov 		.vendor_name = "Fiero",
34882307a0e1SEgor Vorontsov 		.product_name = "SC-01",
3489fb2ed616STakashi Iwai 		QUIRK_DATA_COMPOSITE {
3490fb2ed616STakashi Iwai 			{ QUIRK_DATA_STANDARD_AUDIO(0) },
34912307a0e1SEgor Vorontsov 			/* Playback */
34922307a0e1SEgor Vorontsov 			{
3493fb2ed616STakashi Iwai 				QUIRK_DATA_AUDIOFORMAT(1) {
34942307a0e1SEgor Vorontsov 					.formats = SNDRV_PCM_FMTBIT_S32_LE,
34952307a0e1SEgor Vorontsov 					.channels = 2,
34962307a0e1SEgor Vorontsov 					.fmt_bits = 24,
34972307a0e1SEgor Vorontsov 					.iface = 1,
34982307a0e1SEgor Vorontsov 					.altsetting = 1,
34992307a0e1SEgor Vorontsov 					.altset_idx = 1,
35002307a0e1SEgor Vorontsov 					.endpoint = 0x01,
35012307a0e1SEgor Vorontsov 					.ep_attr = USB_ENDPOINT_XFER_ISOC |
35022307a0e1SEgor Vorontsov 						   USB_ENDPOINT_SYNC_ASYNC,
35032307a0e1SEgor Vorontsov 					.rates = SNDRV_PCM_RATE_96000,
35042307a0e1SEgor Vorontsov 					.rate_min = 96000,
35052307a0e1SEgor Vorontsov 					.rate_max = 96000,
35062307a0e1SEgor Vorontsov 					.nr_rates = 1,
35072307a0e1SEgor Vorontsov 					.rate_table = (unsigned int[]) { 96000 },
35082307a0e1SEgor Vorontsov 					.clock = 0x29
35092307a0e1SEgor Vorontsov 				}
35102307a0e1SEgor Vorontsov 			},
35112307a0e1SEgor Vorontsov 			/* Capture */
35122307a0e1SEgor Vorontsov 			{
3513fb2ed616STakashi Iwai 				QUIRK_DATA_AUDIOFORMAT(2) {
35142307a0e1SEgor Vorontsov 					.formats = SNDRV_PCM_FMTBIT_S32_LE,
35152307a0e1SEgor Vorontsov 					.channels = 2,
35162307a0e1SEgor Vorontsov 					.fmt_bits = 24,
35172307a0e1SEgor Vorontsov 					.iface = 2,
35182307a0e1SEgor Vorontsov 					.altsetting = 1,
35192307a0e1SEgor Vorontsov 					.altset_idx = 1,
35202307a0e1SEgor Vorontsov 					.endpoint = 0x82,
35212307a0e1SEgor Vorontsov 					.ep_attr = USB_ENDPOINT_XFER_ISOC |
35222307a0e1SEgor Vorontsov 						   USB_ENDPOINT_SYNC_ASYNC |
35232307a0e1SEgor Vorontsov 						   USB_ENDPOINT_USAGE_IMPLICIT_FB,
35242307a0e1SEgor Vorontsov 					.rates = SNDRV_PCM_RATE_96000,
35252307a0e1SEgor Vorontsov 					.rate_min = 96000,
35262307a0e1SEgor Vorontsov 					.rate_max = 96000,
35272307a0e1SEgor Vorontsov 					.nr_rates = 1,
35282307a0e1SEgor Vorontsov 					.rate_table = (unsigned int[]) { 96000 },
35292307a0e1SEgor Vorontsov 					.clock = 0x29
35302307a0e1SEgor Vorontsov 				}
35312307a0e1SEgor Vorontsov 			},
3532fb2ed616STakashi Iwai 			QUIRK_COMPOSITE_END
35332307a0e1SEgor Vorontsov 		}
35342307a0e1SEgor Vorontsov 	}
35352307a0e1SEgor Vorontsov },
35362307a0e1SEgor Vorontsov {
35372307a0e1SEgor Vorontsov 	/*
35384fb7c24fSEgor Vorontsov 	 * Fiero SC-01 (firmware v1.1.0)
35394fb7c24fSEgor Vorontsov 	 */
35404fb7c24fSEgor Vorontsov 	USB_DEVICE(0x2b53, 0x0031),
3541fb2ed616STakashi Iwai 	QUIRK_DRIVER_INFO {
35424fb7c24fSEgor Vorontsov 		.vendor_name = "Fiero",
35434fb7c24fSEgor Vorontsov 		.product_name = "SC-01",
3544fb2ed616STakashi Iwai 		QUIRK_DATA_COMPOSITE {
3545fb2ed616STakashi Iwai 			{ QUIRK_DATA_STANDARD_AUDIO(0) },
35464fb7c24fSEgor Vorontsov 			/* Playback */
35474fb7c24fSEgor Vorontsov 			{
3548fb2ed616STakashi Iwai 				QUIRK_DATA_AUDIOFORMAT(1) {
35494fb7c24fSEgor Vorontsov 					.formats = SNDRV_PCM_FMTBIT_S32_LE,
35504fb7c24fSEgor Vorontsov 					.channels = 2,
35514fb7c24fSEgor Vorontsov 					.fmt_bits = 24,
35524fb7c24fSEgor Vorontsov 					.iface = 1,
35534fb7c24fSEgor Vorontsov 					.altsetting = 1,
35544fb7c24fSEgor Vorontsov 					.altset_idx = 1,
35554fb7c24fSEgor Vorontsov 					.endpoint = 0x01,
35564fb7c24fSEgor Vorontsov 					.ep_attr = USB_ENDPOINT_XFER_ISOC |
35574fb7c24fSEgor Vorontsov 						   USB_ENDPOINT_SYNC_ASYNC,
35584fb7c24fSEgor Vorontsov 					.rates = SNDRV_PCM_RATE_48000 |
35594fb7c24fSEgor Vorontsov 						 SNDRV_PCM_RATE_96000,
35604fb7c24fSEgor Vorontsov 					.rate_min = 48000,
35614fb7c24fSEgor Vorontsov 					.rate_max = 96000,
35624fb7c24fSEgor Vorontsov 					.nr_rates = 2,
35634fb7c24fSEgor Vorontsov 					.rate_table = (unsigned int[]) { 48000, 96000 },
35644fb7c24fSEgor Vorontsov 					.clock = 0x29
35654fb7c24fSEgor Vorontsov 				}
35664fb7c24fSEgor Vorontsov 			},
35674fb7c24fSEgor Vorontsov 			/* Capture */
35684fb7c24fSEgor Vorontsov 			{
3569fb2ed616STakashi Iwai 				QUIRK_DATA_AUDIOFORMAT(2) {
35704fb7c24fSEgor Vorontsov 					.formats = SNDRV_PCM_FMTBIT_S32_LE,
35714fb7c24fSEgor Vorontsov 					.channels = 2,
35724fb7c24fSEgor Vorontsov 					.fmt_bits = 24,
35734fb7c24fSEgor Vorontsov 					.iface = 2,
35744fb7c24fSEgor Vorontsov 					.altsetting = 1,
35754fb7c24fSEgor Vorontsov 					.altset_idx = 1,
35764fb7c24fSEgor Vorontsov 					.endpoint = 0x82,
35774fb7c24fSEgor Vorontsov 					.ep_attr = USB_ENDPOINT_XFER_ISOC |
35784fb7c24fSEgor Vorontsov 						   USB_ENDPOINT_SYNC_ASYNC |
35794fb7c24fSEgor Vorontsov 						   USB_ENDPOINT_USAGE_IMPLICIT_FB,
35804fb7c24fSEgor Vorontsov 					.rates = SNDRV_PCM_RATE_48000 |
35814fb7c24fSEgor Vorontsov 						 SNDRV_PCM_RATE_96000,
35824fb7c24fSEgor Vorontsov 					.rate_min = 48000,
35834fb7c24fSEgor Vorontsov 					.rate_max = 96000,
35844fb7c24fSEgor Vorontsov 					.nr_rates = 2,
35854fb7c24fSEgor Vorontsov 					.rate_table = (unsigned int[]) { 48000, 96000 },
35864fb7c24fSEgor Vorontsov 					.clock = 0x29
35874fb7c24fSEgor Vorontsov 				}
35884fb7c24fSEgor Vorontsov 			},
3589fb2ed616STakashi Iwai 			QUIRK_COMPOSITE_END
35904fb7c24fSEgor Vorontsov 		}
35914fb7c24fSEgor Vorontsov 	}
35924fb7c24fSEgor Vorontsov },
3593788449aeSdengxiang {
3594788449aeSdengxiang 	/* Advanced modes of the Mythware XA001AU.
3595788449aeSdengxiang 	 * For the standard mode, Mythware XA001AU has ID ffad:a001
3596788449aeSdengxiang 	 */
3597788449aeSdengxiang 	USB_DEVICE_VENDOR_SPEC(0xffad, 0xa001),
3598fb2ed616STakashi Iwai 	QUIRK_DRIVER_INFO {
3599788449aeSdengxiang 		.vendor_name = "Mythware",
3600788449aeSdengxiang 		.product_name = "XA001AU",
3601fb2ed616STakashi Iwai 		QUIRK_DATA_COMPOSITE {
3602fb2ed616STakashi Iwai 			{ QUIRK_DATA_IGNORE(0) },
3603fb2ed616STakashi Iwai 			{ QUIRK_DATA_STANDARD_AUDIO(1) },
3604fb2ed616STakashi Iwai 			{ QUIRK_DATA_STANDARD_AUDIO(2) },
3605fb2ed616STakashi Iwai 			QUIRK_COMPOSITE_END
3606788449aeSdengxiang 		}
3607788449aeSdengxiang 	}
3608788449aeSdengxiang },
3609e337bf19SHector Martin 
3610e5779998SDaniel Mack #undef USB_DEVICE_VENDOR_SPEC
3611fa10635fSTakashi Iwai #undef USB_AUDIO_DEVICE
3612