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