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/* this catches most recent vendor-specific Roland devices */
1722{
1723	.match_flags = USB_DEVICE_ID_MATCH_VENDOR |
1724	               USB_DEVICE_ID_MATCH_INT_CLASS,
1725	.idVendor = 0x0582,
1726	.bInterfaceClass = USB_CLASS_VENDOR_SPEC,
1727	.driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
1728		.ifnum = QUIRK_ANY_INTERFACE,
1729		.type = QUIRK_AUTODETECT
1730	}
1731},
1732
1733/* Guillemot devices */
1734{
1735	/*
1736	 * This is for the "Windows Edition" where the external MIDI ports are
1737	 * the only MIDI ports; the control data is reported through HID
1738	 * interfaces.  The "Macintosh Edition" has ID 0xd002 and uses standard
1739	 * compliant USB MIDI ports for external MIDI and controls.
1740	 */
1741	USB_DEVICE_VENDOR_SPEC(0x06f8, 0xb000),
1742	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1743		.vendor_name = "Hercules",
1744		.product_name = "DJ Console (WE)",
1745		.ifnum = 4,
1746		.type = QUIRK_MIDI_FIXED_ENDPOINT,
1747		.data = & (const struct snd_usb_midi_endpoint_info) {
1748			.out_cables = 0x0001,
1749			.in_cables = 0x0001
1750		}
1751	}
1752},
1753
1754/* Midiman/M-Audio devices */
1755{
1756	USB_DEVICE_VENDOR_SPEC(0x0763, 0x1002),
1757	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1758		.vendor_name = "M-Audio",
1759		.product_name = "MidiSport 2x2",
1760		.ifnum = QUIRK_ANY_INTERFACE,
1761		.type = QUIRK_MIDI_MIDIMAN,
1762		.data = & (const struct snd_usb_midi_endpoint_info) {
1763			.out_cables = 0x0003,
1764			.in_cables  = 0x0003
1765		}
1766	}
1767},
1768{
1769	USB_DEVICE_VENDOR_SPEC(0x0763, 0x1011),
1770	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1771		.vendor_name = "M-Audio",
1772		.product_name = "MidiSport 1x1",
1773		.ifnum = QUIRK_ANY_INTERFACE,
1774		.type = QUIRK_MIDI_MIDIMAN,
1775		.data = & (const struct snd_usb_midi_endpoint_info) {
1776			.out_cables = 0x0001,
1777			.in_cables  = 0x0001
1778		}
1779	}
1780},
1781{
1782	USB_DEVICE_VENDOR_SPEC(0x0763, 0x1015),
1783	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1784		.vendor_name = "M-Audio",
1785		.product_name = "Keystation",
1786		.ifnum = QUIRK_ANY_INTERFACE,
1787		.type = QUIRK_MIDI_MIDIMAN,
1788		.data = & (const struct snd_usb_midi_endpoint_info) {
1789			.out_cables = 0x0001,
1790			.in_cables  = 0x0001
1791		}
1792	}
1793},
1794{
1795	USB_DEVICE_VENDOR_SPEC(0x0763, 0x1021),
1796	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1797		.vendor_name = "M-Audio",
1798		.product_name = "MidiSport 4x4",
1799		.ifnum = QUIRK_ANY_INTERFACE,
1800		.type = QUIRK_MIDI_MIDIMAN,
1801		.data = & (const struct snd_usb_midi_endpoint_info) {
1802			.out_cables = 0x000f,
1803			.in_cables  = 0x000f
1804		}
1805	}
1806},
1807{
1808	/*
1809	 * For hardware revision 1.05; in the later revisions (1.10 and
1810	 * 1.21), 0x1031 is the ID for the device without firmware.
1811	 * Thanks to Olaf Giesbrecht <Olaf_Giesbrecht@yahoo.de>
1812	 */
1813	USB_DEVICE_VER(0x0763, 0x1031, 0x0100, 0x0109),
1814	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1815		.vendor_name = "M-Audio",
1816		.product_name = "MidiSport 8x8",
1817		.ifnum = QUIRK_ANY_INTERFACE,
1818		.type = QUIRK_MIDI_MIDIMAN,
1819		.data = & (const struct snd_usb_midi_endpoint_info) {
1820			.out_cables = 0x01ff,
1821			.in_cables  = 0x01ff
1822		}
1823	}
1824},
1825{
1826	USB_DEVICE_VENDOR_SPEC(0x0763, 0x1033),
1827	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1828		.vendor_name = "M-Audio",
1829		.product_name = "MidiSport 8x8",
1830		.ifnum = QUIRK_ANY_INTERFACE,
1831		.type = QUIRK_MIDI_MIDIMAN,
1832		.data = & (const struct snd_usb_midi_endpoint_info) {
1833			.out_cables = 0x01ff,
1834			.in_cables  = 0x01ff
1835		}
1836	}
1837},
1838{
1839	USB_DEVICE_VENDOR_SPEC(0x0763, 0x1041),
1840	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1841		.vendor_name = "M-Audio",
1842		.product_name = "MidiSport 2x4",
1843		.ifnum = QUIRK_ANY_INTERFACE,
1844		.type = QUIRK_MIDI_MIDIMAN,
1845		.data = & (const struct snd_usb_midi_endpoint_info) {
1846			.out_cables = 0x000f,
1847			.in_cables  = 0x0003
1848		}
1849	}
1850},
1851{
1852	USB_DEVICE_VENDOR_SPEC(0x0763, 0x2001),
1853	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1854		.vendor_name = "M-Audio",
1855		.product_name = "Quattro",
1856		.ifnum = QUIRK_ANY_INTERFACE,
1857		.type = QUIRK_COMPOSITE,
1858		.data = & (const struct snd_usb_audio_quirk[]) {
1859			/*
1860			 * Interfaces 0-2 are "Windows-compatible", 16-bit only,
1861			 * and share endpoints with the other interfaces.
1862			 * Ignore them.  The other interfaces can do 24 bits,
1863			 * but captured samples are big-endian (see usbaudio.c).
1864			 */
1865			{
1866				.ifnum = 0,
1867				.type = QUIRK_IGNORE_INTERFACE
1868			},
1869			{
1870				.ifnum = 1,
1871				.type = QUIRK_IGNORE_INTERFACE
1872			},
1873			{
1874				.ifnum = 2,
1875				.type = QUIRK_IGNORE_INTERFACE
1876			},
1877			{
1878				.ifnum = 3,
1879				.type = QUIRK_IGNORE_INTERFACE
1880			},
1881			{
1882				.ifnum = 4,
1883				.type = QUIRK_AUDIO_STANDARD_INTERFACE
1884			},
1885			{
1886				.ifnum = 5,
1887				.type = QUIRK_AUDIO_STANDARD_INTERFACE
1888			},
1889			{
1890				.ifnum = 6,
1891				.type = QUIRK_IGNORE_INTERFACE
1892			},
1893			{
1894				.ifnum = 7,
1895				.type = QUIRK_AUDIO_STANDARD_INTERFACE
1896			},
1897			{
1898				.ifnum = 8,
1899				.type = QUIRK_AUDIO_STANDARD_INTERFACE
1900			},
1901			{
1902				.ifnum = 9,
1903				.type = QUIRK_MIDI_MIDIMAN,
1904				.data = & (const struct snd_usb_midi_endpoint_info) {
1905					.out_cables = 0x0001,
1906					.in_cables  = 0x0001
1907				}
1908			},
1909			{
1910				.ifnum = -1
1911			}
1912		}
1913	}
1914},
1915{
1916	USB_DEVICE_VENDOR_SPEC(0x0763, 0x2003),
1917	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1918		.vendor_name = "M-Audio",
1919		.product_name = "AudioPhile",
1920		.ifnum = 6,
1921		.type = QUIRK_MIDI_MIDIMAN,
1922		.data = & (const struct snd_usb_midi_endpoint_info) {
1923			.out_cables = 0x0001,
1924			.in_cables  = 0x0001
1925		}
1926	}
1927},
1928{
1929	USB_DEVICE_VENDOR_SPEC(0x0763, 0x2008),
1930	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1931		.vendor_name = "M-Audio",
1932		.product_name = "Ozone",
1933		.ifnum = 3,
1934		.type = QUIRK_MIDI_MIDIMAN,
1935		.data = & (const struct snd_usb_midi_endpoint_info) {
1936			.out_cables = 0x0001,
1937			.in_cables  = 0x0001
1938		}
1939	}
1940},
1941{
1942	USB_DEVICE_VENDOR_SPEC(0x0763, 0x200d),
1943	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1944		.vendor_name = "M-Audio",
1945		.product_name = "OmniStudio",
1946		.ifnum = QUIRK_ANY_INTERFACE,
1947		.type = QUIRK_COMPOSITE,
1948		.data = & (const struct snd_usb_audio_quirk[]) {
1949			{
1950				.ifnum = 0,
1951				.type = QUIRK_IGNORE_INTERFACE
1952			},
1953			{
1954				.ifnum = 1,
1955				.type = QUIRK_IGNORE_INTERFACE
1956			},
1957			{
1958				.ifnum = 2,
1959				.type = QUIRK_IGNORE_INTERFACE
1960			},
1961			{
1962				.ifnum = 3,
1963				.type = QUIRK_IGNORE_INTERFACE
1964			},
1965			{
1966				.ifnum = 4,
1967				.type = QUIRK_AUDIO_STANDARD_INTERFACE
1968			},
1969			{
1970				.ifnum = 5,
1971				.type = QUIRK_AUDIO_STANDARD_INTERFACE
1972			},
1973			{
1974				.ifnum = 6,
1975				.type = QUIRK_IGNORE_INTERFACE
1976			},
1977			{
1978				.ifnum = 7,
1979				.type = QUIRK_AUDIO_STANDARD_INTERFACE
1980			},
1981			{
1982				.ifnum = 8,
1983				.type = QUIRK_AUDIO_STANDARD_INTERFACE
1984			},
1985			{
1986				.ifnum = 9,
1987				.type = QUIRK_MIDI_MIDIMAN,
1988				.data = & (const struct snd_usb_midi_endpoint_info) {
1989					.out_cables = 0x0001,
1990					.in_cables  = 0x0001
1991				}
1992			},
1993			{
1994				.ifnum = -1
1995			}
1996		}
1997	}
1998},
1999{
2000	USB_DEVICE(0x0763, 0x2019),
2001	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2002		/* .vendor_name = "M-Audio", */
2003		/* .product_name = "Ozone Academic", */
2004		.ifnum = QUIRK_ANY_INTERFACE,
2005		.type = QUIRK_COMPOSITE,
2006		.data = & (const struct snd_usb_audio_quirk[]) {
2007			{
2008				.ifnum = 0,
2009				.type = QUIRK_AUDIO_STANDARD_INTERFACE
2010			},
2011			{
2012				.ifnum = 1,
2013				.type = QUIRK_AUDIO_STANDARD_INTERFACE
2014			},
2015			{
2016				.ifnum = 2,
2017				.type = QUIRK_AUDIO_STANDARD_INTERFACE
2018			},
2019			{
2020				.ifnum = 3,
2021				.type = QUIRK_MIDI_MIDIMAN,
2022				.data = & (const struct snd_usb_midi_endpoint_info) {
2023					.out_cables = 0x0001,
2024					.in_cables  = 0x0001
2025				}
2026			},
2027			{
2028				.ifnum = -1
2029			}
2030		}
2031	}
2032},
2033{
2034	/* M-Audio Micro */
2035	USB_DEVICE_VENDOR_SPEC(0x0763, 0x201a),
2036},
2037{
2038	USB_DEVICE_VENDOR_SPEC(0x0763, 0x2030),
2039	.driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
2040		/* .vendor_name = "M-Audio", */
2041		/* .product_name = "Fast Track C400", */
2042		.ifnum = QUIRK_ANY_INTERFACE,
2043		.type = QUIRK_COMPOSITE,
2044		.data = &(const struct snd_usb_audio_quirk[]) {
2045			{
2046				.ifnum = 1,
2047				.type = QUIRK_AUDIO_STANDARD_MIXER,
2048			},
2049			/* Playback */
2050			{
2051				.ifnum = 2,
2052				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
2053				.data = &(const struct audioformat) {
2054					.formats = SNDRV_PCM_FMTBIT_S24_3LE,
2055					.channels = 6,
2056					.iface = 2,
2057					.altsetting = 1,
2058					.altset_idx = 1,
2059					.attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
2060					.endpoint = 0x01,
2061					.ep_attr = 0x09,
2062					.rates = SNDRV_PCM_RATE_44100 |
2063						 SNDRV_PCM_RATE_48000 |
2064						 SNDRV_PCM_RATE_88200 |
2065						 SNDRV_PCM_RATE_96000,
2066					.rate_min = 44100,
2067					.rate_max = 96000,
2068					.nr_rates = 4,
2069					.rate_table = (unsigned int[]) {
2070							44100, 48000, 88200, 96000
2071					},
2072					.clock = 0x80,
2073				}
2074			},
2075			/* Capture */
2076			{
2077				.ifnum = 3,
2078				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
2079				.data = &(const struct audioformat) {
2080					.formats = SNDRV_PCM_FMTBIT_S24_3LE,
2081					.channels = 4,
2082					.iface = 3,
2083					.altsetting = 1,
2084					.altset_idx = 1,
2085					.attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
2086					.endpoint = 0x81,
2087					.ep_attr = 0x05,
2088					.rates = SNDRV_PCM_RATE_44100 |
2089						 SNDRV_PCM_RATE_48000 |
2090						 SNDRV_PCM_RATE_88200 |
2091						 SNDRV_PCM_RATE_96000,
2092					.rate_min = 44100,
2093					.rate_max = 96000,
2094					.nr_rates = 4,
2095					.rate_table = (unsigned int[]) {
2096						44100, 48000, 88200, 96000
2097					},
2098					.clock = 0x80,
2099				}
2100			},
2101			/* MIDI */
2102			{
2103				.ifnum = -1 /* Interface = 4 */
2104			}
2105		}
2106	}
2107},
2108{
2109	USB_DEVICE_VENDOR_SPEC(0x0763, 0x2031),
2110	.driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
2111		/* .vendor_name = "M-Audio", */
2112		/* .product_name = "Fast Track C600", */
2113		.ifnum = QUIRK_ANY_INTERFACE,
2114		.type = QUIRK_COMPOSITE,
2115		.data = &(const struct snd_usb_audio_quirk[]) {
2116			{
2117				.ifnum = 1,
2118				.type = QUIRK_AUDIO_STANDARD_MIXER,
2119			},
2120			/* Playback */
2121			{
2122				.ifnum = 2,
2123				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
2124				.data = &(const struct audioformat) {
2125					.formats = SNDRV_PCM_FMTBIT_S24_3LE,
2126					.channels = 8,
2127					.iface = 2,
2128					.altsetting = 1,
2129					.altset_idx = 1,
2130					.attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
2131					.endpoint = 0x01,
2132					.ep_attr = 0x09,
2133					.rates = SNDRV_PCM_RATE_44100 |
2134						 SNDRV_PCM_RATE_48000 |
2135						 SNDRV_PCM_RATE_88200 |
2136						 SNDRV_PCM_RATE_96000,
2137					.rate_min = 44100,
2138					.rate_max = 96000,
2139					.nr_rates = 4,
2140					.rate_table = (unsigned int[]) {
2141							44100, 48000, 88200, 96000
2142					},
2143					.clock = 0x80,
2144				}
2145			},
2146			/* Capture */
2147			{
2148				.ifnum = 3,
2149				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
2150				.data = &(const struct audioformat) {
2151					.formats = SNDRV_PCM_FMTBIT_S24_3LE,
2152					.channels = 6,
2153					.iface = 3,
2154					.altsetting = 1,
2155					.altset_idx = 1,
2156					.attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
2157					.endpoint = 0x81,
2158					.ep_attr = 0x05,
2159					.rates = SNDRV_PCM_RATE_44100 |
2160						 SNDRV_PCM_RATE_48000 |
2161						 SNDRV_PCM_RATE_88200 |
2162						 SNDRV_PCM_RATE_96000,
2163					.rate_min = 44100,
2164					.rate_max = 96000,
2165					.nr_rates = 4,
2166					.rate_table = (unsigned int[]) {
2167						44100, 48000, 88200, 96000
2168					},
2169					.clock = 0x80,
2170				}
2171			},
2172			/* MIDI */
2173			{
2174				.ifnum = -1 /* Interface = 4 */
2175			}
2176		}
2177	}
2178},
2179{
2180	USB_DEVICE_VENDOR_SPEC(0x0763, 0x2080),
2181	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2182		/* .vendor_name = "M-Audio", */
2183		/* .product_name = "Fast Track Ultra", */
2184		.ifnum = QUIRK_ANY_INTERFACE,
2185		.type = QUIRK_COMPOSITE,
2186		.data = & (const struct snd_usb_audio_quirk[]) {
2187			{
2188				.ifnum = 0,
2189				.type = QUIRK_AUDIO_STANDARD_MIXER,
2190			},
2191			{
2192				.ifnum = 1,
2193				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
2194				.data = & (const struct audioformat) {
2195					.formats = SNDRV_PCM_FMTBIT_S24_3LE,
2196					.channels = 8,
2197					.iface = 1,
2198					.altsetting = 1,
2199					.altset_idx = 1,
2200					.attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
2201					.endpoint = 0x01,
2202					.ep_attr = 0x09,
2203					.rates = SNDRV_PCM_RATE_44100 |
2204						 SNDRV_PCM_RATE_48000 |
2205						 SNDRV_PCM_RATE_88200 |
2206						 SNDRV_PCM_RATE_96000,
2207					.rate_min = 44100,
2208					.rate_max = 96000,
2209					.nr_rates = 4,
2210					.rate_table = (unsigned int[]) {
2211						44100, 48000, 88200, 96000
2212					}
2213				}
2214			},
2215			{
2216				.ifnum = 2,
2217				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
2218				.data = & (const struct audioformat) {
2219					.formats = SNDRV_PCM_FMTBIT_S24_3LE,
2220					.channels = 8,
2221					.iface = 2,
2222					.altsetting = 1,
2223					.altset_idx = 1,
2224					.attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
2225					.endpoint = 0x81,
2226					.ep_attr = 0x05,
2227					.rates = SNDRV_PCM_RATE_44100 |
2228						 SNDRV_PCM_RATE_48000 |
2229						 SNDRV_PCM_RATE_88200 |
2230						 SNDRV_PCM_RATE_96000,
2231					.rate_min = 44100,
2232					.rate_max = 96000,
2233					.nr_rates = 4,
2234					.rate_table = (unsigned int[]) {
2235						44100, 48000, 88200, 96000
2236					}
2237				}
2238			},
2239			/* interface 3 (MIDI) is standard compliant */
2240			{
2241				.ifnum = -1
2242			}
2243		}
2244	}
2245},
2246{
2247	USB_DEVICE_VENDOR_SPEC(0x0763, 0x2081),
2248	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2249		/* .vendor_name = "M-Audio", */
2250		/* .product_name = "Fast Track Ultra 8R", */
2251		.ifnum = QUIRK_ANY_INTERFACE,
2252		.type = QUIRK_COMPOSITE,
2253		.data = & (const struct snd_usb_audio_quirk[]) {
2254			{
2255				.ifnum = 0,
2256				.type = QUIRK_AUDIO_STANDARD_MIXER,
2257			},
2258			{
2259				.ifnum = 1,
2260				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
2261				.data = & (const struct audioformat) {
2262					.formats = SNDRV_PCM_FMTBIT_S24_3LE,
2263					.channels = 8,
2264					.iface = 1,
2265					.altsetting = 1,
2266					.altset_idx = 1,
2267					.attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
2268					.endpoint = 0x01,
2269					.ep_attr = 0x09,
2270					.rates = SNDRV_PCM_RATE_44100 |
2271						 SNDRV_PCM_RATE_48000 |
2272						 SNDRV_PCM_RATE_88200 |
2273						 SNDRV_PCM_RATE_96000,
2274					.rate_min = 44100,
2275					.rate_max = 96000,
2276					.nr_rates = 4,
2277					.rate_table = (unsigned int[]) {
2278							44100, 48000, 88200, 96000
2279					}
2280				}
2281			},
2282			{
2283				.ifnum = 2,
2284				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
2285				.data = & (const struct audioformat) {
2286					.formats = SNDRV_PCM_FMTBIT_S24_3LE,
2287					.channels = 8,
2288					.iface = 2,
2289					.altsetting = 1,
2290					.altset_idx = 1,
2291					.attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
2292					.endpoint = 0x81,
2293					.ep_attr = 0x05,
2294					.rates = SNDRV_PCM_RATE_44100 |
2295						 SNDRV_PCM_RATE_48000 |
2296						 SNDRV_PCM_RATE_88200 |
2297						 SNDRV_PCM_RATE_96000,
2298					.rate_min = 44100,
2299					.rate_max = 96000,
2300					.nr_rates = 4,
2301					.rate_table = (unsigned int[]) {
2302						44100, 48000, 88200, 96000
2303					}
2304				}
2305			},
2306			/* interface 3 (MIDI) is standard compliant */
2307			{
2308				.ifnum = -1
2309			}
2310		}
2311	}
2312},
2313
2314/* Casio devices */
2315{
2316	USB_DEVICE(0x07cf, 0x6801),
2317	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2318		.vendor_name = "Casio",
2319		.product_name = "PL-40R",
2320		.ifnum = 0,
2321		.type = QUIRK_MIDI_YAMAHA
2322	}
2323},
2324{
2325	/* this ID is used by several devices without a product ID */
2326	USB_DEVICE(0x07cf, 0x6802),
2327	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2328		.vendor_name = "Casio",
2329		.product_name = "Keyboard",
2330		.ifnum = 0,
2331		.type = QUIRK_MIDI_YAMAHA
2332	}
2333},
2334
2335/* Mark of the Unicorn devices */
2336{
2337	/* thanks to Robert A. Lerche <ral 'at' msbit.com> */
2338	.match_flags = USB_DEVICE_ID_MATCH_VENDOR |
2339		       USB_DEVICE_ID_MATCH_PRODUCT |
2340		       USB_DEVICE_ID_MATCH_DEV_SUBCLASS,
2341	.idVendor = 0x07fd,
2342	.idProduct = 0x0001,
2343	.bDeviceSubClass = 2,
2344	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2345		.vendor_name = "MOTU",
2346		.product_name = "Fastlane",
2347		.ifnum = QUIRK_ANY_INTERFACE,
2348		.type = QUIRK_COMPOSITE,
2349		.data = & (const struct snd_usb_audio_quirk[]) {
2350			{
2351				.ifnum = 0,
2352				.type = QUIRK_MIDI_RAW_BYTES
2353			},
2354			{
2355				.ifnum = 1,
2356				.type = QUIRK_IGNORE_INTERFACE
2357			},
2358			{
2359				.ifnum = -1
2360			}
2361		}
2362	}
2363},
2364
2365/* Emagic devices */
2366{
2367	USB_DEVICE(0x086a, 0x0001),
2368	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2369		.vendor_name = "Emagic",
2370		.product_name = "Unitor8",
2371		.ifnum = 2,
2372		.type = QUIRK_MIDI_EMAGIC,
2373		.data = & (const struct snd_usb_midi_endpoint_info) {
2374			.out_cables = 0x80ff,
2375			.in_cables  = 0x80ff
2376		}
2377	}
2378},
2379{
2380	USB_DEVICE(0x086a, 0x0002),
2381	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2382		.vendor_name = "Emagic",
2383		/* .product_name = "AMT8", */
2384		.ifnum = 2,
2385		.type = QUIRK_MIDI_EMAGIC,
2386		.data = & (const struct snd_usb_midi_endpoint_info) {
2387			.out_cables = 0x80ff,
2388			.in_cables  = 0x80ff
2389		}
2390	}
2391},
2392{
2393	USB_DEVICE(0x086a, 0x0003),
2394	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2395		.vendor_name = "Emagic",
2396		/* .product_name = "MT4", */
2397		.ifnum = 2,
2398		.type = QUIRK_MIDI_EMAGIC,
2399		.data = & (const struct snd_usb_midi_endpoint_info) {
2400			.out_cables = 0x800f,
2401			.in_cables  = 0x8003
2402		}
2403	}
2404},
2405
2406/* KORG devices */
2407{
2408	USB_DEVICE_VENDOR_SPEC(0x0944, 0x0200),
2409	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2410		.vendor_name = "KORG, Inc.",
2411		/* .product_name = "PANDORA PX5D", */
2412		.ifnum = 3,
2413		.type = QUIRK_MIDI_STANDARD_INTERFACE,
2414	}
2415},
2416
2417{
2418	USB_DEVICE_VENDOR_SPEC(0x0944, 0x0201),
2419	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2420		.vendor_name = "KORG, Inc.",
2421		/* .product_name = "ToneLab ST", */
2422		.ifnum = 3,
2423		.type = QUIRK_MIDI_STANDARD_INTERFACE,
2424	}
2425},
2426
2427{
2428	USB_DEVICE_VENDOR_SPEC(0x0944, 0x0204),
2429	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2430		.vendor_name = "KORG, Inc.",
2431		/* .product_name = "ToneLab EX", */
2432		.ifnum = 3,
2433		.type = QUIRK_MIDI_STANDARD_INTERFACE,
2434	}
2435},
2436
2437/* AKAI devices */
2438{
2439	USB_DEVICE(0x09e8, 0x0062),
2440	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2441		.vendor_name = "AKAI",
2442		.product_name = "MPD16",
2443		.ifnum = 0,
2444		.type = QUIRK_MIDI_AKAI,
2445	}
2446},
2447
2448{
2449	/* Akai MPC Element */
2450	USB_DEVICE(0x09e8, 0x0021),
2451	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2452		.ifnum = QUIRK_ANY_INTERFACE,
2453		.type = QUIRK_COMPOSITE,
2454		.data = & (const struct snd_usb_audio_quirk[]) {
2455			{
2456				.ifnum = 0,
2457				.type = QUIRK_IGNORE_INTERFACE
2458			},
2459			{
2460				.ifnum = 1,
2461				.type = QUIRK_MIDI_STANDARD_INTERFACE
2462			},
2463			{
2464				.ifnum = -1
2465			}
2466		}
2467	}
2468},
2469
2470/* Steinberg devices */
2471{
2472	/* Steinberg MI2 */
2473	USB_DEVICE_VENDOR_SPEC(0x0a4e, 0x2040),
2474	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2475		.ifnum = QUIRK_ANY_INTERFACE,
2476		.type = QUIRK_COMPOSITE,
2477		.data = & (const struct snd_usb_audio_quirk[]) {
2478			{
2479				.ifnum = 0,
2480				.type = QUIRK_AUDIO_STANDARD_INTERFACE
2481			},
2482			{
2483				.ifnum = 1,
2484				.type = QUIRK_AUDIO_STANDARD_INTERFACE
2485			},
2486			{
2487				.ifnum = 2,
2488				.type = QUIRK_AUDIO_STANDARD_INTERFACE
2489			},
2490			{
2491				.ifnum = 3,
2492				.type = QUIRK_MIDI_FIXED_ENDPOINT,
2493				.data = &(const struct snd_usb_midi_endpoint_info) {
2494					.out_cables = 0x0001,
2495					.in_cables  = 0x0001
2496				}
2497			},
2498			{
2499				.ifnum = -1
2500			}
2501		}
2502	}
2503},
2504{
2505	/* Steinberg MI4 */
2506	USB_DEVICE_VENDOR_SPEC(0x0a4e, 0x4040),
2507	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2508		.ifnum = QUIRK_ANY_INTERFACE,
2509		.type = QUIRK_COMPOSITE,
2510		.data = & (const struct snd_usb_audio_quirk[]) {
2511			{
2512				.ifnum = 0,
2513				.type = QUIRK_AUDIO_STANDARD_INTERFACE
2514			},
2515			{
2516				.ifnum = 1,
2517				.type = QUIRK_AUDIO_STANDARD_INTERFACE
2518			},
2519			{
2520				.ifnum = 2,
2521				.type = QUIRK_AUDIO_STANDARD_INTERFACE
2522			},
2523			{
2524				.ifnum = 3,
2525				.type = QUIRK_MIDI_FIXED_ENDPOINT,
2526				.data = &(const struct snd_usb_midi_endpoint_info) {
2527					.out_cables = 0x0001,
2528					.in_cables  = 0x0001
2529				}
2530			},
2531			{
2532				.ifnum = -1
2533			}
2534		}
2535	}
2536},
2537
2538/* TerraTec devices */
2539{
2540	USB_DEVICE_VENDOR_SPEC(0x0ccd, 0x0012),
2541	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2542		.vendor_name = "TerraTec",
2543		.product_name = "PHASE 26",
2544		.ifnum = 3,
2545		.type = QUIRK_MIDI_STANDARD_INTERFACE
2546	}
2547},
2548{
2549	USB_DEVICE_VENDOR_SPEC(0x0ccd, 0x0013),
2550	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2551		.vendor_name = "TerraTec",
2552		.product_name = "PHASE 26",
2553		.ifnum = 3,
2554		.type = QUIRK_MIDI_STANDARD_INTERFACE
2555	}
2556},
2557{
2558	USB_DEVICE_VENDOR_SPEC(0x0ccd, 0x0014),
2559	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2560		.vendor_name = "TerraTec",
2561		.product_name = "PHASE 26",
2562		.ifnum = 3,
2563		.type = QUIRK_MIDI_STANDARD_INTERFACE
2564	}
2565},
2566{
2567	USB_DEVICE(0x0ccd, 0x0035),
2568	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2569		.vendor_name = "Miditech",
2570		.product_name = "Play'n Roll",
2571		.ifnum = 0,
2572		.type = QUIRK_MIDI_CME
2573	}
2574},
2575
2576/* Novation EMS devices */
2577{
2578	USB_DEVICE_VENDOR_SPEC(0x1235, 0x0001),
2579	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2580		.vendor_name = "Novation",
2581		.product_name = "ReMOTE Audio/XStation",
2582		.ifnum = 4,
2583		.type = QUIRK_MIDI_NOVATION
2584	}
2585},
2586{
2587	USB_DEVICE_VENDOR_SPEC(0x1235, 0x0002),
2588	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2589		.vendor_name = "Novation",
2590		.product_name = "Speedio",
2591		.ifnum = 3,
2592		.type = QUIRK_MIDI_NOVATION
2593	}
2594},
2595{
2596	USB_DEVICE(0x1235, 0x000a),
2597	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2598		/* .vendor_name = "Novation", */
2599		/* .product_name = "Nocturn", */
2600		.ifnum = 0,
2601		.type = QUIRK_MIDI_RAW_BYTES
2602	}
2603},
2604{
2605	USB_DEVICE(0x1235, 0x000e),
2606	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2607		/* .vendor_name = "Novation", */
2608		/* .product_name = "Launchpad", */
2609		.ifnum = 0,
2610		.type = QUIRK_MIDI_RAW_BYTES
2611	}
2612},
2613{
2614	USB_DEVICE(0x1235, 0x0010),
2615	.driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
2616		.vendor_name = "Focusrite",
2617		.product_name = "Saffire 6 USB",
2618		.ifnum = QUIRK_ANY_INTERFACE,
2619		.type = QUIRK_COMPOSITE,
2620		.data = (const struct snd_usb_audio_quirk[]) {
2621			{
2622				.ifnum = 0,
2623				.type = QUIRK_AUDIO_STANDARD_MIXER,
2624			},
2625			{
2626				.ifnum = 0,
2627				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
2628				.data = &(const struct audioformat) {
2629					.formats = SNDRV_PCM_FMTBIT_S24_3LE,
2630					.channels = 4,
2631					.iface = 0,
2632					.altsetting = 1,
2633					.altset_idx = 1,
2634					.attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
2635					.endpoint = 0x01,
2636					.ep_attr = USB_ENDPOINT_XFER_ISOC,
2637					.datainterval = 1,
2638					.maxpacksize = 0x024c,
2639					.rates = SNDRV_PCM_RATE_44100 |
2640						 SNDRV_PCM_RATE_48000,
2641					.rate_min = 44100,
2642					.rate_max = 48000,
2643					.nr_rates = 2,
2644					.rate_table = (unsigned int[]) {
2645						44100, 48000
2646					}
2647				}
2648			},
2649			{
2650				.ifnum = 0,
2651				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
2652				.data = &(const struct audioformat) {
2653					.formats = SNDRV_PCM_FMTBIT_S24_3LE,
2654					.channels = 2,
2655					.iface = 0,
2656					.altsetting = 1,
2657					.altset_idx = 1,
2658					.attributes = 0,
2659					.endpoint = 0x82,
2660					.ep_attr = USB_ENDPOINT_XFER_ISOC,
2661					.datainterval = 1,
2662					.maxpacksize = 0x0126,
2663					.rates = SNDRV_PCM_RATE_44100 |
2664						 SNDRV_PCM_RATE_48000,
2665					.rate_min = 44100,
2666					.rate_max = 48000,
2667					.nr_rates = 2,
2668					.rate_table = (unsigned int[]) {
2669						44100, 48000
2670					}
2671				}
2672			},
2673			{
2674				.ifnum = 1,
2675				.type = QUIRK_MIDI_RAW_BYTES
2676			},
2677			{
2678				.ifnum = -1
2679			}
2680		}
2681	}
2682},
2683{
2684	USB_DEVICE(0x1235, 0x0018),
2685	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2686		.vendor_name = "Novation",
2687		.product_name = "Twitch",
2688		.ifnum = QUIRK_ANY_INTERFACE,
2689		.type = QUIRK_COMPOSITE,
2690		.data = (const struct snd_usb_audio_quirk[]) {
2691			{
2692				.ifnum = 0,
2693				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
2694				.data = & (const struct audioformat) {
2695					.formats = SNDRV_PCM_FMTBIT_S24_3LE,
2696					.channels = 4,
2697					.iface = 0,
2698					.altsetting = 1,
2699					.altset_idx = 1,
2700					.attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
2701					.endpoint = 0x01,
2702					.ep_attr = USB_ENDPOINT_XFER_ISOC,
2703					.rates = SNDRV_PCM_RATE_44100 |
2704						 SNDRV_PCM_RATE_48000,
2705					.rate_min = 44100,
2706					.rate_max = 48000,
2707					.nr_rates = 2,
2708					.rate_table = (unsigned int[]) {
2709						44100, 48000
2710					}
2711				}
2712			},
2713			{
2714				.ifnum = 1,
2715				.type = QUIRK_MIDI_RAW_BYTES
2716			},
2717			{
2718				.ifnum = -1
2719			}
2720		}
2721	}
2722},
2723{
2724	USB_DEVICE_VENDOR_SPEC(0x1235, 0x4661),
2725	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2726		.vendor_name = "Novation",
2727		.product_name = "ReMOTE25",
2728		.ifnum = 0,
2729		.type = QUIRK_MIDI_NOVATION
2730	}
2731},
2732
2733/* Access Music devices */
2734{
2735	/* VirusTI Desktop */
2736	USB_DEVICE_VENDOR_SPEC(0x133e, 0x0815),
2737	.driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
2738		.ifnum = QUIRK_ANY_INTERFACE,
2739		.type = QUIRK_COMPOSITE,
2740		.data = &(const struct snd_usb_audio_quirk[]) {
2741			{
2742				.ifnum = 3,
2743				.type = QUIRK_MIDI_FIXED_ENDPOINT,
2744				.data = &(const struct snd_usb_midi_endpoint_info) {
2745					.out_cables = 0x0003,
2746					.in_cables  = 0x0003
2747				}
2748			},
2749			{
2750				.ifnum = 4,
2751				.type = QUIRK_IGNORE_INTERFACE
2752			},
2753			{
2754				.ifnum = -1
2755			}
2756		}
2757	}
2758},
2759
2760/* Lenovo ThinkStation P620 Rear Line-in, Line-out and Microphone */
2761{
2762	USB_DEVICE(0x17aa, 0x1046),
2763	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2764		.ifnum = QUIRK_ANY_INTERFACE,
2765		.type = QUIRK_SETUP_DISABLE_AUTOSUSPEND
2766	}
2767},
2768/* Lenovo ThinkStation P620 Internal Speaker + Front Headset */
2769{
2770	USB_DEVICE(0x17aa, 0x104d),
2771	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2772		.ifnum = QUIRK_ANY_INTERFACE,
2773		.type = QUIRK_SETUP_DISABLE_AUTOSUSPEND
2774	}
2775},
2776
2777/* Native Instruments MK2 series */
2778{
2779	/* Komplete Audio 6 */
2780	.match_flags = USB_DEVICE_ID_MATCH_DEVICE,
2781	.idVendor = 0x17cc,
2782	.idProduct = 0x1000,
2783},
2784{
2785	/* Traktor Audio 6 */
2786	.match_flags = USB_DEVICE_ID_MATCH_DEVICE,
2787	.idVendor = 0x17cc,
2788	.idProduct = 0x1010,
2789},
2790{
2791	/* Traktor Audio 10 */
2792	.match_flags = USB_DEVICE_ID_MATCH_DEVICE,
2793	.idVendor = 0x17cc,
2794	.idProduct = 0x1020,
2795},
2796
2797/* QinHeng devices */
2798{
2799	USB_DEVICE(0x1a86, 0x752d),
2800	.driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
2801		.vendor_name = "QinHeng",
2802		.product_name = "CH345",
2803		.ifnum = 1,
2804		.type = QUIRK_MIDI_CH345
2805	}
2806},
2807
2808/* KeithMcMillen Stringport */
2809{ USB_DEVICE(0x1f38, 0x0001) }, /* FIXME: should be more restrictive matching */
2810
2811/* Miditech devices */
2812{
2813	USB_DEVICE(0x4752, 0x0011),
2814	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2815		.vendor_name = "Miditech",
2816		.product_name = "Midistart-2",
2817		.ifnum = 0,
2818		.type = QUIRK_MIDI_CME
2819	}
2820},
2821
2822/* Central Music devices */
2823{
2824	/* this ID used by both Miditech MidiStudio-2 and CME UF-x */
2825	USB_DEVICE(0x7104, 0x2202),
2826	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2827		.ifnum = 0,
2828		.type = QUIRK_MIDI_CME
2829	}
2830},
2831
2832/*
2833 * Auvitek au0828 devices with audio interface.
2834 * This should be kept in sync with drivers/media/usb/au0828/au0828-cards.c
2835 * Please notice that some drivers are DVB only, and don't need to be
2836 * here. That's the case, for example, of DVICO_FUSIONHDTV7.
2837 */
2838
2839#define AU0828_DEVICE(vid, pid, vname, pname) { \
2840	USB_AUDIO_DEVICE(vid, pid), \
2841	.driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) { \
2842		.vendor_name = vname, \
2843		.product_name = pname, \
2844		.ifnum = QUIRK_ANY_INTERFACE, \
2845		.type = QUIRK_AUDIO_ALIGN_TRANSFER, \
2846		.shares_media_device = 1, \
2847	} \
2848}
2849
2850AU0828_DEVICE(0x2040, 0x7200, "Hauppauge", "HVR-950Q"),
2851AU0828_DEVICE(0x2040, 0x7240, "Hauppauge", "HVR-850"),
2852AU0828_DEVICE(0x2040, 0x7210, "Hauppauge", "HVR-950Q"),
2853AU0828_DEVICE(0x2040, 0x7217, "Hauppauge", "HVR-950Q"),
2854AU0828_DEVICE(0x2040, 0x721b, "Hauppauge", "HVR-950Q"),
2855AU0828_DEVICE(0x2040, 0x721e, "Hauppauge", "HVR-950Q"),
2856AU0828_DEVICE(0x2040, 0x721f, "Hauppauge", "HVR-950Q"),
2857AU0828_DEVICE(0x2040, 0x7280, "Hauppauge", "HVR-950Q"),
2858AU0828_DEVICE(0x0fd9, 0x0008, "Hauppauge", "HVR-950Q"),
2859AU0828_DEVICE(0x2040, 0x7201, "Hauppauge", "HVR-950Q-MXL"),
2860AU0828_DEVICE(0x2040, 0x7211, "Hauppauge", "HVR-950Q-MXL"),
2861AU0828_DEVICE(0x2040, 0x7281, "Hauppauge", "HVR-950Q-MXL"),
2862AU0828_DEVICE(0x05e1, 0x0480, "Hauppauge", "Woodbury"),
2863AU0828_DEVICE(0x2040, 0x8200, "Hauppauge", "Woodbury"),
2864AU0828_DEVICE(0x2040, 0x7260, "Hauppauge", "HVR-950Q"),
2865AU0828_DEVICE(0x2040, 0x7213, "Hauppauge", "HVR-950Q"),
2866AU0828_DEVICE(0x2040, 0x7270, "Hauppauge", "HVR-950Q"),
2867
2868/* Syntek STK1160 */
2869{
2870	USB_AUDIO_DEVICE(0x05e1, 0x0408),
2871	.driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
2872		.vendor_name = "Syntek",
2873		.product_name = "STK1160",
2874		.ifnum = QUIRK_ANY_INTERFACE,
2875		.type = QUIRK_AUDIO_ALIGN_TRANSFER
2876	}
2877},
2878
2879/* Digidesign Mbox */
2880{
2881	/* Thanks to Clemens Ladisch <clemens@ladisch.de> */
2882	USB_DEVICE(0x0dba, 0x1000),
2883	.driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
2884		.vendor_name = "Digidesign",
2885		.product_name = "MBox",
2886		.ifnum = QUIRK_ANY_INTERFACE,
2887		.type = QUIRK_COMPOSITE,
2888		.data = (const struct snd_usb_audio_quirk[]){
2889			{
2890				.ifnum = 0,
2891				.type = QUIRK_AUDIO_STANDARD_MIXER,
2892			},
2893			{
2894				.ifnum = 1,
2895				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
2896				.data = &(const struct audioformat) {
2897					.formats = SNDRV_PCM_FMTBIT_S24_3BE,
2898					.channels = 2,
2899					.iface = 1,
2900					.altsetting = 1,
2901					.altset_idx = 1,
2902					.attributes = 0x4,
2903					.endpoint = 0x02,
2904					.ep_attr = USB_ENDPOINT_XFER_ISOC |
2905						USB_ENDPOINT_SYNC_SYNC,
2906					.maxpacksize = 0x130,
2907					.rates = SNDRV_PCM_RATE_48000,
2908					.rate_min = 48000,
2909					.rate_max = 48000,
2910					.nr_rates = 1,
2911					.rate_table = (unsigned int[]) {
2912						48000
2913					}
2914				}
2915			},
2916			{
2917				.ifnum = 1,
2918				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
2919				.data = &(const struct audioformat) {
2920					.formats = SNDRV_PCM_FMTBIT_S24_3BE,
2921					.channels = 2,
2922					.iface = 1,
2923					.altsetting = 1,
2924					.altset_idx = 1,
2925					.attributes = 0x4,
2926					.endpoint = 0x81,
2927					.ep_attr = USB_ENDPOINT_XFER_ISOC |
2928						USB_ENDPOINT_SYNC_ASYNC,
2929					.maxpacksize = 0x130,
2930					.rates = SNDRV_PCM_RATE_48000,
2931					.rate_min = 48000,
2932					.rate_max = 48000,
2933					.nr_rates = 1,
2934					.rate_table = (unsigned int[]) {
2935						48000
2936					}
2937				}
2938			},
2939			{
2940				.ifnum = -1
2941			}
2942		}
2943	}
2944},
2945
2946/* DIGIDESIGN MBOX 2 */
2947{
2948	USB_DEVICE(0x0dba, 0x3000),
2949	.driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
2950		.vendor_name = "Digidesign",
2951		.product_name = "Mbox 2",
2952		.ifnum = QUIRK_ANY_INTERFACE,
2953		.type = QUIRK_COMPOSITE,
2954		.data = (const struct snd_usb_audio_quirk[]) {
2955			{
2956				.ifnum = 0,
2957				.type = QUIRK_IGNORE_INTERFACE
2958			},
2959			{
2960				.ifnum = 1,
2961				.type = QUIRK_IGNORE_INTERFACE
2962			},
2963			{
2964				.ifnum = 2,
2965				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
2966				.data = &(const struct audioformat) {
2967					.formats = SNDRV_PCM_FMTBIT_S24_3BE,
2968					.channels = 2,
2969					.iface = 2,
2970					.altsetting = 2,
2971					.altset_idx = 1,
2972					.attributes = 0x00,
2973					.endpoint = 0x03,
2974					.ep_attr = USB_ENDPOINT_SYNC_ASYNC,
2975					.rates = SNDRV_PCM_RATE_48000,
2976					.rate_min = 48000,
2977					.rate_max = 48000,
2978					.nr_rates = 1,
2979					.rate_table = (unsigned int[]) {
2980						48000
2981					}
2982				}
2983			},
2984			{
2985				.ifnum = 3,
2986				.type = QUIRK_IGNORE_INTERFACE
2987			},
2988			{
2989				.ifnum = 4,
2990				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
2991				.data = &(const struct audioformat) {
2992				.formats = SNDRV_PCM_FMTBIT_S24_3BE,
2993					.channels = 2,
2994					.iface = 4,
2995					.altsetting = 2,
2996					.altset_idx = 1,
2997					.attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
2998					.endpoint = 0x85,
2999					.ep_attr = USB_ENDPOINT_SYNC_SYNC,
3000					.rates = SNDRV_PCM_RATE_48000,
3001					.rate_min = 48000,
3002					.rate_max = 48000,
3003					.nr_rates = 1,
3004					.rate_table = (unsigned int[]) {
3005						48000
3006					}
3007				}
3008			},
3009			{
3010				.ifnum = 5,
3011				.type = QUIRK_IGNORE_INTERFACE
3012			},
3013			{
3014				.ifnum = 6,
3015				.type = QUIRK_MIDI_MIDIMAN,
3016				.data = &(const struct snd_usb_midi_endpoint_info) {
3017					.out_ep =  0x02,
3018					.out_cables = 0x0001,
3019					.in_ep = 0x81,
3020					.in_interval = 0x01,
3021					.in_cables = 0x0001
3022				}
3023			},
3024			{
3025				.ifnum = -1
3026			}
3027		}
3028	}
3029},
3030{
3031	/* Tascam US122 MKII - playback-only support */
3032	USB_DEVICE_VENDOR_SPEC(0x0644, 0x8021),
3033	.driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
3034		.vendor_name = "TASCAM",
3035		.product_name = "US122 MKII",
3036		.ifnum = QUIRK_ANY_INTERFACE,
3037		.type = QUIRK_COMPOSITE,
3038		.data = (const struct snd_usb_audio_quirk[]) {
3039			{
3040				.ifnum = 0,
3041				.type = QUIRK_IGNORE_INTERFACE
3042			},
3043			{
3044				.ifnum = 1,
3045				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
3046				.data = &(const struct audioformat) {
3047					.formats = SNDRV_PCM_FMTBIT_S24_3LE,
3048					.channels = 2,
3049					.iface = 1,
3050					.altsetting = 1,
3051					.altset_idx = 1,
3052					.attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
3053					.endpoint = 0x02,
3054					.ep_attr = USB_ENDPOINT_XFER_ISOC,
3055					.rates = SNDRV_PCM_RATE_44100 |
3056						 SNDRV_PCM_RATE_48000 |
3057						 SNDRV_PCM_RATE_88200 |
3058						 SNDRV_PCM_RATE_96000,
3059					.rate_min = 44100,
3060					.rate_max = 96000,
3061					.nr_rates = 4,
3062					.rate_table = (unsigned int[]) {
3063						44100, 48000, 88200, 96000
3064					}
3065				}
3066			},
3067			{
3068				.ifnum = -1
3069			}
3070		}
3071	}
3072},
3073
3074/* Microsoft XboxLive Headset/Xbox Communicator */
3075{
3076	USB_DEVICE(0x045e, 0x0283),
3077	.bInterfaceClass = USB_CLASS_PER_INTERFACE,
3078	.driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
3079		.vendor_name = "Microsoft",
3080		.product_name = "XboxLive Headset/Xbox Communicator",
3081		.ifnum = QUIRK_ANY_INTERFACE,
3082		.type = QUIRK_COMPOSITE,
3083		.data = &(const struct snd_usb_audio_quirk[]) {
3084			{
3085				/* playback */
3086				.ifnum = 0,
3087				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
3088				.data = &(const struct audioformat) {
3089					.formats = SNDRV_PCM_FMTBIT_S16_LE,
3090					.channels = 1,
3091					.iface = 0,
3092					.altsetting = 0,
3093					.altset_idx = 0,
3094					.attributes = 0,
3095					.endpoint = 0x04,
3096					.ep_attr = 0x05,
3097					.rates = SNDRV_PCM_RATE_CONTINUOUS,
3098					.rate_min = 22050,
3099					.rate_max = 22050
3100				}
3101			},
3102			{
3103				/* capture */
3104				.ifnum = 1,
3105				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
3106				.data = &(const struct audioformat) {
3107					.formats = SNDRV_PCM_FMTBIT_S16_LE,
3108					.channels = 1,
3109					.iface = 1,
3110					.altsetting = 0,
3111					.altset_idx = 0,
3112					.attributes = 0,
3113					.endpoint = 0x85,
3114					.ep_attr = 0x05,
3115					.rates = SNDRV_PCM_RATE_CONTINUOUS,
3116					.rate_min = 16000,
3117					.rate_max = 16000
3118				}
3119			},
3120			{
3121				.ifnum = -1
3122			}
3123		}
3124	}
3125},
3126
3127/* Reloop Play */
3128{
3129	USB_DEVICE(0x200c, 0x100b),
3130	.bInterfaceClass = USB_CLASS_PER_INTERFACE,
3131	.driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
3132		.ifnum = QUIRK_ANY_INTERFACE,
3133		.type = QUIRK_COMPOSITE,
3134		.data = &(const struct snd_usb_audio_quirk[]) {
3135			{
3136				.ifnum = 0,
3137				.type = QUIRK_AUDIO_STANDARD_MIXER,
3138			},
3139			{
3140				.ifnum = 1,
3141				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
3142				.data = &(const struct audioformat) {
3143					.formats = SNDRV_PCM_FMTBIT_S24_3LE,
3144					.channels = 4,
3145					.iface = 1,
3146					.altsetting = 1,
3147					.altset_idx = 1,
3148					.attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
3149					.endpoint = 0x01,
3150					.ep_attr = USB_ENDPOINT_SYNC_ADAPTIVE,
3151					.rates = SNDRV_PCM_RATE_44100 |
3152						 SNDRV_PCM_RATE_48000,
3153					.rate_min = 44100,
3154					.rate_max = 48000,
3155					.nr_rates = 2,
3156					.rate_table = (unsigned int[]) {
3157						44100, 48000
3158					}
3159				}
3160			},
3161			{
3162				.ifnum = -1
3163			}
3164		}
3165	}
3166},
3167
3168{
3169	/*
3170	 * ZOOM R16/24 in audio interface mode.
3171	 * Playback requires an extra four byte LE length indicator
3172	 * at the start of each isochronous packet. This quirk is
3173	 * enabled in create_standard_audio_quirk().
3174	 */
3175	USB_DEVICE(0x1686, 0x00dd),
3176	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
3177		.ifnum = QUIRK_ANY_INTERFACE,
3178		.type = QUIRK_COMPOSITE,
3179		.data = (const struct snd_usb_audio_quirk[]) {
3180			{
3181				/* Playback  */
3182				.ifnum = 1,
3183				.type = QUIRK_AUDIO_STANDARD_INTERFACE,
3184			},
3185			{
3186				/* Capture */
3187				.ifnum = 2,
3188				.type = QUIRK_AUDIO_STANDARD_INTERFACE,
3189			},
3190			{
3191				/* Midi */
3192				.ifnum = 3,
3193				.type = QUIRK_MIDI_STANDARD_INTERFACE
3194			},
3195			{
3196				.ifnum = -1
3197			},
3198		}
3199	}
3200},
3201
3202{
3203	/*
3204	 * Some USB MIDI devices don't have an audio control interface,
3205	 * so we have to grab MIDI streaming interfaces here.
3206	 */
3207	.match_flags = USB_DEVICE_ID_MATCH_INT_CLASS |
3208		       USB_DEVICE_ID_MATCH_INT_SUBCLASS,
3209	.bInterfaceClass = USB_CLASS_AUDIO,
3210	.bInterfaceSubClass = USB_SUBCLASS_MIDISTREAMING,
3211	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
3212		.ifnum = QUIRK_ANY_INTERFACE,
3213		.type = QUIRK_MIDI_STANDARD_INTERFACE
3214	}
3215},
3216
3217/* Rane SL-1 */
3218{
3219	USB_DEVICE(0x13e5, 0x0001),
3220	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
3221		.ifnum = QUIRK_ANY_INTERFACE,
3222		.type = QUIRK_AUDIO_STANDARD_INTERFACE
3223        }
3224},
3225
3226/* disabled due to regression for other devices;
3227 * see https://bugzilla.kernel.org/show_bug.cgi?id=199905
3228 */
3229#if 0
3230{
3231	/*
3232	 * Nura's first gen headphones use Cambridge Silicon Radio's vendor
3233	 * ID, but it looks like the product ID actually is only for Nura.
3234	 * The capture interface does not work at all (even on Windows),
3235	 * and only the 48 kHz sample rate works for the playback interface.
3236	 */
3237	USB_DEVICE(0x0a12, 0x1243),
3238	.driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
3239		.ifnum = QUIRK_ANY_INTERFACE,
3240		.type = QUIRK_COMPOSITE,
3241		.data = (const struct snd_usb_audio_quirk[]) {
3242			{
3243				.ifnum = 0,
3244				.type = QUIRK_AUDIO_STANDARD_MIXER,
3245			},
3246			/* Capture */
3247			{
3248				.ifnum = 1,
3249				.type = QUIRK_IGNORE_INTERFACE,
3250			},
3251			/* Playback */
3252			{
3253				.ifnum = 2,
3254				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
3255				.data = &(const struct audioformat) {
3256					.formats = SNDRV_PCM_FMTBIT_S16_LE,
3257					.channels = 2,
3258					.iface = 2,
3259					.altsetting = 1,
3260					.altset_idx = 1,
3261					.attributes = UAC_EP_CS_ATTR_FILL_MAX |
3262						UAC_EP_CS_ATTR_SAMPLE_RATE,
3263					.endpoint = 0x03,
3264					.ep_attr = USB_ENDPOINT_XFER_ISOC,
3265					.rates = SNDRV_PCM_RATE_48000,
3266					.rate_min = 48000,
3267					.rate_max = 48000,
3268					.nr_rates = 1,
3269					.rate_table = (unsigned int[]) {
3270						48000
3271					}
3272				}
3273			},
3274			{
3275				.ifnum = -1
3276			},
3277		}
3278	}
3279},
3280#endif /* disabled */
3281
3282{
3283	/*
3284	 * Bower's & Wilkins PX headphones only support the 48 kHz sample rate
3285	 * even though it advertises more. The capture interface doesn't work
3286	 * even on windows.
3287	 */
3288	USB_DEVICE(0x19b5, 0x0021),
3289	.driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
3290		.ifnum = QUIRK_ANY_INTERFACE,
3291		.type = QUIRK_COMPOSITE,
3292		.data = (const struct snd_usb_audio_quirk[]) {
3293			{
3294				.ifnum = 0,
3295				.type = QUIRK_AUDIO_STANDARD_MIXER,
3296			},
3297			/* Playback */
3298			{
3299				.ifnum = 1,
3300				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
3301				.data = &(const struct audioformat) {
3302					.formats = SNDRV_PCM_FMTBIT_S16_LE,
3303					.channels = 2,
3304					.iface = 1,
3305					.altsetting = 1,
3306					.altset_idx = 1,
3307					.attributes = UAC_EP_CS_ATTR_FILL_MAX |
3308						UAC_EP_CS_ATTR_SAMPLE_RATE,
3309					.endpoint = 0x03,
3310					.ep_attr = USB_ENDPOINT_XFER_ISOC,
3311					.rates = SNDRV_PCM_RATE_48000,
3312					.rate_min = 48000,
3313					.rate_max = 48000,
3314					.nr_rates = 1,
3315					.rate_table = (unsigned int[]) {
3316						48000
3317					}
3318				}
3319			},
3320			{
3321				.ifnum = -1
3322			},
3323		}
3324	}
3325},
3326/* Dell WD19 Dock */
3327{
3328	USB_DEVICE(0x0bda, 0x402e),
3329	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
3330		.ifnum = QUIRK_ANY_INTERFACE,
3331		.type = QUIRK_SETUP_FMT_AFTER_RESUME
3332	}
3333},
3334/* MOTU Microbook II */
3335{
3336	USB_DEVICE_VENDOR_SPEC(0x07fd, 0x0004),
3337	.driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
3338		.vendor_name = "MOTU",
3339		.product_name = "MicroBookII",
3340		.ifnum = QUIRK_ANY_INTERFACE,
3341		.type = QUIRK_COMPOSITE,
3342		.data = (const struct snd_usb_audio_quirk[]) {
3343			{
3344				.ifnum = 0,
3345				.type = QUIRK_AUDIO_STANDARD_MIXER,
3346			},
3347			{
3348				.ifnum = 0,
3349				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
3350				.data = &(const struct audioformat) {
3351					.formats = SNDRV_PCM_FMTBIT_S24_3BE,
3352					.channels = 6,
3353					.iface = 0,
3354					.altsetting = 1,
3355					.altset_idx = 1,
3356					.attributes = 0,
3357					.endpoint = 0x84,
3358					.rates = SNDRV_PCM_RATE_96000,
3359					.ep_attr = USB_ENDPOINT_XFER_ISOC |
3360						   USB_ENDPOINT_SYNC_ASYNC,
3361					.rate_min = 96000,
3362					.rate_max = 96000,
3363					.nr_rates = 1,
3364					.maxpacksize = 0x00d8,
3365					.rate_table = (unsigned int[]) {
3366						96000
3367					}
3368				}
3369			},
3370			{
3371				.ifnum = 0,
3372				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
3373				.data = &(const struct audioformat) {
3374					.formats = SNDRV_PCM_FMTBIT_S24_3BE,
3375					.channels = 8,
3376					.iface = 0,
3377					.altsetting = 1,
3378					.altset_idx = 1,
3379					.attributes = 0,
3380					.endpoint = 0x03,
3381					.rates = SNDRV_PCM_RATE_96000,
3382					.ep_attr = USB_ENDPOINT_XFER_ISOC |
3383						   USB_ENDPOINT_SYNC_ASYNC,
3384					.rate_min = 96000,
3385					.rate_max = 96000,
3386					.nr_rates = 1,
3387					.maxpacksize = 0x0120,
3388					.rate_table = (unsigned int[]) {
3389						96000
3390					}
3391				}
3392			},
3393			{
3394				.ifnum = -1
3395			}
3396		}
3397	}
3398},
3399{
3400	/*
3401	 * PIONEER DJ DDJ-SX3
3402	 * PCM is 12 channels out, 10 channels in @ 44.1 fixed
3403	 * interface 0, vendor class alt setting 1 for endpoints 5 and 0x86
3404	 * The feedback for the output is the input.
3405	 */
3406	USB_DEVICE_VENDOR_SPEC(0x2b73, 0x0023),
3407	.driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
3408		.ifnum = QUIRK_ANY_INTERFACE,
3409		.type = QUIRK_COMPOSITE,
3410		.data = (const struct snd_usb_audio_quirk[]) {
3411			{
3412				.ifnum = 0,
3413				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
3414				.data = &(const struct audioformat) {
3415					.formats = SNDRV_PCM_FMTBIT_S32_LE,
3416					.channels = 12,
3417					.iface = 0,
3418					.altsetting = 1,
3419					.altset_idx = 1,
3420					.endpoint = 0x05,
3421					.ep_attr = USB_ENDPOINT_XFER_ISOC|
3422						   USB_ENDPOINT_SYNC_ASYNC,
3423					.rates = SNDRV_PCM_RATE_44100,
3424					.rate_min = 44100,
3425					.rate_max = 44100,
3426					.nr_rates = 1,
3427					.rate_table = (unsigned int[]) { 44100 }
3428				}
3429			},
3430			{
3431				.ifnum = 0,
3432				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
3433				.data = &(const struct audioformat) {
3434					.formats = SNDRV_PCM_FMTBIT_S32_LE,
3435					.channels = 10,
3436					.iface = 0,
3437					.altsetting = 1,
3438					.altset_idx = 1,
3439					.endpoint = 0x86,
3440					.ep_attr = USB_ENDPOINT_XFER_ISOC|
3441						 USB_ENDPOINT_SYNC_ASYNC|
3442						 USB_ENDPOINT_USAGE_IMPLICIT_FB,
3443					.rates = SNDRV_PCM_RATE_44100,
3444					.rate_min = 44100,
3445					.rate_max = 44100,
3446					.nr_rates = 1,
3447					.rate_table = (unsigned int[]) { 44100 }
3448				}
3449			},
3450			{
3451				.ifnum = -1
3452			}
3453		}
3454	}
3455},
3456{
3457	/*
3458	 * Pioneer DJ DJM-250MK2
3459	 * PCM is 8 channels out @ 48 fixed (endpoint 0x01)
3460	 * and 8 channels in @ 48 fixed (endpoint 0x82).
3461	 *
3462	 * Both playback and recording is working, even simultaneously.
3463	 *
3464	 * Playback channels could be mapped to:
3465	 *  - CH1
3466	 *  - CH2
3467	 *  - AUX
3468	 *
3469	 * Recording channels could be mapped to:
3470	 *  - Post CH1 Fader
3471	 *  - Post CH2 Fader
3472	 *  - Cross Fader A
3473	 *  - Cross Fader B
3474	 *  - MIC
3475	 *  - AUX
3476	 *  - REC OUT
3477	 *
3478	 * There is remaining problem with recording directly from PHONO/LINE.
3479	 * If we map a channel to:
3480	 *  - CH1 Control Tone PHONO
3481	 *  - CH1 Control Tone LINE
3482	 *  - CH2 Control Tone PHONO
3483	 *  - CH2 Control Tone LINE
3484	 * it is silent.
3485	 * There is no signal even on other operating systems with official drivers.
3486	 * The signal appears only when a supported application is started.
3487	 * This needs to be investigated yet...
3488	 * (there is quite a lot communication on the USB in both directions)
3489	 *
3490	 * In current version this mixer could be used for playback
3491	 * and for recording from vinyls (through Post CH* Fader)
3492	 * but not for DVS (Digital Vinyl Systems) like in Mixxx.
3493	 */
3494	USB_DEVICE_VENDOR_SPEC(0x2b73, 0x0017),
3495	.driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
3496		.ifnum = QUIRK_ANY_INTERFACE,
3497		.type = QUIRK_COMPOSITE,
3498		.data = (const struct snd_usb_audio_quirk[]) {
3499			{
3500				.ifnum = 0,
3501				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
3502				.data = &(const struct audioformat) {
3503					.formats = SNDRV_PCM_FMTBIT_S24_3LE,
3504					.channels = 8, // outputs
3505					.iface = 0,
3506					.altsetting = 1,
3507					.altset_idx = 1,
3508					.endpoint = 0x01,
3509					.ep_attr = USB_ENDPOINT_XFER_ISOC|
3510						USB_ENDPOINT_SYNC_ASYNC,
3511					.rates = SNDRV_PCM_RATE_48000,
3512					.rate_min = 48000,
3513					.rate_max = 48000,
3514					.nr_rates = 1,
3515					.rate_table = (unsigned int[]) { 48000 }
3516					}
3517			},
3518			{
3519				.ifnum = 0,
3520				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
3521				.data = &(const struct audioformat) {
3522					.formats = SNDRV_PCM_FMTBIT_S24_3LE,
3523					.channels = 8, // inputs
3524					.iface = 0,
3525					.altsetting = 1,
3526					.altset_idx = 1,
3527					.endpoint = 0x82,
3528					.ep_attr = USB_ENDPOINT_XFER_ISOC|
3529						USB_ENDPOINT_SYNC_ASYNC|
3530						USB_ENDPOINT_USAGE_IMPLICIT_FB,
3531					.rates = SNDRV_PCM_RATE_48000,
3532					.rate_min = 48000,
3533					.rate_max = 48000,
3534					.nr_rates = 1,
3535					.rate_table = (unsigned int[]) { 48000 }
3536				}
3537			},
3538			{
3539				.ifnum = -1
3540			}
3541		}
3542	}
3543},
3544{
3545	/*
3546	 * PIONEER DJ DDJ-RB
3547	 * PCM is 4 channels out, 2 dummy channels in @ 44.1 fixed
3548	 * The feedback for the output is the dummy input.
3549	 */
3550	USB_DEVICE_VENDOR_SPEC(0x2b73, 0x000e),
3551	.driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
3552		.ifnum = QUIRK_ANY_INTERFACE,
3553		.type = QUIRK_COMPOSITE,
3554		.data = (const struct snd_usb_audio_quirk[]) {
3555			{
3556				.ifnum = 0,
3557				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
3558				.data = &(const struct audioformat) {
3559					.formats = SNDRV_PCM_FMTBIT_S24_3LE,
3560					.channels = 4,
3561					.iface = 0,
3562					.altsetting = 1,
3563					.altset_idx = 1,
3564					.endpoint = 0x01,
3565					.ep_attr = USB_ENDPOINT_XFER_ISOC|
3566						   USB_ENDPOINT_SYNC_ASYNC,
3567					.rates = SNDRV_PCM_RATE_44100,
3568					.rate_min = 44100,
3569					.rate_max = 44100,
3570					.nr_rates = 1,
3571					.rate_table = (unsigned int[]) { 44100 }
3572				}
3573			},
3574			{
3575				.ifnum = 0,
3576				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
3577				.data = &(const struct audioformat) {
3578					.formats = SNDRV_PCM_FMTBIT_S24_3LE,
3579					.channels = 2,
3580					.iface = 0,
3581					.altsetting = 1,
3582					.altset_idx = 1,
3583					.endpoint = 0x82,
3584					.ep_attr = USB_ENDPOINT_XFER_ISOC|
3585						 USB_ENDPOINT_SYNC_ASYNC|
3586						 USB_ENDPOINT_USAGE_IMPLICIT_FB,
3587					.rates = SNDRV_PCM_RATE_44100,
3588					.rate_min = 44100,
3589					.rate_max = 44100,
3590					.nr_rates = 1,
3591					.rate_table = (unsigned int[]) { 44100 }
3592				}
3593			},
3594			{
3595				.ifnum = -1
3596			}
3597		}
3598	}
3599},
3600
3601{
3602	/*
3603	 * Pioneer DJ DJM-900NXS2
3604	 * 10 channels playback & 12 channels capture @ 44.1/48/96kHz S24LE
3605	 */
3606	USB_DEVICE_VENDOR_SPEC(0x2b73, 0x000a),
3607	.driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
3608		.ifnum = QUIRK_ANY_INTERFACE,
3609		.type = QUIRK_COMPOSITE,
3610		.data = (const struct snd_usb_audio_quirk[]) {
3611			{
3612				.ifnum = 0,
3613				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
3614				.data = &(const struct audioformat) {
3615					.formats = SNDRV_PCM_FMTBIT_S24_3LE,
3616					.channels = 10,
3617					.iface = 0,
3618					.altsetting = 1,
3619					.altset_idx = 1,
3620					.endpoint = 0x01,
3621					.ep_attr = USB_ENDPOINT_XFER_ISOC|
3622					    USB_ENDPOINT_SYNC_ASYNC,
3623					.rates = SNDRV_PCM_RATE_44100|
3624					    SNDRV_PCM_RATE_48000|
3625					    SNDRV_PCM_RATE_96000,
3626					.rate_min = 44100,
3627					.rate_max = 96000,
3628					.nr_rates = 3,
3629					.rate_table = (unsigned int[]) {
3630						44100, 48000, 96000
3631					}
3632				}
3633			},
3634			{
3635				.ifnum = 0,
3636				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
3637				.data = &(const struct audioformat) {
3638					.formats = SNDRV_PCM_FMTBIT_S24_3LE,
3639					.channels = 12,
3640					.iface = 0,
3641					.altsetting = 1,
3642					.altset_idx = 1,
3643					.endpoint = 0x82,
3644					.ep_attr = USB_ENDPOINT_XFER_ISOC|
3645					    USB_ENDPOINT_SYNC_ASYNC|
3646					    USB_ENDPOINT_USAGE_IMPLICIT_FB,
3647					.rates = SNDRV_PCM_RATE_44100|
3648					    SNDRV_PCM_RATE_48000|
3649					    SNDRV_PCM_RATE_96000,
3650					.rate_min = 44100,
3651					.rate_max = 96000,
3652					.nr_rates = 3,
3653					.rate_table = (unsigned int[]) {
3654						44100, 48000, 96000
3655					}
3656				}
3657			},
3658			{
3659				.ifnum = -1
3660			}
3661		}
3662	}
3663},
3664
3665/*
3666 * MacroSilicon MS2100/MS2106 based AV capture cards
3667 *
3668 * These claim 96kHz 1ch in the descriptors, but are actually 48kHz 2ch.
3669 * They also need QUIRK_AUDIO_ALIGN_TRANSFER, which makes one wonder if
3670 * they pretend to be 96kHz mono as a workaround for stereo being broken
3671 * by that...
3672 *
3673 * They also have an issue with initial stream alignment that causes the
3674 * channels to be swapped and out of phase, which is dealt with in quirks.c.
3675 */
3676{
3677	USB_AUDIO_DEVICE(0x534d, 0x0021),
3678	.driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
3679		.vendor_name = "MacroSilicon",
3680		.product_name = "MS210x",
3681		.ifnum = QUIRK_ANY_INTERFACE,
3682		.type = QUIRK_COMPOSITE,
3683		.data = &(const struct snd_usb_audio_quirk[]) {
3684			{
3685				.ifnum = 2,
3686				.type = QUIRK_AUDIO_ALIGN_TRANSFER,
3687			},
3688			{
3689				.ifnum = 2,
3690				.type = QUIRK_AUDIO_STANDARD_MIXER,
3691			},
3692			{
3693				.ifnum = 3,
3694				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
3695				.data = &(const struct audioformat) {
3696					.formats = SNDRV_PCM_FMTBIT_S16_LE,
3697					.channels = 2,
3698					.iface = 3,
3699					.altsetting = 1,
3700					.altset_idx = 1,
3701					.attributes = 0,
3702					.endpoint = 0x82,
3703					.ep_attr = USB_ENDPOINT_XFER_ISOC |
3704						USB_ENDPOINT_SYNC_ASYNC,
3705					.rates = SNDRV_PCM_RATE_CONTINUOUS,
3706					.rate_min = 48000,
3707					.rate_max = 48000,
3708				}
3709			},
3710			{
3711				.ifnum = -1
3712			}
3713		}
3714	}
3715},
3716
3717/*
3718 * MacroSilicon MS2109 based HDMI capture cards
3719 *
3720 * These claim 96kHz 1ch in the descriptors, but are actually 48kHz 2ch.
3721 * They also need QUIRK_AUDIO_ALIGN_TRANSFER, which makes one wonder if
3722 * they pretend to be 96kHz mono as a workaround for stereo being broken
3723 * by that...
3724 *
3725 * They also have an issue with initial stream alignment that causes the
3726 * channels to be swapped and out of phase, which is dealt with in quirks.c.
3727 */
3728{
3729	USB_AUDIO_DEVICE(0x534d, 0x2109),
3730	.driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
3731		.vendor_name = "MacroSilicon",
3732		.product_name = "MS2109",
3733		.ifnum = QUIRK_ANY_INTERFACE,
3734		.type = QUIRK_COMPOSITE,
3735		.data = &(const struct snd_usb_audio_quirk[]) {
3736			{
3737				.ifnum = 2,
3738				.type = QUIRK_AUDIO_ALIGN_TRANSFER,
3739			},
3740			{
3741				.ifnum = 2,
3742				.type = QUIRK_AUDIO_STANDARD_MIXER,
3743			},
3744			{
3745				.ifnum = 3,
3746				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
3747				.data = &(const struct audioformat) {
3748					.formats = SNDRV_PCM_FMTBIT_S16_LE,
3749					.channels = 2,
3750					.iface = 3,
3751					.altsetting = 1,
3752					.altset_idx = 1,
3753					.attributes = 0,
3754					.endpoint = 0x82,
3755					.ep_attr = USB_ENDPOINT_XFER_ISOC |
3756						USB_ENDPOINT_SYNC_ASYNC,
3757					.rates = SNDRV_PCM_RATE_CONTINUOUS,
3758					.rate_min = 48000,
3759					.rate_max = 48000,
3760				}
3761			},
3762			{
3763				.ifnum = -1
3764			}
3765		}
3766	}
3767},
3768{
3769	/*
3770	 * Sennheiser GSP670
3771	 * Change order of interfaces loaded
3772	 */
3773	USB_DEVICE(0x1395, 0x0300),
3774	.bInterfaceClass = USB_CLASS_PER_INTERFACE,
3775	.driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
3776		.ifnum = QUIRK_ANY_INTERFACE,
3777		.type = QUIRK_COMPOSITE,
3778		.data = &(const struct snd_usb_audio_quirk[]) {
3779			// Communication
3780			{
3781				.ifnum = 3,
3782				.type = QUIRK_AUDIO_STANDARD_INTERFACE
3783			},
3784			// Recording
3785			{
3786				.ifnum = 4,
3787				.type = QUIRK_AUDIO_STANDARD_INTERFACE
3788			},
3789			// Main
3790			{
3791				.ifnum = 1,
3792				.type = QUIRK_AUDIO_STANDARD_INTERFACE
3793			},
3794			{
3795				.ifnum = -1
3796			}
3797		}
3798	}
3799},
3800{
3801	/* Advanced modes of the Mythware XA001AU.
3802	 * For the standard mode, Mythware XA001AU has ID ffad:a001
3803	 */
3804	USB_DEVICE_VENDOR_SPEC(0xffad, 0xa001),
3805	.driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
3806		.vendor_name = "Mythware",
3807		.product_name = "XA001AU",
3808		.ifnum = QUIRK_ANY_INTERFACE,
3809		.type = QUIRK_COMPOSITE,
3810		.data = (const struct snd_usb_audio_quirk[]) {
3811			{
3812				.ifnum = 0,
3813				.type = QUIRK_IGNORE_INTERFACE,
3814			},
3815			{
3816				.ifnum = 1,
3817				.type = QUIRK_AUDIO_STANDARD_INTERFACE,
3818			},
3819			{
3820				.ifnum = 2,
3821				.type = QUIRK_AUDIO_STANDARD_INTERFACE,
3822			},
3823			{
3824				.ifnum = -1
3825			}
3826		}
3827	}
3828},
3829
3830#undef USB_DEVICE_VENDOR_SPEC
3831#undef USB_AUDIO_DEVICE
3832