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