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