xref: /openbmc/linux/sound/usb/quirks-table.h (revision d3597236)
1 /*
2  * ALSA USB Audio Driver
3  *
4  * Copyright (c) 2002 by Takashi Iwai <tiwai@suse.de>,
5  *                       Clemens Ladisch <clemens@ladisch.de>
6  *
7  *
8  *  This program is free software; you can redistribute it and/or modify
9  *  it under the terms of the GNU General Public License as published by
10  *  the Free Software Foundation; either version 2 of the License, or
11  *  (at your option) any later version.
12  *
13  *  This program is distributed in the hope that it will be useful,
14  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
15  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16  *  GNU General Public License for more details.
17  *
18  *  You should have received a copy of the GNU General Public License
19  *  along with this program; if not, write to the Free Software
20  *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
21  */
22 
23 /*
24  * The contents of this file are part of the driver's id_table.
25  *
26  * In a perfect world, this file would be empty.
27  */
28 
29 /*
30  * Use this for devices where other interfaces are standard compliant,
31  * to prevent the quirk being applied to those interfaces. (To work with
32  * hotplugging, bDeviceClass must be set to USB_CLASS_PER_INTERFACE.)
33  */
34 #define USB_DEVICE_VENDOR_SPEC(vend, prod) \
35 	.match_flags = USB_DEVICE_ID_MATCH_VENDOR | \
36 		       USB_DEVICE_ID_MATCH_PRODUCT | \
37 		       USB_DEVICE_ID_MATCH_INT_CLASS, \
38 	.idVendor = vend, \
39 	.idProduct = prod, \
40 	.bInterfaceClass = USB_CLASS_VENDOR_SPEC
41 
42 /* FTDI devices */
43 {
44 	USB_DEVICE(0x0403, 0xb8d8),
45 	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
46 		/* .vendor_name = "STARR LABS", */
47 		/* .product_name = "Starr Labs MIDI USB device", */
48 		.ifnum = 0,
49 		.type = QUIRK_MIDI_FTDI
50 	}
51 },
52 
53 {
54 	/* Creative BT-D1 */
55 	USB_DEVICE(0x041e, 0x0005),
56 	.driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
57 		.ifnum = 1,
58 		.type = QUIRK_AUDIO_FIXED_ENDPOINT,
59 		.data = &(const struct audioformat) {
60 			.formats = SNDRV_PCM_FMTBIT_S16_LE,
61 			.channels = 2,
62 			.iface = 1,
63 			.altsetting = 1,
64 			.altset_idx = 1,
65 			.endpoint = 0x03,
66 			.ep_attr = USB_ENDPOINT_XFER_ISOC,
67 			.attributes = 0,
68 			.rates = SNDRV_PCM_RATE_CONTINUOUS,
69 			.rate_min = 48000,
70 			.rate_max = 48000,
71 		}
72 	}
73 },
74 
75 /* Creative/E-Mu devices */
76 {
77 	USB_DEVICE(0x041e, 0x3010),
78 	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
79 		.vendor_name = "Creative Labs",
80 		.product_name = "Sound Blaster MP3+",
81 		.ifnum = QUIRK_NO_INTERFACE
82 	}
83 },
84 /* Creative/Toshiba Multimedia Center SB-0500 */
85 {
86 	USB_DEVICE(0x041e, 0x3048),
87 	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
88 		.vendor_name = "Toshiba",
89 		.product_name = "SB-0500",
90 		.ifnum = QUIRK_NO_INTERFACE
91 	}
92 },
93 {
94 	/* E-Mu 0202 USB */
95 	.match_flags = USB_DEVICE_ID_MATCH_DEVICE,
96 	.idVendor = 0x041e,
97 	.idProduct = 0x3f02,
98 	.bInterfaceClass = USB_CLASS_AUDIO,
99 },
100 {
101 	/* E-Mu 0404 USB */
102 	.match_flags = USB_DEVICE_ID_MATCH_DEVICE,
103 	.idVendor = 0x041e,
104 	.idProduct = 0x3f04,
105 	.bInterfaceClass = USB_CLASS_AUDIO,
106 },
107 {
108 	/* E-Mu Tracker Pre */
109 	.match_flags = USB_DEVICE_ID_MATCH_DEVICE,
110 	.idVendor = 0x041e,
111 	.idProduct = 0x3f0a,
112 	.bInterfaceClass = USB_CLASS_AUDIO,
113 },
114 {
115 	/* E-Mu 0204 USB */
116 	.match_flags = USB_DEVICE_ID_MATCH_DEVICE,
117 	.idVendor = 0x041e,
118 	.idProduct = 0x3f19,
119 	.bInterfaceClass = USB_CLASS_AUDIO,
120 },
121 
122 /*
123  * HP Wireless Audio
124  * When not ignored, causes instability issues for some users, forcing them to
125  * blacklist the entire module.
126  */
127 {
128 	USB_DEVICE(0x0424, 0xb832),
129 	.driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
130 		.vendor_name = "Standard Microsystems Corp.",
131 		.product_name = "HP Wireless Audio",
132 		.ifnum = QUIRK_ANY_INTERFACE,
133 		.type = QUIRK_COMPOSITE,
134 		.data = (const struct snd_usb_audio_quirk[]) {
135 			/* Mixer */
136 			{
137 				.ifnum = 0,
138 				.type = QUIRK_IGNORE_INTERFACE,
139 			},
140 			/* Playback */
141 			{
142 				.ifnum = 1,
143 				.type = QUIRK_IGNORE_INTERFACE,
144 			},
145 			/* Capture */
146 			{
147 				.ifnum = 2,
148 				.type = QUIRK_IGNORE_INTERFACE,
149 			},
150 			/* HID Device, .ifnum = 3 */
151 			{
152 				.ifnum = -1,
153 			}
154 		}
155 	}
156 },
157 
158 /*
159  * Logitech QuickCam: bDeviceClass is vendor-specific, so generic interface
160  * class matches do not take effect without an explicit ID match.
161  */
162 {
163 	.match_flags = USB_DEVICE_ID_MATCH_DEVICE |
164 		       USB_DEVICE_ID_MATCH_INT_CLASS |
165 		       USB_DEVICE_ID_MATCH_INT_SUBCLASS,
166 	.idVendor = 0x046d,
167 	.idProduct = 0x0850,
168 	.bInterfaceClass = USB_CLASS_AUDIO,
169 	.bInterfaceSubClass = USB_SUBCLASS_AUDIOCONTROL
170 },
171 {
172 	.match_flags = USB_DEVICE_ID_MATCH_DEVICE |
173 		       USB_DEVICE_ID_MATCH_INT_CLASS |
174 		       USB_DEVICE_ID_MATCH_INT_SUBCLASS,
175 	.idVendor = 0x046d,
176 	.idProduct = 0x08ae,
177 	.bInterfaceClass = USB_CLASS_AUDIO,
178 	.bInterfaceSubClass = USB_SUBCLASS_AUDIOCONTROL
179 },
180 {
181 	.match_flags = USB_DEVICE_ID_MATCH_DEVICE |
182 		       USB_DEVICE_ID_MATCH_INT_CLASS |
183 		       USB_DEVICE_ID_MATCH_INT_SUBCLASS,
184 	.idVendor = 0x046d,
185 	.idProduct = 0x08c6,
186 	.bInterfaceClass = USB_CLASS_AUDIO,
187 	.bInterfaceSubClass = USB_SUBCLASS_AUDIOCONTROL
188 },
189 {
190 	.match_flags = USB_DEVICE_ID_MATCH_DEVICE |
191 		       USB_DEVICE_ID_MATCH_INT_CLASS |
192 		       USB_DEVICE_ID_MATCH_INT_SUBCLASS,
193 	.idVendor = 0x046d,
194 	.idProduct = 0x08f0,
195 	.bInterfaceClass = USB_CLASS_AUDIO,
196 	.bInterfaceSubClass = USB_SUBCLASS_AUDIOCONTROL
197 },
198 {
199 	.match_flags = USB_DEVICE_ID_MATCH_DEVICE |
200 		       USB_DEVICE_ID_MATCH_INT_CLASS |
201 		       USB_DEVICE_ID_MATCH_INT_SUBCLASS,
202 	.idVendor = 0x046d,
203 	.idProduct = 0x08f5,
204 	.bInterfaceClass = USB_CLASS_AUDIO,
205 	.bInterfaceSubClass = USB_SUBCLASS_AUDIOCONTROL
206 },
207 {
208 	.match_flags = USB_DEVICE_ID_MATCH_DEVICE |
209 		       USB_DEVICE_ID_MATCH_INT_CLASS |
210 		       USB_DEVICE_ID_MATCH_INT_SUBCLASS,
211 	.idVendor = 0x046d,
212 	.idProduct = 0x08f6,
213 	.bInterfaceClass = USB_CLASS_AUDIO,
214 	.bInterfaceSubClass = USB_SUBCLASS_AUDIOCONTROL
215 },
216 {
217 	.match_flags = USB_DEVICE_ID_MATCH_DEVICE |
218 		       USB_DEVICE_ID_MATCH_INT_CLASS |
219 		       USB_DEVICE_ID_MATCH_INT_SUBCLASS,
220 	.idVendor = 0x046d,
221 	.idProduct = 0x0990,
222 	.bInterfaceClass = USB_CLASS_AUDIO,
223 	.bInterfaceSubClass = USB_SUBCLASS_AUDIOCONTROL,
224 	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
225 		.vendor_name = "Logitech, Inc.",
226 		.product_name = "QuickCam Pro 9000",
227 		.ifnum = QUIRK_NO_INTERFACE
228 	}
229 },
230 
231 /*
232  * Yamaha devices
233  */
234 
235 #define YAMAHA_DEVICE(id, name) { \
236 	USB_DEVICE(0x0499, id), \
237 	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { \
238 		.vendor_name = "Yamaha", \
239 		.product_name = name, \
240 		.ifnum = QUIRK_ANY_INTERFACE, \
241 		.type = QUIRK_MIDI_YAMAHA \
242 	} \
243 }
244 #define YAMAHA_INTERFACE(id, intf, name) { \
245 	USB_DEVICE_VENDOR_SPEC(0x0499, id), \
246 	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { \
247 		.vendor_name = "Yamaha", \
248 		.product_name = name, \
249 		.ifnum = intf, \
250 		.type = QUIRK_MIDI_YAMAHA \
251 	} \
252 }
253 YAMAHA_DEVICE(0x1000, "UX256"),
254 YAMAHA_DEVICE(0x1001, "MU1000"),
255 YAMAHA_DEVICE(0x1002, "MU2000"),
256 YAMAHA_DEVICE(0x1003, "MU500"),
257 YAMAHA_INTERFACE(0x1004, 3, "UW500"),
258 YAMAHA_DEVICE(0x1005, "MOTIF6"),
259 YAMAHA_DEVICE(0x1006, "MOTIF7"),
260 YAMAHA_DEVICE(0x1007, "MOTIF8"),
261 YAMAHA_DEVICE(0x1008, "UX96"),
262 YAMAHA_DEVICE(0x1009, "UX16"),
263 YAMAHA_INTERFACE(0x100a, 3, "EOS BX"),
264 YAMAHA_DEVICE(0x100c, "UC-MX"),
265 YAMAHA_DEVICE(0x100d, "UC-KX"),
266 YAMAHA_DEVICE(0x100e, "S08"),
267 YAMAHA_DEVICE(0x100f, "CLP-150"),
268 YAMAHA_DEVICE(0x1010, "CLP-170"),
269 YAMAHA_DEVICE(0x1011, "P-250"),
270 YAMAHA_DEVICE(0x1012, "TYROS"),
271 YAMAHA_DEVICE(0x1013, "PF-500"),
272 YAMAHA_DEVICE(0x1014, "S90"),
273 YAMAHA_DEVICE(0x1015, "MOTIF-R"),
274 YAMAHA_DEVICE(0x1016, "MDP-5"),
275 YAMAHA_DEVICE(0x1017, "CVP-204"),
276 YAMAHA_DEVICE(0x1018, "CVP-206"),
277 YAMAHA_DEVICE(0x1019, "CVP-208"),
278 YAMAHA_DEVICE(0x101a, "CVP-210"),
279 YAMAHA_DEVICE(0x101b, "PSR-1100"),
280 YAMAHA_DEVICE(0x101c, "PSR-2100"),
281 YAMAHA_DEVICE(0x101d, "CLP-175"),
282 YAMAHA_DEVICE(0x101e, "PSR-K1"),
283 YAMAHA_DEVICE(0x101f, "EZ-J24"),
284 YAMAHA_DEVICE(0x1020, "EZ-250i"),
285 YAMAHA_DEVICE(0x1021, "MOTIF ES 6"),
286 YAMAHA_DEVICE(0x1022, "MOTIF ES 7"),
287 YAMAHA_DEVICE(0x1023, "MOTIF ES 8"),
288 YAMAHA_DEVICE(0x1024, "CVP-301"),
289 YAMAHA_DEVICE(0x1025, "CVP-303"),
290 YAMAHA_DEVICE(0x1026, "CVP-305"),
291 YAMAHA_DEVICE(0x1027, "CVP-307"),
292 YAMAHA_DEVICE(0x1028, "CVP-309"),
293 YAMAHA_DEVICE(0x1029, "CVP-309GP"),
294 YAMAHA_DEVICE(0x102a, "PSR-1500"),
295 YAMAHA_DEVICE(0x102b, "PSR-3000"),
296 YAMAHA_DEVICE(0x102e, "ELS-01/01C"),
297 YAMAHA_DEVICE(0x1030, "PSR-295/293"),
298 YAMAHA_DEVICE(0x1031, "DGX-205/203"),
299 YAMAHA_DEVICE(0x1032, "DGX-305"),
300 YAMAHA_DEVICE(0x1033, "DGX-505"),
301 YAMAHA_DEVICE(0x1034, NULL),
302 YAMAHA_DEVICE(0x1035, NULL),
303 YAMAHA_DEVICE(0x1036, NULL),
304 YAMAHA_DEVICE(0x1037, NULL),
305 YAMAHA_DEVICE(0x1038, NULL),
306 YAMAHA_DEVICE(0x1039, NULL),
307 YAMAHA_DEVICE(0x103a, NULL),
308 YAMAHA_DEVICE(0x103b, NULL),
309 YAMAHA_DEVICE(0x103c, NULL),
310 YAMAHA_DEVICE(0x103d, NULL),
311 YAMAHA_DEVICE(0x103e, NULL),
312 YAMAHA_DEVICE(0x103f, NULL),
313 YAMAHA_DEVICE(0x1040, NULL),
314 YAMAHA_DEVICE(0x1041, NULL),
315 YAMAHA_DEVICE(0x1042, NULL),
316 YAMAHA_DEVICE(0x1043, NULL),
317 YAMAHA_DEVICE(0x1044, NULL),
318 YAMAHA_DEVICE(0x1045, NULL),
319 YAMAHA_INTERFACE(0x104e, 0, NULL),
320 YAMAHA_DEVICE(0x104f, NULL),
321 YAMAHA_DEVICE(0x1050, NULL),
322 YAMAHA_DEVICE(0x1051, NULL),
323 YAMAHA_DEVICE(0x1052, NULL),
324 YAMAHA_INTERFACE(0x1053, 0, NULL),
325 YAMAHA_INTERFACE(0x1054, 0, NULL),
326 YAMAHA_DEVICE(0x1055, NULL),
327 YAMAHA_DEVICE(0x1056, NULL),
328 YAMAHA_DEVICE(0x1057, NULL),
329 YAMAHA_DEVICE(0x1058, NULL),
330 YAMAHA_DEVICE(0x1059, NULL),
331 YAMAHA_DEVICE(0x105a, NULL),
332 YAMAHA_DEVICE(0x105b, NULL),
333 YAMAHA_DEVICE(0x105c, NULL),
334 YAMAHA_DEVICE(0x105d, NULL),
335 {
336 	USB_DEVICE(0x0499, 0x1503),
337 	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
338 		/* .vendor_name = "Yamaha", */
339 		/* .product_name = "MOX6/MOX8", */
340 		.ifnum = QUIRK_ANY_INTERFACE,
341 		.type = QUIRK_COMPOSITE,
342 		.data = (const struct snd_usb_audio_quirk[]) {
343 			{
344 				.ifnum = 1,
345 				.type = QUIRK_AUDIO_STANDARD_INTERFACE
346 			},
347 			{
348 				.ifnum = 2,
349 				.type = QUIRK_AUDIO_STANDARD_INTERFACE
350 			},
351 			{
352 				.ifnum = 3,
353 				.type = QUIRK_MIDI_YAMAHA
354 			},
355 			{
356 				.ifnum = -1
357 			}
358 		}
359 	}
360 },
361 {
362 	USB_DEVICE(0x0499, 0x1507),
363 	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
364 		/* .vendor_name = "Yamaha", */
365 		/* .product_name = "THR10", */
366 		.ifnum = QUIRK_ANY_INTERFACE,
367 		.type = QUIRK_COMPOSITE,
368 		.data = (const struct snd_usb_audio_quirk[]) {
369 			{
370 				.ifnum = 1,
371 				.type = QUIRK_AUDIO_STANDARD_INTERFACE
372 			},
373 			{
374 				.ifnum = 2,
375 				.type = QUIRK_AUDIO_STANDARD_INTERFACE
376 			},
377 			{
378 				.ifnum = 3,
379 				.type = QUIRK_MIDI_YAMAHA
380 			},
381 			{
382 				.ifnum = -1
383 			}
384 		}
385 	}
386 },
387 {
388 	USB_DEVICE(0x0499, 0x1509),
389 	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
390 		/* .vendor_name = "Yamaha", */
391 		/* .product_name = "Steinberg UR22", */
392 		.ifnum = QUIRK_ANY_INTERFACE,
393 		.type = QUIRK_COMPOSITE,
394 		.data = (const struct snd_usb_audio_quirk[]) {
395 			{
396 				.ifnum = 1,
397 				.type = QUIRK_AUDIO_STANDARD_INTERFACE
398 			},
399 			{
400 				.ifnum = 2,
401 				.type = QUIRK_AUDIO_STANDARD_INTERFACE
402 			},
403 			{
404 				.ifnum = 3,
405 				.type = QUIRK_MIDI_YAMAHA
406 			},
407 			{
408 				.ifnum = 4,
409 				.type = QUIRK_IGNORE_INTERFACE
410 			},
411 			{
412 				.ifnum = -1
413 			}
414 		}
415 	}
416 },
417 {
418 	USB_DEVICE(0x0499, 0x150a),
419 	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
420 		/* .vendor_name = "Yamaha", */
421 		/* .product_name = "THR5A", */
422 		.ifnum = QUIRK_ANY_INTERFACE,
423 		.type = QUIRK_COMPOSITE,
424 		.data = (const struct snd_usb_audio_quirk[]) {
425 			{
426 				.ifnum = 1,
427 				.type = QUIRK_AUDIO_STANDARD_INTERFACE
428 			},
429 			{
430 				.ifnum = 2,
431 				.type = QUIRK_AUDIO_STANDARD_INTERFACE
432 			},
433 			{
434 				.ifnum = 3,
435 				.type = QUIRK_MIDI_YAMAHA
436 			},
437 			{
438 				.ifnum = -1
439 			}
440 		}
441 	}
442 },
443 {
444 	USB_DEVICE(0x0499, 0x150c),
445 	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
446 		/* .vendor_name = "Yamaha", */
447 		/* .product_name = "THR10C", */
448 		.ifnum = QUIRK_ANY_INTERFACE,
449 		.type = QUIRK_COMPOSITE,
450 		.data = (const struct snd_usb_audio_quirk[]) {
451 			{
452 				.ifnum = 1,
453 				.type = QUIRK_AUDIO_STANDARD_INTERFACE
454 			},
455 			{
456 				.ifnum = 2,
457 				.type = QUIRK_AUDIO_STANDARD_INTERFACE
458 			},
459 			{
460 				.ifnum = 3,
461 				.type = QUIRK_MIDI_YAMAHA
462 			},
463 			{
464 				.ifnum = -1
465 			}
466 		}
467 	}
468 },
469 YAMAHA_DEVICE(0x2000, "DGP-7"),
470 YAMAHA_DEVICE(0x2001, "DGP-5"),
471 YAMAHA_DEVICE(0x2002, NULL),
472 YAMAHA_DEVICE(0x2003, NULL),
473 YAMAHA_DEVICE(0x5000, "CS1D"),
474 YAMAHA_DEVICE(0x5001, "DSP1D"),
475 YAMAHA_DEVICE(0x5002, "DME32"),
476 YAMAHA_DEVICE(0x5003, "DM2000"),
477 YAMAHA_DEVICE(0x5004, "02R96"),
478 YAMAHA_DEVICE(0x5005, "ACU16-C"),
479 YAMAHA_DEVICE(0x5006, "NHB32-C"),
480 YAMAHA_DEVICE(0x5007, "DM1000"),
481 YAMAHA_DEVICE(0x5008, "01V96"),
482 YAMAHA_DEVICE(0x5009, "SPX2000"),
483 YAMAHA_DEVICE(0x500a, "PM5D"),
484 YAMAHA_DEVICE(0x500b, "DME64N"),
485 YAMAHA_DEVICE(0x500c, "DME24N"),
486 YAMAHA_DEVICE(0x500d, NULL),
487 YAMAHA_DEVICE(0x500e, NULL),
488 YAMAHA_DEVICE(0x500f, NULL),
489 YAMAHA_DEVICE(0x7000, "DTX"),
490 YAMAHA_DEVICE(0x7010, "UB99"),
491 #undef YAMAHA_DEVICE
492 #undef YAMAHA_INTERFACE
493 /* this catches most recent vendor-specific Yamaha devices */
494 {
495 	.match_flags = USB_DEVICE_ID_MATCH_VENDOR |
496 	               USB_DEVICE_ID_MATCH_INT_CLASS,
497 	.idVendor = 0x0499,
498 	.bInterfaceClass = USB_CLASS_VENDOR_SPEC,
499 	.driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
500 		.ifnum = QUIRK_ANY_INTERFACE,
501 		.type = QUIRK_AUTODETECT
502 	}
503 },
504 
505 /*
506  * Roland/RolandED/Edirol/BOSS devices
507  */
508 {
509 	USB_DEVICE(0x0582, 0x0000),
510 	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
511 		.vendor_name = "Roland",
512 		.product_name = "UA-100",
513 		.ifnum = QUIRK_ANY_INTERFACE,
514 		.type = QUIRK_COMPOSITE,
515 		.data = (const struct snd_usb_audio_quirk[]) {
516 			{
517 				.ifnum = 0,
518 				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
519 				.data = & (const struct audioformat) {
520 					.formats = SNDRV_PCM_FMTBIT_S16_LE,
521 					.channels = 4,
522 					.iface = 0,
523 					.altsetting = 1,
524 					.altset_idx = 1,
525 					.attributes = 0,
526 					.endpoint = 0x01,
527 					.ep_attr = 0x09,
528 					.rates = SNDRV_PCM_RATE_CONTINUOUS,
529 					.rate_min = 44100,
530 					.rate_max = 44100,
531 				}
532 			},
533 			{
534 				.ifnum = 1,
535 				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
536 				.data = & (const struct audioformat) {
537 					.formats = SNDRV_PCM_FMTBIT_S16_LE,
538 					.channels = 2,
539 					.iface = 1,
540 					.altsetting = 1,
541 					.altset_idx = 1,
542 					.attributes = UAC_EP_CS_ATTR_FILL_MAX,
543 					.endpoint = 0x81,
544 					.ep_attr = 0x05,
545 					.rates = SNDRV_PCM_RATE_CONTINUOUS,
546 					.rate_min = 44100,
547 					.rate_max = 44100,
548 				}
549 			},
550 			{
551 				.ifnum = 2,
552 				.type = QUIRK_MIDI_FIXED_ENDPOINT,
553 				.data = & (const struct snd_usb_midi_endpoint_info) {
554 					.out_cables = 0x0007,
555 					.in_cables  = 0x0007
556 				}
557 			},
558 			{
559 				.ifnum = -1
560 			}
561 		}
562 	}
563 },
564 {
565 	USB_DEVICE(0x0582, 0x0002),
566 	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
567 		.vendor_name = "EDIROL",
568 		.product_name = "UM-4",
569 		.ifnum = QUIRK_ANY_INTERFACE,
570 		.type = QUIRK_COMPOSITE,
571 		.data = (const struct snd_usb_audio_quirk[]) {
572 			{
573 				.ifnum = 0,
574 				.type = QUIRK_IGNORE_INTERFACE
575 			},
576 			{
577 				.ifnum = 1,
578 				.type = QUIRK_IGNORE_INTERFACE
579 			},
580 			{
581 				.ifnum = 2,
582 				.type = QUIRK_MIDI_FIXED_ENDPOINT,
583 				.data = & (const struct snd_usb_midi_endpoint_info) {
584 					.out_cables = 0x000f,
585 					.in_cables  = 0x000f
586 				}
587 			},
588 			{
589 				.ifnum = -1
590 			}
591 		}
592 	}
593 },
594 {
595 	USB_DEVICE(0x0582, 0x0003),
596 	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
597 		.vendor_name = "Roland",
598 		.product_name = "SC-8850",
599 		.ifnum = QUIRK_ANY_INTERFACE,
600 		.type = QUIRK_COMPOSITE,
601 		.data = (const struct snd_usb_audio_quirk[]) {
602 			{
603 				.ifnum = 0,
604 				.type = QUIRK_IGNORE_INTERFACE
605 			},
606 			{
607 				.ifnum = 1,
608 				.type = QUIRK_IGNORE_INTERFACE
609 			},
610 			{
611 				.ifnum = 2,
612 				.type = QUIRK_MIDI_FIXED_ENDPOINT,
613 				.data = & (const struct snd_usb_midi_endpoint_info) {
614 					.out_cables = 0x003f,
615 					.in_cables  = 0x003f
616 				}
617 			},
618 			{
619 				.ifnum = -1
620 			}
621 		}
622 	}
623 },
624 {
625 	USB_DEVICE(0x0582, 0x0004),
626 	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
627 		.vendor_name = "Roland",
628 		.product_name = "U-8",
629 		.ifnum = QUIRK_ANY_INTERFACE,
630 		.type = QUIRK_COMPOSITE,
631 		.data = (const struct snd_usb_audio_quirk[]) {
632 			{
633 				.ifnum = 0,
634 				.type = QUIRK_IGNORE_INTERFACE
635 			},
636 			{
637 				.ifnum = 1,
638 				.type = QUIRK_IGNORE_INTERFACE
639 			},
640 			{
641 				.ifnum = 2,
642 				.type = QUIRK_MIDI_FIXED_ENDPOINT,
643 				.data = & (const struct snd_usb_midi_endpoint_info) {
644 					.out_cables = 0x0005,
645 					.in_cables  = 0x0005
646 				}
647 			},
648 			{
649 				.ifnum = -1
650 			}
651 		}
652 	}
653 },
654 {
655 	/* Has ID 0x0099 when not in "Advanced Driver" mode.
656 	 * The UM-2EX has only one input, but we cannot detect this. */
657 	USB_DEVICE(0x0582, 0x0005),
658 	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
659 		.vendor_name = "EDIROL",
660 		.product_name = "UM-2",
661 		.ifnum = QUIRK_ANY_INTERFACE,
662 		.type = QUIRK_COMPOSITE,
663 		.data = (const struct snd_usb_audio_quirk[]) {
664 			{
665 				.ifnum = 0,
666 				.type = QUIRK_IGNORE_INTERFACE
667 			},
668 			{
669 				.ifnum = 1,
670 				.type = QUIRK_IGNORE_INTERFACE
671 			},
672 			{
673 				.ifnum = 2,
674 				.type = QUIRK_MIDI_FIXED_ENDPOINT,
675 				.data = & (const struct snd_usb_midi_endpoint_info) {
676 					.out_cables = 0x0003,
677 					.in_cables  = 0x0003
678 				}
679 			},
680 			{
681 				.ifnum = -1
682 			}
683 		}
684 	}
685 },
686 {
687 	USB_DEVICE(0x0582, 0x0007),
688 	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
689 		.vendor_name = "Roland",
690 		.product_name = "SC-8820",
691 		.ifnum = QUIRK_ANY_INTERFACE,
692 		.type = QUIRK_COMPOSITE,
693 		.data = (const struct snd_usb_audio_quirk[]) {
694 			{
695 				.ifnum = 0,
696 				.type = QUIRK_IGNORE_INTERFACE
697 			},
698 			{
699 				.ifnum = 1,
700 				.type = QUIRK_IGNORE_INTERFACE
701 			},
702 			{
703 				.ifnum = 2,
704 				.type = QUIRK_MIDI_FIXED_ENDPOINT,
705 				.data = & (const struct snd_usb_midi_endpoint_info) {
706 					.out_cables = 0x0013,
707 					.in_cables  = 0x0013
708 				}
709 			},
710 			{
711 				.ifnum = -1
712 			}
713 		}
714 	}
715 },
716 {
717 	USB_DEVICE(0x0582, 0x0008),
718 	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
719 		.vendor_name = "Roland",
720 		.product_name = "PC-300",
721 		.ifnum = QUIRK_ANY_INTERFACE,
722 		.type = QUIRK_COMPOSITE,
723 		.data = (const struct snd_usb_audio_quirk[]) {
724 			{
725 				.ifnum = 0,
726 				.type = QUIRK_IGNORE_INTERFACE
727 			},
728 			{
729 				.ifnum = 1,
730 				.type = QUIRK_IGNORE_INTERFACE
731 			},
732 			{
733 				.ifnum = 2,
734 				.type = QUIRK_MIDI_FIXED_ENDPOINT,
735 				.data = & (const struct snd_usb_midi_endpoint_info) {
736 					.out_cables = 0x0001,
737 					.in_cables  = 0x0001
738 				}
739 			},
740 			{
741 				.ifnum = -1
742 			}
743 		}
744 	}
745 },
746 {
747 	/* has ID 0x009d when not in "Advanced Driver" mode */
748 	USB_DEVICE(0x0582, 0x0009),
749 	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
750 		.vendor_name = "EDIROL",
751 		.product_name = "UM-1",
752 		.ifnum = QUIRK_ANY_INTERFACE,
753 		.type = QUIRK_COMPOSITE,
754 		.data = (const struct snd_usb_audio_quirk[]) {
755 			{
756 				.ifnum = 0,
757 				.type = QUIRK_IGNORE_INTERFACE
758 			},
759 			{
760 				.ifnum = 1,
761 				.type = QUIRK_IGNORE_INTERFACE
762 			},
763 			{
764 				.ifnum = 2,
765 				.type = QUIRK_MIDI_FIXED_ENDPOINT,
766 				.data = & (const struct snd_usb_midi_endpoint_info) {
767 					.out_cables = 0x0001,
768 					.in_cables  = 0x0001
769 				}
770 			},
771 			{
772 				.ifnum = -1
773 			}
774 		}
775 	}
776 },
777 {
778 	USB_DEVICE(0x0582, 0x000b),
779 	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
780 		.vendor_name = "Roland",
781 		.product_name = "SK-500",
782 		.ifnum = QUIRK_ANY_INTERFACE,
783 		.type = QUIRK_COMPOSITE,
784 		.data = (const struct snd_usb_audio_quirk[]) {
785 			{
786 				.ifnum = 0,
787 				.type = QUIRK_IGNORE_INTERFACE
788 			},
789 			{
790 				.ifnum = 1,
791 				.type = QUIRK_IGNORE_INTERFACE
792 			},
793 			{
794 				.ifnum = 2,
795 				.type = QUIRK_MIDI_FIXED_ENDPOINT,
796 				.data = & (const struct snd_usb_midi_endpoint_info) {
797 					.out_cables = 0x0013,
798 					.in_cables  = 0x0013
799 				}
800 			},
801 			{
802 				.ifnum = -1
803 			}
804 		}
805 	}
806 },
807 {
808 	/* thanks to Emiliano Grilli <emillo@libero.it>
809 	 * for helping researching this data */
810 	USB_DEVICE(0x0582, 0x000c),
811 	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
812 		.vendor_name = "Roland",
813 		.product_name = "SC-D70",
814 		.ifnum = QUIRK_ANY_INTERFACE,
815 		.type = QUIRK_COMPOSITE,
816 		.data = (const struct snd_usb_audio_quirk[]) {
817 			{
818 				.ifnum = 0,
819 				.type = QUIRK_AUDIO_STANDARD_INTERFACE
820 			},
821 			{
822 				.ifnum = 1,
823 				.type = QUIRK_AUDIO_STANDARD_INTERFACE
824 			},
825 			{
826 				.ifnum = 2,
827 				.type = QUIRK_MIDI_FIXED_ENDPOINT,
828 				.data = & (const struct snd_usb_midi_endpoint_info) {
829 					.out_cables = 0x0007,
830 					.in_cables  = 0x0007
831 				}
832 			},
833 			{
834 				.ifnum = -1
835 			}
836 		}
837 	}
838 },
839 {	/*
840 	 * This quirk is for the "Advanced Driver" mode of the Edirol UA-5.
841 	 * If the advanced mode switch at the back of the unit is off, the
842 	 * UA-5 has ID 0x0582/0x0011 and is standard compliant (no quirks),
843 	 * but offers only 16-bit PCM.
844 	 * In advanced mode, the UA-5 will output S24_3LE samples (two
845 	 * channels) at the rate indicated on the front switch, including
846 	 * the 96kHz sample rate.
847 	 */
848 	USB_DEVICE(0x0582, 0x0010),
849 	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
850 		.vendor_name = "EDIROL",
851 		.product_name = "UA-5",
852 		.ifnum = QUIRK_ANY_INTERFACE,
853 		.type = QUIRK_COMPOSITE,
854 		.data = (const struct snd_usb_audio_quirk[]) {
855 			{
856 				.ifnum = 1,
857 				.type = QUIRK_AUDIO_STANDARD_INTERFACE
858 			},
859 			{
860 				.ifnum = 2,
861 				.type = QUIRK_AUDIO_STANDARD_INTERFACE
862 			},
863 			{
864 				.ifnum = -1
865 			}
866 		}
867 	}
868 },
869 {
870 	/* has ID 0x0013 when not in "Advanced Driver" mode */
871 	USB_DEVICE(0x0582, 0x0012),
872 	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
873 		.vendor_name = "Roland",
874 		.product_name = "XV-5050",
875 		.ifnum = 0,
876 		.type = QUIRK_MIDI_FIXED_ENDPOINT,
877 		.data = & (const struct snd_usb_midi_endpoint_info) {
878 			.out_cables = 0x0001,
879 			.in_cables  = 0x0001
880 		}
881 	}
882 },
883 {
884 	/* has ID 0x0015 when not in "Advanced Driver" mode */
885 	USB_DEVICE(0x0582, 0x0014),
886 	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
887 		.vendor_name = "EDIROL",
888 		.product_name = "UM-880",
889 		.ifnum = 0,
890 		.type = QUIRK_MIDI_FIXED_ENDPOINT,
891 		.data = & (const struct snd_usb_midi_endpoint_info) {
892 			.out_cables = 0x01ff,
893 			.in_cables  = 0x01ff
894 		}
895 	}
896 },
897 {
898 	/* has ID 0x0017 when not in "Advanced Driver" mode */
899 	USB_DEVICE(0x0582, 0x0016),
900 	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
901 		.vendor_name = "EDIROL",
902 		.product_name = "SD-90",
903 		.ifnum = QUIRK_ANY_INTERFACE,
904 		.type = QUIRK_COMPOSITE,
905 		.data = (const struct snd_usb_audio_quirk[]) {
906 			{
907 				.ifnum = 0,
908 				.type = QUIRK_AUDIO_STANDARD_INTERFACE
909 			},
910 			{
911 				.ifnum = 1,
912 				.type = QUIRK_AUDIO_STANDARD_INTERFACE
913 			},
914 			{
915 				.ifnum = 2,
916 				.type = QUIRK_MIDI_FIXED_ENDPOINT,
917 				.data = & (const struct snd_usb_midi_endpoint_info) {
918 					.out_cables = 0x000f,
919 					.in_cables  = 0x000f
920 				}
921 			},
922 			{
923 				.ifnum = -1
924 			}
925 		}
926 	}
927 },
928 {
929 	/* has ID 0x001c when not in "Advanced Driver" mode */
930 	USB_DEVICE(0x0582, 0x001b),
931 	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
932 		.vendor_name = "Roland",
933 		.product_name = "MMP-2",
934 		.ifnum = QUIRK_ANY_INTERFACE,
935 		.type = QUIRK_COMPOSITE,
936 		.data = (const struct snd_usb_audio_quirk[]) {
937 			{
938 				.ifnum = 0,
939 				.type = QUIRK_IGNORE_INTERFACE
940 			},
941 			{
942 				.ifnum = 1,
943 				.type = QUIRK_IGNORE_INTERFACE
944 			},
945 			{
946 				.ifnum = 2,
947 				.type = QUIRK_MIDI_FIXED_ENDPOINT,
948 				.data = & (const struct snd_usb_midi_endpoint_info) {
949 					.out_cables = 0x0001,
950 					.in_cables  = 0x0001
951 				}
952 			},
953 			{
954 				.ifnum = -1
955 			}
956 		}
957 	}
958 },
959 {
960 	/* has ID 0x001e when not in "Advanced Driver" mode */
961 	USB_DEVICE(0x0582, 0x001d),
962 	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
963 		.vendor_name = "Roland",
964 		.product_name = "V-SYNTH",
965 		.ifnum = 0,
966 		.type = QUIRK_MIDI_FIXED_ENDPOINT,
967 		.data = & (const struct snd_usb_midi_endpoint_info) {
968 			.out_cables = 0x0001,
969 			.in_cables  = 0x0001
970 		}
971 	}
972 },
973 {
974 	/* has ID 0x0024 when not in "Advanced Driver" mode */
975 	USB_DEVICE(0x0582, 0x0023),
976 	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
977 		.vendor_name = "EDIROL",
978 		.product_name = "UM-550",
979 		.ifnum = 0,
980 		.type = QUIRK_MIDI_FIXED_ENDPOINT,
981 		.data = & (const struct snd_usb_midi_endpoint_info) {
982 			.out_cables = 0x003f,
983 			.in_cables  = 0x003f
984 		}
985 	}
986 },
987 {
988 	/*
989 	 * This quirk is for the "Advanced Driver" mode. If off, the UA-20
990 	 * has ID 0x0026 and is standard compliant, but has only 16-bit PCM
991 	 * and no MIDI.
992 	 */
993 	USB_DEVICE(0x0582, 0x0025),
994 	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
995 		.vendor_name = "EDIROL",
996 		.product_name = "UA-20",
997 		.ifnum = QUIRK_ANY_INTERFACE,
998 		.type = QUIRK_COMPOSITE,
999 		.data = (const struct snd_usb_audio_quirk[]) {
1000 			{
1001 				.ifnum = 0,
1002 				.type = QUIRK_IGNORE_INTERFACE
1003 			},
1004 			{
1005 				.ifnum = 1,
1006 				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
1007 				.data = & (const struct audioformat) {
1008 					.formats = SNDRV_PCM_FMTBIT_S24_3LE,
1009 					.channels = 2,
1010 					.iface = 1,
1011 					.altsetting = 1,
1012 					.altset_idx = 1,
1013 					.attributes = 0,
1014 					.endpoint = 0x01,
1015 					.ep_attr = 0x01,
1016 					.rates = SNDRV_PCM_RATE_CONTINUOUS,
1017 					.rate_min = 44100,
1018 					.rate_max = 44100,
1019 				}
1020 			},
1021 			{
1022 				.ifnum = 2,
1023 				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
1024 				.data = & (const struct audioformat) {
1025 					.formats = SNDRV_PCM_FMTBIT_S24_3LE,
1026 					.channels = 2,
1027 					.iface = 2,
1028 					.altsetting = 1,
1029 					.altset_idx = 1,
1030 					.attributes = 0,
1031 					.endpoint = 0x82,
1032 					.ep_attr = 0x01,
1033 					.rates = SNDRV_PCM_RATE_CONTINUOUS,
1034 					.rate_min = 44100,
1035 					.rate_max = 44100,
1036 				}
1037 			},
1038 			{
1039 				.ifnum = 3,
1040 				.type = QUIRK_MIDI_FIXED_ENDPOINT,
1041 				.data = & (const struct snd_usb_midi_endpoint_info) {
1042 					.out_cables = 0x0001,
1043 					.in_cables  = 0x0001
1044 				}
1045 			},
1046 			{
1047 				.ifnum = -1
1048 			}
1049 		}
1050 	}
1051 },
1052 {
1053 	/* has ID 0x0028 when not in "Advanced Driver" mode */
1054 	USB_DEVICE(0x0582, 0x0027),
1055 	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1056 		.vendor_name = "EDIROL",
1057 		.product_name = "SD-20",
1058 		.ifnum = 0,
1059 		.type = QUIRK_MIDI_FIXED_ENDPOINT,
1060 		.data = & (const struct snd_usb_midi_endpoint_info) {
1061 			.out_cables = 0x0003,
1062 			.in_cables  = 0x0007
1063 		}
1064 	}
1065 },
1066 {
1067 	/* has ID 0x002a when not in "Advanced Driver" mode */
1068 	USB_DEVICE(0x0582, 0x0029),
1069 	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1070 		.vendor_name = "EDIROL",
1071 		.product_name = "SD-80",
1072 		.ifnum = 0,
1073 		.type = QUIRK_MIDI_FIXED_ENDPOINT,
1074 		.data = & (const struct snd_usb_midi_endpoint_info) {
1075 			.out_cables = 0x000f,
1076 			.in_cables  = 0x000f
1077 		}
1078 	}
1079 },
1080 {	/*
1081 	 * This quirk is for the "Advanced" modes of the Edirol UA-700.
1082 	 * If the sample format switch is not in an advanced setting, the
1083 	 * UA-700 has ID 0x0582/0x002c and is standard compliant (no quirks),
1084 	 * but offers only 16-bit PCM and no MIDI.
1085 	 */
1086 	USB_DEVICE_VENDOR_SPEC(0x0582, 0x002b),
1087 	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1088 		.vendor_name = "EDIROL",
1089 		.product_name = "UA-700",
1090 		.ifnum = QUIRK_ANY_INTERFACE,
1091 		.type = QUIRK_COMPOSITE,
1092 		.data = (const struct snd_usb_audio_quirk[]) {
1093 			{
1094 				.ifnum = 1,
1095 				.type = QUIRK_AUDIO_EDIROL_UAXX
1096 			},
1097 			{
1098 				.ifnum = 2,
1099 				.type = QUIRK_AUDIO_EDIROL_UAXX
1100 			},
1101 			{
1102 				.ifnum = 3,
1103 				.type = QUIRK_AUDIO_EDIROL_UAXX
1104 			},
1105 			{
1106 				.ifnum = -1
1107 			}
1108 		}
1109 	}
1110 },
1111 {
1112 	/* has ID 0x002e when not in "Advanced Driver" mode */
1113 	USB_DEVICE(0x0582, 0x002d),
1114 	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1115 		.vendor_name = "Roland",
1116 		.product_name = "XV-2020",
1117 		.ifnum = 0,
1118 		.type = QUIRK_MIDI_FIXED_ENDPOINT,
1119 		.data = & (const struct snd_usb_midi_endpoint_info) {
1120 			.out_cables = 0x0001,
1121 			.in_cables  = 0x0001
1122 		}
1123 	}
1124 },
1125 {
1126 	/* has ID 0x0030 when not in "Advanced Driver" mode */
1127 	USB_DEVICE(0x0582, 0x002f),
1128 	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1129 		.vendor_name = "Roland",
1130 		.product_name = "VariOS",
1131 		.ifnum = 0,
1132 		.type = QUIRK_MIDI_FIXED_ENDPOINT,
1133 		.data = & (const struct snd_usb_midi_endpoint_info) {
1134 			.out_cables = 0x0007,
1135 			.in_cables  = 0x0007
1136 		}
1137 	}
1138 },
1139 {
1140 	/* has ID 0x0034 when not in "Advanced Driver" mode */
1141 	USB_DEVICE(0x0582, 0x0033),
1142 	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1143 		.vendor_name = "EDIROL",
1144 		.product_name = "PCR",
1145 		.ifnum = 0,
1146 		.type = QUIRK_MIDI_FIXED_ENDPOINT,
1147 		.data = & (const struct snd_usb_midi_endpoint_info) {
1148 			.out_cables = 0x0003,
1149 			.in_cables  = 0x0007
1150 		}
1151 	}
1152 },
1153 {
1154 	/*
1155 	 * Has ID 0x0038 when not in "Advanced Driver" mode;
1156 	 * later revisions use IDs 0x0054 and 0x00a2.
1157 	 */
1158 	USB_DEVICE(0x0582, 0x0037),
1159 	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1160 		.vendor_name = "Roland",
1161 		.product_name = "Digital Piano",
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 	/*
1172 	 * This quirk is for the "Advanced Driver" mode.  If off, the GS-10
1173 	 * has ID 0x003c and is standard compliant, but has only 16-bit PCM
1174 	 * and no MIDI.
1175 	 */
1176 	USB_DEVICE_VENDOR_SPEC(0x0582, 0x003b),
1177 	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1178 		.vendor_name = "BOSS",
1179 		.product_name = "GS-10",
1180 		.ifnum = QUIRK_ANY_INTERFACE,
1181 		.type = QUIRK_COMPOSITE,
1182 		.data = & (const struct snd_usb_audio_quirk[]) {
1183 			{
1184 				.ifnum = 1,
1185 				.type = QUIRK_AUDIO_STANDARD_INTERFACE
1186 			},
1187 			{
1188 				.ifnum = 2,
1189 				.type = QUIRK_AUDIO_STANDARD_INTERFACE
1190 			},
1191 			{
1192 				.ifnum = 3,
1193 				.type = QUIRK_MIDI_STANDARD_INTERFACE
1194 			},
1195 			{
1196 				.ifnum = -1
1197 			}
1198 		}
1199 	}
1200 },
1201 {
1202 	/* has ID 0x0041 when not in "Advanced Driver" mode */
1203 	USB_DEVICE(0x0582, 0x0040),
1204 	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1205 		.vendor_name = "Roland",
1206 		.product_name = "GI-20",
1207 		.ifnum = 0,
1208 		.type = QUIRK_MIDI_FIXED_ENDPOINT,
1209 		.data = & (const struct snd_usb_midi_endpoint_info) {
1210 			.out_cables = 0x0001,
1211 			.in_cables  = 0x0001
1212 		}
1213 	}
1214 },
1215 {
1216 	/* has ID 0x0043 when not in "Advanced Driver" mode */
1217 	USB_DEVICE(0x0582, 0x0042),
1218 	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1219 		.vendor_name = "Roland",
1220 		.product_name = "RS-70",
1221 		.ifnum = 0,
1222 		.type = QUIRK_MIDI_FIXED_ENDPOINT,
1223 		.data = & (const struct snd_usb_midi_endpoint_info) {
1224 			.out_cables = 0x0001,
1225 			.in_cables  = 0x0001
1226 		}
1227 	}
1228 },
1229 {
1230 	/* has ID 0x0049 when not in "Advanced Driver" mode */
1231 	USB_DEVICE(0x0582, 0x0047),
1232 	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1233 		/* .vendor_name = "EDIROL", */
1234 		/* .product_name = "UR-80", */
1235 		.ifnum = QUIRK_ANY_INTERFACE,
1236 		.type = QUIRK_COMPOSITE,
1237 		.data = (const struct snd_usb_audio_quirk[]) {
1238 			/* in the 96 kHz modes, only interface 1 is there */
1239 			{
1240 				.ifnum = 1,
1241 				.type = QUIRK_AUDIO_STANDARD_INTERFACE
1242 			},
1243 			{
1244 				.ifnum = 2,
1245 				.type = QUIRK_AUDIO_STANDARD_INTERFACE
1246 			},
1247 			{
1248 				.ifnum = -1
1249 			}
1250 		}
1251 	}
1252 },
1253 {
1254 	/* has ID 0x004a when not in "Advanced Driver" mode */
1255 	USB_DEVICE(0x0582, 0x0048),
1256 	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1257 		/* .vendor_name = "EDIROL", */
1258 		/* .product_name = "UR-80", */
1259 		.ifnum = 0,
1260 		.type = QUIRK_MIDI_FIXED_ENDPOINT,
1261 		.data = & (const struct snd_usb_midi_endpoint_info) {
1262 			.out_cables = 0x0003,
1263 			.in_cables  = 0x0007
1264 		}
1265 	}
1266 },
1267 {
1268 	/* has ID 0x004e when not in "Advanced Driver" mode */
1269 	USB_DEVICE(0x0582, 0x004c),
1270 	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1271 		.vendor_name = "EDIROL",
1272 		.product_name = "PCR-A",
1273 		.ifnum = QUIRK_ANY_INTERFACE,
1274 		.type = QUIRK_COMPOSITE,
1275 		.data = (const struct snd_usb_audio_quirk[]) {
1276 			{
1277 				.ifnum = 1,
1278 				.type = QUIRK_AUDIO_STANDARD_INTERFACE
1279 			},
1280 			{
1281 				.ifnum = 2,
1282 				.type = QUIRK_AUDIO_STANDARD_INTERFACE
1283 			},
1284 			{
1285 				.ifnum = -1
1286 			}
1287 		}
1288 	}
1289 },
1290 {
1291 	/* has ID 0x004f when not in "Advanced Driver" mode */
1292 	USB_DEVICE(0x0582, 0x004d),
1293 	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1294 		.vendor_name = "EDIROL",
1295 		.product_name = "PCR-A",
1296 		.ifnum = 0,
1297 		.type = QUIRK_MIDI_FIXED_ENDPOINT,
1298 		.data = & (const struct snd_usb_midi_endpoint_info) {
1299 			.out_cables = 0x0003,
1300 			.in_cables  = 0x0007
1301 		}
1302 	}
1303 },
1304 {
1305 	/*
1306 	 * This quirk is for the "Advanced Driver" mode. If off, the UA-3FX
1307 	 * is standard compliant, but has only 16-bit PCM.
1308 	 */
1309 	USB_DEVICE(0x0582, 0x0050),
1310 	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1311 		.vendor_name = "EDIROL",
1312 		.product_name = "UA-3FX",
1313 		.ifnum = QUIRK_ANY_INTERFACE,
1314 		.type = QUIRK_COMPOSITE,
1315 		.data = (const struct snd_usb_audio_quirk[]) {
1316 			{
1317 				.ifnum = 1,
1318 				.type = QUIRK_AUDIO_STANDARD_INTERFACE
1319 			},
1320 			{
1321 				.ifnum = 2,
1322 				.type = QUIRK_AUDIO_STANDARD_INTERFACE
1323 			},
1324 			{
1325 				.ifnum = -1
1326 			}
1327 		}
1328 	}
1329 },
1330 {
1331 	USB_DEVICE(0x0582, 0x0052),
1332 	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1333 		.vendor_name = "EDIROL",
1334 		.product_name = "UM-1SX",
1335 		.ifnum = 0,
1336 		.type = QUIRK_MIDI_STANDARD_INTERFACE
1337 	}
1338 },
1339 {
1340 	USB_DEVICE(0x0582, 0x0060),
1341 	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1342 		.vendor_name = "Roland",
1343 		.product_name = "EXR Series",
1344 		.ifnum = 0,
1345 		.type = QUIRK_MIDI_STANDARD_INTERFACE
1346 	}
1347 },
1348 {
1349 	/* has ID 0x0066 when not in "Advanced Driver" mode */
1350 	USB_DEVICE(0x0582, 0x0064),
1351 	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1352 		/* .vendor_name = "EDIROL", */
1353 		/* .product_name = "PCR-1", */
1354 		.ifnum = QUIRK_ANY_INTERFACE,
1355 		.type = QUIRK_COMPOSITE,
1356 		.data = (const struct snd_usb_audio_quirk[]) {
1357 			{
1358 				.ifnum = 1,
1359 				.type = QUIRK_AUDIO_STANDARD_INTERFACE
1360 			},
1361 			{
1362 				.ifnum = 2,
1363 				.type = QUIRK_AUDIO_STANDARD_INTERFACE
1364 			},
1365 			{
1366 				.ifnum = -1
1367 			}
1368 		}
1369 	}
1370 },
1371 {
1372 	/* has ID 0x0067 when not in "Advanced Driver" mode */
1373 	USB_DEVICE(0x0582, 0x0065),
1374 	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1375 		/* .vendor_name = "EDIROL", */
1376 		/* .product_name = "PCR-1", */
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  = 0x0003
1382 		}
1383 	}
1384 },
1385 {
1386 	/* has ID 0x006e when not in "Advanced Driver" mode */
1387 	USB_DEVICE(0x0582, 0x006d),
1388 	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1389 		.vendor_name = "Roland",
1390 		.product_name = "FANTOM-X",
1391 		.ifnum = 0,
1392 		.type = QUIRK_MIDI_FIXED_ENDPOINT,
1393 		.data = & (const struct snd_usb_midi_endpoint_info) {
1394 			.out_cables = 0x0001,
1395 			.in_cables  = 0x0001
1396 		}
1397 	}
1398 },
1399 {	/*
1400 	 * This quirk is for the "Advanced" modes of the Edirol UA-25.
1401 	 * If the switch is not in an advanced setting, the UA-25 has
1402 	 * ID 0x0582/0x0073 and is standard compliant (no quirks), but
1403 	 * offers only 16-bit PCM at 44.1 kHz and no MIDI.
1404 	 */
1405 	USB_DEVICE_VENDOR_SPEC(0x0582, 0x0074),
1406 	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1407 		.vendor_name = "EDIROL",
1408 		.product_name = "UA-25",
1409 		.ifnum = QUIRK_ANY_INTERFACE,
1410 		.type = QUIRK_COMPOSITE,
1411 		.data = (const struct snd_usb_audio_quirk[]) {
1412 			{
1413 				.ifnum = 0,
1414 				.type = QUIRK_AUDIO_EDIROL_UAXX
1415 			},
1416 			{
1417 				.ifnum = 1,
1418 				.type = QUIRK_AUDIO_EDIROL_UAXX
1419 			},
1420 			{
1421 				.ifnum = 2,
1422 				.type = QUIRK_AUDIO_EDIROL_UAXX
1423 			},
1424 			{
1425 				.ifnum = -1
1426 			}
1427 		}
1428 	}
1429 },
1430 {
1431 	/* has ID 0x0076 when not in "Advanced Driver" mode */
1432 	USB_DEVICE(0x0582, 0x0075),
1433 	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1434 		.vendor_name = "BOSS",
1435 		.product_name = "DR-880",
1436 		.ifnum = 0,
1437 		.type = QUIRK_MIDI_FIXED_ENDPOINT,
1438 		.data = & (const struct snd_usb_midi_endpoint_info) {
1439 			.out_cables = 0x0001,
1440 			.in_cables  = 0x0001
1441 		}
1442 	}
1443 },
1444 {
1445 	/* has ID 0x007b when not in "Advanced Driver" mode */
1446 	USB_DEVICE_VENDOR_SPEC(0x0582, 0x007a),
1447 	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1448 		.vendor_name = "Roland",
1449 		/* "RD" or "RD-700SX"? */
1450 		.ifnum = 0,
1451 		.type = QUIRK_MIDI_FIXED_ENDPOINT,
1452 		.data = & (const struct snd_usb_midi_endpoint_info) {
1453 			.out_cables = 0x0003,
1454 			.in_cables  = 0x0003
1455 		}
1456 	}
1457 },
1458 {
1459 	/* has ID 0x0081 when not in "Advanced Driver" mode */
1460 	USB_DEVICE(0x0582, 0x0080),
1461 	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1462 		.vendor_name = "Roland",
1463 		.product_name = "G-70",
1464 		.ifnum = 0,
1465 		.type = QUIRK_MIDI_FIXED_ENDPOINT,
1466 		.data = & (const struct snd_usb_midi_endpoint_info) {
1467 			.out_cables = 0x0001,
1468 			.in_cables  = 0x0001
1469 		}
1470 	}
1471 },
1472 {
1473 	/* has ID 0x008c when not in "Advanced Driver" mode */
1474 	USB_DEVICE(0x0582, 0x008b),
1475 	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1476 		.vendor_name = "EDIROL",
1477 		.product_name = "PC-50",
1478 		.ifnum = 0,
1479 		.type = QUIRK_MIDI_FIXED_ENDPOINT,
1480 		.data = & (const struct snd_usb_midi_endpoint_info) {
1481 			.out_cables = 0x0001,
1482 			.in_cables  = 0x0001
1483 		}
1484 	}
1485 },
1486 {
1487 	/*
1488 	 * This quirk is for the "Advanced Driver" mode. If off, the UA-4FX
1489 	 * is standard compliant, but has only 16-bit PCM and no MIDI.
1490 	 */
1491 	USB_DEVICE(0x0582, 0x00a3),
1492 	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1493 		.vendor_name = "EDIROL",
1494 		.product_name = "UA-4FX",
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 M-16DX */
1518 	USB_DEVICE(0x0582, 0x00c4),
1519 	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1520 		.ifnum = QUIRK_ANY_INTERFACE,
1521 		.type = QUIRK_COMPOSITE,
1522 		.data = (const struct snd_usb_audio_quirk[]) {
1523 			{
1524 				.ifnum = 0,
1525 				.type = QUIRK_AUDIO_STANDARD_INTERFACE
1526 			},
1527 			{
1528 				.ifnum = 1,
1529 				.type = QUIRK_AUDIO_STANDARD_INTERFACE
1530 			},
1531 			{
1532 				.ifnum = 2,
1533 				.type = QUIRK_MIDI_FIXED_ENDPOINT,
1534 				.data = & (const struct snd_usb_midi_endpoint_info) {
1535 					.out_cables = 0x0001,
1536 					.in_cables  = 0x0001
1537 				}
1538 			},
1539 			{
1540 				.ifnum = -1
1541 			}
1542 		}
1543 	}
1544 },
1545 {
1546 	/* Advanced modes of the Edirol UA-25EX.
1547 	 * For the standard mode, UA-25EX has ID 0582:00e7, which
1548 	 * offers only 16-bit PCM at 44.1 kHz and no MIDI.
1549 	 */
1550 	USB_DEVICE_VENDOR_SPEC(0x0582, 0x00e6),
1551 	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1552 		.vendor_name = "EDIROL",
1553 		.product_name = "UA-25EX",
1554 		.ifnum = QUIRK_ANY_INTERFACE,
1555 		.type = QUIRK_COMPOSITE,
1556 		.data = (const struct snd_usb_audio_quirk[]) {
1557 			{
1558 				.ifnum = 0,
1559 				.type = QUIRK_AUDIO_EDIROL_UAXX
1560 			},
1561 			{
1562 				.ifnum = 1,
1563 				.type = QUIRK_AUDIO_EDIROL_UAXX
1564 			},
1565 			{
1566 				.ifnum = 2,
1567 				.type = QUIRK_AUDIO_EDIROL_UAXX
1568 			},
1569 			{
1570 				.ifnum = -1
1571 			}
1572 		}
1573 	}
1574 },
1575 {
1576 	/* Edirol UM-3G */
1577 	USB_DEVICE_VENDOR_SPEC(0x0582, 0x0108),
1578 	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1579 		.ifnum = 0,
1580 		.type = QUIRK_MIDI_FIXED_ENDPOINT,
1581 		.data = & (const struct snd_usb_midi_endpoint_info) {
1582 			.out_cables = 0x0007,
1583 			.in_cables  = 0x0007
1584 		}
1585 	}
1586 },
1587 {
1588 	/* BOSS ME-25 */
1589 	USB_DEVICE(0x0582, 0x0113),
1590 	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1591 		.ifnum = QUIRK_ANY_INTERFACE,
1592 		.type = QUIRK_COMPOSITE,
1593 		.data = (const struct snd_usb_audio_quirk[]) {
1594 			{
1595 				.ifnum = 0,
1596 				.type = QUIRK_AUDIO_STANDARD_INTERFACE
1597 			},
1598 			{
1599 				.ifnum = 1,
1600 				.type = QUIRK_AUDIO_STANDARD_INTERFACE
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 = -1
1612 			}
1613 		}
1614 	}
1615 },
1616 {
1617 	/* only 44.1 kHz works at the moment */
1618 	USB_DEVICE(0x0582, 0x0120),
1619 	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1620 		/* .vendor_name = "Roland", */
1621 		/* .product_name = "OCTO-CAPTURE", */
1622 		.ifnum = QUIRK_ANY_INTERFACE,
1623 		.type = QUIRK_COMPOSITE,
1624 		.data = (const struct snd_usb_audio_quirk[]) {
1625 			{
1626 				.ifnum = 0,
1627 				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
1628 				.data = & (const struct audioformat) {
1629 					.formats = SNDRV_PCM_FMTBIT_S32_LE,
1630 					.channels = 10,
1631 					.iface = 0,
1632 					.altsetting = 1,
1633 					.altset_idx = 1,
1634 					.endpoint = 0x05,
1635 					.ep_attr = 0x05,
1636 					.rates = SNDRV_PCM_RATE_44100,
1637 					.rate_min = 44100,
1638 					.rate_max = 44100,
1639 					.nr_rates = 1,
1640 					.rate_table = (unsigned int[]) { 44100 }
1641 				}
1642 			},
1643 			{
1644 				.ifnum = 1,
1645 				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
1646 				.data = & (const struct audioformat) {
1647 					.formats = SNDRV_PCM_FMTBIT_S32_LE,
1648 					.channels = 12,
1649 					.iface = 1,
1650 					.altsetting = 1,
1651 					.altset_idx = 1,
1652 					.endpoint = 0x85,
1653 					.ep_attr = 0x25,
1654 					.rates = SNDRV_PCM_RATE_44100,
1655 					.rate_min = 44100,
1656 					.rate_max = 44100,
1657 					.nr_rates = 1,
1658 					.rate_table = (unsigned int[]) { 44100 }
1659 				}
1660 			},
1661 			{
1662 				.ifnum = 2,
1663 				.type = QUIRK_MIDI_FIXED_ENDPOINT,
1664 				.data = & (const struct snd_usb_midi_endpoint_info) {
1665 					.out_cables = 0x0001,
1666 					.in_cables  = 0x0001
1667 				}
1668 			},
1669 			{
1670 				.ifnum = 3,
1671 				.type = QUIRK_IGNORE_INTERFACE
1672 			},
1673 			{
1674 				.ifnum = 4,
1675 				.type = QUIRK_IGNORE_INTERFACE
1676 			},
1677 			{
1678 				.ifnum = -1
1679 			}
1680 		}
1681 	}
1682 },
1683 {
1684 	/* only 44.1 kHz works at the moment */
1685 	USB_DEVICE(0x0582, 0x012f),
1686 	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1687 		/* .vendor_name = "Roland", */
1688 		/* .product_name = "QUAD-CAPTURE", */
1689 		.ifnum = QUIRK_ANY_INTERFACE,
1690 		.type = QUIRK_COMPOSITE,
1691 		.data = (const struct snd_usb_audio_quirk[]) {
1692 			{
1693 				.ifnum = 0,
1694 				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
1695 				.data = & (const struct audioformat) {
1696 					.formats = SNDRV_PCM_FMTBIT_S32_LE,
1697 					.channels = 4,
1698 					.iface = 0,
1699 					.altsetting = 1,
1700 					.altset_idx = 1,
1701 					.endpoint = 0x05,
1702 					.ep_attr = 0x05,
1703 					.rates = SNDRV_PCM_RATE_44100,
1704 					.rate_min = 44100,
1705 					.rate_max = 44100,
1706 					.nr_rates = 1,
1707 					.rate_table = (unsigned int[]) { 44100 }
1708 				}
1709 			},
1710 			{
1711 				.ifnum = 1,
1712 				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
1713 				.data = & (const struct audioformat) {
1714 					.formats = SNDRV_PCM_FMTBIT_S32_LE,
1715 					.channels = 6,
1716 					.iface = 1,
1717 					.altsetting = 1,
1718 					.altset_idx = 1,
1719 					.endpoint = 0x85,
1720 					.ep_attr = 0x25,
1721 					.rates = SNDRV_PCM_RATE_44100,
1722 					.rate_min = 44100,
1723 					.rate_max = 44100,
1724 					.nr_rates = 1,
1725 					.rate_table = (unsigned int[]) { 44100 }
1726 				}
1727 			},
1728 			{
1729 				.ifnum = 2,
1730 				.type = QUIRK_MIDI_FIXED_ENDPOINT,
1731 				.data = & (const struct snd_usb_midi_endpoint_info) {
1732 					.out_cables = 0x0001,
1733 					.in_cables  = 0x0001
1734 				}
1735 			},
1736 			{
1737 				.ifnum = 3,
1738 				.type = QUIRK_IGNORE_INTERFACE
1739 			},
1740 			{
1741 				.ifnum = 4,
1742 				.type = QUIRK_IGNORE_INTERFACE
1743 			},
1744 			{
1745 				.ifnum = -1
1746 			}
1747 		}
1748 	}
1749 },
1750 {
1751 	USB_DEVICE(0x0582, 0x0159),
1752 	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1753 		/* .vendor_name = "Roland", */
1754 		/* .product_name = "UA-22", */
1755 		.ifnum = QUIRK_ANY_INTERFACE,
1756 		.type = QUIRK_COMPOSITE,
1757 		.data = (const struct snd_usb_audio_quirk[]) {
1758 			{
1759 				.ifnum = 0,
1760 				.type = QUIRK_AUDIO_STANDARD_INTERFACE
1761 			},
1762 			{
1763 				.ifnum = 1,
1764 				.type = QUIRK_AUDIO_STANDARD_INTERFACE
1765 			},
1766 			{
1767 				.ifnum = 2,
1768 				.type = QUIRK_MIDI_FIXED_ENDPOINT,
1769 				.data = & (const struct snd_usb_midi_endpoint_info) {
1770 					.out_cables = 0x0001,
1771 					.in_cables = 0x0001
1772 				}
1773 			},
1774 			{
1775 				.ifnum = -1
1776 			}
1777 		}
1778 	}
1779 },
1780 /* this catches most recent vendor-specific Roland devices */
1781 {
1782 	.match_flags = USB_DEVICE_ID_MATCH_VENDOR |
1783 	               USB_DEVICE_ID_MATCH_INT_CLASS,
1784 	.idVendor = 0x0582,
1785 	.bInterfaceClass = USB_CLASS_VENDOR_SPEC,
1786 	.driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
1787 		.ifnum = QUIRK_ANY_INTERFACE,
1788 		.type = QUIRK_AUTODETECT
1789 	}
1790 },
1791 
1792 /* Guillemot devices */
1793 {
1794 	/*
1795 	 * This is for the "Windows Edition" where the external MIDI ports are
1796 	 * the only MIDI ports; the control data is reported through HID
1797 	 * interfaces.  The "Macintosh Edition" has ID 0xd002 and uses standard
1798 	 * compliant USB MIDI ports for external MIDI and controls.
1799 	 */
1800 	USB_DEVICE_VENDOR_SPEC(0x06f8, 0xb000),
1801 	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1802 		.vendor_name = "Hercules",
1803 		.product_name = "DJ Console (WE)",
1804 		.ifnum = 4,
1805 		.type = QUIRK_MIDI_FIXED_ENDPOINT,
1806 		.data = & (const struct snd_usb_midi_endpoint_info) {
1807 			.out_cables = 0x0001,
1808 			.in_cables = 0x0001
1809 		}
1810 	}
1811 },
1812 
1813 /* Midiman/M-Audio devices */
1814 {
1815 	USB_DEVICE_VENDOR_SPEC(0x0763, 0x1002),
1816 	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1817 		.vendor_name = "M-Audio",
1818 		.product_name = "MidiSport 2x2",
1819 		.ifnum = QUIRK_ANY_INTERFACE,
1820 		.type = QUIRK_MIDI_MIDIMAN,
1821 		.data = & (const struct snd_usb_midi_endpoint_info) {
1822 			.out_cables = 0x0003,
1823 			.in_cables  = 0x0003
1824 		}
1825 	}
1826 },
1827 {
1828 	USB_DEVICE_VENDOR_SPEC(0x0763, 0x1011),
1829 	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1830 		.vendor_name = "M-Audio",
1831 		.product_name = "MidiSport 1x1",
1832 		.ifnum = QUIRK_ANY_INTERFACE,
1833 		.type = QUIRK_MIDI_MIDIMAN,
1834 		.data = & (const struct snd_usb_midi_endpoint_info) {
1835 			.out_cables = 0x0001,
1836 			.in_cables  = 0x0001
1837 		}
1838 	}
1839 },
1840 {
1841 	USB_DEVICE_VENDOR_SPEC(0x0763, 0x1015),
1842 	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1843 		.vendor_name = "M-Audio",
1844 		.product_name = "Keystation",
1845 		.ifnum = QUIRK_ANY_INTERFACE,
1846 		.type = QUIRK_MIDI_MIDIMAN,
1847 		.data = & (const struct snd_usb_midi_endpoint_info) {
1848 			.out_cables = 0x0001,
1849 			.in_cables  = 0x0001
1850 		}
1851 	}
1852 },
1853 {
1854 	USB_DEVICE_VENDOR_SPEC(0x0763, 0x1021),
1855 	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1856 		.vendor_name = "M-Audio",
1857 		.product_name = "MidiSport 4x4",
1858 		.ifnum = QUIRK_ANY_INTERFACE,
1859 		.type = QUIRK_MIDI_MIDIMAN,
1860 		.data = & (const struct snd_usb_midi_endpoint_info) {
1861 			.out_cables = 0x000f,
1862 			.in_cables  = 0x000f
1863 		}
1864 	}
1865 },
1866 {
1867 	/*
1868 	 * For hardware revision 1.05; in the later revisions (1.10 and
1869 	 * 1.21), 0x1031 is the ID for the device without firmware.
1870 	 * Thanks to Olaf Giesbrecht <Olaf_Giesbrecht@yahoo.de>
1871 	 */
1872 	USB_DEVICE_VER(0x0763, 0x1031, 0x0100, 0x0109),
1873 	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1874 		.vendor_name = "M-Audio",
1875 		.product_name = "MidiSport 8x8",
1876 		.ifnum = QUIRK_ANY_INTERFACE,
1877 		.type = QUIRK_MIDI_MIDIMAN,
1878 		.data = & (const struct snd_usb_midi_endpoint_info) {
1879 			.out_cables = 0x01ff,
1880 			.in_cables  = 0x01ff
1881 		}
1882 	}
1883 },
1884 {
1885 	USB_DEVICE_VENDOR_SPEC(0x0763, 0x1033),
1886 	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1887 		.vendor_name = "M-Audio",
1888 		.product_name = "MidiSport 8x8",
1889 		.ifnum = QUIRK_ANY_INTERFACE,
1890 		.type = QUIRK_MIDI_MIDIMAN,
1891 		.data = & (const struct snd_usb_midi_endpoint_info) {
1892 			.out_cables = 0x01ff,
1893 			.in_cables  = 0x01ff
1894 		}
1895 	}
1896 },
1897 {
1898 	USB_DEVICE_VENDOR_SPEC(0x0763, 0x1041),
1899 	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1900 		.vendor_name = "M-Audio",
1901 		.product_name = "MidiSport 2x4",
1902 		.ifnum = QUIRK_ANY_INTERFACE,
1903 		.type = QUIRK_MIDI_MIDIMAN,
1904 		.data = & (const struct snd_usb_midi_endpoint_info) {
1905 			.out_cables = 0x000f,
1906 			.in_cables  = 0x0003
1907 		}
1908 	}
1909 },
1910 {
1911 	USB_DEVICE_VENDOR_SPEC(0x0763, 0x2001),
1912 	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1913 		.vendor_name = "M-Audio",
1914 		.product_name = "Quattro",
1915 		.ifnum = QUIRK_ANY_INTERFACE,
1916 		.type = QUIRK_COMPOSITE,
1917 		.data = & (const struct snd_usb_audio_quirk[]) {
1918 			/*
1919 			 * Interfaces 0-2 are "Windows-compatible", 16-bit only,
1920 			 * and share endpoints with the other interfaces.
1921 			 * Ignore them.  The other interfaces can do 24 bits,
1922 			 * but captured samples are big-endian (see usbaudio.c).
1923 			 */
1924 			{
1925 				.ifnum = 0,
1926 				.type = QUIRK_IGNORE_INTERFACE
1927 			},
1928 			{
1929 				.ifnum = 1,
1930 				.type = QUIRK_IGNORE_INTERFACE
1931 			},
1932 			{
1933 				.ifnum = 2,
1934 				.type = QUIRK_IGNORE_INTERFACE
1935 			},
1936 			{
1937 				.ifnum = 3,
1938 				.type = QUIRK_IGNORE_INTERFACE
1939 			},
1940 			{
1941 				.ifnum = 4,
1942 				.type = QUIRK_AUDIO_STANDARD_INTERFACE
1943 			},
1944 			{
1945 				.ifnum = 5,
1946 				.type = QUIRK_AUDIO_STANDARD_INTERFACE
1947 			},
1948 			{
1949 				.ifnum = 6,
1950 				.type = QUIRK_IGNORE_INTERFACE
1951 			},
1952 			{
1953 				.ifnum = 7,
1954 				.type = QUIRK_AUDIO_STANDARD_INTERFACE
1955 			},
1956 			{
1957 				.ifnum = 8,
1958 				.type = QUIRK_AUDIO_STANDARD_INTERFACE
1959 			},
1960 			{
1961 				.ifnum = 9,
1962 				.type = QUIRK_MIDI_MIDIMAN,
1963 				.data = & (const struct snd_usb_midi_endpoint_info) {
1964 					.out_cables = 0x0001,
1965 					.in_cables  = 0x0001
1966 				}
1967 			},
1968 			{
1969 				.ifnum = -1
1970 			}
1971 		}
1972 	}
1973 },
1974 {
1975 	USB_DEVICE_VENDOR_SPEC(0x0763, 0x2003),
1976 	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1977 		.vendor_name = "M-Audio",
1978 		.product_name = "AudioPhile",
1979 		.ifnum = 6,
1980 		.type = QUIRK_MIDI_MIDIMAN,
1981 		.data = & (const struct snd_usb_midi_endpoint_info) {
1982 			.out_cables = 0x0001,
1983 			.in_cables  = 0x0001
1984 		}
1985 	}
1986 },
1987 {
1988 	USB_DEVICE_VENDOR_SPEC(0x0763, 0x2008),
1989 	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1990 		.vendor_name = "M-Audio",
1991 		.product_name = "Ozone",
1992 		.ifnum = 3,
1993 		.type = QUIRK_MIDI_MIDIMAN,
1994 		.data = & (const struct snd_usb_midi_endpoint_info) {
1995 			.out_cables = 0x0001,
1996 			.in_cables  = 0x0001
1997 		}
1998 	}
1999 },
2000 {
2001 	USB_DEVICE_VENDOR_SPEC(0x0763, 0x200d),
2002 	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2003 		.vendor_name = "M-Audio",
2004 		.product_name = "OmniStudio",
2005 		.ifnum = QUIRK_ANY_INTERFACE,
2006 		.type = QUIRK_COMPOSITE,
2007 		.data = & (const struct snd_usb_audio_quirk[]) {
2008 			{
2009 				.ifnum = 0,
2010 				.type = QUIRK_IGNORE_INTERFACE
2011 			},
2012 			{
2013 				.ifnum = 1,
2014 				.type = QUIRK_IGNORE_INTERFACE
2015 			},
2016 			{
2017 				.ifnum = 2,
2018 				.type = QUIRK_IGNORE_INTERFACE
2019 			},
2020 			{
2021 				.ifnum = 3,
2022 				.type = QUIRK_IGNORE_INTERFACE
2023 			},
2024 			{
2025 				.ifnum = 4,
2026 				.type = QUIRK_AUDIO_STANDARD_INTERFACE
2027 			},
2028 			{
2029 				.ifnum = 5,
2030 				.type = QUIRK_AUDIO_STANDARD_INTERFACE
2031 			},
2032 			{
2033 				.ifnum = 6,
2034 				.type = QUIRK_IGNORE_INTERFACE
2035 			},
2036 			{
2037 				.ifnum = 7,
2038 				.type = QUIRK_AUDIO_STANDARD_INTERFACE
2039 			},
2040 			{
2041 				.ifnum = 8,
2042 				.type = QUIRK_AUDIO_STANDARD_INTERFACE
2043 			},
2044 			{
2045 				.ifnum = 9,
2046 				.type = QUIRK_MIDI_MIDIMAN,
2047 				.data = & (const struct snd_usb_midi_endpoint_info) {
2048 					.out_cables = 0x0001,
2049 					.in_cables  = 0x0001
2050 				}
2051 			},
2052 			{
2053 				.ifnum = -1
2054 			}
2055 		}
2056 	}
2057 },
2058 {
2059 	USB_DEVICE(0x0763, 0x2019),
2060 	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2061 		/* .vendor_name = "M-Audio", */
2062 		/* .product_name = "Ozone Academic", */
2063 		.ifnum = QUIRK_ANY_INTERFACE,
2064 		.type = QUIRK_COMPOSITE,
2065 		.data = & (const struct snd_usb_audio_quirk[]) {
2066 			{
2067 				.ifnum = 0,
2068 				.type = QUIRK_AUDIO_STANDARD_INTERFACE
2069 			},
2070 			{
2071 				.ifnum = 1,
2072 				.type = QUIRK_AUDIO_STANDARD_INTERFACE
2073 			},
2074 			{
2075 				.ifnum = 2,
2076 				.type = QUIRK_AUDIO_STANDARD_INTERFACE
2077 			},
2078 			{
2079 				.ifnum = 3,
2080 				.type = QUIRK_MIDI_MIDIMAN,
2081 				.data = & (const struct snd_usb_midi_endpoint_info) {
2082 					.out_cables = 0x0001,
2083 					.in_cables  = 0x0001
2084 				}
2085 			},
2086 			{
2087 				.ifnum = -1
2088 			}
2089 		}
2090 	}
2091 },
2092 {
2093 	USB_DEVICE_VENDOR_SPEC(0x0763, 0x2030),
2094 	.driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
2095 		/* .vendor_name = "M-Audio", */
2096 		/* .product_name = "Fast Track C400", */
2097 		.ifnum = QUIRK_ANY_INTERFACE,
2098 		.type = QUIRK_COMPOSITE,
2099 		.data = &(const struct snd_usb_audio_quirk[]) {
2100 			{
2101 				.ifnum = 1,
2102 				.type = QUIRK_AUDIO_STANDARD_MIXER,
2103 			},
2104 			/* Playback */
2105 			{
2106 				.ifnum = 2,
2107 				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
2108 				.data = &(const struct audioformat) {
2109 					.formats = SNDRV_PCM_FMTBIT_S24_3LE,
2110 					.channels = 6,
2111 					.iface = 2,
2112 					.altsetting = 1,
2113 					.altset_idx = 1,
2114 					.attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
2115 					.endpoint = 0x01,
2116 					.ep_attr = 0x09,
2117 					.rates = SNDRV_PCM_RATE_44100 |
2118 						 SNDRV_PCM_RATE_48000 |
2119 						 SNDRV_PCM_RATE_88200 |
2120 						 SNDRV_PCM_RATE_96000,
2121 					.rate_min = 44100,
2122 					.rate_max = 96000,
2123 					.nr_rates = 4,
2124 					.rate_table = (unsigned int[]) {
2125 							44100, 48000, 88200, 96000
2126 					},
2127 					.clock = 0x80,
2128 				}
2129 			},
2130 			/* Capture */
2131 			{
2132 				.ifnum = 3,
2133 				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
2134 				.data = &(const struct audioformat) {
2135 					.formats = SNDRV_PCM_FMTBIT_S24_3LE,
2136 					.channels = 4,
2137 					.iface = 3,
2138 					.altsetting = 1,
2139 					.altset_idx = 1,
2140 					.attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
2141 					.endpoint = 0x81,
2142 					.ep_attr = 0x05,
2143 					.rates = SNDRV_PCM_RATE_44100 |
2144 						 SNDRV_PCM_RATE_48000 |
2145 						 SNDRV_PCM_RATE_88200 |
2146 						 SNDRV_PCM_RATE_96000,
2147 					.rate_min = 44100,
2148 					.rate_max = 96000,
2149 					.nr_rates = 4,
2150 					.rate_table = (unsigned int[]) {
2151 						44100, 48000, 88200, 96000
2152 					},
2153 					.clock = 0x80,
2154 				}
2155 			},
2156 			/* MIDI */
2157 			{
2158 				.ifnum = -1 /* Interface = 4 */
2159 			}
2160 		}
2161 	}
2162 },
2163 {
2164 	USB_DEVICE_VENDOR_SPEC(0x0763, 0x2031),
2165 	.driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
2166 		/* .vendor_name = "M-Audio", */
2167 		/* .product_name = "Fast Track C600", */
2168 		.ifnum = QUIRK_ANY_INTERFACE,
2169 		.type = QUIRK_COMPOSITE,
2170 		.data = &(const struct snd_usb_audio_quirk[]) {
2171 			{
2172 				.ifnum = 1,
2173 				.type = QUIRK_AUDIO_STANDARD_MIXER,
2174 			},
2175 			/* Playback */
2176 			{
2177 				.ifnum = 2,
2178 				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
2179 				.data = &(const struct audioformat) {
2180 					.formats = SNDRV_PCM_FMTBIT_S24_3LE,
2181 					.channels = 8,
2182 					.iface = 2,
2183 					.altsetting = 1,
2184 					.altset_idx = 1,
2185 					.attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
2186 					.endpoint = 0x01,
2187 					.ep_attr = 0x09,
2188 					.rates = SNDRV_PCM_RATE_44100 |
2189 						 SNDRV_PCM_RATE_48000 |
2190 						 SNDRV_PCM_RATE_88200 |
2191 						 SNDRV_PCM_RATE_96000,
2192 					.rate_min = 44100,
2193 					.rate_max = 96000,
2194 					.nr_rates = 4,
2195 					.rate_table = (unsigned int[]) {
2196 							44100, 48000, 88200, 96000
2197 					},
2198 					.clock = 0x80,
2199 				}
2200 			},
2201 			/* Capture */
2202 			{
2203 				.ifnum = 3,
2204 				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
2205 				.data = &(const struct audioformat) {
2206 					.formats = SNDRV_PCM_FMTBIT_S24_3LE,
2207 					.channels = 6,
2208 					.iface = 3,
2209 					.altsetting = 1,
2210 					.altset_idx = 1,
2211 					.attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
2212 					.endpoint = 0x81,
2213 					.ep_attr = 0x05,
2214 					.rates = SNDRV_PCM_RATE_44100 |
2215 						 SNDRV_PCM_RATE_48000 |
2216 						 SNDRV_PCM_RATE_88200 |
2217 						 SNDRV_PCM_RATE_96000,
2218 					.rate_min = 44100,
2219 					.rate_max = 96000,
2220 					.nr_rates = 4,
2221 					.rate_table = (unsigned int[]) {
2222 						44100, 48000, 88200, 96000
2223 					},
2224 					.clock = 0x80,
2225 				}
2226 			},
2227 			/* MIDI */
2228 			{
2229 				.ifnum = -1 /* Interface = 4 */
2230 			}
2231 		}
2232 	}
2233 },
2234 {
2235 	USB_DEVICE_VENDOR_SPEC(0x0763, 0x2080),
2236 	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2237 		/* .vendor_name = "M-Audio", */
2238 		/* .product_name = "Fast Track Ultra", */
2239 		.ifnum = QUIRK_ANY_INTERFACE,
2240 		.type = QUIRK_COMPOSITE,
2241 		.data = & (const struct snd_usb_audio_quirk[]) {
2242 			{
2243 				.ifnum = 0,
2244 				.type = QUIRK_AUDIO_STANDARD_MIXER,
2245 			},
2246 			{
2247 				.ifnum = 1,
2248 				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
2249 				.data = & (const struct audioformat) {
2250 					.formats = SNDRV_PCM_FMTBIT_S24_3LE,
2251 					.channels = 8,
2252 					.iface = 1,
2253 					.altsetting = 1,
2254 					.altset_idx = 1,
2255 					.attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
2256 					.endpoint = 0x01,
2257 					.ep_attr = 0x09,
2258 					.rates = SNDRV_PCM_RATE_44100 |
2259 						 SNDRV_PCM_RATE_48000 |
2260 						 SNDRV_PCM_RATE_88200 |
2261 						 SNDRV_PCM_RATE_96000,
2262 					.rate_min = 44100,
2263 					.rate_max = 96000,
2264 					.nr_rates = 4,
2265 					.rate_table = (unsigned int[]) {
2266 						44100, 48000, 88200, 96000
2267 					}
2268 				}
2269 			},
2270 			{
2271 				.ifnum = 2,
2272 				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
2273 				.data = & (const struct audioformat) {
2274 					.formats = SNDRV_PCM_FMTBIT_S24_3LE,
2275 					.channels = 8,
2276 					.iface = 2,
2277 					.altsetting = 1,
2278 					.altset_idx = 1,
2279 					.attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
2280 					.endpoint = 0x81,
2281 					.ep_attr = 0x05,
2282 					.rates = SNDRV_PCM_RATE_44100 |
2283 						 SNDRV_PCM_RATE_48000 |
2284 						 SNDRV_PCM_RATE_88200 |
2285 						 SNDRV_PCM_RATE_96000,
2286 					.rate_min = 44100,
2287 					.rate_max = 96000,
2288 					.nr_rates = 4,
2289 					.rate_table = (unsigned int[]) {
2290 						44100, 48000, 88200, 96000
2291 					}
2292 				}
2293 			},
2294 			/* interface 3 (MIDI) is standard compliant */
2295 			{
2296 				.ifnum = -1
2297 			}
2298 		}
2299 	}
2300 },
2301 {
2302 	USB_DEVICE_VENDOR_SPEC(0x0763, 0x2081),
2303 	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2304 		/* .vendor_name = "M-Audio", */
2305 		/* .product_name = "Fast Track Ultra 8R", */
2306 		.ifnum = QUIRK_ANY_INTERFACE,
2307 		.type = QUIRK_COMPOSITE,
2308 		.data = & (const struct snd_usb_audio_quirk[]) {
2309 			{
2310 				.ifnum = 0,
2311 				.type = QUIRK_AUDIO_STANDARD_MIXER,
2312 			},
2313 			{
2314 				.ifnum = 1,
2315 				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
2316 				.data = & (const struct audioformat) {
2317 					.formats = SNDRV_PCM_FMTBIT_S24_3LE,
2318 					.channels = 8,
2319 					.iface = 1,
2320 					.altsetting = 1,
2321 					.altset_idx = 1,
2322 					.attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
2323 					.endpoint = 0x01,
2324 					.ep_attr = 0x09,
2325 					.rates = SNDRV_PCM_RATE_44100 |
2326 						 SNDRV_PCM_RATE_48000 |
2327 						 SNDRV_PCM_RATE_88200 |
2328 						 SNDRV_PCM_RATE_96000,
2329 					.rate_min = 44100,
2330 					.rate_max = 96000,
2331 					.nr_rates = 4,
2332 					.rate_table = (unsigned int[]) {
2333 							44100, 48000, 88200, 96000
2334 					}
2335 				}
2336 			},
2337 			{
2338 				.ifnum = 2,
2339 				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
2340 				.data = & (const struct audioformat) {
2341 					.formats = SNDRV_PCM_FMTBIT_S24_3LE,
2342 					.channels = 8,
2343 					.iface = 2,
2344 					.altsetting = 1,
2345 					.altset_idx = 1,
2346 					.attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
2347 					.endpoint = 0x81,
2348 					.ep_attr = 0x05,
2349 					.rates = SNDRV_PCM_RATE_44100 |
2350 						 SNDRV_PCM_RATE_48000 |
2351 						 SNDRV_PCM_RATE_88200 |
2352 						 SNDRV_PCM_RATE_96000,
2353 					.rate_min = 44100,
2354 					.rate_max = 96000,
2355 					.nr_rates = 4,
2356 					.rate_table = (unsigned int[]) {
2357 						44100, 48000, 88200, 96000
2358 					}
2359 				}
2360 			},
2361 			/* interface 3 (MIDI) is standard compliant */
2362 			{
2363 				.ifnum = -1
2364 			}
2365 		}
2366 	}
2367 },
2368 
2369 /* Casio devices */
2370 {
2371 	USB_DEVICE(0x07cf, 0x6801),
2372 	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2373 		.vendor_name = "Casio",
2374 		.product_name = "PL-40R",
2375 		.ifnum = 0,
2376 		.type = QUIRK_MIDI_YAMAHA
2377 	}
2378 },
2379 {
2380 	/* this ID is used by several devices without a product ID */
2381 	USB_DEVICE(0x07cf, 0x6802),
2382 	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2383 		.vendor_name = "Casio",
2384 		.product_name = "Keyboard",
2385 		.ifnum = 0,
2386 		.type = QUIRK_MIDI_YAMAHA
2387 	}
2388 },
2389 
2390 /* Mark of the Unicorn devices */
2391 {
2392 	/* thanks to Robert A. Lerche <ral 'at' msbit.com> */
2393 	.match_flags = USB_DEVICE_ID_MATCH_VENDOR |
2394 		       USB_DEVICE_ID_MATCH_PRODUCT |
2395 		       USB_DEVICE_ID_MATCH_DEV_SUBCLASS,
2396 	.idVendor = 0x07fd,
2397 	.idProduct = 0x0001,
2398 	.bDeviceSubClass = 2,
2399 	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2400 		.vendor_name = "MOTU",
2401 		.product_name = "Fastlane",
2402 		.ifnum = QUIRK_ANY_INTERFACE,
2403 		.type = QUIRK_COMPOSITE,
2404 		.data = & (const struct snd_usb_audio_quirk[]) {
2405 			{
2406 				.ifnum = 0,
2407 				.type = QUIRK_MIDI_RAW_BYTES
2408 			},
2409 			{
2410 				.ifnum = 1,
2411 				.type = QUIRK_IGNORE_INTERFACE
2412 			},
2413 			{
2414 				.ifnum = -1
2415 			}
2416 		}
2417 	}
2418 },
2419 
2420 /* Emagic devices */
2421 {
2422 	USB_DEVICE(0x086a, 0x0001),
2423 	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2424 		.vendor_name = "Emagic",
2425 		/* .product_name = "Unitor8", */
2426 		.ifnum = 2,
2427 		.type = QUIRK_MIDI_EMAGIC,
2428 		.data = & (const struct snd_usb_midi_endpoint_info) {
2429 			.out_cables = 0x80ff,
2430 			.in_cables  = 0x80ff
2431 		}
2432 	}
2433 },
2434 {
2435 	USB_DEVICE(0x086a, 0x0002),
2436 	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2437 		.vendor_name = "Emagic",
2438 		/* .product_name = "AMT8", */
2439 		.ifnum = 2,
2440 		.type = QUIRK_MIDI_EMAGIC,
2441 		.data = & (const struct snd_usb_midi_endpoint_info) {
2442 			.out_cables = 0x80ff,
2443 			.in_cables  = 0x80ff
2444 		}
2445 	}
2446 },
2447 {
2448 	USB_DEVICE(0x086a, 0x0003),
2449 	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2450 		.vendor_name = "Emagic",
2451 		/* .product_name = "MT4", */
2452 		.ifnum = 2,
2453 		.type = QUIRK_MIDI_EMAGIC,
2454 		.data = & (const struct snd_usb_midi_endpoint_info) {
2455 			.out_cables = 0x800f,
2456 			.in_cables  = 0x8003
2457 		}
2458 	}
2459 },
2460 
2461 /* KORG devices */
2462 {
2463 	USB_DEVICE_VENDOR_SPEC(0x0944, 0x0200),
2464 	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2465 		.vendor_name = "KORG, Inc.",
2466 		/* .product_name = "PANDORA PX5D", */
2467 		.ifnum = 3,
2468 		.type = QUIRK_MIDI_STANDARD_INTERFACE,
2469 	}
2470 },
2471 
2472 {
2473 	USB_DEVICE_VENDOR_SPEC(0x0944, 0x0201),
2474 	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2475 		.vendor_name = "KORG, Inc.",
2476 		/* .product_name = "ToneLab ST", */
2477 		.ifnum = 3,
2478 		.type = QUIRK_MIDI_STANDARD_INTERFACE,
2479 	}
2480 },
2481 
2482 /* AKAI devices */
2483 {
2484 	USB_DEVICE(0x09e8, 0x0062),
2485 	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2486 		.vendor_name = "AKAI",
2487 		.product_name = "MPD16",
2488 		.ifnum = 0,
2489 		.type = QUIRK_MIDI_AKAI,
2490 	}
2491 },
2492 
2493 {
2494 	/* Akai MPC Element */
2495 	USB_DEVICE(0x09e8, 0x0021),
2496 	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2497 		.ifnum = QUIRK_ANY_INTERFACE,
2498 		.type = QUIRK_COMPOSITE,
2499 		.data = & (const struct snd_usb_audio_quirk[]) {
2500 			{
2501 				.ifnum = 0,
2502 				.type = QUIRK_IGNORE_INTERFACE
2503 			},
2504 			{
2505 				.ifnum = 1,
2506 				.type = QUIRK_MIDI_STANDARD_INTERFACE
2507 			},
2508 			{
2509 				.ifnum = -1
2510 			}
2511 		}
2512 	}
2513 },
2514 
2515 /* TerraTec devices */
2516 {
2517 	USB_DEVICE_VENDOR_SPEC(0x0ccd, 0x0012),
2518 	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2519 		.vendor_name = "TerraTec",
2520 		.product_name = "PHASE 26",
2521 		.ifnum = 3,
2522 		.type = QUIRK_MIDI_STANDARD_INTERFACE
2523 	}
2524 },
2525 {
2526 	USB_DEVICE_VENDOR_SPEC(0x0ccd, 0x0013),
2527 	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2528 		.vendor_name = "TerraTec",
2529 		.product_name = "PHASE 26",
2530 		.ifnum = 3,
2531 		.type = QUIRK_MIDI_STANDARD_INTERFACE
2532 	}
2533 },
2534 {
2535 	USB_DEVICE_VENDOR_SPEC(0x0ccd, 0x0014),
2536 	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2537 		.vendor_name = "TerraTec",
2538 		.product_name = "PHASE 26",
2539 		.ifnum = 3,
2540 		.type = QUIRK_MIDI_STANDARD_INTERFACE
2541 	}
2542 },
2543 {
2544 	USB_DEVICE(0x0ccd, 0x0028),
2545 	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2546 		.vendor_name = "TerraTec",
2547 		.product_name = "Aureon5.1MkII",
2548 		.ifnum = QUIRK_NO_INTERFACE
2549 	}
2550 },
2551 {
2552 	USB_DEVICE(0x0ccd, 0x0035),
2553 	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2554 		.vendor_name = "Miditech",
2555 		.product_name = "Play'n Roll",
2556 		.ifnum = 0,
2557 		.type = QUIRK_MIDI_CME
2558 	}
2559 },
2560 
2561 /* Stanton/N2IT Final Scratch v1 device ('Scratchamp') */
2562 {
2563 	USB_DEVICE(0x103d, 0x0100),
2564 		.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2565 		.vendor_name = "Stanton",
2566 		.product_name = "ScratchAmp",
2567 		.ifnum = QUIRK_NO_INTERFACE
2568 	}
2569 },
2570 {
2571 	USB_DEVICE(0x103d, 0x0101),
2572 		.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2573 		.vendor_name = "Stanton",
2574 		.product_name = "ScratchAmp",
2575 		.ifnum = QUIRK_NO_INTERFACE
2576 	}
2577 },
2578 
2579 /* Novation EMS devices */
2580 {
2581 	USB_DEVICE_VENDOR_SPEC(0x1235, 0x0001),
2582 	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2583 		.vendor_name = "Novation",
2584 		.product_name = "ReMOTE Audio/XStation",
2585 		.ifnum = 4,
2586 		.type = QUIRK_MIDI_NOVATION
2587 	}
2588 },
2589 {
2590 	USB_DEVICE_VENDOR_SPEC(0x1235, 0x0002),
2591 	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2592 		.vendor_name = "Novation",
2593 		.product_name = "Speedio",
2594 		.ifnum = 3,
2595 		.type = QUIRK_MIDI_NOVATION
2596 	}
2597 },
2598 {
2599 	USB_DEVICE(0x1235, 0x000e),
2600 	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2601 		/* .vendor_name = "Novation", */
2602 		/* .product_name = "Launchpad", */
2603 		.ifnum = 0,
2604 		.type = QUIRK_MIDI_RAW_BYTES
2605 	}
2606 },
2607 {
2608 	USB_DEVICE(0x1235, 0x0010),
2609 	.driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
2610 		.vendor_name = "Focusrite",
2611 		.product_name = "Saffire 6 USB",
2612 		.ifnum = QUIRK_ANY_INTERFACE,
2613 		.type = QUIRK_COMPOSITE,
2614 		.data = (const struct snd_usb_audio_quirk[]) {
2615 			{
2616 				.ifnum = 0,
2617 				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
2618 				.data = &(const struct audioformat) {
2619 					.formats = SNDRV_PCM_FMTBIT_S24_3LE,
2620 					.channels = 4,
2621 					.iface = 0,
2622 					.altsetting = 1,
2623 					.altset_idx = 1,
2624 					.attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
2625 					.endpoint = 0x01,
2626 					.ep_attr = USB_ENDPOINT_XFER_ISOC,
2627 					.rates = SNDRV_PCM_RATE_44100 |
2628 						 SNDRV_PCM_RATE_48000,
2629 					.rate_min = 44100,
2630 					.rate_max = 48000,
2631 					.nr_rates = 2,
2632 					.rate_table = (unsigned int[]) {
2633 						44100, 48000
2634 					}
2635 				}
2636 			},
2637 			{
2638 				.ifnum = 1,
2639 				.type = QUIRK_MIDI_RAW_BYTES
2640 			},
2641 			{
2642 				.ifnum = -1
2643 			}
2644 		}
2645 	}
2646 },
2647 {
2648 	USB_DEVICE(0x1235, 0x0018),
2649 	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2650 		.vendor_name = "Novation",
2651 		.product_name = "Twitch",
2652 		.ifnum = QUIRK_ANY_INTERFACE,
2653 		.type = QUIRK_COMPOSITE,
2654 		.data = (const struct snd_usb_audio_quirk[]) {
2655 			{
2656 				.ifnum = 0,
2657 				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
2658 				.data = & (const struct audioformat) {
2659 					.formats = SNDRV_PCM_FMTBIT_S24_3LE,
2660 					.channels = 4,
2661 					.iface = 0,
2662 					.altsetting = 1,
2663 					.altset_idx = 1,
2664 					.attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
2665 					.endpoint = 0x01,
2666 					.ep_attr = USB_ENDPOINT_XFER_ISOC,
2667 					.rates = SNDRV_PCM_RATE_44100 |
2668 						 SNDRV_PCM_RATE_48000,
2669 					.rate_min = 44100,
2670 					.rate_max = 48000,
2671 					.nr_rates = 2,
2672 					.rate_table = (unsigned int[]) {
2673 						44100, 48000
2674 					}
2675 				}
2676 			},
2677 			{
2678 				.ifnum = 1,
2679 				.type = QUIRK_MIDI_RAW_BYTES
2680 			},
2681 			{
2682 				.ifnum = -1
2683 			}
2684 		}
2685 	}
2686 },
2687 {
2688 	USB_DEVICE_VENDOR_SPEC(0x1235, 0x4661),
2689 	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2690 		.vendor_name = "Novation",
2691 		.product_name = "ReMOTE25",
2692 		.ifnum = 0,
2693 		.type = QUIRK_MIDI_NOVATION
2694 	}
2695 },
2696 
2697 /* Access Music devices */
2698 {
2699 	/* VirusTI Desktop */
2700 	USB_DEVICE_VENDOR_SPEC(0x133e, 0x0815),
2701 	.driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
2702 		.ifnum = QUIRK_ANY_INTERFACE,
2703 		.type = QUIRK_COMPOSITE,
2704 		.data = &(const struct snd_usb_audio_quirk[]) {
2705 			{
2706 				.ifnum = 3,
2707 				.type = QUIRK_MIDI_FIXED_ENDPOINT,
2708 				.data = &(const struct snd_usb_midi_endpoint_info) {
2709 					.out_cables = 0x0003,
2710 					.in_cables  = 0x0003
2711 				}
2712 			},
2713 			{
2714 				.ifnum = 4,
2715 				.type = QUIRK_IGNORE_INTERFACE
2716 			},
2717 			{
2718 				.ifnum = -1
2719 			}
2720 		}
2721 	}
2722 },
2723 
2724 /* */
2725 {
2726 	/* aka. Serato Scratch Live DJ Box */
2727 	USB_DEVICE(0x13e5, 0x0001),
2728 	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2729 		.vendor_name = "Rane",
2730 		.product_name = "SL-1",
2731 		.ifnum = QUIRK_NO_INTERFACE
2732 	}
2733 },
2734 
2735 /* Native Instruments MK2 series */
2736 {
2737 	/* Komplete Audio 6 */
2738 	.match_flags = USB_DEVICE_ID_MATCH_DEVICE,
2739 	.idVendor = 0x17cc,
2740 	.idProduct = 0x1000,
2741 },
2742 {
2743 	/* Traktor Audio 6 */
2744 	.match_flags = USB_DEVICE_ID_MATCH_DEVICE,
2745 	.idVendor = 0x17cc,
2746 	.idProduct = 0x1010,
2747 },
2748 {
2749 	/* Traktor Audio 10 */
2750 	.match_flags = USB_DEVICE_ID_MATCH_DEVICE,
2751 	.idVendor = 0x17cc,
2752 	.idProduct = 0x1020,
2753 },
2754 
2755 /* KeithMcMillen Stringport */
2756 {
2757 	USB_DEVICE(0x1f38, 0x0001),
2758 	.bInterfaceClass = USB_CLASS_AUDIO,
2759 },
2760 
2761 /* Miditech devices */
2762 {
2763 	USB_DEVICE(0x4752, 0x0011),
2764 	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2765 		.vendor_name = "Miditech",
2766 		.product_name = "Midistart-2",
2767 		.ifnum = 0,
2768 		.type = QUIRK_MIDI_CME
2769 	}
2770 },
2771 
2772 /* Central Music devices */
2773 {
2774 	/* this ID used by both Miditech MidiStudio-2 and CME UF-x */
2775 	USB_DEVICE(0x7104, 0x2202),
2776 	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2777 		.ifnum = 0,
2778 		.type = QUIRK_MIDI_CME
2779 	}
2780 },
2781 
2782 /*
2783  * Auvitek au0828 devices with audio interface.
2784  * This should be kept in sync with drivers/media/usb/au0828/au0828-cards.c
2785  * Please notice that some drivers are DVB only, and don't need to be
2786  * here. That's the case, for example, of DVICO_FUSIONHDTV7.
2787  */
2788 
2789 #define AU0828_DEVICE(vid, pid, vname, pname) { \
2790 	USB_DEVICE_VENDOR_SPEC(vid, pid), \
2791 	.match_flags = USB_DEVICE_ID_MATCH_DEVICE | \
2792 		       USB_DEVICE_ID_MATCH_INT_CLASS | \
2793 		       USB_DEVICE_ID_MATCH_INT_SUBCLASS, \
2794 	.bInterfaceClass = USB_CLASS_AUDIO, \
2795 	.bInterfaceSubClass = USB_SUBCLASS_AUDIOCONTROL, \
2796 	.driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) { \
2797 		.vendor_name = vname, \
2798 		.product_name = pname, \
2799 		.ifnum = QUIRK_ANY_INTERFACE, \
2800 		.type = QUIRK_AUDIO_ALIGN_TRANSFER, \
2801 	} \
2802 }
2803 
2804 AU0828_DEVICE(0x2040, 0x7200, "Hauppauge", "HVR-950Q"),
2805 AU0828_DEVICE(0x2040, 0x7240, "Hauppauge", "HVR-850"),
2806 AU0828_DEVICE(0x2040, 0x7210, "Hauppauge", "HVR-950Q"),
2807 AU0828_DEVICE(0x2040, 0x7217, "Hauppauge", "HVR-950Q"),
2808 AU0828_DEVICE(0x2040, 0x721b, "Hauppauge", "HVR-950Q"),
2809 AU0828_DEVICE(0x2040, 0x721e, "Hauppauge", "HVR-950Q"),
2810 AU0828_DEVICE(0x2040, 0x721f, "Hauppauge", "HVR-950Q"),
2811 AU0828_DEVICE(0x2040, 0x7280, "Hauppauge", "HVR-950Q"),
2812 AU0828_DEVICE(0x0fd9, 0x0008, "Hauppauge", "HVR-950Q"),
2813 AU0828_DEVICE(0x2040, 0x7201, "Hauppauge", "HVR-950Q-MXL"),
2814 AU0828_DEVICE(0x2040, 0x7211, "Hauppauge", "HVR-950Q-MXL"),
2815 AU0828_DEVICE(0x2040, 0x7281, "Hauppauge", "HVR-950Q-MXL"),
2816 AU0828_DEVICE(0x05e1, 0x0480, "Hauppauge", "Woodbury"),
2817 AU0828_DEVICE(0x2040, 0x8200, "Hauppauge", "Woodbury"),
2818 AU0828_DEVICE(0x2040, 0x7260, "Hauppauge", "HVR-950Q"),
2819 AU0828_DEVICE(0x2040, 0x7213, "Hauppauge", "HVR-950Q"),
2820 AU0828_DEVICE(0x2040, 0x7270, "Hauppauge", "HVR-950Q"),
2821 
2822 /* Digidesign Mbox */
2823 {
2824 	/* Thanks to Clemens Ladisch <clemens@ladisch.de> */
2825 	USB_DEVICE(0x0dba, 0x1000),
2826 	.driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
2827 		.vendor_name = "Digidesign",
2828 		.product_name = "MBox",
2829 		.ifnum = QUIRK_ANY_INTERFACE,
2830 		.type = QUIRK_COMPOSITE,
2831 		.data = (const struct snd_usb_audio_quirk[]){
2832 			{
2833 				.ifnum = 0,
2834 				.type = QUIRK_AUDIO_STANDARD_MIXER,
2835 			},
2836 			{
2837 				.ifnum = 1,
2838 				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
2839 				.data = &(const struct audioformat) {
2840 					.formats = SNDRV_PCM_FMTBIT_S24_3BE,
2841 					.channels = 2,
2842 					.iface = 1,
2843 					.altsetting = 1,
2844 					.altset_idx = 1,
2845 					.attributes = 0x4,
2846 					.endpoint = 0x02,
2847 					.ep_attr = USB_ENDPOINT_XFER_ISOC |
2848 						USB_ENDPOINT_SYNC_SYNC,
2849 					.maxpacksize = 0x130,
2850 					.rates = SNDRV_PCM_RATE_48000,
2851 					.rate_min = 48000,
2852 					.rate_max = 48000,
2853 					.nr_rates = 1,
2854 					.rate_table = (unsigned int[]) {
2855 						48000
2856 					}
2857 				}
2858 			},
2859 			{
2860 				.ifnum = 1,
2861 				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
2862 				.data = &(const struct audioformat) {
2863 					.formats = SNDRV_PCM_FMTBIT_S24_3BE,
2864 					.channels = 2,
2865 					.iface = 1,
2866 					.altsetting = 1,
2867 					.altset_idx = 1,
2868 					.attributes = 0x4,
2869 					.endpoint = 0x81,
2870 					.ep_attr = USB_ENDPOINT_XFER_ISOC |
2871 						USB_ENDPOINT_SYNC_ASYNC,
2872 					.maxpacksize = 0x130,
2873 					.rates = SNDRV_PCM_RATE_48000,
2874 					.rate_min = 48000,
2875 					.rate_max = 48000,
2876 					.nr_rates = 1,
2877 					.rate_table = (unsigned int[]) {
2878 						48000
2879 					}
2880 				}
2881 			},
2882 			{
2883 				.ifnum = -1
2884 			}
2885 		}
2886 	}
2887 },
2888 
2889 /* DIGIDESIGN MBOX 2 */
2890 {
2891 	USB_DEVICE(0x0dba, 0x3000),
2892 	.driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
2893 		.vendor_name = "Digidesign",
2894 		.product_name = "Mbox 2",
2895 		.ifnum = QUIRK_ANY_INTERFACE,
2896 		.type = QUIRK_COMPOSITE,
2897 		.data = (const struct snd_usb_audio_quirk[]) {
2898 			{
2899 				.ifnum = 0,
2900 				.type = QUIRK_IGNORE_INTERFACE
2901 			},
2902 			{
2903 				.ifnum = 1,
2904 				.type = QUIRK_IGNORE_INTERFACE
2905 			},
2906 			{
2907 				.ifnum = 2,
2908 				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
2909 				.data = &(const struct audioformat) {
2910 					.formats = SNDRV_PCM_FMTBIT_S24_3BE,
2911 					.channels = 2,
2912 					.iface = 2,
2913 					.altsetting = 2,
2914 					.altset_idx = 1,
2915 					.attributes = 0x00,
2916 					.endpoint = 0x03,
2917 					.ep_attr = USB_ENDPOINT_SYNC_ASYNC,
2918 					.rates = SNDRV_PCM_RATE_48000,
2919 					.rate_min = 48000,
2920 					.rate_max = 48000,
2921 					.nr_rates = 1,
2922 					.rate_table = (unsigned int[]) {
2923 						48000
2924 					}
2925 				}
2926 			},
2927 			{
2928 				.ifnum = 3,
2929 				.type = QUIRK_IGNORE_INTERFACE
2930 			},
2931 			{
2932 				.ifnum = 4,
2933 				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
2934 				.data = &(const struct audioformat) {
2935 				.formats = SNDRV_PCM_FMTBIT_S24_3BE,
2936 					.channels = 2,
2937 					.iface = 4,
2938 					.altsetting = 2,
2939 					.altset_idx = 1,
2940 					.attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
2941 					.endpoint = 0x85,
2942 					.ep_attr = USB_ENDPOINT_SYNC_SYNC,
2943 					.rates = SNDRV_PCM_RATE_48000,
2944 					.rate_min = 48000,
2945 					.rate_max = 48000,
2946 					.nr_rates = 1,
2947 					.rate_table = (unsigned int[]) {
2948 						48000
2949 					}
2950 				}
2951 			},
2952 			{
2953 				.ifnum = 5,
2954 				.type = QUIRK_IGNORE_INTERFACE
2955 			},
2956 			{
2957 				.ifnum = 6,
2958 				.type = QUIRK_MIDI_MIDIMAN,
2959 				.data = &(const struct snd_usb_midi_endpoint_info) {
2960 					.out_ep =  0x02,
2961 					.out_cables = 0x0001,
2962 					.in_ep = 0x81,
2963 					.in_interval = 0x01,
2964 					.in_cables = 0x0001
2965 				}
2966 			},
2967 			{
2968 				.ifnum = -1
2969 			}
2970 		}
2971 	}
2972 },
2973 {
2974 	/* Tascam US122 MKII - playback-only support */
2975 	.match_flags = USB_DEVICE_ID_MATCH_DEVICE,
2976 	.idVendor = 0x0644,
2977 	.idProduct = 0x8021,
2978 	.bInterfaceClass = USB_CLASS_AUDIO,
2979 	.driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
2980 		.vendor_name = "TASCAM",
2981 		.product_name = "US122 MKII",
2982 		.ifnum = QUIRK_ANY_INTERFACE,
2983 		.type = QUIRK_COMPOSITE,
2984 		.data = (const struct snd_usb_audio_quirk[]) {
2985 			{
2986 				.ifnum = 0,
2987 				.type = QUIRK_IGNORE_INTERFACE
2988 			},
2989 			{
2990 				.ifnum = 1,
2991 				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
2992 				.data = &(const struct audioformat) {
2993 					.formats = SNDRV_PCM_FMTBIT_S24_3LE,
2994 					.channels = 2,
2995 					.iface = 1,
2996 					.altsetting = 1,
2997 					.altset_idx = 1,
2998 					.attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
2999 					.endpoint = 0x02,
3000 					.ep_attr = USB_ENDPOINT_XFER_ISOC,
3001 					.rates = SNDRV_PCM_RATE_44100 |
3002 						 SNDRV_PCM_RATE_48000 |
3003 						 SNDRV_PCM_RATE_88200 |
3004 						 SNDRV_PCM_RATE_96000,
3005 					.rate_min = 44100,
3006 					.rate_max = 96000,
3007 					.nr_rates = 4,
3008 					.rate_table = (unsigned int[]) {
3009 						44100, 48000, 88200, 96000
3010 					}
3011 				}
3012 			},
3013 			{
3014 				.ifnum = -1
3015 			}
3016 		}
3017 	}
3018 },
3019 
3020 /* Microsoft XboxLive Headset/Xbox Communicator */
3021 {
3022 	USB_DEVICE(0x045e, 0x0283),
3023 	.bInterfaceClass = USB_CLASS_PER_INTERFACE,
3024 	.driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
3025 		.vendor_name = "Microsoft",
3026 		.product_name = "XboxLive Headset/Xbox Communicator",
3027 		.ifnum = QUIRK_ANY_INTERFACE,
3028 		.type = QUIRK_COMPOSITE,
3029 		.data = &(const struct snd_usb_audio_quirk[]) {
3030 			{
3031 				/* playback */
3032 				.ifnum = 0,
3033 				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
3034 				.data = &(const struct audioformat) {
3035 					.formats = SNDRV_PCM_FMTBIT_S16_LE,
3036 					.channels = 1,
3037 					.iface = 0,
3038 					.altsetting = 0,
3039 					.altset_idx = 0,
3040 					.attributes = 0,
3041 					.endpoint = 0x04,
3042 					.ep_attr = 0x05,
3043 					.rates = SNDRV_PCM_RATE_CONTINUOUS,
3044 					.rate_min = 22050,
3045 					.rate_max = 22050
3046 				}
3047 			},
3048 			{
3049 				/* capture */
3050 				.ifnum = 1,
3051 				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
3052 				.data = &(const struct audioformat) {
3053 					.formats = SNDRV_PCM_FMTBIT_S16_LE,
3054 					.channels = 1,
3055 					.iface = 1,
3056 					.altsetting = 0,
3057 					.altset_idx = 0,
3058 					.attributes = 0,
3059 					.endpoint = 0x85,
3060 					.ep_attr = 0x05,
3061 					.rates = SNDRV_PCM_RATE_CONTINUOUS,
3062 					.rate_min = 16000,
3063 					.rate_max = 16000
3064 				}
3065 			},
3066 			{
3067 				.ifnum = -1
3068 			}
3069 		}
3070 	}
3071 },
3072 
3073 /* Reloop Play */
3074 {
3075 	USB_DEVICE(0x200c, 0x100b),
3076 	.bInterfaceClass = USB_CLASS_PER_INTERFACE,
3077 	.driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
3078 		.ifnum = QUIRK_ANY_INTERFACE,
3079 		.type = QUIRK_COMPOSITE,
3080 		.data = &(const struct snd_usb_audio_quirk[]) {
3081 			{
3082 				.ifnum = 0,
3083 				.type = QUIRK_AUDIO_STANDARD_MIXER,
3084 			},
3085 			{
3086 				.ifnum = 1,
3087 				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
3088 				.data = &(const struct audioformat) {
3089 					.formats = SNDRV_PCM_FMTBIT_S24_3LE,
3090 					.channels = 4,
3091 					.iface = 1,
3092 					.altsetting = 1,
3093 					.altset_idx = 1,
3094 					.attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
3095 					.endpoint = 0x01,
3096 					.ep_attr = USB_ENDPOINT_SYNC_ADAPTIVE,
3097 					.rates = SNDRV_PCM_RATE_44100 |
3098 						 SNDRV_PCM_RATE_48000,
3099 					.rate_min = 44100,
3100 					.rate_max = 48000,
3101 					.nr_rates = 2,
3102 					.rate_table = (unsigned int[]) {
3103 						44100, 48000
3104 					}
3105 				}
3106 			},
3107 			{
3108 				.ifnum = -1
3109 			}
3110 		}
3111 	}
3112 },
3113 
3114 {
3115 	/*
3116 	 * ZOOM R16/24 in audio interface mode.
3117 	 * Mixer descriptors are garbage, further quirks will be needed
3118 	 * to make any of it functional, thus disabled for now.
3119 	 * Playback stream appears to start and run fine but no sound
3120 	 * is produced, so also disabled for now.
3121 	 */
3122 	USB_DEVICE(0x1686, 0x00dd),
3123 	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
3124 		.ifnum = QUIRK_ANY_INTERFACE,
3125 		.type = QUIRK_COMPOSITE,
3126 		.data = (const struct snd_usb_audio_quirk[]) {
3127 			{
3128 				/* Mixer */
3129 				.ifnum = 0,
3130 				.type = QUIRK_IGNORE_INTERFACE,
3131 			},
3132 			{
3133 				/* Playback  */
3134 				.ifnum = 1,
3135 				.type = QUIRK_IGNORE_INTERFACE,
3136 			},
3137 			{
3138 				/* Capture */
3139 				.ifnum = 2,
3140 				.type = QUIRK_AUDIO_STANDARD_INTERFACE,
3141 			},
3142 			{
3143 				/* Midi */
3144 				.ifnum = 3,
3145 				.type = QUIRK_MIDI_STANDARD_INTERFACE
3146 			},
3147 			{
3148 				.ifnum = -1
3149 			},
3150 		}
3151 	}
3152 },
3153 
3154 {
3155 	/*
3156 	 * Some USB MIDI devices don't have an audio control interface,
3157 	 * so we have to grab MIDI streaming interfaces here.
3158 	 */
3159 	.match_flags = USB_DEVICE_ID_MATCH_INT_CLASS |
3160 		       USB_DEVICE_ID_MATCH_INT_SUBCLASS,
3161 	.bInterfaceClass = USB_CLASS_AUDIO,
3162 	.bInterfaceSubClass = USB_SUBCLASS_MIDISTREAMING,
3163 	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
3164 		.ifnum = QUIRK_ANY_INTERFACE,
3165 		.type = QUIRK_MIDI_STANDARD_INTERFACE
3166 	}
3167 },
3168 
3169 {
3170 	/*
3171 	 * The original product_name is "USB Sound Device", however this name
3172 	 * is also used by the CM106 based cards, so make it unique.
3173 	 */
3174 	USB_DEVICE(0x0d8c, 0x0103),
3175 	.driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
3176 		.product_name = "Audio Advantage MicroII",
3177 		.ifnum = QUIRK_NO_INTERFACE
3178 	}
3179 },
3180 
3181 #undef USB_DEVICE_VENDOR_SPEC
3182