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