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