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