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