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