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