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