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