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