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