xref: /linux/sound/usb/quirks-table.h (revision 46e6acfe3501fa938af9c5bd730f0020235b08a2)
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 /* Novation EMS devices */
2598 {
2599 	USB_DEVICE_VENDOR_SPEC(0x1235, 0x0001),
2600 	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2601 		.vendor_name = "Novation",
2602 		.product_name = "ReMOTE Audio/XStation",
2603 		.ifnum = 4,
2604 		.type = QUIRK_MIDI_NOVATION
2605 	}
2606 },
2607 {
2608 	USB_DEVICE_VENDOR_SPEC(0x1235, 0x0002),
2609 	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2610 		.vendor_name = "Novation",
2611 		.product_name = "Speedio",
2612 		.ifnum = 3,
2613 		.type = QUIRK_MIDI_NOVATION
2614 	}
2615 },
2616 {
2617 	USB_DEVICE(0x1235, 0x000a),
2618 	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2619 		/* .vendor_name = "Novation", */
2620 		/* .product_name = "Nocturn", */
2621 		.ifnum = 0,
2622 		.type = QUIRK_MIDI_RAW_BYTES
2623 	}
2624 },
2625 {
2626 	USB_DEVICE(0x1235, 0x000e),
2627 	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2628 		/* .vendor_name = "Novation", */
2629 		/* .product_name = "Launchpad", */
2630 		.ifnum = 0,
2631 		.type = QUIRK_MIDI_RAW_BYTES
2632 	}
2633 },
2634 {
2635 	USB_DEVICE(0x1235, 0x0010),
2636 	.driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
2637 		.vendor_name = "Focusrite",
2638 		.product_name = "Saffire 6 USB",
2639 		.ifnum = QUIRK_ANY_INTERFACE,
2640 		.type = QUIRK_COMPOSITE,
2641 		.data = (const struct snd_usb_audio_quirk[]) {
2642 			{
2643 				.ifnum = 0,
2644 				.type = QUIRK_AUDIO_STANDARD_MIXER,
2645 			},
2646 			{
2647 				.ifnum = 0,
2648 				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
2649 				.data = &(const struct audioformat) {
2650 					.formats = SNDRV_PCM_FMTBIT_S24_3LE,
2651 					.channels = 4,
2652 					.iface = 0,
2653 					.altsetting = 1,
2654 					.altset_idx = 1,
2655 					.attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
2656 					.endpoint = 0x01,
2657 					.ep_attr = USB_ENDPOINT_XFER_ISOC,
2658 					.datainterval = 1,
2659 					.maxpacksize = 0x024c,
2660 					.rates = SNDRV_PCM_RATE_44100 |
2661 						 SNDRV_PCM_RATE_48000,
2662 					.rate_min = 44100,
2663 					.rate_max = 48000,
2664 					.nr_rates = 2,
2665 					.rate_table = (unsigned int[]) {
2666 						44100, 48000
2667 					},
2668 					.sync_ep = 0x82,
2669 					.sync_iface = 0,
2670 					.sync_altsetting = 1,
2671 					.sync_ep_idx = 1,
2672 					.implicit_fb = 1,
2673 				}
2674 			},
2675 			{
2676 				.ifnum = 0,
2677 				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
2678 				.data = &(const struct audioformat) {
2679 					.formats = SNDRV_PCM_FMTBIT_S24_3LE,
2680 					.channels = 2,
2681 					.iface = 0,
2682 					.altsetting = 1,
2683 					.altset_idx = 1,
2684 					.attributes = 0,
2685 					.endpoint = 0x82,
2686 					.ep_idx = 1,
2687 					.ep_attr = USB_ENDPOINT_XFER_ISOC,
2688 					.datainterval = 1,
2689 					.maxpacksize = 0x0126,
2690 					.rates = SNDRV_PCM_RATE_44100 |
2691 						 SNDRV_PCM_RATE_48000,
2692 					.rate_min = 44100,
2693 					.rate_max = 48000,
2694 					.nr_rates = 2,
2695 					.rate_table = (unsigned int[]) {
2696 						44100, 48000
2697 					}
2698 				}
2699 			},
2700 			{
2701 				.ifnum = 1,
2702 				.type = QUIRK_MIDI_RAW_BYTES
2703 			},
2704 			{
2705 				.ifnum = -1
2706 			}
2707 		}
2708 	}
2709 },
2710 {
2711 	USB_DEVICE(0x1235, 0x0018),
2712 	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2713 		.vendor_name = "Novation",
2714 		.product_name = "Twitch",
2715 		.ifnum = QUIRK_ANY_INTERFACE,
2716 		.type = QUIRK_COMPOSITE,
2717 		.data = (const struct snd_usb_audio_quirk[]) {
2718 			{
2719 				.ifnum = 0,
2720 				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
2721 				.data = & (const struct audioformat) {
2722 					.formats = SNDRV_PCM_FMTBIT_S24_3LE,
2723 					.channels = 4,
2724 					.iface = 0,
2725 					.altsetting = 1,
2726 					.altset_idx = 1,
2727 					.attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
2728 					.endpoint = 0x01,
2729 					.ep_attr = USB_ENDPOINT_XFER_ISOC,
2730 					.rates = SNDRV_PCM_RATE_44100 |
2731 						 SNDRV_PCM_RATE_48000,
2732 					.rate_min = 44100,
2733 					.rate_max = 48000,
2734 					.nr_rates = 2,
2735 					.rate_table = (unsigned int[]) {
2736 						44100, 48000
2737 					}
2738 				}
2739 			},
2740 			{
2741 				.ifnum = 1,
2742 				.type = QUIRK_MIDI_RAW_BYTES
2743 			},
2744 			{
2745 				.ifnum = -1
2746 			}
2747 		}
2748 	}
2749 },
2750 {
2751 	USB_DEVICE_VENDOR_SPEC(0x1235, 0x4661),
2752 	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2753 		.vendor_name = "Novation",
2754 		.product_name = "ReMOTE25",
2755 		.ifnum = 0,
2756 		.type = QUIRK_MIDI_NOVATION
2757 	}
2758 },
2759 
2760 /* Access Music devices */
2761 {
2762 	/* VirusTI Desktop */
2763 	USB_DEVICE_VENDOR_SPEC(0x133e, 0x0815),
2764 	.driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
2765 		.ifnum = QUIRK_ANY_INTERFACE,
2766 		.type = QUIRK_COMPOSITE,
2767 		.data = &(const struct snd_usb_audio_quirk[]) {
2768 			{
2769 				.ifnum = 3,
2770 				.type = QUIRK_MIDI_FIXED_ENDPOINT,
2771 				.data = &(const struct snd_usb_midi_endpoint_info) {
2772 					.out_cables = 0x0003,
2773 					.in_cables  = 0x0003
2774 				}
2775 			},
2776 			{
2777 				.ifnum = 4,
2778 				.type = QUIRK_IGNORE_INTERFACE
2779 			},
2780 			{
2781 				.ifnum = -1
2782 			}
2783 		}
2784 	}
2785 },
2786 
2787 /* Native Instruments MK2 series */
2788 {
2789 	/* Komplete Audio 6 */
2790 	.match_flags = USB_DEVICE_ID_MATCH_DEVICE,
2791 	.idVendor = 0x17cc,
2792 	.idProduct = 0x1000,
2793 },
2794 {
2795 	/* Traktor Audio 6 */
2796 	.match_flags = USB_DEVICE_ID_MATCH_DEVICE,
2797 	.idVendor = 0x17cc,
2798 	.idProduct = 0x1010,
2799 },
2800 {
2801 	/* Traktor Audio 10 */
2802 	.match_flags = USB_DEVICE_ID_MATCH_DEVICE,
2803 	.idVendor = 0x17cc,
2804 	.idProduct = 0x1020,
2805 },
2806 
2807 /* QinHeng devices */
2808 {
2809 	USB_DEVICE(0x1a86, 0x752d),
2810 	.driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
2811 		.vendor_name = "QinHeng",
2812 		.product_name = "CH345",
2813 		.ifnum = 1,
2814 		.type = QUIRK_MIDI_CH345
2815 	}
2816 },
2817 
2818 /* KeithMcMillen Stringport */
2819 { USB_DEVICE(0x1f38, 0x0001) }, /* FIXME: should be more restrictive matching */
2820 
2821 /* Miditech devices */
2822 {
2823 	USB_DEVICE(0x4752, 0x0011),
2824 	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2825 		.vendor_name = "Miditech",
2826 		.product_name = "Midistart-2",
2827 		.ifnum = 0,
2828 		.type = QUIRK_MIDI_CME
2829 	}
2830 },
2831 
2832 /* Central Music devices */
2833 {
2834 	/* this ID used by both Miditech MidiStudio-2 and CME UF-x */
2835 	USB_DEVICE(0x7104, 0x2202),
2836 	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2837 		.ifnum = 0,
2838 		.type = QUIRK_MIDI_CME
2839 	}
2840 },
2841 
2842 /* Digidesign Mbox */
2843 {
2844 	/* Thanks to Clemens Ladisch <clemens@ladisch.de> */
2845 	USB_DEVICE(0x0dba, 0x1000),
2846 	.driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
2847 		.vendor_name = "Digidesign",
2848 		.product_name = "MBox",
2849 		.ifnum = QUIRK_ANY_INTERFACE,
2850 		.type = QUIRK_COMPOSITE,
2851 		.data = (const struct snd_usb_audio_quirk[]){
2852 			{
2853 				.ifnum = 0,
2854 				.type = QUIRK_AUDIO_STANDARD_MIXER,
2855 			},
2856 			{
2857 				.ifnum = 1,
2858 				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
2859 				.data = &(const struct audioformat) {
2860 					.formats = SNDRV_PCM_FMTBIT_S24_3BE,
2861 					.channels = 2,
2862 					.iface = 1,
2863 					.altsetting = 1,
2864 					.altset_idx = 1,
2865 					.attributes = 0x4,
2866 					.endpoint = 0x02,
2867 					.ep_attr = USB_ENDPOINT_XFER_ISOC |
2868 						USB_ENDPOINT_SYNC_SYNC,
2869 					.maxpacksize = 0x130,
2870 					.rates = SNDRV_PCM_RATE_48000,
2871 					.rate_min = 48000,
2872 					.rate_max = 48000,
2873 					.nr_rates = 1,
2874 					.rate_table = (unsigned int[]) {
2875 						48000
2876 					}
2877 				}
2878 			},
2879 			{
2880 				.ifnum = 1,
2881 				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
2882 				.data = &(const struct audioformat) {
2883 					.formats = SNDRV_PCM_FMTBIT_S24_3BE,
2884 					.channels = 2,
2885 					.iface = 1,
2886 					.altsetting = 1,
2887 					.altset_idx = 1,
2888 					.attributes = 0x4,
2889 					.endpoint = 0x81,
2890 					.ep_idx = 1,
2891 					.ep_attr = USB_ENDPOINT_XFER_ISOC |
2892 						USB_ENDPOINT_SYNC_ASYNC,
2893 					.maxpacksize = 0x130,
2894 					.rates = SNDRV_PCM_RATE_48000,
2895 					.rate_min = 48000,
2896 					.rate_max = 48000,
2897 					.nr_rates = 1,
2898 					.rate_table = (unsigned int[]) {
2899 						48000
2900 					}
2901 				}
2902 			},
2903 			{
2904 				.ifnum = -1
2905 			}
2906 		}
2907 	}
2908 },
2909 
2910 /* DIGIDESIGN MBOX 2 */
2911 {
2912 	USB_DEVICE(0x0dba, 0x3000),
2913 	.driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
2914 		.vendor_name = "Digidesign",
2915 		.product_name = "Mbox 2",
2916 		.ifnum = QUIRK_ANY_INTERFACE,
2917 		.type = QUIRK_COMPOSITE,
2918 		.data = (const struct snd_usb_audio_quirk[]) {
2919 			{
2920 				.ifnum = 0,
2921 				.type = QUIRK_IGNORE_INTERFACE
2922 			},
2923 			{
2924 				.ifnum = 1,
2925 				.type = QUIRK_IGNORE_INTERFACE
2926 			},
2927 			{
2928 				.ifnum = 2,
2929 				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
2930 				.data = &(const struct audioformat) {
2931 					.formats = SNDRV_PCM_FMTBIT_S24_3BE,
2932 					.channels = 2,
2933 					.iface = 2,
2934 					.altsetting = 2,
2935 					.altset_idx = 1,
2936 					.attributes = 0x00,
2937 					.endpoint = 0x03,
2938 					.ep_attr = USB_ENDPOINT_SYNC_ASYNC,
2939 					.rates = SNDRV_PCM_RATE_48000,
2940 					.rate_min = 48000,
2941 					.rate_max = 48000,
2942 					.nr_rates = 1,
2943 					.rate_table = (unsigned int[]) {
2944 						48000
2945 					}
2946 				}
2947 			},
2948 			{
2949 				.ifnum = 3,
2950 				.type = QUIRK_IGNORE_INTERFACE
2951 			},
2952 			{
2953 				.ifnum = 4,
2954 				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
2955 				.data = &(const struct audioformat) {
2956 				.formats = SNDRV_PCM_FMTBIT_S24_3BE,
2957 					.channels = 2,
2958 					.iface = 4,
2959 					.altsetting = 2,
2960 					.altset_idx = 1,
2961 					.attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
2962 					.endpoint = 0x85,
2963 					.ep_attr = USB_ENDPOINT_SYNC_SYNC,
2964 					.rates = SNDRV_PCM_RATE_48000,
2965 					.rate_min = 48000,
2966 					.rate_max = 48000,
2967 					.nr_rates = 1,
2968 					.rate_table = (unsigned int[]) {
2969 						48000
2970 					}
2971 				}
2972 			},
2973 			{
2974 				.ifnum = 5,
2975 				.type = QUIRK_IGNORE_INTERFACE
2976 			},
2977 			{
2978 				.ifnum = 6,
2979 				.type = QUIRK_MIDI_MIDIMAN,
2980 				.data = &(const struct snd_usb_midi_endpoint_info) {
2981 					.out_ep =  0x02,
2982 					.out_cables = 0x0001,
2983 					.in_ep = 0x81,
2984 					.in_interval = 0x01,
2985 					.in_cables = 0x0001
2986 				}
2987 			},
2988 			{
2989 				.ifnum = -1
2990 			}
2991 		}
2992 	}
2993 },
2994 /* DIGIDESIGN MBOX 3 */
2995 {
2996 	USB_DEVICE(0x0dba, 0x5000),
2997 	.driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
2998 		.vendor_name = "Digidesign",
2999 		.product_name = "Mbox 3",
3000 		.ifnum = QUIRK_ANY_INTERFACE,
3001 		.type = QUIRK_COMPOSITE,
3002 		.data = (const struct snd_usb_audio_quirk[]) {
3003 			{
3004 				.ifnum = 0,
3005 				.type = QUIRK_IGNORE_INTERFACE
3006 			},
3007 			{
3008 				.ifnum = 1,
3009 				.type = QUIRK_IGNORE_INTERFACE
3010 			},
3011 			{
3012 				.ifnum = 2,
3013 				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
3014 				.data = &(const struct audioformat) {
3015 					.formats = SNDRV_PCM_FMTBIT_S24_3LE,
3016 					.fmt_bits = 24,
3017 					.channels = 4,
3018 					.iface = 2,
3019 					.altsetting = 1,
3020 					.altset_idx = 1,
3021 					.attributes = 0x00,
3022 					.endpoint = USB_RECIP_INTERFACE | USB_DIR_OUT,
3023 					.ep_attr = USB_ENDPOINT_XFER_ISOC |
3024 						USB_ENDPOINT_SYNC_ASYNC,
3025 					.rates = SNDRV_PCM_RATE_44100 | SNDRV_PCM_RATE_48000 |
3026 							SNDRV_PCM_RATE_88200 | SNDRV_PCM_RATE_96000,
3027 					.rate_min = 44100,
3028 					.rate_max = 96000,
3029 					.nr_rates = 4,
3030 					.rate_table = (unsigned int[]) {
3031 						44100, 48000, 88200, 96000
3032 					},
3033 					.sync_ep = USB_RECIP_INTERFACE | USB_DIR_IN,
3034 					.sync_iface = 3,
3035 					.sync_altsetting = 1,
3036 					.sync_ep_idx = 1,
3037 					.implicit_fb = 1,
3038 				}
3039 			},
3040 			{
3041 				.ifnum = 3,
3042 				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
3043 				.data = &(const struct audioformat) {
3044 					.formats = SNDRV_PCM_FMTBIT_S24_3LE,
3045 					.fmt_bits = 24,
3046 					.channels = 4,
3047 					.iface = 3,
3048 					.altsetting = 1,
3049 					.altset_idx = 1,
3050 					.attributes = 0x00,
3051 					.endpoint = USB_RECIP_INTERFACE | USB_DIR_IN,
3052 					.ep_attr = USB_ENDPOINT_XFER_ISOC |
3053 						USB_ENDPOINT_SYNC_ASYNC,
3054 					.maxpacksize = 0x009c,
3055 					.rates = SNDRV_PCM_RATE_44100 | SNDRV_PCM_RATE_48000 |
3056 							SNDRV_PCM_RATE_88200 | SNDRV_PCM_RATE_96000,
3057 					.rate_min = 44100,
3058 					.rate_max = 96000,
3059 					.nr_rates = 4,
3060 					.rate_table = (unsigned int[]) {
3061 						44100, 48000, 88200, 96000
3062 					},
3063 					.implicit_fb = 0,
3064 				}
3065 			},
3066 			{
3067 				.ifnum = 4,
3068 				.type = QUIRK_MIDI_FIXED_ENDPOINT,
3069 				.data = &(const struct snd_usb_midi_endpoint_info) {
3070 					.out_cables = 0x0001,
3071 					.in_cables  = 0x0001
3072 				}
3073 			},
3074 			{
3075 				.ifnum = -1
3076 			}
3077 		}
3078 	}
3079 },
3080 {
3081 	/* Tascam US122 MKII - playback-only support */
3082 	USB_DEVICE_VENDOR_SPEC(0x0644, 0x8021),
3083 	.driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
3084 		.vendor_name = "TASCAM",
3085 		.product_name = "US122 MKII",
3086 		.ifnum = QUIRK_ANY_INTERFACE,
3087 		.type = QUIRK_COMPOSITE,
3088 		.data = (const struct snd_usb_audio_quirk[]) {
3089 			{
3090 				.ifnum = 0,
3091 				.type = QUIRK_IGNORE_INTERFACE
3092 			},
3093 			{
3094 				.ifnum = 1,
3095 				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
3096 				.data = &(const struct audioformat) {
3097 					.formats = SNDRV_PCM_FMTBIT_S24_3LE,
3098 					.channels = 2,
3099 					.iface = 1,
3100 					.altsetting = 1,
3101 					.altset_idx = 1,
3102 					.attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
3103 					.endpoint = 0x02,
3104 					.ep_attr = USB_ENDPOINT_XFER_ISOC,
3105 					.rates = SNDRV_PCM_RATE_44100 |
3106 						 SNDRV_PCM_RATE_48000 |
3107 						 SNDRV_PCM_RATE_88200 |
3108 						 SNDRV_PCM_RATE_96000,
3109 					.rate_min = 44100,
3110 					.rate_max = 96000,
3111 					.nr_rates = 4,
3112 					.rate_table = (unsigned int[]) {
3113 						44100, 48000, 88200, 96000
3114 					}
3115 				}
3116 			},
3117 			{
3118 				.ifnum = -1
3119 			}
3120 		}
3121 	}
3122 },
3123 
3124 /* Denon DN-X1600 */
3125 {
3126 	USB_AUDIO_DEVICE(0x154e, 0x500e),
3127 	.driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
3128 		.vendor_name = "Denon",
3129 		.product_name = "DN-X1600",
3130 		.ifnum = QUIRK_ANY_INTERFACE,
3131 		.type = QUIRK_COMPOSITE,
3132 		.data = (const struct snd_usb_audio_quirk[]){
3133 			{
3134 				.ifnum = 0,
3135 				.type = QUIRK_IGNORE_INTERFACE,
3136 			},
3137 			{
3138 				.ifnum = 1,
3139 				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
3140 				.data = &(const struct audioformat) {
3141 					.formats = SNDRV_PCM_FMTBIT_S24_3LE,
3142 					.channels = 8,
3143 					.iface = 1,
3144 					.altsetting = 1,
3145 					.altset_idx = 1,
3146 					.attributes = 0x0,
3147 					.endpoint = 0x01,
3148 					.ep_attr = USB_ENDPOINT_XFER_ISOC |
3149 						USB_ENDPOINT_SYNC_ADAPTIVE,
3150 					.maxpacksize = 0x138,
3151 					.rates = SNDRV_PCM_RATE_48000,
3152 					.rate_min = 48000,
3153 					.rate_max = 48000,
3154 					.nr_rates = 1,
3155 					.rate_table = (unsigned int[]) {
3156 						48000
3157 					}
3158 				}
3159 			},
3160 			{
3161 				.ifnum = 2,
3162 				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
3163 				.data = &(const struct audioformat) {
3164 					.formats = SNDRV_PCM_FMTBIT_S24_3LE,
3165 					.channels = 8,
3166 					.iface = 2,
3167 					.altsetting = 1,
3168 					.altset_idx = 1,
3169 					.attributes = 0x0,
3170 					.endpoint = 0x85,
3171 					.ep_attr = USB_ENDPOINT_XFER_ISOC |
3172 						USB_ENDPOINT_SYNC_ADAPTIVE,
3173 					.maxpacksize = 0x138,
3174 					.rates = SNDRV_PCM_RATE_48000,
3175 					.rate_min = 48000,
3176 					.rate_max = 48000,
3177 					.nr_rates = 1,
3178 					.rate_table = (unsigned int[]) {
3179 						48000
3180 					}
3181 				}
3182 			},
3183 			{
3184 				.ifnum = 4,
3185 				.type = QUIRK_MIDI_STANDARD_INTERFACE,
3186 			},
3187 			{
3188 				.ifnum = -1
3189 			}
3190 		}
3191 	}
3192 },
3193 
3194 /* Microsoft XboxLive Headset/Xbox Communicator */
3195 {
3196 	USB_DEVICE(0x045e, 0x0283),
3197 	.bInterfaceClass = USB_CLASS_PER_INTERFACE,
3198 	.driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
3199 		.vendor_name = "Microsoft",
3200 		.product_name = "XboxLive Headset/Xbox Communicator",
3201 		.ifnum = QUIRK_ANY_INTERFACE,
3202 		.type = QUIRK_COMPOSITE,
3203 		.data = &(const struct snd_usb_audio_quirk[]) {
3204 			{
3205 				/* playback */
3206 				.ifnum = 0,
3207 				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
3208 				.data = &(const struct audioformat) {
3209 					.formats = SNDRV_PCM_FMTBIT_S16_LE,
3210 					.channels = 1,
3211 					.iface = 0,
3212 					.altsetting = 0,
3213 					.altset_idx = 0,
3214 					.attributes = 0,
3215 					.endpoint = 0x04,
3216 					.ep_attr = 0x05,
3217 					.rates = SNDRV_PCM_RATE_CONTINUOUS,
3218 					.rate_min = 22050,
3219 					.rate_max = 22050
3220 				}
3221 			},
3222 			{
3223 				/* capture */
3224 				.ifnum = 1,
3225 				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
3226 				.data = &(const struct audioformat) {
3227 					.formats = SNDRV_PCM_FMTBIT_S16_LE,
3228 					.channels = 1,
3229 					.iface = 1,
3230 					.altsetting = 0,
3231 					.altset_idx = 0,
3232 					.attributes = 0,
3233 					.endpoint = 0x85,
3234 					.ep_attr = 0x05,
3235 					.rates = SNDRV_PCM_RATE_CONTINUOUS,
3236 					.rate_min = 16000,
3237 					.rate_max = 16000
3238 				}
3239 			},
3240 			{
3241 				.ifnum = -1
3242 			}
3243 		}
3244 	}
3245 },
3246 
3247 /* Reloop Play */
3248 {
3249 	USB_DEVICE(0x200c, 0x100b),
3250 	.bInterfaceClass = USB_CLASS_PER_INTERFACE,
3251 	.driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
3252 		.ifnum = QUIRK_ANY_INTERFACE,
3253 		.type = QUIRK_COMPOSITE,
3254 		.data = &(const struct snd_usb_audio_quirk[]) {
3255 			{
3256 				.ifnum = 0,
3257 				.type = QUIRK_AUDIO_STANDARD_MIXER,
3258 			},
3259 			{
3260 				.ifnum = 1,
3261 				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
3262 				.data = &(const struct audioformat) {
3263 					.formats = SNDRV_PCM_FMTBIT_S24_3LE,
3264 					.channels = 4,
3265 					.iface = 1,
3266 					.altsetting = 1,
3267 					.altset_idx = 1,
3268 					.attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
3269 					.endpoint = 0x01,
3270 					.ep_attr = USB_ENDPOINT_SYNC_ADAPTIVE,
3271 					.rates = SNDRV_PCM_RATE_44100 |
3272 						 SNDRV_PCM_RATE_48000,
3273 					.rate_min = 44100,
3274 					.rate_max = 48000,
3275 					.nr_rates = 2,
3276 					.rate_table = (unsigned int[]) {
3277 						44100, 48000
3278 					}
3279 				}
3280 			},
3281 			{
3282 				.ifnum = -1
3283 			}
3284 		}
3285 	}
3286 },
3287 
3288 {
3289 	/*
3290 	 * ZOOM R16/24 in audio interface mode.
3291 	 * Playback requires an extra four byte LE length indicator
3292 	 * at the start of each isochronous packet. This quirk is
3293 	 * enabled in create_standard_audio_quirk().
3294 	 */
3295 	USB_DEVICE(0x1686, 0x00dd),
3296 	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
3297 		.ifnum = QUIRK_ANY_INTERFACE,
3298 		.type = QUIRK_COMPOSITE,
3299 		.data = (const struct snd_usb_audio_quirk[]) {
3300 			{
3301 				/* Playback  */
3302 				.ifnum = 1,
3303 				.type = QUIRK_AUDIO_STANDARD_INTERFACE,
3304 			},
3305 			{
3306 				/* Capture */
3307 				.ifnum = 2,
3308 				.type = QUIRK_AUDIO_STANDARD_INTERFACE,
3309 			},
3310 			{
3311 				/* Midi */
3312 				.ifnum = 3,
3313 				.type = QUIRK_MIDI_STANDARD_INTERFACE
3314 			},
3315 			{
3316 				.ifnum = -1
3317 			},
3318 		}
3319 	}
3320 },
3321 
3322 {
3323 	/*
3324 	 * Some USB MIDI devices don't have an audio control interface,
3325 	 * so we have to grab MIDI streaming interfaces here.
3326 	 */
3327 	.match_flags = USB_DEVICE_ID_MATCH_INT_CLASS |
3328 		       USB_DEVICE_ID_MATCH_INT_SUBCLASS,
3329 	.bInterfaceClass = USB_CLASS_AUDIO,
3330 	.bInterfaceSubClass = USB_SUBCLASS_MIDISTREAMING,
3331 	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
3332 		.ifnum = QUIRK_ANY_INTERFACE,
3333 		.type = QUIRK_MIDI_STANDARD_INTERFACE
3334 	}
3335 },
3336 
3337 /* Rane SL-1 */
3338 {
3339 	USB_DEVICE(0x13e5, 0x0001),
3340 	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
3341 		.ifnum = QUIRK_ANY_INTERFACE,
3342 		.type = QUIRK_AUDIO_STANDARD_INTERFACE
3343         }
3344 },
3345 
3346 /* disabled due to regression for other devices;
3347  * see https://bugzilla.kernel.org/show_bug.cgi?id=199905
3348  */
3349 #if 0
3350 {
3351 	/*
3352 	 * Nura's first gen headphones use Cambridge Silicon Radio's vendor
3353 	 * ID, but it looks like the product ID actually is only for Nura.
3354 	 * The capture interface does not work at all (even on Windows),
3355 	 * and only the 48 kHz sample rate works for the playback interface.
3356 	 */
3357 	USB_DEVICE(0x0a12, 0x1243),
3358 	.driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
3359 		.ifnum = QUIRK_ANY_INTERFACE,
3360 		.type = QUIRK_COMPOSITE,
3361 		.data = (const struct snd_usb_audio_quirk[]) {
3362 			{
3363 				.ifnum = 0,
3364 				.type = QUIRK_AUDIO_STANDARD_MIXER,
3365 			},
3366 			/* Capture */
3367 			{
3368 				.ifnum = 1,
3369 				.type = QUIRK_IGNORE_INTERFACE,
3370 			},
3371 			/* Playback */
3372 			{
3373 				.ifnum = 2,
3374 				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
3375 				.data = &(const struct audioformat) {
3376 					.formats = SNDRV_PCM_FMTBIT_S16_LE,
3377 					.channels = 2,
3378 					.iface = 2,
3379 					.altsetting = 1,
3380 					.altset_idx = 1,
3381 					.attributes = UAC_EP_CS_ATTR_FILL_MAX |
3382 						UAC_EP_CS_ATTR_SAMPLE_RATE,
3383 					.endpoint = 0x03,
3384 					.ep_attr = USB_ENDPOINT_XFER_ISOC,
3385 					.rates = SNDRV_PCM_RATE_48000,
3386 					.rate_min = 48000,
3387 					.rate_max = 48000,
3388 					.nr_rates = 1,
3389 					.rate_table = (unsigned int[]) {
3390 						48000
3391 					}
3392 				}
3393 			},
3394 			{
3395 				.ifnum = -1
3396 			},
3397 		}
3398 	}
3399 },
3400 #endif /* disabled */
3401 
3402 {
3403 	/*
3404 	 * Bower's & Wilkins PX headphones only support the 48 kHz sample rate
3405 	 * even though it advertises more. The capture interface doesn't work
3406 	 * even on windows.
3407 	 */
3408 	USB_DEVICE(0x19b5, 0x0021),
3409 	.driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
3410 		.ifnum = QUIRK_ANY_INTERFACE,
3411 		.type = QUIRK_COMPOSITE,
3412 		.data = (const struct snd_usb_audio_quirk[]) {
3413 			{
3414 				.ifnum = 0,
3415 				.type = QUIRK_AUDIO_STANDARD_MIXER,
3416 			},
3417 			/* Playback */
3418 			{
3419 				.ifnum = 1,
3420 				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
3421 				.data = &(const struct audioformat) {
3422 					.formats = SNDRV_PCM_FMTBIT_S16_LE,
3423 					.channels = 2,
3424 					.iface = 1,
3425 					.altsetting = 1,
3426 					.altset_idx = 1,
3427 					.attributes = UAC_EP_CS_ATTR_FILL_MAX |
3428 						UAC_EP_CS_ATTR_SAMPLE_RATE,
3429 					.endpoint = 0x03,
3430 					.ep_attr = USB_ENDPOINT_XFER_ISOC,
3431 					.rates = SNDRV_PCM_RATE_48000,
3432 					.rate_min = 48000,
3433 					.rate_max = 48000,
3434 					.nr_rates = 1,
3435 					.rate_table = (unsigned int[]) {
3436 						48000
3437 					}
3438 				}
3439 			},
3440 			{
3441 				.ifnum = -1
3442 			},
3443 		}
3444 	}
3445 },
3446 /* MOTU Microbook II */
3447 {
3448 	USB_DEVICE_VENDOR_SPEC(0x07fd, 0x0004),
3449 	.driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
3450 		.vendor_name = "MOTU",
3451 		.product_name = "MicroBookII",
3452 		.ifnum = QUIRK_ANY_INTERFACE,
3453 		.type = QUIRK_COMPOSITE,
3454 		.data = (const struct snd_usb_audio_quirk[]) {
3455 			{
3456 				.ifnum = 0,
3457 				.type = QUIRK_AUDIO_STANDARD_MIXER,
3458 			},
3459 			{
3460 				.ifnum = 0,
3461 				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
3462 				.data = &(const struct audioformat) {
3463 					.formats = SNDRV_PCM_FMTBIT_S24_3BE,
3464 					.channels = 6,
3465 					.iface = 0,
3466 					.altsetting = 1,
3467 					.altset_idx = 1,
3468 					.attributes = 0,
3469 					.endpoint = 0x84,
3470 					.rates = SNDRV_PCM_RATE_96000,
3471 					.ep_attr = USB_ENDPOINT_XFER_ISOC |
3472 						   USB_ENDPOINT_SYNC_ASYNC,
3473 					.rate_min = 96000,
3474 					.rate_max = 96000,
3475 					.nr_rates = 1,
3476 					.maxpacksize = 0x00d8,
3477 					.rate_table = (unsigned int[]) {
3478 						96000
3479 					}
3480 				}
3481 			},
3482 			{
3483 				.ifnum = 0,
3484 				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
3485 				.data = &(const struct audioformat) {
3486 					.formats = SNDRV_PCM_FMTBIT_S24_3BE,
3487 					.channels = 8,
3488 					.iface = 0,
3489 					.altsetting = 1,
3490 					.altset_idx = 1,
3491 					.attributes = 0,
3492 					.endpoint = 0x03,
3493 					.ep_idx = 1,
3494 					.rates = SNDRV_PCM_RATE_96000,
3495 					.ep_attr = USB_ENDPOINT_XFER_ISOC |
3496 						   USB_ENDPOINT_SYNC_ASYNC,
3497 					.rate_min = 96000,
3498 					.rate_max = 96000,
3499 					.nr_rates = 1,
3500 					.maxpacksize = 0x0120,
3501 					.rate_table = (unsigned int[]) {
3502 						96000
3503 					}
3504 				}
3505 			},
3506 			{
3507 				.ifnum = -1
3508 			}
3509 		}
3510 	}
3511 },
3512 {
3513 	/*
3514 	 * PIONEER DJ DDJ-SX3
3515 	 * PCM is 12 channels out, 10 channels in @ 44.1 fixed
3516 	 * interface 0, vendor class alt setting 1 for endpoints 5 and 0x86
3517 	 * The feedback for the output is the input.
3518 	 */
3519 	USB_DEVICE_VENDOR_SPEC(0x2b73, 0x0023),
3520 	.driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
3521 		.ifnum = QUIRK_ANY_INTERFACE,
3522 		.type = QUIRK_COMPOSITE,
3523 		.data = (const struct snd_usb_audio_quirk[]) {
3524 			{
3525 				.ifnum = 0,
3526 				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
3527 				.data = &(const struct audioformat) {
3528 					.formats = SNDRV_PCM_FMTBIT_S32_LE,
3529 					.channels = 12,
3530 					.iface = 0,
3531 					.altsetting = 1,
3532 					.altset_idx = 1,
3533 					.endpoint = 0x05,
3534 					.ep_attr = USB_ENDPOINT_XFER_ISOC|
3535 						   USB_ENDPOINT_SYNC_ASYNC,
3536 					.rates = SNDRV_PCM_RATE_44100,
3537 					.rate_min = 44100,
3538 					.rate_max = 44100,
3539 					.nr_rates = 1,
3540 					.rate_table = (unsigned int[]) { 44100 }
3541 				}
3542 			},
3543 			{
3544 				.ifnum = 0,
3545 				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
3546 				.data = &(const struct audioformat) {
3547 					.formats = SNDRV_PCM_FMTBIT_S32_LE,
3548 					.channels = 10,
3549 					.iface = 0,
3550 					.altsetting = 1,
3551 					.altset_idx = 1,
3552 					.endpoint = 0x86,
3553 					.ep_idx = 1,
3554 					.ep_attr = USB_ENDPOINT_XFER_ISOC|
3555 						 USB_ENDPOINT_SYNC_ASYNC|
3556 						 USB_ENDPOINT_USAGE_IMPLICIT_FB,
3557 					.rates = SNDRV_PCM_RATE_44100,
3558 					.rate_min = 44100,
3559 					.rate_max = 44100,
3560 					.nr_rates = 1,
3561 					.rate_table = (unsigned int[]) { 44100 }
3562 				}
3563 			},
3564 			{
3565 				.ifnum = -1
3566 			}
3567 		}
3568 	}
3569 },
3570 {
3571 	/*
3572 	 * Pioneer DJ DJM-250MK2
3573 	 * PCM is 8 channels out @ 48 fixed (endpoint 0x01)
3574 	 * and 8 channels in @ 48 fixed (endpoint 0x82).
3575 	 *
3576 	 * Both playback and recording is working, even simultaneously.
3577 	 *
3578 	 * Playback channels could be mapped to:
3579 	 *  - CH1
3580 	 *  - CH2
3581 	 *  - AUX
3582 	 *
3583 	 * Recording channels could be mapped to:
3584 	 *  - Post CH1 Fader
3585 	 *  - Post CH2 Fader
3586 	 *  - Cross Fader A
3587 	 *  - Cross Fader B
3588 	 *  - MIC
3589 	 *  - AUX
3590 	 *  - REC OUT
3591 	 *
3592 	 * There is remaining problem with recording directly from PHONO/LINE.
3593 	 * If we map a channel to:
3594 	 *  - CH1 Control Tone PHONO
3595 	 *  - CH1 Control Tone LINE
3596 	 *  - CH2 Control Tone PHONO
3597 	 *  - CH2 Control Tone LINE
3598 	 * it is silent.
3599 	 * There is no signal even on other operating systems with official drivers.
3600 	 * The signal appears only when a supported application is started.
3601 	 * This needs to be investigated yet...
3602 	 * (there is quite a lot communication on the USB in both directions)
3603 	 *
3604 	 * In current version this mixer could be used for playback
3605 	 * and for recording from vinyls (through Post CH* Fader)
3606 	 * but not for DVS (Digital Vinyl Systems) like in Mixxx.
3607 	 */
3608 	USB_DEVICE_VENDOR_SPEC(0x2b73, 0x0017),
3609 	.driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
3610 		.ifnum = QUIRK_ANY_INTERFACE,
3611 		.type = QUIRK_COMPOSITE,
3612 		.data = (const struct snd_usb_audio_quirk[]) {
3613 			{
3614 				.ifnum = 0,
3615 				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
3616 				.data = &(const struct audioformat) {
3617 					.formats = SNDRV_PCM_FMTBIT_S24_3LE,
3618 					.channels = 8, // outputs
3619 					.iface = 0,
3620 					.altsetting = 1,
3621 					.altset_idx = 1,
3622 					.endpoint = 0x01,
3623 					.ep_attr = USB_ENDPOINT_XFER_ISOC|
3624 						USB_ENDPOINT_SYNC_ASYNC,
3625 					.rates = SNDRV_PCM_RATE_48000,
3626 					.rate_min = 48000,
3627 					.rate_max = 48000,
3628 					.nr_rates = 1,
3629 					.rate_table = (unsigned int[]) { 48000 }
3630 					}
3631 			},
3632 			{
3633 				.ifnum = 0,
3634 				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
3635 				.data = &(const struct audioformat) {
3636 					.formats = SNDRV_PCM_FMTBIT_S24_3LE,
3637 					.channels = 8, // inputs
3638 					.iface = 0,
3639 					.altsetting = 1,
3640 					.altset_idx = 1,
3641 					.endpoint = 0x82,
3642 					.ep_idx = 1,
3643 					.ep_attr = USB_ENDPOINT_XFER_ISOC|
3644 						USB_ENDPOINT_SYNC_ASYNC|
3645 						USB_ENDPOINT_USAGE_IMPLICIT_FB,
3646 					.rates = SNDRV_PCM_RATE_48000,
3647 					.rate_min = 48000,
3648 					.rate_max = 48000,
3649 					.nr_rates = 1,
3650 					.rate_table = (unsigned int[]) { 48000 }
3651 				}
3652 			},
3653 			{
3654 				.ifnum = -1
3655 			}
3656 		}
3657 	}
3658 },
3659 {
3660 	/*
3661 	 * PIONEER DJ DDJ-RB
3662 	 * PCM is 4 channels out, 2 dummy channels in @ 44.1 fixed
3663 	 * The feedback for the output is the dummy input.
3664 	 */
3665 	USB_DEVICE_VENDOR_SPEC(0x2b73, 0x000e),
3666 	.driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
3667 		.ifnum = QUIRK_ANY_INTERFACE,
3668 		.type = QUIRK_COMPOSITE,
3669 		.data = (const struct snd_usb_audio_quirk[]) {
3670 			{
3671 				.ifnum = 0,
3672 				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
3673 				.data = &(const struct audioformat) {
3674 					.formats = SNDRV_PCM_FMTBIT_S24_3LE,
3675 					.channels = 4,
3676 					.iface = 0,
3677 					.altsetting = 1,
3678 					.altset_idx = 1,
3679 					.endpoint = 0x01,
3680 					.ep_attr = USB_ENDPOINT_XFER_ISOC|
3681 						   USB_ENDPOINT_SYNC_ASYNC,
3682 					.rates = SNDRV_PCM_RATE_44100,
3683 					.rate_min = 44100,
3684 					.rate_max = 44100,
3685 					.nr_rates = 1,
3686 					.rate_table = (unsigned int[]) { 44100 }
3687 				}
3688 			},
3689 			{
3690 				.ifnum = 0,
3691 				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
3692 				.data = &(const struct audioformat) {
3693 					.formats = SNDRV_PCM_FMTBIT_S24_3LE,
3694 					.channels = 2,
3695 					.iface = 0,
3696 					.altsetting = 1,
3697 					.altset_idx = 1,
3698 					.endpoint = 0x82,
3699 					.ep_idx = 1,
3700 					.ep_attr = USB_ENDPOINT_XFER_ISOC|
3701 						 USB_ENDPOINT_SYNC_ASYNC|
3702 						 USB_ENDPOINT_USAGE_IMPLICIT_FB,
3703 					.rates = SNDRV_PCM_RATE_44100,
3704 					.rate_min = 44100,
3705 					.rate_max = 44100,
3706 					.nr_rates = 1,
3707 					.rate_table = (unsigned int[]) { 44100 }
3708 				}
3709 			},
3710 			{
3711 				.ifnum = -1
3712 			}
3713 		}
3714 	}
3715 },
3716 
3717 {
3718 	/*
3719 	 * PIONEER DJ DDJ-RR
3720 	 * PCM is 6 channels out & 4 channels in @ 44.1 fixed
3721 	 */
3722 	USB_DEVICE_VENDOR_SPEC(0x2b73, 0x000d),
3723 	.driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
3724 		.ifnum = QUIRK_ANY_INTERFACE,
3725 		.type = QUIRK_COMPOSITE,
3726 		.data = (const struct snd_usb_audio_quirk[]) {
3727 			{
3728 				.ifnum = 0,
3729 				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
3730 				.data = &(const struct audioformat) {
3731 					.formats = SNDRV_PCM_FMTBIT_S24_3LE,
3732 					.channels = 6, //Master, Headphones & Booth
3733 					.iface = 0,
3734 					.altsetting = 1,
3735 					.altset_idx = 1,
3736 					.endpoint = 0x01,
3737 					.ep_attr = USB_ENDPOINT_XFER_ISOC|
3738 						   USB_ENDPOINT_SYNC_ASYNC,
3739 					.rates = SNDRV_PCM_RATE_44100,
3740 					.rate_min = 44100,
3741 					.rate_max = 44100,
3742 					.nr_rates = 1,
3743 					.rate_table = (unsigned int[]) { 44100 }
3744 				}
3745 			},
3746 			{
3747 				.ifnum = 0,
3748 				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
3749 				.data = &(const struct audioformat) {
3750 					.formats = SNDRV_PCM_FMTBIT_S24_3LE,
3751 					.channels = 4, //2x RCA inputs (CH1 & CH2)
3752 					.iface = 0,
3753 					.altsetting = 1,
3754 					.altset_idx = 1,
3755 					.endpoint = 0x82,
3756 					.ep_idx = 1,
3757 					.ep_attr = USB_ENDPOINT_XFER_ISOC|
3758 						 USB_ENDPOINT_SYNC_ASYNC|
3759 						 USB_ENDPOINT_USAGE_IMPLICIT_FB,
3760 					.rates = SNDRV_PCM_RATE_44100,
3761 					.rate_min = 44100,
3762 					.rate_max = 44100,
3763 					.nr_rates = 1,
3764 					.rate_table = (unsigned int[]) { 44100 }
3765 				}
3766 			},
3767 			{
3768 				.ifnum = -1
3769 			}
3770 		}
3771 	}
3772 },
3773 
3774 {
3775 	/*
3776 	 * PIONEER DJ DDJ-SR2
3777 	 * PCM is 4 channels out, 6 channels in @ 44.1 fixed
3778 	 * The Feedback for the output is the input
3779 	 */
3780 	USB_DEVICE_VENDOR_SPEC(0x2b73, 0x001e),
3781 		.driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
3782 		.ifnum = QUIRK_ANY_INTERFACE,
3783 		.type = QUIRK_COMPOSITE,
3784 		.data = (const struct snd_usb_audio_quirk[]) {
3785 			{
3786 				.ifnum = 0,
3787 				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
3788 				.data = &(const struct audioformat) {
3789 					.formats = SNDRV_PCM_FMTBIT_S24_3LE,
3790 					.channels = 4,
3791 					.iface = 0,
3792 					.altsetting = 1,
3793 					.altset_idx = 1,
3794 					.endpoint = 0x01,
3795 					.ep_attr = USB_ENDPOINT_XFER_ISOC|
3796 						USB_ENDPOINT_SYNC_ASYNC,
3797 					.rates = SNDRV_PCM_RATE_44100,
3798 					.rate_min = 44100,
3799 					.rate_max = 44100,
3800 					.nr_rates = 1,
3801 					.rate_table = (unsigned int[]) { 44100 }
3802 				}
3803 			},
3804 			{
3805 				.ifnum = 0,
3806 				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
3807 				.data = &(const struct audioformat) {
3808 					.formats = SNDRV_PCM_FMTBIT_S24_3LE,
3809 					.channels = 6,
3810 					.iface = 0,
3811 					.altsetting = 1,
3812 					.altset_idx = 1,
3813 					.endpoint = 0x82,
3814 					.ep_idx = 1,
3815 					.ep_attr = USB_ENDPOINT_XFER_ISOC|
3816 						USB_ENDPOINT_SYNC_ASYNC|
3817 					USB_ENDPOINT_USAGE_IMPLICIT_FB,
3818 					.rates = SNDRV_PCM_RATE_44100,
3819 					.rate_min = 44100,
3820 					.rate_max = 44100,
3821 					.nr_rates = 1,
3822 					.rate_table = (unsigned int[]) { 44100 }
3823 				}
3824 			},
3825 			{
3826 				.ifnum = -1
3827 			}
3828 		}
3829 	}
3830 },
3831 
3832 {
3833 	/*
3834 	 * Pioneer DJ DJM-900NXS2
3835 	 * 10 channels playback & 12 channels capture @ 44.1/48/96kHz S24LE
3836 	 */
3837 	USB_DEVICE_VENDOR_SPEC(0x2b73, 0x000a),
3838 	.driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
3839 		.ifnum = QUIRK_ANY_INTERFACE,
3840 		.type = QUIRK_COMPOSITE,
3841 		.data = (const struct snd_usb_audio_quirk[]) {
3842 			{
3843 				.ifnum = 0,
3844 				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
3845 				.data = &(const struct audioformat) {
3846 					.formats = SNDRV_PCM_FMTBIT_S24_3LE,
3847 					.channels = 10,
3848 					.iface = 0,
3849 					.altsetting = 1,
3850 					.altset_idx = 1,
3851 					.endpoint = 0x01,
3852 					.ep_attr = USB_ENDPOINT_XFER_ISOC|
3853 					    USB_ENDPOINT_SYNC_ASYNC,
3854 					.rates = SNDRV_PCM_RATE_44100|
3855 					    SNDRV_PCM_RATE_48000|
3856 					    SNDRV_PCM_RATE_96000,
3857 					.rate_min = 44100,
3858 					.rate_max = 96000,
3859 					.nr_rates = 3,
3860 					.rate_table = (unsigned int[]) {
3861 						44100, 48000, 96000
3862 					}
3863 				}
3864 			},
3865 			{
3866 				.ifnum = 0,
3867 				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
3868 				.data = &(const struct audioformat) {
3869 					.formats = SNDRV_PCM_FMTBIT_S24_3LE,
3870 					.channels = 12,
3871 					.iface = 0,
3872 					.altsetting = 1,
3873 					.altset_idx = 1,
3874 					.endpoint = 0x82,
3875 					.ep_idx = 1,
3876 					.ep_attr = USB_ENDPOINT_XFER_ISOC|
3877 					    USB_ENDPOINT_SYNC_ASYNC|
3878 					    USB_ENDPOINT_USAGE_IMPLICIT_FB,
3879 					.rates = SNDRV_PCM_RATE_44100|
3880 					    SNDRV_PCM_RATE_48000|
3881 					    SNDRV_PCM_RATE_96000,
3882 					.rate_min = 44100,
3883 					.rate_max = 96000,
3884 					.nr_rates = 3,
3885 					.rate_table = (unsigned int[]) {
3886 						44100, 48000, 96000
3887 					}
3888 				}
3889 			},
3890 			{
3891 				.ifnum = -1
3892 			}
3893 		}
3894 	}
3895 },
3896 
3897 {
3898 	/*
3899 	 * PIONEER DJ DDJ-800
3900 	 * PCM is 6 channels out, 6 channels in @ 44.1 fixed
3901 	 * The Feedback for the output is the input
3902 	 */
3903 	USB_DEVICE_VENDOR_SPEC(0x2b73, 0x0029),
3904 		.driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
3905 		.ifnum = QUIRK_ANY_INTERFACE,
3906 		.type = QUIRK_COMPOSITE,
3907 		.data = (const struct snd_usb_audio_quirk[]) {
3908 			{
3909 				.ifnum = 0,
3910 				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
3911 				.data = &(const struct audioformat) {
3912 					.formats = SNDRV_PCM_FMTBIT_S24_3LE,
3913 					.channels = 6,
3914 					.iface = 0,
3915 					.altsetting = 1,
3916 					.altset_idx = 1,
3917 					.endpoint = 0x01,
3918 					.ep_attr = USB_ENDPOINT_XFER_ISOC|
3919 						USB_ENDPOINT_SYNC_ASYNC,
3920 					.rates = SNDRV_PCM_RATE_44100,
3921 					.rate_min = 44100,
3922 					.rate_max = 44100,
3923 					.nr_rates = 1,
3924 					.rate_table = (unsigned int[]) { 44100 }
3925 				}
3926 			},
3927 			{
3928 				.ifnum = 0,
3929 				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
3930 				.data = &(const struct audioformat) {
3931 					.formats = SNDRV_PCM_FMTBIT_S24_3LE,
3932 					.channels = 6,
3933 					.iface = 0,
3934 					.altsetting = 1,
3935 					.altset_idx = 1,
3936 					.endpoint = 0x82,
3937 					.ep_idx = 1,
3938 					.ep_attr = USB_ENDPOINT_XFER_ISOC|
3939 						USB_ENDPOINT_SYNC_ASYNC|
3940 					USB_ENDPOINT_USAGE_IMPLICIT_FB,
3941 					.rates = SNDRV_PCM_RATE_44100,
3942 					.rate_min = 44100,
3943 					.rate_max = 44100,
3944 					.nr_rates = 1,
3945 					.rate_table = (unsigned int[]) { 44100 }
3946 				}
3947 			},
3948 			{
3949 				.ifnum = -1
3950 			}
3951 		}
3952 	}
3953 },
3954 
3955 /*
3956  * MacroSilicon MS2100/MS2106 based AV capture cards
3957  *
3958  * These claim 96kHz 1ch in the descriptors, but are actually 48kHz 2ch.
3959  * They also need QUIRK_FLAG_ALIGN_TRANSFER, which makes one wonder if
3960  * they pretend to be 96kHz mono as a workaround for stereo being broken
3961  * by that...
3962  *
3963  * They also have an issue with initial stream alignment that causes the
3964  * channels to be swapped and out of phase, which is dealt with in quirks.c.
3965  */
3966 {
3967 	USB_AUDIO_DEVICE(0x534d, 0x0021),
3968 	.driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
3969 		.vendor_name = "MacroSilicon",
3970 		.product_name = "MS210x",
3971 		.ifnum = QUIRK_ANY_INTERFACE,
3972 		.type = QUIRK_COMPOSITE,
3973 		.data = &(const struct snd_usb_audio_quirk[]) {
3974 			{
3975 				.ifnum = 2,
3976 				.type = QUIRK_AUDIO_STANDARD_MIXER,
3977 			},
3978 			{
3979 				.ifnum = 3,
3980 				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
3981 				.data = &(const struct audioformat) {
3982 					.formats = SNDRV_PCM_FMTBIT_S16_LE,
3983 					.channels = 2,
3984 					.iface = 3,
3985 					.altsetting = 1,
3986 					.altset_idx = 1,
3987 					.attributes = 0,
3988 					.endpoint = 0x82,
3989 					.ep_attr = USB_ENDPOINT_XFER_ISOC |
3990 						USB_ENDPOINT_SYNC_ASYNC,
3991 					.rates = SNDRV_PCM_RATE_CONTINUOUS,
3992 					.rate_min = 48000,
3993 					.rate_max = 48000,
3994 				}
3995 			},
3996 			{
3997 				.ifnum = -1
3998 			}
3999 		}
4000 	}
4001 },
4002 
4003 /*
4004  * MacroSilicon MS2109 based HDMI capture cards
4005  *
4006  * These claim 96kHz 1ch in the descriptors, but are actually 48kHz 2ch.
4007  * They also need QUIRK_FLAG_ALIGN_TRANSFER, which makes one wonder if
4008  * they pretend to be 96kHz mono as a workaround for stereo being broken
4009  * by that...
4010  *
4011  * They also have an issue with initial stream alignment that causes the
4012  * channels to be swapped and out of phase, which is dealt with in quirks.c.
4013  */
4014 {
4015 	USB_AUDIO_DEVICE(0x534d, 0x2109),
4016 	.driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
4017 		.vendor_name = "MacroSilicon",
4018 		.product_name = "MS2109",
4019 		.ifnum = QUIRK_ANY_INTERFACE,
4020 		.type = QUIRK_COMPOSITE,
4021 		.data = &(const struct snd_usb_audio_quirk[]) {
4022 			{
4023 				.ifnum = 2,
4024 				.type = QUIRK_AUDIO_STANDARD_MIXER,
4025 			},
4026 			{
4027 				.ifnum = 3,
4028 				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
4029 				.data = &(const struct audioformat) {
4030 					.formats = SNDRV_PCM_FMTBIT_S16_LE,
4031 					.channels = 2,
4032 					.iface = 3,
4033 					.altsetting = 1,
4034 					.altset_idx = 1,
4035 					.attributes = 0,
4036 					.endpoint = 0x82,
4037 					.ep_attr = USB_ENDPOINT_XFER_ISOC |
4038 						USB_ENDPOINT_SYNC_ASYNC,
4039 					.rates = SNDRV_PCM_RATE_CONTINUOUS,
4040 					.rate_min = 48000,
4041 					.rate_max = 48000,
4042 				}
4043 			},
4044 			{
4045 				.ifnum = -1
4046 			}
4047 		}
4048 	}
4049 },
4050 {
4051 	/*
4052 	 * Pioneer DJ DJM-750
4053 	 * 8 channels playback & 8 channels capture @ 44.1/48/96kHz S24LE
4054 	 */
4055 	USB_DEVICE_VENDOR_SPEC(0x08e4, 0x017f),
4056 	.driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
4057 		.ifnum = QUIRK_ANY_INTERFACE,
4058 		.type = QUIRK_COMPOSITE,
4059 		.data = (const struct snd_usb_audio_quirk[]) {
4060 			{
4061 				.ifnum = 0,
4062 				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
4063 				.data = &(const struct audioformat) {
4064 					.formats = SNDRV_PCM_FMTBIT_S24_3LE,
4065 					.channels = 8,
4066 					.iface = 0,
4067 					.altsetting = 1,
4068 					.altset_idx = 1,
4069 					.endpoint = 0x05,
4070 					.ep_attr = USB_ENDPOINT_XFER_ISOC|
4071 					    USB_ENDPOINT_SYNC_ASYNC,
4072 					.rates = SNDRV_PCM_RATE_44100|
4073 						SNDRV_PCM_RATE_48000|
4074 						SNDRV_PCM_RATE_96000,
4075 					.rate_min = 44100,
4076 					.rate_max = 96000,
4077 					.nr_rates = 3,
4078 					.rate_table = (unsigned int[]) { 44100, 48000, 96000 }
4079 				}
4080 			},
4081 			{
4082 				.ifnum = 0,
4083 				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
4084 				.data = &(const struct audioformat) {
4085 					.formats = SNDRV_PCM_FMTBIT_S24_3LE,
4086 					.channels = 8,
4087 					.iface = 0,
4088 					.altsetting = 1,
4089 					.altset_idx = 1,
4090 					.endpoint = 0x86,
4091 					.ep_idx = 1,
4092 					.ep_attr = USB_ENDPOINT_XFER_ISOC|
4093 						USB_ENDPOINT_SYNC_ASYNC|
4094 						USB_ENDPOINT_USAGE_IMPLICIT_FB,
4095 					.rates = SNDRV_PCM_RATE_44100|
4096 						SNDRV_PCM_RATE_48000|
4097 						SNDRV_PCM_RATE_96000,
4098 					.rate_min = 44100,
4099 					.rate_max = 96000,
4100 					.nr_rates = 3,
4101 					.rate_table = (unsigned int[]) { 44100, 48000, 96000 }
4102 				}
4103 			},
4104 			{
4105 				.ifnum = -1
4106 			}
4107 		}
4108 	}
4109 },
4110 {
4111 	/*
4112 	 * Pioneer DJ DJM-750MK2
4113 	 * 10 channels playback & 12 channels capture @ 48kHz S24LE
4114 	 */
4115 	USB_DEVICE_VENDOR_SPEC(0x2b73, 0x001b),
4116 	.driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
4117 		.ifnum = QUIRK_ANY_INTERFACE,
4118 		.type = QUIRK_COMPOSITE,
4119 		.data = (const struct snd_usb_audio_quirk[]) {
4120 			{
4121 				.ifnum = 0,
4122 				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
4123 				.data = &(const struct audioformat) {
4124 					.formats = SNDRV_PCM_FMTBIT_S24_3LE,
4125 					.channels = 10,
4126 					.iface = 0,
4127 					.altsetting = 1,
4128 					.altset_idx = 1,
4129 					.endpoint = 0x01,
4130 					.ep_attr = USB_ENDPOINT_XFER_ISOC|
4131 					    USB_ENDPOINT_SYNC_ASYNC,
4132 					.rates = SNDRV_PCM_RATE_48000,
4133 					.rate_min = 48000,
4134 					.rate_max = 48000,
4135 					.nr_rates = 1,
4136 					.rate_table = (unsigned int[]) {
4137 						48000
4138 					}
4139 				}
4140 			},
4141 			{
4142 				.ifnum = 0,
4143 				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
4144 				.data = &(const struct audioformat) {
4145 					.formats = SNDRV_PCM_FMTBIT_S24_3LE,
4146 					.channels = 12,
4147 					.iface = 0,
4148 					.altsetting = 1,
4149 					.altset_idx = 1,
4150 					.endpoint = 0x82,
4151 					.ep_idx = 1,
4152 					.ep_attr = USB_ENDPOINT_XFER_ISOC|
4153 						USB_ENDPOINT_SYNC_ASYNC|
4154 						USB_ENDPOINT_USAGE_IMPLICIT_FB,
4155 					.rates = SNDRV_PCM_RATE_48000,
4156 					.rate_min = 48000,
4157 					.rate_max = 48000,
4158 					.nr_rates = 1,
4159 					.rate_table = (unsigned int[]) { 48000 }
4160 				}
4161 			},
4162 			{
4163 				.ifnum = -1
4164 			}
4165 		}
4166 	}
4167 },
4168 {
4169 	/*
4170 	 * Pioneer DJ DJM-850
4171 	 * 8 channels playback and 8 channels capture @ 44.1/48/96kHz S24LE
4172 	 * Playback on EP 0x05
4173 	 * Capture on EP 0x86
4174 	 */
4175 	USB_DEVICE_VENDOR_SPEC(0x08e4, 0x0163),
4176 	.driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
4177 		.ifnum = QUIRK_ANY_INTERFACE,
4178 		.type = QUIRK_COMPOSITE,
4179 		.data = (const struct snd_usb_audio_quirk[]) {
4180 			{
4181 				.ifnum = 0,
4182 				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
4183 				.data = &(const struct audioformat) {
4184 					.formats = SNDRV_PCM_FMTBIT_S24_3LE,
4185 					.channels = 8,
4186 					.iface = 0,
4187 					.altsetting = 1,
4188 					.altset_idx = 1,
4189 					.endpoint = 0x05,
4190 					.ep_attr = USB_ENDPOINT_XFER_ISOC|
4191 					    USB_ENDPOINT_SYNC_ASYNC|
4192 						USB_ENDPOINT_USAGE_DATA,
4193 					.rates = SNDRV_PCM_RATE_44100|
4194 						SNDRV_PCM_RATE_48000|
4195 						SNDRV_PCM_RATE_96000,
4196 					.rate_min = 44100,
4197 					.rate_max = 96000,
4198 					.nr_rates = 3,
4199 					.rate_table = (unsigned int[]) { 44100, 48000, 96000 }
4200 				}
4201 			},
4202 			{
4203 				.ifnum = 0,
4204 				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
4205 				.data = &(const struct audioformat) {
4206 					.formats = SNDRV_PCM_FMTBIT_S24_3LE,
4207 					.channels = 8,
4208 					.iface = 0,
4209 					.altsetting = 1,
4210 					.altset_idx = 1,
4211 					.endpoint = 0x86,
4212 					.ep_idx = 1,
4213 					.ep_attr = USB_ENDPOINT_XFER_ISOC|
4214 						USB_ENDPOINT_SYNC_ASYNC|
4215 						USB_ENDPOINT_USAGE_DATA,
4216 					.rates = SNDRV_PCM_RATE_44100|
4217 						SNDRV_PCM_RATE_48000|
4218 						SNDRV_PCM_RATE_96000,
4219 					.rate_min = 44100,
4220 					.rate_max = 96000,
4221 					.nr_rates = 3,
4222 					.rate_table = (unsigned int[]) { 44100, 48000, 96000 }
4223 				}
4224 			},
4225 			{
4226 				.ifnum = -1
4227 			}
4228 		}
4229 	}
4230 },
4231 {
4232 	/*
4233 	 * Pioneer DJ DJM-450
4234 	 * PCM is 8 channels out @ 48 fixed (endpoint 0x01)
4235 	 * and 8 channels in @ 48 fixed (endpoint 0x82).
4236 	 */
4237 	USB_DEVICE_VENDOR_SPEC(0x2b73, 0x0013),
4238 	.driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
4239 		.ifnum = QUIRK_ANY_INTERFACE,
4240 		.type = QUIRK_COMPOSITE,
4241 		.data = (const struct snd_usb_audio_quirk[]) {
4242 			{
4243 				.ifnum = 0,
4244 				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
4245 				.data = &(const struct audioformat) {
4246 					.formats = SNDRV_PCM_FMTBIT_S24_3LE,
4247 					.channels = 8, // outputs
4248 					.iface = 0,
4249 					.altsetting = 1,
4250 					.altset_idx = 1,
4251 					.endpoint = 0x01,
4252 					.ep_attr = USB_ENDPOINT_XFER_ISOC|
4253 						USB_ENDPOINT_SYNC_ASYNC,
4254 					.rates = SNDRV_PCM_RATE_48000,
4255 					.rate_min = 48000,
4256 					.rate_max = 48000,
4257 					.nr_rates = 1,
4258 					.rate_table = (unsigned int[]) { 48000 }
4259 					}
4260 			},
4261 			{
4262 				.ifnum = 0,
4263 				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
4264 				.data = &(const struct audioformat) {
4265 					.formats = SNDRV_PCM_FMTBIT_S24_3LE,
4266 					.channels = 8, // inputs
4267 					.iface = 0,
4268 					.altsetting = 1,
4269 					.altset_idx = 1,
4270 					.endpoint = 0x82,
4271 					.ep_idx = 1,
4272 					.ep_attr = USB_ENDPOINT_XFER_ISOC|
4273 						USB_ENDPOINT_SYNC_ASYNC|
4274 						USB_ENDPOINT_USAGE_IMPLICIT_FB,
4275 					.rates = SNDRV_PCM_RATE_48000,
4276 					.rate_min = 48000,
4277 					.rate_max = 48000,
4278 					.nr_rates = 1,
4279 					.rate_table = (unsigned int[]) { 48000 }
4280 				}
4281 			},
4282 			{
4283 				.ifnum = -1
4284 			}
4285 		}
4286 	}
4287 },
4288 {
4289 	/*
4290 	 * Sennheiser GSP670
4291 	 * Change order of interfaces loaded
4292 	 */
4293 	USB_DEVICE(0x1395, 0x0300),
4294 	.bInterfaceClass = USB_CLASS_PER_INTERFACE,
4295 	.driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
4296 		.ifnum = QUIRK_ANY_INTERFACE,
4297 		.type = QUIRK_COMPOSITE,
4298 		.data = &(const struct snd_usb_audio_quirk[]) {
4299 			// Communication
4300 			{
4301 				.ifnum = 3,
4302 				.type = QUIRK_AUDIO_STANDARD_INTERFACE
4303 			},
4304 			// Recording
4305 			{
4306 				.ifnum = 4,
4307 				.type = QUIRK_AUDIO_STANDARD_INTERFACE
4308 			},
4309 			// Main
4310 			{
4311 				.ifnum = 1,
4312 				.type = QUIRK_AUDIO_STANDARD_INTERFACE
4313 			},
4314 			{
4315 				.ifnum = -1
4316 			}
4317 		}
4318 	}
4319 },
4320 {
4321 	/*
4322 	 * Fiero SC-01 (firmware v1.0.0 @ 48 kHz)
4323 	 */
4324 	USB_DEVICE(0x2b53, 0x0023),
4325 	.driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
4326 		.vendor_name = "Fiero",
4327 		.product_name = "SC-01",
4328 		.ifnum = QUIRK_ANY_INTERFACE,
4329 		.type = QUIRK_COMPOSITE,
4330 		.data = &(const struct snd_usb_audio_quirk[]) {
4331 			{
4332 				.ifnum = 0,
4333 				.type = QUIRK_AUDIO_STANDARD_INTERFACE
4334 			},
4335 			/* Playback */
4336 			{
4337 				.ifnum = 1,
4338 				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
4339 				.data = &(const struct audioformat) {
4340 					.formats = SNDRV_PCM_FMTBIT_S32_LE,
4341 					.channels = 2,
4342 					.fmt_bits = 24,
4343 					.iface = 1,
4344 					.altsetting = 1,
4345 					.altset_idx = 1,
4346 					.endpoint = 0x01,
4347 					.ep_attr = USB_ENDPOINT_XFER_ISOC |
4348 						   USB_ENDPOINT_SYNC_ASYNC,
4349 					.rates = SNDRV_PCM_RATE_48000,
4350 					.rate_min = 48000,
4351 					.rate_max = 48000,
4352 					.nr_rates = 1,
4353 					.rate_table = (unsigned int[]) { 48000 },
4354 					.clock = 0x29
4355 				}
4356 			},
4357 			/* Capture */
4358 			{
4359 				.ifnum = 2,
4360 				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
4361 				.data = &(const struct audioformat) {
4362 					.formats = SNDRV_PCM_FMTBIT_S32_LE,
4363 					.channels = 2,
4364 					.fmt_bits = 24,
4365 					.iface = 2,
4366 					.altsetting = 1,
4367 					.altset_idx = 1,
4368 					.endpoint = 0x82,
4369 					.ep_attr = USB_ENDPOINT_XFER_ISOC |
4370 						   USB_ENDPOINT_SYNC_ASYNC |
4371 						   USB_ENDPOINT_USAGE_IMPLICIT_FB,
4372 					.rates = SNDRV_PCM_RATE_48000,
4373 					.rate_min = 48000,
4374 					.rate_max = 48000,
4375 					.nr_rates = 1,
4376 					.rate_table = (unsigned int[]) { 48000 },
4377 					.clock = 0x29
4378 				}
4379 			},
4380 			{
4381 				.ifnum = -1
4382 			}
4383 		}
4384 	}
4385 },
4386 {
4387 	/*
4388 	 * Fiero SC-01 (firmware v1.0.0 @ 96 kHz)
4389 	 */
4390 	USB_DEVICE(0x2b53, 0x0024),
4391 	.driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
4392 		.vendor_name = "Fiero",
4393 		.product_name = "SC-01",
4394 		.ifnum = QUIRK_ANY_INTERFACE,
4395 		.type = QUIRK_COMPOSITE,
4396 		.data = &(const struct snd_usb_audio_quirk[]) {
4397 			{
4398 				.ifnum = 0,
4399 				.type = QUIRK_AUDIO_STANDARD_INTERFACE
4400 			},
4401 			/* Playback */
4402 			{
4403 				.ifnum = 1,
4404 				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
4405 				.data = &(const struct audioformat) {
4406 					.formats = SNDRV_PCM_FMTBIT_S32_LE,
4407 					.channels = 2,
4408 					.fmt_bits = 24,
4409 					.iface = 1,
4410 					.altsetting = 1,
4411 					.altset_idx = 1,
4412 					.endpoint = 0x01,
4413 					.ep_attr = USB_ENDPOINT_XFER_ISOC |
4414 						   USB_ENDPOINT_SYNC_ASYNC,
4415 					.rates = SNDRV_PCM_RATE_96000,
4416 					.rate_min = 96000,
4417 					.rate_max = 96000,
4418 					.nr_rates = 1,
4419 					.rate_table = (unsigned int[]) { 96000 },
4420 					.clock = 0x29
4421 				}
4422 			},
4423 			/* Capture */
4424 			{
4425 				.ifnum = 2,
4426 				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
4427 				.data = &(const struct audioformat) {
4428 					.formats = SNDRV_PCM_FMTBIT_S32_LE,
4429 					.channels = 2,
4430 					.fmt_bits = 24,
4431 					.iface = 2,
4432 					.altsetting = 1,
4433 					.altset_idx = 1,
4434 					.endpoint = 0x82,
4435 					.ep_attr = USB_ENDPOINT_XFER_ISOC |
4436 						   USB_ENDPOINT_SYNC_ASYNC |
4437 						   USB_ENDPOINT_USAGE_IMPLICIT_FB,
4438 					.rates = SNDRV_PCM_RATE_96000,
4439 					.rate_min = 96000,
4440 					.rate_max = 96000,
4441 					.nr_rates = 1,
4442 					.rate_table = (unsigned int[]) { 96000 },
4443 					.clock = 0x29
4444 				}
4445 			},
4446 			{
4447 				.ifnum = -1
4448 			}
4449 		}
4450 	}
4451 },
4452 {
4453 	/*
4454 	 * Fiero SC-01 (firmware v1.1.0)
4455 	 */
4456 	USB_DEVICE(0x2b53, 0x0031),
4457 	.driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
4458 		.vendor_name = "Fiero",
4459 		.product_name = "SC-01",
4460 		.ifnum = QUIRK_ANY_INTERFACE,
4461 		.type = QUIRK_COMPOSITE,
4462 		.data = &(const struct snd_usb_audio_quirk[]) {
4463 			{
4464 				.ifnum = 0,
4465 				.type = QUIRK_AUDIO_STANDARD_INTERFACE
4466 			},
4467 			/* Playback */
4468 			{
4469 				.ifnum = 1,
4470 				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
4471 				.data = &(const struct audioformat) {
4472 					.formats = SNDRV_PCM_FMTBIT_S32_LE,
4473 					.channels = 2,
4474 					.fmt_bits = 24,
4475 					.iface = 1,
4476 					.altsetting = 1,
4477 					.altset_idx = 1,
4478 					.endpoint = 0x01,
4479 					.ep_attr = USB_ENDPOINT_XFER_ISOC |
4480 						   USB_ENDPOINT_SYNC_ASYNC,
4481 					.rates = SNDRV_PCM_RATE_48000 |
4482 						 SNDRV_PCM_RATE_96000,
4483 					.rate_min = 48000,
4484 					.rate_max = 96000,
4485 					.nr_rates = 2,
4486 					.rate_table = (unsigned int[]) { 48000, 96000 },
4487 					.clock = 0x29
4488 				}
4489 			},
4490 			/* Capture */
4491 			{
4492 				.ifnum = 2,
4493 				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
4494 				.data = &(const struct audioformat) {
4495 					.formats = SNDRV_PCM_FMTBIT_S32_LE,
4496 					.channels = 2,
4497 					.fmt_bits = 24,
4498 					.iface = 2,
4499 					.altsetting = 1,
4500 					.altset_idx = 1,
4501 					.endpoint = 0x82,
4502 					.ep_attr = USB_ENDPOINT_XFER_ISOC |
4503 						   USB_ENDPOINT_SYNC_ASYNC |
4504 						   USB_ENDPOINT_USAGE_IMPLICIT_FB,
4505 					.rates = SNDRV_PCM_RATE_48000 |
4506 						 SNDRV_PCM_RATE_96000,
4507 					.rate_min = 48000,
4508 					.rate_max = 96000,
4509 					.nr_rates = 2,
4510 					.rate_table = (unsigned int[]) { 48000, 96000 },
4511 					.clock = 0x29
4512 				}
4513 			},
4514 			{
4515 				.ifnum = -1
4516 			}
4517 		}
4518 	}
4519 },
4520 {
4521 	/* Advanced modes of the Mythware XA001AU.
4522 	 * For the standard mode, Mythware XA001AU has ID ffad:a001
4523 	 */
4524 	USB_DEVICE_VENDOR_SPEC(0xffad, 0xa001),
4525 	.driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
4526 		.vendor_name = "Mythware",
4527 		.product_name = "XA001AU",
4528 		.ifnum = QUIRK_ANY_INTERFACE,
4529 		.type = QUIRK_COMPOSITE,
4530 		.data = (const struct snd_usb_audio_quirk[]) {
4531 			{
4532 				.ifnum = 0,
4533 				.type = QUIRK_IGNORE_INTERFACE,
4534 			},
4535 			{
4536 				.ifnum = 1,
4537 				.type = QUIRK_AUDIO_STANDARD_INTERFACE,
4538 			},
4539 			{
4540 				.ifnum = 2,
4541 				.type = QUIRK_AUDIO_STANDARD_INTERFACE,
4542 			},
4543 			{
4544 				.ifnum = -1
4545 			}
4546 		}
4547 	}
4548 },
4549 
4550 #undef USB_DEVICE_VENDOR_SPEC
4551 #undef USB_AUDIO_DEVICE
4552