Merge tag 'ieee802154-for-davem-2021-04-07' of git://git.kernel.org/pub/scm/linux...
[linux-2.6-microblaze.git] / sound / usb / quirks-table.h
1 /* SPDX-License-Identifier: GPL-2.0-or-later */
2 /*
3  * ALSA USB Audio Driver
4  *
5  * Copyright (c) 2002 by Takashi Iwai <tiwai@suse.de>,
6  *                       Clemens Ladisch <clemens@ladisch.de>
7  */
8
9 /*
10  * The contents of this file are part of the driver's id_table.
11  *
12  * In a perfect world, this file would be empty.
13  */
14
15 /*
16  * Use this for devices where other interfaces are standard compliant,
17  * to prevent the quirk being applied to those interfaces. (To work with
18  * hotplugging, bDeviceClass must be set to USB_CLASS_PER_INTERFACE.)
19  */
20 #define USB_DEVICE_VENDOR_SPEC(vend, prod) \
21         .match_flags = USB_DEVICE_ID_MATCH_VENDOR | \
22                        USB_DEVICE_ID_MATCH_PRODUCT | \
23                        USB_DEVICE_ID_MATCH_INT_CLASS, \
24         .idVendor = vend, \
25         .idProduct = prod, \
26         .bInterfaceClass = USB_CLASS_VENDOR_SPEC
27
28 /* A standard entry matching with vid/pid and the audio class/subclass */
29 #define USB_AUDIO_DEVICE(vend, prod) \
30         .match_flags = USB_DEVICE_ID_MATCH_DEVICE | \
31                        USB_DEVICE_ID_MATCH_INT_CLASS | \
32                        USB_DEVICE_ID_MATCH_INT_SUBCLASS, \
33         .idVendor = vend, \
34         .idProduct = prod, \
35         .bInterfaceClass = USB_CLASS_AUDIO, \
36         .bInterfaceSubClass = USB_SUBCLASS_AUDIOCONTROL
37
38 /* FTDI devices */
39 {
40         USB_DEVICE(0x0403, 0xb8d8),
41         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
42                 /* .vendor_name = "STARR LABS", */
43                 /* .product_name = "Starr Labs MIDI USB device", */
44                 .ifnum = 0,
45                 .type = QUIRK_MIDI_FTDI
46         }
47 },
48
49 {
50         /* Creative BT-D1 */
51         USB_DEVICE(0x041e, 0x0005),
52         .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
53                 .ifnum = 1,
54                 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
55                 .data = &(const struct audioformat) {
56                         .formats = SNDRV_PCM_FMTBIT_S16_LE,
57                         .channels = 2,
58                         .iface = 1,
59                         .altsetting = 1,
60                         .altset_idx = 1,
61                         .endpoint = 0x03,
62                         .ep_attr = USB_ENDPOINT_XFER_ISOC,
63                         .attributes = 0,
64                         .rates = SNDRV_PCM_RATE_CONTINUOUS,
65                         .rate_min = 48000,
66                         .rate_max = 48000,
67                 }
68         }
69 },
70
71 /* E-Mu 0202 USB */
72 { USB_DEVICE_VENDOR_SPEC(0x041e, 0x3f02) },
73 /* E-Mu 0404 USB */
74 { USB_DEVICE_VENDOR_SPEC(0x041e, 0x3f04) },
75 /* E-Mu Tracker Pre */
76 { USB_DEVICE_VENDOR_SPEC(0x041e, 0x3f0a) },
77 /* E-Mu 0204 USB */
78 { USB_DEVICE_VENDOR_SPEC(0x041e, 0x3f19) },
79
80 /*
81  * HP Wireless Audio
82  * When not ignored, causes instability issues for some users, forcing them to
83  * skip the entire module.
84  */
85 {
86         USB_DEVICE(0x0424, 0xb832),
87         .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
88                 .vendor_name = "Standard Microsystems Corp.",
89                 .product_name = "HP Wireless Audio",
90                 .ifnum = QUIRK_ANY_INTERFACE,
91                 .type = QUIRK_COMPOSITE,
92                 .data = (const struct snd_usb_audio_quirk[]) {
93                         /* Mixer */
94                         {
95                                 .ifnum = 0,
96                                 .type = QUIRK_IGNORE_INTERFACE,
97                         },
98                         /* Playback */
99                         {
100                                 .ifnum = 1,
101                                 .type = QUIRK_IGNORE_INTERFACE,
102                         },
103                         /* Capture */
104                         {
105                                 .ifnum = 2,
106                                 .type = QUIRK_IGNORE_INTERFACE,
107                         },
108                         /* HID Device, .ifnum = 3 */
109                         {
110                                 .ifnum = -1,
111                         }
112                 }
113         }
114 },
115
116 /*
117  * Logitech QuickCam: bDeviceClass is vendor-specific, so generic interface
118  * class matches do not take effect without an explicit ID match.
119  */
120 { USB_AUDIO_DEVICE(0x046d, 0x0850) },
121 { USB_AUDIO_DEVICE(0x046d, 0x08ae) },
122 { USB_AUDIO_DEVICE(0x046d, 0x08c6) },
123 { USB_AUDIO_DEVICE(0x046d, 0x08f0) },
124 { USB_AUDIO_DEVICE(0x046d, 0x08f5) },
125 { USB_AUDIO_DEVICE(0x046d, 0x08f6) },
126 { USB_AUDIO_DEVICE(0x046d, 0x0990) },
127
128 /*
129  * Yamaha devices
130  */
131
132 #define YAMAHA_DEVICE(id, name) { \
133         USB_DEVICE(0x0499, id), \
134         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { \
135                 .vendor_name = "Yamaha", \
136                 .product_name = name, \
137                 .ifnum = QUIRK_ANY_INTERFACE, \
138                 .type = QUIRK_MIDI_YAMAHA \
139         } \
140 }
141 #define YAMAHA_INTERFACE(id, intf, name) { \
142         USB_DEVICE_VENDOR_SPEC(0x0499, id), \
143         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { \
144                 .vendor_name = "Yamaha", \
145                 .product_name = name, \
146                 .ifnum = intf, \
147                 .type = QUIRK_MIDI_YAMAHA \
148         } \
149 }
150 YAMAHA_DEVICE(0x1000, "UX256"),
151 YAMAHA_DEVICE(0x1001, "MU1000"),
152 YAMAHA_DEVICE(0x1002, "MU2000"),
153 YAMAHA_DEVICE(0x1003, "MU500"),
154 YAMAHA_INTERFACE(0x1004, 3, "UW500"),
155 YAMAHA_DEVICE(0x1005, "MOTIF6"),
156 YAMAHA_DEVICE(0x1006, "MOTIF7"),
157 YAMAHA_DEVICE(0x1007, "MOTIF8"),
158 YAMAHA_DEVICE(0x1008, "UX96"),
159 YAMAHA_DEVICE(0x1009, "UX16"),
160 YAMAHA_INTERFACE(0x100a, 3, "EOS BX"),
161 YAMAHA_DEVICE(0x100c, "UC-MX"),
162 YAMAHA_DEVICE(0x100d, "UC-KX"),
163 YAMAHA_DEVICE(0x100e, "S08"),
164 YAMAHA_DEVICE(0x100f, "CLP-150"),
165 YAMAHA_DEVICE(0x1010, "CLP-170"),
166 YAMAHA_DEVICE(0x1011, "P-250"),
167 YAMAHA_DEVICE(0x1012, "TYROS"),
168 YAMAHA_DEVICE(0x1013, "PF-500"),
169 YAMAHA_DEVICE(0x1014, "S90"),
170 YAMAHA_DEVICE(0x1015, "MOTIF-R"),
171 YAMAHA_DEVICE(0x1016, "MDP-5"),
172 YAMAHA_DEVICE(0x1017, "CVP-204"),
173 YAMAHA_DEVICE(0x1018, "CVP-206"),
174 YAMAHA_DEVICE(0x1019, "CVP-208"),
175 YAMAHA_DEVICE(0x101a, "CVP-210"),
176 YAMAHA_DEVICE(0x101b, "PSR-1100"),
177 YAMAHA_DEVICE(0x101c, "PSR-2100"),
178 YAMAHA_DEVICE(0x101d, "CLP-175"),
179 YAMAHA_DEVICE(0x101e, "PSR-K1"),
180 YAMAHA_DEVICE(0x101f, "EZ-J24"),
181 YAMAHA_DEVICE(0x1020, "EZ-250i"),
182 YAMAHA_DEVICE(0x1021, "MOTIF ES 6"),
183 YAMAHA_DEVICE(0x1022, "MOTIF ES 7"),
184 YAMAHA_DEVICE(0x1023, "MOTIF ES 8"),
185 YAMAHA_DEVICE(0x1024, "CVP-301"),
186 YAMAHA_DEVICE(0x1025, "CVP-303"),
187 YAMAHA_DEVICE(0x1026, "CVP-305"),
188 YAMAHA_DEVICE(0x1027, "CVP-307"),
189 YAMAHA_DEVICE(0x1028, "CVP-309"),
190 YAMAHA_DEVICE(0x1029, "CVP-309GP"),
191 YAMAHA_DEVICE(0x102a, "PSR-1500"),
192 YAMAHA_DEVICE(0x102b, "PSR-3000"),
193 YAMAHA_DEVICE(0x102e, "ELS-01/01C"),
194 YAMAHA_DEVICE(0x1030, "PSR-295/293"),
195 YAMAHA_DEVICE(0x1031, "DGX-205/203"),
196 YAMAHA_DEVICE(0x1032, "DGX-305"),
197 YAMAHA_DEVICE(0x1033, "DGX-505"),
198 YAMAHA_DEVICE(0x1034, NULL),
199 YAMAHA_DEVICE(0x1035, NULL),
200 YAMAHA_DEVICE(0x1036, NULL),
201 YAMAHA_DEVICE(0x1037, NULL),
202 YAMAHA_DEVICE(0x1038, NULL),
203 YAMAHA_DEVICE(0x1039, NULL),
204 YAMAHA_DEVICE(0x103a, NULL),
205 YAMAHA_DEVICE(0x103b, NULL),
206 YAMAHA_DEVICE(0x103c, NULL),
207 YAMAHA_DEVICE(0x103d, NULL),
208 YAMAHA_DEVICE(0x103e, NULL),
209 YAMAHA_DEVICE(0x103f, NULL),
210 YAMAHA_DEVICE(0x1040, NULL),
211 YAMAHA_DEVICE(0x1041, NULL),
212 YAMAHA_DEVICE(0x1042, NULL),
213 YAMAHA_DEVICE(0x1043, NULL),
214 YAMAHA_DEVICE(0x1044, NULL),
215 YAMAHA_DEVICE(0x1045, NULL),
216 YAMAHA_INTERFACE(0x104e, 0, NULL),
217 YAMAHA_DEVICE(0x104f, NULL),
218 YAMAHA_DEVICE(0x1050, NULL),
219 YAMAHA_DEVICE(0x1051, NULL),
220 YAMAHA_DEVICE(0x1052, NULL),
221 YAMAHA_INTERFACE(0x1053, 0, NULL),
222 YAMAHA_INTERFACE(0x1054, 0, NULL),
223 YAMAHA_DEVICE(0x1055, NULL),
224 YAMAHA_DEVICE(0x1056, NULL),
225 YAMAHA_DEVICE(0x1057, NULL),
226 YAMAHA_DEVICE(0x1058, NULL),
227 YAMAHA_DEVICE(0x1059, NULL),
228 YAMAHA_DEVICE(0x105a, NULL),
229 YAMAHA_DEVICE(0x105b, NULL),
230 YAMAHA_DEVICE(0x105c, NULL),
231 YAMAHA_DEVICE(0x105d, NULL),
232 {
233         USB_DEVICE(0x0499, 0x1503),
234         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
235                 /* .vendor_name = "Yamaha", */
236                 /* .product_name = "MOX6/MOX8", */
237                 .ifnum = QUIRK_ANY_INTERFACE,
238                 .type = QUIRK_COMPOSITE,
239                 .data = (const struct snd_usb_audio_quirk[]) {
240                         {
241                                 .ifnum = 1,
242                                 .type = QUIRK_AUDIO_STANDARD_INTERFACE
243                         },
244                         {
245                                 .ifnum = 2,
246                                 .type = QUIRK_AUDIO_STANDARD_INTERFACE
247                         },
248                         {
249                                 .ifnum = 3,
250                                 .type = QUIRK_MIDI_YAMAHA
251                         },
252                         {
253                                 .ifnum = -1
254                         }
255                 }
256         }
257 },
258 {
259         USB_DEVICE(0x0499, 0x1507),
260         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
261                 /* .vendor_name = "Yamaha", */
262                 /* .product_name = "THR10", */
263                 .ifnum = QUIRK_ANY_INTERFACE,
264                 .type = QUIRK_COMPOSITE,
265                 .data = (const struct snd_usb_audio_quirk[]) {
266                         {
267                                 .ifnum = 1,
268                                 .type = QUIRK_AUDIO_STANDARD_INTERFACE
269                         },
270                         {
271                                 .ifnum = 2,
272                                 .type = QUIRK_AUDIO_STANDARD_INTERFACE
273                         },
274                         {
275                                 .ifnum = 3,
276                                 .type = QUIRK_MIDI_YAMAHA
277                         },
278                         {
279                                 .ifnum = -1
280                         }
281                 }
282         }
283 },
284 {
285         USB_DEVICE(0x0499, 0x1509),
286         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
287                 /* .vendor_name = "Yamaha", */
288                 /* .product_name = "Steinberg UR22", */
289                 .ifnum = QUIRK_ANY_INTERFACE,
290                 .type = QUIRK_COMPOSITE,
291                 .data = (const struct snd_usb_audio_quirk[]) {
292                         {
293                                 .ifnum = 1,
294                                 .type = QUIRK_AUDIO_STANDARD_INTERFACE
295                         },
296                         {
297                                 .ifnum = 2,
298                                 .type = QUIRK_AUDIO_STANDARD_INTERFACE
299                         },
300                         {
301                                 .ifnum = 3,
302                                 .type = QUIRK_MIDI_YAMAHA
303                         },
304                         {
305                                 .ifnum = 4,
306                                 .type = QUIRK_IGNORE_INTERFACE
307                         },
308                         {
309                                 .ifnum = -1
310                         }
311                 }
312         }
313 },
314 {
315         USB_DEVICE(0x0499, 0x150a),
316         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
317                 /* .vendor_name = "Yamaha", */
318                 /* .product_name = "THR5A", */
319                 .ifnum = QUIRK_ANY_INTERFACE,
320                 .type = QUIRK_COMPOSITE,
321                 .data = (const struct snd_usb_audio_quirk[]) {
322                         {
323                                 .ifnum = 1,
324                                 .type = QUIRK_AUDIO_STANDARD_INTERFACE
325                         },
326                         {
327                                 .ifnum = 2,
328                                 .type = QUIRK_AUDIO_STANDARD_INTERFACE
329                         },
330                         {
331                                 .ifnum = 3,
332                                 .type = QUIRK_MIDI_YAMAHA
333                         },
334                         {
335                                 .ifnum = -1
336                         }
337                 }
338         }
339 },
340 {
341         USB_DEVICE(0x0499, 0x150c),
342         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
343                 /* .vendor_name = "Yamaha", */
344                 /* .product_name = "THR10C", */
345                 .ifnum = QUIRK_ANY_INTERFACE,
346                 .type = QUIRK_COMPOSITE,
347                 .data = (const struct snd_usb_audio_quirk[]) {
348                         {
349                                 .ifnum = 1,
350                                 .type = QUIRK_AUDIO_STANDARD_INTERFACE
351                         },
352                         {
353                                 .ifnum = 2,
354                                 .type = QUIRK_AUDIO_STANDARD_INTERFACE
355                         },
356                         {
357                                 .ifnum = 3,
358                                 .type = QUIRK_MIDI_YAMAHA
359                         },
360                         {
361                                 .ifnum = -1
362                         }
363                 }
364         }
365 },
366 YAMAHA_DEVICE(0x2000, "DGP-7"),
367 YAMAHA_DEVICE(0x2001, "DGP-5"),
368 YAMAHA_DEVICE(0x2002, NULL),
369 YAMAHA_DEVICE(0x2003, NULL),
370 YAMAHA_DEVICE(0x5000, "CS1D"),
371 YAMAHA_DEVICE(0x5001, "DSP1D"),
372 YAMAHA_DEVICE(0x5002, "DME32"),
373 YAMAHA_DEVICE(0x5003, "DM2000"),
374 YAMAHA_DEVICE(0x5004, "02R96"),
375 YAMAHA_DEVICE(0x5005, "ACU16-C"),
376 YAMAHA_DEVICE(0x5006, "NHB32-C"),
377 YAMAHA_DEVICE(0x5007, "DM1000"),
378 YAMAHA_DEVICE(0x5008, "01V96"),
379 YAMAHA_DEVICE(0x5009, "SPX2000"),
380 YAMAHA_DEVICE(0x500a, "PM5D"),
381 YAMAHA_DEVICE(0x500b, "DME64N"),
382 YAMAHA_DEVICE(0x500c, "DME24N"),
383 YAMAHA_DEVICE(0x500d, NULL),
384 YAMAHA_DEVICE(0x500e, NULL),
385 YAMAHA_DEVICE(0x500f, NULL),
386 YAMAHA_DEVICE(0x7000, "DTX"),
387 YAMAHA_DEVICE(0x7010, "UB99"),
388 #undef YAMAHA_DEVICE
389 #undef YAMAHA_INTERFACE
390 /* this catches most recent vendor-specific Yamaha devices */
391 {
392         .match_flags = USB_DEVICE_ID_MATCH_VENDOR |
393                        USB_DEVICE_ID_MATCH_INT_CLASS,
394         .idVendor = 0x0499,
395         .bInterfaceClass = USB_CLASS_VENDOR_SPEC,
396         .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
397                 .ifnum = QUIRK_ANY_INTERFACE,
398                 .type = QUIRK_AUTODETECT
399         }
400 },
401
402 /*
403  * Roland/RolandED/Edirol/BOSS devices
404  */
405 {
406         USB_DEVICE(0x0582, 0x0000),
407         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
408                 .vendor_name = "Roland",
409                 .product_name = "UA-100",
410                 .ifnum = QUIRK_ANY_INTERFACE,
411                 .type = QUIRK_COMPOSITE,
412                 .data = (const struct snd_usb_audio_quirk[]) {
413                         {
414                                 .ifnum = 0,
415                                 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
416                                 .data = & (const struct audioformat) {
417                                         .formats = SNDRV_PCM_FMTBIT_S16_LE,
418                                         .channels = 4,
419                                         .iface = 0,
420                                         .altsetting = 1,
421                                         .altset_idx = 1,
422                                         .attributes = 0,
423                                         .endpoint = 0x01,
424                                         .ep_attr = 0x09,
425                                         .rates = SNDRV_PCM_RATE_CONTINUOUS,
426                                         .rate_min = 44100,
427                                         .rate_max = 44100,
428                                 }
429                         },
430                         {
431                                 .ifnum = 1,
432                                 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
433                                 .data = & (const struct audioformat) {
434                                         .formats = SNDRV_PCM_FMTBIT_S16_LE,
435                                         .channels = 2,
436                                         .iface = 1,
437                                         .altsetting = 1,
438                                         .altset_idx = 1,
439                                         .attributes = UAC_EP_CS_ATTR_FILL_MAX,
440                                         .endpoint = 0x81,
441                                         .ep_attr = 0x05,
442                                         .rates = SNDRV_PCM_RATE_CONTINUOUS,
443                                         .rate_min = 44100,
444                                         .rate_max = 44100,
445                                 }
446                         },
447                         {
448                                 .ifnum = 2,
449                                 .type = QUIRK_MIDI_FIXED_ENDPOINT,
450                                 .data = & (const struct snd_usb_midi_endpoint_info) {
451                                         .out_cables = 0x0007,
452                                         .in_cables  = 0x0007
453                                 }
454                         },
455                         {
456                                 .ifnum = -1
457                         }
458                 }
459         }
460 },
461 {
462         USB_DEVICE(0x0582, 0x0002),
463         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
464                 .vendor_name = "EDIROL",
465                 .product_name = "UM-4",
466                 .ifnum = QUIRK_ANY_INTERFACE,
467                 .type = QUIRK_COMPOSITE,
468                 .data = (const struct snd_usb_audio_quirk[]) {
469                         {
470                                 .ifnum = 0,
471                                 .type = QUIRK_IGNORE_INTERFACE
472                         },
473                         {
474                                 .ifnum = 1,
475                                 .type = QUIRK_IGNORE_INTERFACE
476                         },
477                         {
478                                 .ifnum = 2,
479                                 .type = QUIRK_MIDI_FIXED_ENDPOINT,
480                                 .data = & (const struct snd_usb_midi_endpoint_info) {
481                                         .out_cables = 0x000f,
482                                         .in_cables  = 0x000f
483                                 }
484                         },
485                         {
486                                 .ifnum = -1
487                         }
488                 }
489         }
490 },
491 {
492         USB_DEVICE(0x0582, 0x0003),
493         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
494                 .vendor_name = "Roland",
495                 .product_name = "SC-8850",
496                 .ifnum = QUIRK_ANY_INTERFACE,
497                 .type = QUIRK_COMPOSITE,
498                 .data = (const struct snd_usb_audio_quirk[]) {
499                         {
500                                 .ifnum = 0,
501                                 .type = QUIRK_IGNORE_INTERFACE
502                         },
503                         {
504                                 .ifnum = 1,
505                                 .type = QUIRK_IGNORE_INTERFACE
506                         },
507                         {
508                                 .ifnum = 2,
509                                 .type = QUIRK_MIDI_FIXED_ENDPOINT,
510                                 .data = & (const struct snd_usb_midi_endpoint_info) {
511                                         .out_cables = 0x003f,
512                                         .in_cables  = 0x003f
513                                 }
514                         },
515                         {
516                                 .ifnum = -1
517                         }
518                 }
519         }
520 },
521 {
522         USB_DEVICE(0x0582, 0x0004),
523         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
524                 .vendor_name = "Roland",
525                 .product_name = "U-8",
526                 .ifnum = QUIRK_ANY_INTERFACE,
527                 .type = QUIRK_COMPOSITE,
528                 .data = (const struct snd_usb_audio_quirk[]) {
529                         {
530                                 .ifnum = 0,
531                                 .type = QUIRK_IGNORE_INTERFACE
532                         },
533                         {
534                                 .ifnum = 1,
535                                 .type = QUIRK_IGNORE_INTERFACE
536                         },
537                         {
538                                 .ifnum = 2,
539                                 .type = QUIRK_MIDI_FIXED_ENDPOINT,
540                                 .data = & (const struct snd_usb_midi_endpoint_info) {
541                                         .out_cables = 0x0005,
542                                         .in_cables  = 0x0005
543                                 }
544                         },
545                         {
546                                 .ifnum = -1
547                         }
548                 }
549         }
550 },
551 {
552         /* Has ID 0x0099 when not in "Advanced Driver" mode.
553          * The UM-2EX has only one input, but we cannot detect this. */
554         USB_DEVICE(0x0582, 0x0005),
555         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
556                 .vendor_name = "EDIROL",
557                 .product_name = "UM-2",
558                 .ifnum = QUIRK_ANY_INTERFACE,
559                 .type = QUIRK_COMPOSITE,
560                 .data = (const struct snd_usb_audio_quirk[]) {
561                         {
562                                 .ifnum = 0,
563                                 .type = QUIRK_IGNORE_INTERFACE
564                         },
565                         {
566                                 .ifnum = 1,
567                                 .type = QUIRK_IGNORE_INTERFACE
568                         },
569                         {
570                                 .ifnum = 2,
571                                 .type = QUIRK_MIDI_FIXED_ENDPOINT,
572                                 .data = & (const struct snd_usb_midi_endpoint_info) {
573                                         .out_cables = 0x0003,
574                                         .in_cables  = 0x0003
575                                 }
576                         },
577                         {
578                                 .ifnum = -1
579                         }
580                 }
581         }
582 },
583 {
584         USB_DEVICE(0x0582, 0x0007),
585         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
586                 .vendor_name = "Roland",
587                 .product_name = "SC-8820",
588                 .ifnum = QUIRK_ANY_INTERFACE,
589                 .type = QUIRK_COMPOSITE,
590                 .data = (const struct snd_usb_audio_quirk[]) {
591                         {
592                                 .ifnum = 0,
593                                 .type = QUIRK_IGNORE_INTERFACE
594                         },
595                         {
596                                 .ifnum = 1,
597                                 .type = QUIRK_IGNORE_INTERFACE
598                         },
599                         {
600                                 .ifnum = 2,
601                                 .type = QUIRK_MIDI_FIXED_ENDPOINT,
602                                 .data = & (const struct snd_usb_midi_endpoint_info) {
603                                         .out_cables = 0x0013,
604                                         .in_cables  = 0x0013
605                                 }
606                         },
607                         {
608                                 .ifnum = -1
609                         }
610                 }
611         }
612 },
613 {
614         USB_DEVICE(0x0582, 0x0008),
615         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
616                 .vendor_name = "Roland",
617                 .product_name = "PC-300",
618                 .ifnum = QUIRK_ANY_INTERFACE,
619                 .type = QUIRK_COMPOSITE,
620                 .data = (const struct snd_usb_audio_quirk[]) {
621                         {
622                                 .ifnum = 0,
623                                 .type = QUIRK_IGNORE_INTERFACE
624                         },
625                         {
626                                 .ifnum = 1,
627                                 .type = QUIRK_IGNORE_INTERFACE
628                         },
629                         {
630                                 .ifnum = 2,
631                                 .type = QUIRK_MIDI_FIXED_ENDPOINT,
632                                 .data = & (const struct snd_usb_midi_endpoint_info) {
633                                         .out_cables = 0x0001,
634                                         .in_cables  = 0x0001
635                                 }
636                         },
637                         {
638                                 .ifnum = -1
639                         }
640                 }
641         }
642 },
643 {
644         /* has ID 0x009d when not in "Advanced Driver" mode */
645         USB_DEVICE(0x0582, 0x0009),
646         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
647                 .vendor_name = "EDIROL",
648                 .product_name = "UM-1",
649                 .ifnum = QUIRK_ANY_INTERFACE,
650                 .type = QUIRK_COMPOSITE,
651                 .data = (const struct snd_usb_audio_quirk[]) {
652                         {
653                                 .ifnum = 0,
654                                 .type = QUIRK_IGNORE_INTERFACE
655                         },
656                         {
657                                 .ifnum = 1,
658                                 .type = QUIRK_IGNORE_INTERFACE
659                         },
660                         {
661                                 .ifnum = 2,
662                                 .type = QUIRK_MIDI_FIXED_ENDPOINT,
663                                 .data = & (const struct snd_usb_midi_endpoint_info) {
664                                         .out_cables = 0x0001,
665                                         .in_cables  = 0x0001
666                                 }
667                         },
668                         {
669                                 .ifnum = -1
670                         }
671                 }
672         }
673 },
674 {
675         USB_DEVICE(0x0582, 0x000b),
676         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
677                 .vendor_name = "Roland",
678                 .product_name = "SK-500",
679                 .ifnum = QUIRK_ANY_INTERFACE,
680                 .type = QUIRK_COMPOSITE,
681                 .data = (const struct snd_usb_audio_quirk[]) {
682                         {
683                                 .ifnum = 0,
684                                 .type = QUIRK_IGNORE_INTERFACE
685                         },
686                         {
687                                 .ifnum = 1,
688                                 .type = QUIRK_IGNORE_INTERFACE
689                         },
690                         {
691                                 .ifnum = 2,
692                                 .type = QUIRK_MIDI_FIXED_ENDPOINT,
693                                 .data = & (const struct snd_usb_midi_endpoint_info) {
694                                         .out_cables = 0x0013,
695                                         .in_cables  = 0x0013
696                                 }
697                         },
698                         {
699                                 .ifnum = -1
700                         }
701                 }
702         }
703 },
704 {
705         /* thanks to Emiliano Grilli <emillo@libero.it>
706          * for helping researching this data */
707         USB_DEVICE(0x0582, 0x000c),
708         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
709                 .vendor_name = "Roland",
710                 .product_name = "SC-D70",
711                 .ifnum = QUIRK_ANY_INTERFACE,
712                 .type = QUIRK_COMPOSITE,
713                 .data = (const struct snd_usb_audio_quirk[]) {
714                         {
715                                 .ifnum = 0,
716                                 .type = QUIRK_AUDIO_STANDARD_INTERFACE
717                         },
718                         {
719                                 .ifnum = 1,
720                                 .type = QUIRK_AUDIO_STANDARD_INTERFACE
721                         },
722                         {
723                                 .ifnum = 2,
724                                 .type = QUIRK_MIDI_FIXED_ENDPOINT,
725                                 .data = & (const struct snd_usb_midi_endpoint_info) {
726                                         .out_cables = 0x0007,
727                                         .in_cables  = 0x0007
728                                 }
729                         },
730                         {
731                                 .ifnum = -1
732                         }
733                 }
734         }
735 },
736 {       /*
737          * This quirk is for the "Advanced Driver" mode of the Edirol UA-5.
738          * If the advanced mode switch at the back of the unit is off, the
739          * UA-5 has ID 0x0582/0x0011 and is standard compliant (no quirks),
740          * but offers only 16-bit PCM.
741          * In advanced mode, the UA-5 will output S24_3LE samples (two
742          * channels) at the rate indicated on the front switch, including
743          * the 96kHz sample rate.
744          */
745         USB_DEVICE(0x0582, 0x0010),
746         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
747                 .vendor_name = "EDIROL",
748                 .product_name = "UA-5",
749                 .ifnum = QUIRK_ANY_INTERFACE,
750                 .type = QUIRK_COMPOSITE,
751                 .data = (const struct snd_usb_audio_quirk[]) {
752                         {
753                                 .ifnum = 1,
754                                 .type = QUIRK_AUDIO_STANDARD_INTERFACE
755                         },
756                         {
757                                 .ifnum = 2,
758                                 .type = QUIRK_AUDIO_STANDARD_INTERFACE
759                         },
760                         {
761                                 .ifnum = -1
762                         }
763                 }
764         }
765 },
766 {
767         /* has ID 0x0013 when not in "Advanced Driver" mode */
768         USB_DEVICE(0x0582, 0x0012),
769         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
770                 .vendor_name = "Roland",
771                 .product_name = "XV-5050",
772                 .ifnum = 0,
773                 .type = QUIRK_MIDI_FIXED_ENDPOINT,
774                 .data = & (const struct snd_usb_midi_endpoint_info) {
775                         .out_cables = 0x0001,
776                         .in_cables  = 0x0001
777                 }
778         }
779 },
780 {
781         /* has ID 0x0015 when not in "Advanced Driver" mode */
782         USB_DEVICE(0x0582, 0x0014),
783         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
784                 .vendor_name = "EDIROL",
785                 .product_name = "UM-880",
786                 .ifnum = 0,
787                 .type = QUIRK_MIDI_FIXED_ENDPOINT,
788                 .data = & (const struct snd_usb_midi_endpoint_info) {
789                         .out_cables = 0x01ff,
790                         .in_cables  = 0x01ff
791                 }
792         }
793 },
794 {
795         /* has ID 0x0017 when not in "Advanced Driver" mode */
796         USB_DEVICE(0x0582, 0x0016),
797         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
798                 .vendor_name = "EDIROL",
799                 .product_name = "SD-90",
800                 .ifnum = QUIRK_ANY_INTERFACE,
801                 .type = QUIRK_COMPOSITE,
802                 .data = (const struct snd_usb_audio_quirk[]) {
803                         {
804                                 .ifnum = 0,
805                                 .type = QUIRK_AUDIO_STANDARD_INTERFACE
806                         },
807                         {
808                                 .ifnum = 1,
809                                 .type = QUIRK_AUDIO_STANDARD_INTERFACE
810                         },
811                         {
812                                 .ifnum = 2,
813                                 .type = QUIRK_MIDI_FIXED_ENDPOINT,
814                                 .data = & (const struct snd_usb_midi_endpoint_info) {
815                                         .out_cables = 0x000f,
816                                         .in_cables  = 0x000f
817                                 }
818                         },
819                         {
820                                 .ifnum = -1
821                         }
822                 }
823         }
824 },
825 {
826         /* has ID 0x001c when not in "Advanced Driver" mode */
827         USB_DEVICE(0x0582, 0x001b),
828         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
829                 .vendor_name = "Roland",
830                 .product_name = "MMP-2",
831                 .ifnum = QUIRK_ANY_INTERFACE,
832                 .type = QUIRK_COMPOSITE,
833                 .data = (const struct snd_usb_audio_quirk[]) {
834                         {
835                                 .ifnum = 0,
836                                 .type = QUIRK_IGNORE_INTERFACE
837                         },
838                         {
839                                 .ifnum = 1,
840                                 .type = QUIRK_IGNORE_INTERFACE
841                         },
842                         {
843                                 .ifnum = 2,
844                                 .type = QUIRK_MIDI_FIXED_ENDPOINT,
845                                 .data = & (const struct snd_usb_midi_endpoint_info) {
846                                         .out_cables = 0x0001,
847                                         .in_cables  = 0x0001
848                                 }
849                         },
850                         {
851                                 .ifnum = -1
852                         }
853                 }
854         }
855 },
856 {
857         /* has ID 0x001e when not in "Advanced Driver" mode */
858         USB_DEVICE(0x0582, 0x001d),
859         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
860                 .vendor_name = "Roland",
861                 .product_name = "V-SYNTH",
862                 .ifnum = 0,
863                 .type = QUIRK_MIDI_FIXED_ENDPOINT,
864                 .data = & (const struct snd_usb_midi_endpoint_info) {
865                         .out_cables = 0x0001,
866                         .in_cables  = 0x0001
867                 }
868         }
869 },
870 {
871         /* has ID 0x0024 when not in "Advanced Driver" mode */
872         USB_DEVICE(0x0582, 0x0023),
873         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
874                 .vendor_name = "EDIROL",
875                 .product_name = "UM-550",
876                 .ifnum = 0,
877                 .type = QUIRK_MIDI_FIXED_ENDPOINT,
878                 .data = & (const struct snd_usb_midi_endpoint_info) {
879                         .out_cables = 0x003f,
880                         .in_cables  = 0x003f
881                 }
882         }
883 },
884 {
885         /*
886          * This quirk is for the "Advanced Driver" mode. If off, the UA-20
887          * has ID 0x0026 and is standard compliant, but has only 16-bit PCM
888          * and no MIDI.
889          */
890         USB_DEVICE(0x0582, 0x0025),
891         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
892                 .vendor_name = "EDIROL",
893                 .product_name = "UA-20",
894                 .ifnum = QUIRK_ANY_INTERFACE,
895                 .type = QUIRK_COMPOSITE,
896                 .data = (const struct snd_usb_audio_quirk[]) {
897                         {
898                                 .ifnum = 0,
899                                 .type = QUIRK_IGNORE_INTERFACE
900                         },
901                         {
902                                 .ifnum = 1,
903                                 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
904                                 .data = & (const struct audioformat) {
905                                         .formats = SNDRV_PCM_FMTBIT_S24_3LE,
906                                         .channels = 2,
907                                         .iface = 1,
908                                         .altsetting = 1,
909                                         .altset_idx = 1,
910                                         .attributes = 0,
911                                         .endpoint = 0x01,
912                                         .ep_attr = 0x01,
913                                         .rates = SNDRV_PCM_RATE_CONTINUOUS,
914                                         .rate_min = 44100,
915                                         .rate_max = 44100,
916                                 }
917                         },
918                         {
919                                 .ifnum = 2,
920                                 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
921                                 .data = & (const struct audioformat) {
922                                         .formats = SNDRV_PCM_FMTBIT_S24_3LE,
923                                         .channels = 2,
924                                         .iface = 2,
925                                         .altsetting = 1,
926                                         .altset_idx = 1,
927                                         .attributes = 0,
928                                         .endpoint = 0x82,
929                                         .ep_attr = 0x01,
930                                         .rates = SNDRV_PCM_RATE_CONTINUOUS,
931                                         .rate_min = 44100,
932                                         .rate_max = 44100,
933                                 }
934                         },
935                         {
936                                 .ifnum = 3,
937                                 .type = QUIRK_MIDI_FIXED_ENDPOINT,
938                                 .data = & (const struct snd_usb_midi_endpoint_info) {
939                                         .out_cables = 0x0001,
940                                         .in_cables  = 0x0001
941                                 }
942                         },
943                         {
944                                 .ifnum = -1
945                         }
946                 }
947         }
948 },
949 {
950         /* has ID 0x0028 when not in "Advanced Driver" mode */
951         USB_DEVICE(0x0582, 0x0027),
952         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
953                 .vendor_name = "EDIROL",
954                 .product_name = "SD-20",
955                 .ifnum = 0,
956                 .type = QUIRK_MIDI_FIXED_ENDPOINT,
957                 .data = & (const struct snd_usb_midi_endpoint_info) {
958                         .out_cables = 0x0003,
959                         .in_cables  = 0x0007
960                 }
961         }
962 },
963 {
964         /* has ID 0x002a when not in "Advanced Driver" mode */
965         USB_DEVICE(0x0582, 0x0029),
966         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
967                 .vendor_name = "EDIROL",
968                 .product_name = "SD-80",
969                 .ifnum = 0,
970                 .type = QUIRK_MIDI_FIXED_ENDPOINT,
971                 .data = & (const struct snd_usb_midi_endpoint_info) {
972                         .out_cables = 0x000f,
973                         .in_cables  = 0x000f
974                 }
975         }
976 },
977 {       /*
978          * This quirk is for the "Advanced" modes of the Edirol UA-700.
979          * If the sample format switch is not in an advanced setting, the
980          * UA-700 has ID 0x0582/0x002c and is standard compliant (no quirks),
981          * but offers only 16-bit PCM and no MIDI.
982          */
983         USB_DEVICE_VENDOR_SPEC(0x0582, 0x002b),
984         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
985                 .vendor_name = "EDIROL",
986                 .product_name = "UA-700",
987                 .ifnum = QUIRK_ANY_INTERFACE,
988                 .type = QUIRK_COMPOSITE,
989                 .data = (const struct snd_usb_audio_quirk[]) {
990                         {
991                                 .ifnum = 1,
992                                 .type = QUIRK_AUDIO_EDIROL_UAXX
993                         },
994                         {
995                                 .ifnum = 2,
996                                 .type = QUIRK_AUDIO_EDIROL_UAXX
997                         },
998                         {
999                                 .ifnum = 3,
1000                                 .type = QUIRK_AUDIO_EDIROL_UAXX
1001                         },
1002                         {
1003                                 .ifnum = -1
1004                         }
1005                 }
1006         }
1007 },
1008 {
1009         /* has ID 0x002e when not in "Advanced Driver" mode */
1010         USB_DEVICE(0x0582, 0x002d),
1011         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1012                 .vendor_name = "Roland",
1013                 .product_name = "XV-2020",
1014                 .ifnum = 0,
1015                 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1016                 .data = & (const struct snd_usb_midi_endpoint_info) {
1017                         .out_cables = 0x0001,
1018                         .in_cables  = 0x0001
1019                 }
1020         }
1021 },
1022 {
1023         /* has ID 0x0030 when not in "Advanced Driver" mode */
1024         USB_DEVICE(0x0582, 0x002f),
1025         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1026                 .vendor_name = "Roland",
1027                 .product_name = "VariOS",
1028                 .ifnum = 0,
1029                 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1030                 .data = & (const struct snd_usb_midi_endpoint_info) {
1031                         .out_cables = 0x0007,
1032                         .in_cables  = 0x0007
1033                 }
1034         }
1035 },
1036 {
1037         /* has ID 0x0034 when not in "Advanced Driver" mode */
1038         USB_DEVICE(0x0582, 0x0033),
1039         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1040                 .vendor_name = "EDIROL",
1041                 .product_name = "PCR",
1042                 .ifnum = 0,
1043                 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1044                 .data = & (const struct snd_usb_midi_endpoint_info) {
1045                         .out_cables = 0x0003,
1046                         .in_cables  = 0x0007
1047                 }
1048         }
1049 },
1050 {
1051         /*
1052          * Has ID 0x0038 when not in "Advanced Driver" mode;
1053          * later revisions use IDs 0x0054 and 0x00a2.
1054          */
1055         USB_DEVICE(0x0582, 0x0037),
1056         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1057                 .vendor_name = "Roland",
1058                 .product_name = "Digital Piano",
1059                 .ifnum = 0,
1060                 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1061                 .data = & (const struct snd_usb_midi_endpoint_info) {
1062                         .out_cables = 0x0001,
1063                         .in_cables  = 0x0001
1064                 }
1065         }
1066 },
1067 {
1068         /*
1069          * This quirk is for the "Advanced Driver" mode.  If off, the GS-10
1070          * has ID 0x003c and is standard compliant, but has only 16-bit PCM
1071          * and no MIDI.
1072          */
1073         USB_DEVICE_VENDOR_SPEC(0x0582, 0x003b),
1074         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1075                 .vendor_name = "BOSS",
1076                 .product_name = "GS-10",
1077                 .ifnum = QUIRK_ANY_INTERFACE,
1078                 .type = QUIRK_COMPOSITE,
1079                 .data = & (const struct snd_usb_audio_quirk[]) {
1080                         {
1081                                 .ifnum = 1,
1082                                 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1083                         },
1084                         {
1085                                 .ifnum = 2,
1086                                 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1087                         },
1088                         {
1089                                 .ifnum = 3,
1090                                 .type = QUIRK_MIDI_STANDARD_INTERFACE
1091                         },
1092                         {
1093                                 .ifnum = -1
1094                         }
1095                 }
1096         }
1097 },
1098 {
1099         /* has ID 0x0041 when not in "Advanced Driver" mode */
1100         USB_DEVICE(0x0582, 0x0040),
1101         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1102                 .vendor_name = "Roland",
1103                 .product_name = "GI-20",
1104                 .ifnum = 0,
1105                 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1106                 .data = & (const struct snd_usb_midi_endpoint_info) {
1107                         .out_cables = 0x0001,
1108                         .in_cables  = 0x0001
1109                 }
1110         }
1111 },
1112 {
1113         /* has ID 0x0043 when not in "Advanced Driver" mode */
1114         USB_DEVICE(0x0582, 0x0042),
1115         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1116                 .vendor_name = "Roland",
1117                 .product_name = "RS-70",
1118                 .ifnum = 0,
1119                 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1120                 .data = & (const struct snd_usb_midi_endpoint_info) {
1121                         .out_cables = 0x0001,
1122                         .in_cables  = 0x0001
1123                 }
1124         }
1125 },
1126 {
1127         /* has ID 0x0049 when not in "Advanced Driver" mode */
1128         USB_DEVICE(0x0582, 0x0047),
1129         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1130                 /* .vendor_name = "EDIROL", */
1131                 /* .product_name = "UR-80", */
1132                 .ifnum = QUIRK_ANY_INTERFACE,
1133                 .type = QUIRK_COMPOSITE,
1134                 .data = (const struct snd_usb_audio_quirk[]) {
1135                         /* in the 96 kHz modes, only interface 1 is there */
1136                         {
1137                                 .ifnum = 1,
1138                                 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1139                         },
1140                         {
1141                                 .ifnum = 2,
1142                                 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1143                         },
1144                         {
1145                                 .ifnum = -1
1146                         }
1147                 }
1148         }
1149 },
1150 {
1151         /* has ID 0x004a when not in "Advanced Driver" mode */
1152         USB_DEVICE(0x0582, 0x0048),
1153         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1154                 /* .vendor_name = "EDIROL", */
1155                 /* .product_name = "UR-80", */
1156                 .ifnum = 0,
1157                 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1158                 .data = & (const struct snd_usb_midi_endpoint_info) {
1159                         .out_cables = 0x0003,
1160                         .in_cables  = 0x0007
1161                 }
1162         }
1163 },
1164 {
1165         /* has ID 0x004e when not in "Advanced Driver" mode */
1166         USB_DEVICE(0x0582, 0x004c),
1167         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1168                 .vendor_name = "EDIROL",
1169                 .product_name = "PCR-A",
1170                 .ifnum = QUIRK_ANY_INTERFACE,
1171                 .type = QUIRK_COMPOSITE,
1172                 .data = (const struct snd_usb_audio_quirk[]) {
1173                         {
1174                                 .ifnum = 1,
1175                                 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1176                         },
1177                         {
1178                                 .ifnum = 2,
1179                                 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1180                         },
1181                         {
1182                                 .ifnum = -1
1183                         }
1184                 }
1185         }
1186 },
1187 {
1188         /* has ID 0x004f when not in "Advanced Driver" mode */
1189         USB_DEVICE(0x0582, 0x004d),
1190         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1191                 .vendor_name = "EDIROL",
1192                 .product_name = "PCR-A",
1193                 .ifnum = 0,
1194                 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1195                 .data = & (const struct snd_usb_midi_endpoint_info) {
1196                         .out_cables = 0x0003,
1197                         .in_cables  = 0x0007
1198                 }
1199         }
1200 },
1201 {
1202         /*
1203          * This quirk is for the "Advanced Driver" mode. If off, the UA-3FX
1204          * is standard compliant, but has only 16-bit PCM.
1205          */
1206         USB_DEVICE(0x0582, 0x0050),
1207         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1208                 .vendor_name = "EDIROL",
1209                 .product_name = "UA-3FX",
1210                 .ifnum = QUIRK_ANY_INTERFACE,
1211                 .type = QUIRK_COMPOSITE,
1212                 .data = (const struct snd_usb_audio_quirk[]) {
1213                         {
1214                                 .ifnum = 1,
1215                                 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1216                         },
1217                         {
1218                                 .ifnum = 2,
1219                                 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1220                         },
1221                         {
1222                                 .ifnum = -1
1223                         }
1224                 }
1225         }
1226 },
1227 {
1228         USB_DEVICE(0x0582, 0x0052),
1229         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1230                 .vendor_name = "EDIROL",
1231                 .product_name = "UM-1SX",
1232                 .ifnum = 0,
1233                 .type = QUIRK_MIDI_STANDARD_INTERFACE
1234         }
1235 },
1236 {
1237         USB_DEVICE(0x0582, 0x0060),
1238         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1239                 .vendor_name = "Roland",
1240                 .product_name = "EXR Series",
1241                 .ifnum = 0,
1242                 .type = QUIRK_MIDI_STANDARD_INTERFACE
1243         }
1244 },
1245 {
1246         /* has ID 0x0066 when not in "Advanced Driver" mode */
1247         USB_DEVICE(0x0582, 0x0064),
1248         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1249                 /* .vendor_name = "EDIROL", */
1250                 /* .product_name = "PCR-1", */
1251                 .ifnum = QUIRK_ANY_INTERFACE,
1252                 .type = QUIRK_COMPOSITE,
1253                 .data = (const struct snd_usb_audio_quirk[]) {
1254                         {
1255                                 .ifnum = 1,
1256                                 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1257                         },
1258                         {
1259                                 .ifnum = 2,
1260                                 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1261                         },
1262                         {
1263                                 .ifnum = -1
1264                         }
1265                 }
1266         }
1267 },
1268 {
1269         /* has ID 0x0067 when not in "Advanced Driver" mode */
1270         USB_DEVICE(0x0582, 0x0065),
1271         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1272                 /* .vendor_name = "EDIROL", */
1273                 /* .product_name = "PCR-1", */
1274                 .ifnum = 0,
1275                 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1276                 .data = & (const struct snd_usb_midi_endpoint_info) {
1277                         .out_cables = 0x0001,
1278                         .in_cables  = 0x0003
1279                 }
1280         }
1281 },
1282 {
1283         /* has ID 0x006e when not in "Advanced Driver" mode */
1284         USB_DEVICE(0x0582, 0x006d),
1285         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1286                 .vendor_name = "Roland",
1287                 .product_name = "FANTOM-X",
1288                 .ifnum = 0,
1289                 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1290                 .data = & (const struct snd_usb_midi_endpoint_info) {
1291                         .out_cables = 0x0001,
1292                         .in_cables  = 0x0001
1293                 }
1294         }
1295 },
1296 {       /*
1297          * This quirk is for the "Advanced" modes of the Edirol UA-25.
1298          * If the switch is not in an advanced setting, the UA-25 has
1299          * ID 0x0582/0x0073 and is standard compliant (no quirks), but
1300          * offers only 16-bit PCM at 44.1 kHz and no MIDI.
1301          */
1302         USB_DEVICE_VENDOR_SPEC(0x0582, 0x0074),
1303         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1304                 .vendor_name = "EDIROL",
1305                 .product_name = "UA-25",
1306                 .ifnum = QUIRK_ANY_INTERFACE,
1307                 .type = QUIRK_COMPOSITE,
1308                 .data = (const struct snd_usb_audio_quirk[]) {
1309                         {
1310                                 .ifnum = 0,
1311                                 .type = QUIRK_AUDIO_EDIROL_UAXX
1312                         },
1313                         {
1314                                 .ifnum = 1,
1315                                 .type = QUIRK_AUDIO_EDIROL_UAXX
1316                         },
1317                         {
1318                                 .ifnum = 2,
1319                                 .type = QUIRK_AUDIO_EDIROL_UAXX
1320                         },
1321                         {
1322                                 .ifnum = -1
1323                         }
1324                 }
1325         }
1326 },
1327 {
1328         /* has ID 0x0076 when not in "Advanced Driver" mode */
1329         USB_DEVICE(0x0582, 0x0075),
1330         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1331                 .vendor_name = "BOSS",
1332                 .product_name = "DR-880",
1333                 .ifnum = 0,
1334                 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1335                 .data = & (const struct snd_usb_midi_endpoint_info) {
1336                         .out_cables = 0x0001,
1337                         .in_cables  = 0x0001
1338                 }
1339         }
1340 },
1341 {
1342         /* has ID 0x007b when not in "Advanced Driver" mode */
1343         USB_DEVICE_VENDOR_SPEC(0x0582, 0x007a),
1344         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1345                 .vendor_name = "Roland",
1346                 /* "RD" or "RD-700SX"? */
1347                 .ifnum = 0,
1348                 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1349                 .data = & (const struct snd_usb_midi_endpoint_info) {
1350                         .out_cables = 0x0003,
1351                         .in_cables  = 0x0003
1352                 }
1353         }
1354 },
1355 {
1356         /* has ID 0x0081 when not in "Advanced Driver" mode */
1357         USB_DEVICE(0x0582, 0x0080),
1358         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1359                 .vendor_name = "Roland",
1360                 .product_name = "G-70",
1361                 .ifnum = 0,
1362                 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1363                 .data = & (const struct snd_usb_midi_endpoint_info) {
1364                         .out_cables = 0x0001,
1365                         .in_cables  = 0x0001
1366                 }
1367         }
1368 },
1369 {
1370         /* has ID 0x008c when not in "Advanced Driver" mode */
1371         USB_DEVICE(0x0582, 0x008b),
1372         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1373                 .vendor_name = "EDIROL",
1374                 .product_name = "PC-50",
1375                 .ifnum = 0,
1376                 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1377                 .data = & (const struct snd_usb_midi_endpoint_info) {
1378                         .out_cables = 0x0001,
1379                         .in_cables  = 0x0001
1380                 }
1381         }
1382 },
1383 {
1384         /*
1385          * This quirk is for the "Advanced Driver" mode. If off, the UA-4FX
1386          * is standard compliant, but has only 16-bit PCM and no MIDI.
1387          */
1388         USB_DEVICE(0x0582, 0x00a3),
1389         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1390                 .vendor_name = "EDIROL",
1391                 .product_name = "UA-4FX",
1392                 .ifnum = QUIRK_ANY_INTERFACE,
1393                 .type = QUIRK_COMPOSITE,
1394                 .data = (const struct snd_usb_audio_quirk[]) {
1395                         {
1396                                 .ifnum = 0,
1397                                 .type = QUIRK_AUDIO_EDIROL_UAXX
1398                         },
1399                         {
1400                                 .ifnum = 1,
1401                                 .type = QUIRK_AUDIO_EDIROL_UAXX
1402                         },
1403                         {
1404                                 .ifnum = 2,
1405                                 .type = QUIRK_AUDIO_EDIROL_UAXX
1406                         },
1407                         {
1408                                 .ifnum = -1
1409                         }
1410                 }
1411         }
1412 },
1413 {
1414         /* Edirol M-16DX */
1415         USB_DEVICE(0x0582, 0x00c4),
1416         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1417                 .ifnum = QUIRK_ANY_INTERFACE,
1418                 .type = QUIRK_COMPOSITE,
1419                 .data = (const struct snd_usb_audio_quirk[]) {
1420                         {
1421                                 .ifnum = 0,
1422                                 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1423                         },
1424                         {
1425                                 .ifnum = 1,
1426                                 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1427                         },
1428                         {
1429                                 .ifnum = 2,
1430                                 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1431                                 .data = & (const struct snd_usb_midi_endpoint_info) {
1432                                         .out_cables = 0x0001,
1433                                         .in_cables  = 0x0001
1434                                 }
1435                         },
1436                         {
1437                                 .ifnum = -1
1438                         }
1439                 }
1440         }
1441 },
1442 {
1443         /* Advanced modes of the Edirol UA-25EX.
1444          * For the standard mode, UA-25EX has ID 0582:00e7, which
1445          * offers only 16-bit PCM at 44.1 kHz and no MIDI.
1446          */
1447         USB_DEVICE_VENDOR_SPEC(0x0582, 0x00e6),
1448         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1449                 .vendor_name = "EDIROL",
1450                 .product_name = "UA-25EX",
1451                 .ifnum = QUIRK_ANY_INTERFACE,
1452                 .type = QUIRK_COMPOSITE,
1453                 .data = (const struct snd_usb_audio_quirk[]) {
1454                         {
1455                                 .ifnum = 0,
1456                                 .type = QUIRK_AUDIO_EDIROL_UAXX
1457                         },
1458                         {
1459                                 .ifnum = 1,
1460                                 .type = QUIRK_AUDIO_EDIROL_UAXX
1461                         },
1462                         {
1463                                 .ifnum = 2,
1464                                 .type = QUIRK_AUDIO_EDIROL_UAXX
1465                         },
1466                         {
1467                                 .ifnum = -1
1468                         }
1469                 }
1470         }
1471 },
1472 {
1473         /* Edirol UM-3G */
1474         USB_DEVICE_VENDOR_SPEC(0x0582, 0x0108),
1475         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1476                 .ifnum = 0,
1477                 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1478                 .data = & (const struct snd_usb_midi_endpoint_info) {
1479                         .out_cables = 0x0007,
1480                         .in_cables  = 0x0007
1481                 }
1482         }
1483 },
1484 {
1485         /* BOSS ME-25 */
1486         USB_DEVICE(0x0582, 0x0113),
1487         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1488                 .ifnum = QUIRK_ANY_INTERFACE,
1489                 .type = QUIRK_COMPOSITE,
1490                 .data = (const struct snd_usb_audio_quirk[]) {
1491                         {
1492                                 .ifnum = 0,
1493                                 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1494                         },
1495                         {
1496                                 .ifnum = 1,
1497                                 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1498                         },
1499                         {
1500                                 .ifnum = 2,
1501                                 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1502                                 .data = & (const struct snd_usb_midi_endpoint_info) {
1503                                         .out_cables = 0x0001,
1504                                         .in_cables  = 0x0001
1505                                 }
1506                         },
1507                         {
1508                                 .ifnum = -1
1509                         }
1510                 }
1511         }
1512 },
1513 {
1514         /* only 44.1 kHz works at the moment */
1515         USB_DEVICE(0x0582, 0x0120),
1516         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1517                 /* .vendor_name = "Roland", */
1518                 /* .product_name = "OCTO-CAPTURE", */
1519                 .ifnum = QUIRK_ANY_INTERFACE,
1520                 .type = QUIRK_COMPOSITE,
1521                 .data = (const struct snd_usb_audio_quirk[]) {
1522                         {
1523                                 .ifnum = 0,
1524                                 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
1525                                 .data = & (const struct audioformat) {
1526                                         .formats = SNDRV_PCM_FMTBIT_S32_LE,
1527                                         .channels = 10,
1528                                         .iface = 0,
1529                                         .altsetting = 1,
1530                                         .altset_idx = 1,
1531                                         .endpoint = 0x05,
1532                                         .ep_attr = 0x05,
1533                                         .rates = SNDRV_PCM_RATE_44100,
1534                                         .rate_min = 44100,
1535                                         .rate_max = 44100,
1536                                         .nr_rates = 1,
1537                                         .rate_table = (unsigned int[]) { 44100 }
1538                                 }
1539                         },
1540                         {
1541                                 .ifnum = 1,
1542                                 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
1543                                 .data = & (const struct audioformat) {
1544                                         .formats = SNDRV_PCM_FMTBIT_S32_LE,
1545                                         .channels = 12,
1546                                         .iface = 1,
1547                                         .altsetting = 1,
1548                                         .altset_idx = 1,
1549                                         .endpoint = 0x85,
1550                                         .ep_attr = 0x25,
1551                                         .rates = SNDRV_PCM_RATE_44100,
1552                                         .rate_min = 44100,
1553                                         .rate_max = 44100,
1554                                         .nr_rates = 1,
1555                                         .rate_table = (unsigned int[]) { 44100 }
1556                                 }
1557                         },
1558                         {
1559                                 .ifnum = 2,
1560                                 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1561                                 .data = & (const struct snd_usb_midi_endpoint_info) {
1562                                         .out_cables = 0x0001,
1563                                         .in_cables  = 0x0001
1564                                 }
1565                         },
1566                         {
1567                                 .ifnum = 3,
1568                                 .type = QUIRK_IGNORE_INTERFACE
1569                         },
1570                         {
1571                                 .ifnum = 4,
1572                                 .type = QUIRK_IGNORE_INTERFACE
1573                         },
1574                         {
1575                                 .ifnum = -1
1576                         }
1577                 }
1578         }
1579 },
1580 {
1581         /* only 44.1 kHz works at the moment */
1582         USB_DEVICE(0x0582, 0x012f),
1583         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1584                 /* .vendor_name = "Roland", */
1585                 /* .product_name = "QUAD-CAPTURE", */
1586                 .ifnum = QUIRK_ANY_INTERFACE,
1587                 .type = QUIRK_COMPOSITE,
1588                 .data = (const struct snd_usb_audio_quirk[]) {
1589                         {
1590                                 .ifnum = 0,
1591                                 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
1592                                 .data = & (const struct audioformat) {
1593                                         .formats = SNDRV_PCM_FMTBIT_S32_LE,
1594                                         .channels = 4,
1595                                         .iface = 0,
1596                                         .altsetting = 1,
1597                                         .altset_idx = 1,
1598                                         .endpoint = 0x05,
1599                                         .ep_attr = 0x05,
1600                                         .rates = SNDRV_PCM_RATE_44100,
1601                                         .rate_min = 44100,
1602                                         .rate_max = 44100,
1603                                         .nr_rates = 1,
1604                                         .rate_table = (unsigned int[]) { 44100 }
1605                                 }
1606                         },
1607                         {
1608                                 .ifnum = 1,
1609                                 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
1610                                 .data = & (const struct audioformat) {
1611                                         .formats = SNDRV_PCM_FMTBIT_S32_LE,
1612                                         .channels = 6,
1613                                         .iface = 1,
1614                                         .altsetting = 1,
1615                                         .altset_idx = 1,
1616                                         .endpoint = 0x85,
1617                                         .ep_attr = 0x25,
1618                                         .rates = SNDRV_PCM_RATE_44100,
1619                                         .rate_min = 44100,
1620                                         .rate_max = 44100,
1621                                         .nr_rates = 1,
1622                                         .rate_table = (unsigned int[]) { 44100 }
1623                                 }
1624                         },
1625                         {
1626                                 .ifnum = 2,
1627                                 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1628                                 .data = & (const struct snd_usb_midi_endpoint_info) {
1629                                         .out_cables = 0x0001,
1630                                         .in_cables  = 0x0001
1631                                 }
1632                         },
1633                         {
1634                                 .ifnum = 3,
1635                                 .type = QUIRK_IGNORE_INTERFACE
1636                         },
1637                         {
1638                                 .ifnum = 4,
1639                                 .type = QUIRK_IGNORE_INTERFACE
1640                         },
1641                         {
1642                                 .ifnum = -1
1643                         }
1644                 }
1645         }
1646 },
1647 {
1648         USB_DEVICE(0x0582, 0x0159),
1649         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1650                 /* .vendor_name = "Roland", */
1651                 /* .product_name = "UA-22", */
1652                 .ifnum = QUIRK_ANY_INTERFACE,
1653                 .type = QUIRK_COMPOSITE,
1654                 .data = (const struct snd_usb_audio_quirk[]) {
1655                         {
1656                                 .ifnum = 0,
1657                                 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1658                         },
1659                         {
1660                                 .ifnum = 1,
1661                                 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1662                         },
1663                         {
1664                                 .ifnum = 2,
1665                                 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1666                                 .data = & (const struct snd_usb_midi_endpoint_info) {
1667                                         .out_cables = 0x0001,
1668                                         .in_cables = 0x0001
1669                                 }
1670                         },
1671                         {
1672                                 .ifnum = -1
1673                         }
1674                 }
1675         }
1676 },
1677 /* this catches most recent vendor-specific Roland devices */
1678 {
1679         .match_flags = USB_DEVICE_ID_MATCH_VENDOR |
1680                        USB_DEVICE_ID_MATCH_INT_CLASS,
1681         .idVendor = 0x0582,
1682         .bInterfaceClass = USB_CLASS_VENDOR_SPEC,
1683         .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
1684                 .ifnum = QUIRK_ANY_INTERFACE,
1685                 .type = QUIRK_AUTODETECT
1686         }
1687 },
1688
1689 /* Guillemot devices */
1690 {
1691         /*
1692          * This is for the "Windows Edition" where the external MIDI ports are
1693          * the only MIDI ports; the control data is reported through HID
1694          * interfaces.  The "Macintosh Edition" has ID 0xd002 and uses standard
1695          * compliant USB MIDI ports for external MIDI and controls.
1696          */
1697         USB_DEVICE_VENDOR_SPEC(0x06f8, 0xb000),
1698         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1699                 .vendor_name = "Hercules",
1700                 .product_name = "DJ Console (WE)",
1701                 .ifnum = 4,
1702                 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1703                 .data = & (const struct snd_usb_midi_endpoint_info) {
1704                         .out_cables = 0x0001,
1705                         .in_cables = 0x0001
1706                 }
1707         }
1708 },
1709
1710 /* Midiman/M-Audio devices */
1711 {
1712         USB_DEVICE_VENDOR_SPEC(0x0763, 0x1002),
1713         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1714                 .vendor_name = "M-Audio",
1715                 .product_name = "MidiSport 2x2",
1716                 .ifnum = QUIRK_ANY_INTERFACE,
1717                 .type = QUIRK_MIDI_MIDIMAN,
1718                 .data = & (const struct snd_usb_midi_endpoint_info) {
1719                         .out_cables = 0x0003,
1720                         .in_cables  = 0x0003
1721                 }
1722         }
1723 },
1724 {
1725         USB_DEVICE_VENDOR_SPEC(0x0763, 0x1011),
1726         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1727                 .vendor_name = "M-Audio",
1728                 .product_name = "MidiSport 1x1",
1729                 .ifnum = QUIRK_ANY_INTERFACE,
1730                 .type = QUIRK_MIDI_MIDIMAN,
1731                 .data = & (const struct snd_usb_midi_endpoint_info) {
1732                         .out_cables = 0x0001,
1733                         .in_cables  = 0x0001
1734                 }
1735         }
1736 },
1737 {
1738         USB_DEVICE_VENDOR_SPEC(0x0763, 0x1015),
1739         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1740                 .vendor_name = "M-Audio",
1741                 .product_name = "Keystation",
1742                 .ifnum = QUIRK_ANY_INTERFACE,
1743                 .type = QUIRK_MIDI_MIDIMAN,
1744                 .data = & (const struct snd_usb_midi_endpoint_info) {
1745                         .out_cables = 0x0001,
1746                         .in_cables  = 0x0001
1747                 }
1748         }
1749 },
1750 {
1751         USB_DEVICE_VENDOR_SPEC(0x0763, 0x1021),
1752         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1753                 .vendor_name = "M-Audio",
1754                 .product_name = "MidiSport 4x4",
1755                 .ifnum = QUIRK_ANY_INTERFACE,
1756                 .type = QUIRK_MIDI_MIDIMAN,
1757                 .data = & (const struct snd_usb_midi_endpoint_info) {
1758                         .out_cables = 0x000f,
1759                         .in_cables  = 0x000f
1760                 }
1761         }
1762 },
1763 {
1764         /*
1765          * For hardware revision 1.05; in the later revisions (1.10 and
1766          * 1.21), 0x1031 is the ID for the device without firmware.
1767          * Thanks to Olaf Giesbrecht <Olaf_Giesbrecht@yahoo.de>
1768          */
1769         USB_DEVICE_VER(0x0763, 0x1031, 0x0100, 0x0109),
1770         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1771                 .vendor_name = "M-Audio",
1772                 .product_name = "MidiSport 8x8",
1773                 .ifnum = QUIRK_ANY_INTERFACE,
1774                 .type = QUIRK_MIDI_MIDIMAN,
1775                 .data = & (const struct snd_usb_midi_endpoint_info) {
1776                         .out_cables = 0x01ff,
1777                         .in_cables  = 0x01ff
1778                 }
1779         }
1780 },
1781 {
1782         USB_DEVICE_VENDOR_SPEC(0x0763, 0x1033),
1783         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1784                 .vendor_name = "M-Audio",
1785                 .product_name = "MidiSport 8x8",
1786                 .ifnum = QUIRK_ANY_INTERFACE,
1787                 .type = QUIRK_MIDI_MIDIMAN,
1788                 .data = & (const struct snd_usb_midi_endpoint_info) {
1789                         .out_cables = 0x01ff,
1790                         .in_cables  = 0x01ff
1791                 }
1792         }
1793 },
1794 {
1795         USB_DEVICE_VENDOR_SPEC(0x0763, 0x1041),
1796         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1797                 .vendor_name = "M-Audio",
1798                 .product_name = "MidiSport 2x4",
1799                 .ifnum = QUIRK_ANY_INTERFACE,
1800                 .type = QUIRK_MIDI_MIDIMAN,
1801                 .data = & (const struct snd_usb_midi_endpoint_info) {
1802                         .out_cables = 0x000f,
1803                         .in_cables  = 0x0003
1804                 }
1805         }
1806 },
1807 {
1808         USB_DEVICE_VENDOR_SPEC(0x0763, 0x2001),
1809         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1810                 .vendor_name = "M-Audio",
1811                 .product_name = "Quattro",
1812                 .ifnum = QUIRK_ANY_INTERFACE,
1813                 .type = QUIRK_COMPOSITE,
1814                 .data = & (const struct snd_usb_audio_quirk[]) {
1815                         /*
1816                          * Interfaces 0-2 are "Windows-compatible", 16-bit only,
1817                          * and share endpoints with the other interfaces.
1818                          * Ignore them.  The other interfaces can do 24 bits,
1819                          * but captured samples are big-endian (see usbaudio.c).
1820                          */
1821                         {
1822                                 .ifnum = 0,
1823                                 .type = QUIRK_IGNORE_INTERFACE
1824                         },
1825                         {
1826                                 .ifnum = 1,
1827                                 .type = QUIRK_IGNORE_INTERFACE
1828                         },
1829                         {
1830                                 .ifnum = 2,
1831                                 .type = QUIRK_IGNORE_INTERFACE
1832                         },
1833                         {
1834                                 .ifnum = 3,
1835                                 .type = QUIRK_IGNORE_INTERFACE
1836                         },
1837                         {
1838                                 .ifnum = 4,
1839                                 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1840                         },
1841                         {
1842                                 .ifnum = 5,
1843                                 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1844                         },
1845                         {
1846                                 .ifnum = 6,
1847                                 .type = QUIRK_IGNORE_INTERFACE
1848                         },
1849                         {
1850                                 .ifnum = 7,
1851                                 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1852                         },
1853                         {
1854                                 .ifnum = 8,
1855                                 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1856                         },
1857                         {
1858                                 .ifnum = 9,
1859                                 .type = QUIRK_MIDI_MIDIMAN,
1860                                 .data = & (const struct snd_usb_midi_endpoint_info) {
1861                                         .out_cables = 0x0001,
1862                                         .in_cables  = 0x0001
1863                                 }
1864                         },
1865                         {
1866                                 .ifnum = -1
1867                         }
1868                 }
1869         }
1870 },
1871 {
1872         USB_DEVICE_VENDOR_SPEC(0x0763, 0x2003),
1873         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1874                 .vendor_name = "M-Audio",
1875                 .product_name = "AudioPhile",
1876                 .ifnum = 6,
1877                 .type = QUIRK_MIDI_MIDIMAN,
1878                 .data = & (const struct snd_usb_midi_endpoint_info) {
1879                         .out_cables = 0x0001,
1880                         .in_cables  = 0x0001
1881                 }
1882         }
1883 },
1884 {
1885         USB_DEVICE_VENDOR_SPEC(0x0763, 0x2008),
1886         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1887                 .vendor_name = "M-Audio",
1888                 .product_name = "Ozone",
1889                 .ifnum = 3,
1890                 .type = QUIRK_MIDI_MIDIMAN,
1891                 .data = & (const struct snd_usb_midi_endpoint_info) {
1892                         .out_cables = 0x0001,
1893                         .in_cables  = 0x0001
1894                 }
1895         }
1896 },
1897 {
1898         USB_DEVICE_VENDOR_SPEC(0x0763, 0x200d),
1899         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1900                 .vendor_name = "M-Audio",
1901                 .product_name = "OmniStudio",
1902                 .ifnum = QUIRK_ANY_INTERFACE,
1903                 .type = QUIRK_COMPOSITE,
1904                 .data = & (const struct snd_usb_audio_quirk[]) {
1905                         {
1906                                 .ifnum = 0,
1907                                 .type = QUIRK_IGNORE_INTERFACE
1908                         },
1909                         {
1910                                 .ifnum = 1,
1911                                 .type = QUIRK_IGNORE_INTERFACE
1912                         },
1913                         {
1914                                 .ifnum = 2,
1915                                 .type = QUIRK_IGNORE_INTERFACE
1916                         },
1917                         {
1918                                 .ifnum = 3,
1919                                 .type = QUIRK_IGNORE_INTERFACE
1920                         },
1921                         {
1922                                 .ifnum = 4,
1923                                 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1924                         },
1925                         {
1926                                 .ifnum = 5,
1927                                 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1928                         },
1929                         {
1930                                 .ifnum = 6,
1931                                 .type = QUIRK_IGNORE_INTERFACE
1932                         },
1933                         {
1934                                 .ifnum = 7,
1935                                 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1936                         },
1937                         {
1938                                 .ifnum = 8,
1939                                 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1940                         },
1941                         {
1942                                 .ifnum = 9,
1943                                 .type = QUIRK_MIDI_MIDIMAN,
1944                                 .data = & (const struct snd_usb_midi_endpoint_info) {
1945                                         .out_cables = 0x0001,
1946                                         .in_cables  = 0x0001
1947                                 }
1948                         },
1949                         {
1950                                 .ifnum = -1
1951                         }
1952                 }
1953         }
1954 },
1955 {
1956         USB_DEVICE(0x0763, 0x2019),
1957         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1958                 /* .vendor_name = "M-Audio", */
1959                 /* .product_name = "Ozone Academic", */
1960                 .ifnum = QUIRK_ANY_INTERFACE,
1961                 .type = QUIRK_COMPOSITE,
1962                 .data = & (const struct snd_usb_audio_quirk[]) {
1963                         {
1964                                 .ifnum = 0,
1965                                 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1966                         },
1967                         {
1968                                 .ifnum = 1,
1969                                 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1970                         },
1971                         {
1972                                 .ifnum = 2,
1973                                 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1974                         },
1975                         {
1976                                 .ifnum = 3,
1977                                 .type = QUIRK_MIDI_MIDIMAN,
1978                                 .data = & (const struct snd_usb_midi_endpoint_info) {
1979                                         .out_cables = 0x0001,
1980                                         .in_cables  = 0x0001
1981                                 }
1982                         },
1983                         {
1984                                 .ifnum = -1
1985                         }
1986                 }
1987         }
1988 },
1989 {
1990         USB_DEVICE_VENDOR_SPEC(0x0763, 0x2030),
1991         .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
1992                 /* .vendor_name = "M-Audio", */
1993                 /* .product_name = "Fast Track C400", */
1994                 .ifnum = QUIRK_ANY_INTERFACE,
1995                 .type = QUIRK_COMPOSITE,
1996                 .data = &(const struct snd_usb_audio_quirk[]) {
1997                         {
1998                                 .ifnum = 1,
1999                                 .type = QUIRK_AUDIO_STANDARD_MIXER,
2000                         },
2001                         /* Playback */
2002                         {
2003                                 .ifnum = 2,
2004                                 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
2005                                 .data = &(const struct audioformat) {
2006                                         .formats = SNDRV_PCM_FMTBIT_S24_3LE,
2007                                         .channels = 6,
2008                                         .iface = 2,
2009                                         .altsetting = 1,
2010                                         .altset_idx = 1,
2011                                         .attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
2012                                         .endpoint = 0x01,
2013                                         .ep_attr = 0x09,
2014                                         .rates = SNDRV_PCM_RATE_44100 |
2015                                                  SNDRV_PCM_RATE_48000 |
2016                                                  SNDRV_PCM_RATE_88200 |
2017                                                  SNDRV_PCM_RATE_96000,
2018                                         .rate_min = 44100,
2019                                         .rate_max = 96000,
2020                                         .nr_rates = 4,
2021                                         .rate_table = (unsigned int[]) {
2022                                                         44100, 48000, 88200, 96000
2023                                         },
2024                                         .clock = 0x80,
2025                                 }
2026                         },
2027                         /* Capture */
2028                         {
2029                                 .ifnum = 3,
2030                                 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
2031                                 .data = &(const struct audioformat) {
2032                                         .formats = SNDRV_PCM_FMTBIT_S24_3LE,
2033                                         .channels = 4,
2034                                         .iface = 3,
2035                                         .altsetting = 1,
2036                                         .altset_idx = 1,
2037                                         .attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
2038                                         .endpoint = 0x81,
2039                                         .ep_attr = 0x05,
2040                                         .rates = SNDRV_PCM_RATE_44100 |
2041                                                  SNDRV_PCM_RATE_48000 |
2042                                                  SNDRV_PCM_RATE_88200 |
2043                                                  SNDRV_PCM_RATE_96000,
2044                                         .rate_min = 44100,
2045                                         .rate_max = 96000,
2046                                         .nr_rates = 4,
2047                                         .rate_table = (unsigned int[]) {
2048                                                 44100, 48000, 88200, 96000
2049                                         },
2050                                         .clock = 0x80,
2051                                 }
2052                         },
2053                         /* MIDI */
2054                         {
2055                                 .ifnum = -1 /* Interface = 4 */
2056                         }
2057                 }
2058         }
2059 },
2060 {
2061         USB_DEVICE_VENDOR_SPEC(0x0763, 0x2031),
2062         .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
2063                 /* .vendor_name = "M-Audio", */
2064                 /* .product_name = "Fast Track C600", */
2065                 .ifnum = QUIRK_ANY_INTERFACE,
2066                 .type = QUIRK_COMPOSITE,
2067                 .data = &(const struct snd_usb_audio_quirk[]) {
2068                         {
2069                                 .ifnum = 1,
2070                                 .type = QUIRK_AUDIO_STANDARD_MIXER,
2071                         },
2072                         /* Playback */
2073                         {
2074                                 .ifnum = 2,
2075                                 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
2076                                 .data = &(const struct audioformat) {
2077                                         .formats = SNDRV_PCM_FMTBIT_S24_3LE,
2078                                         .channels = 8,
2079                                         .iface = 2,
2080                                         .altsetting = 1,
2081                                         .altset_idx = 1,
2082                                         .attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
2083                                         .endpoint = 0x01,
2084                                         .ep_attr = 0x09,
2085                                         .rates = SNDRV_PCM_RATE_44100 |
2086                                                  SNDRV_PCM_RATE_48000 |
2087                                                  SNDRV_PCM_RATE_88200 |
2088                                                  SNDRV_PCM_RATE_96000,
2089                                         .rate_min = 44100,
2090                                         .rate_max = 96000,
2091                                         .nr_rates = 4,
2092                                         .rate_table = (unsigned int[]) {
2093                                                         44100, 48000, 88200, 96000
2094                                         },
2095                                         .clock = 0x80,
2096                                 }
2097                         },
2098                         /* Capture */
2099                         {
2100                                 .ifnum = 3,
2101                                 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
2102                                 .data = &(const struct audioformat) {
2103                                         .formats = SNDRV_PCM_FMTBIT_S24_3LE,
2104                                         .channels = 6,
2105                                         .iface = 3,
2106                                         .altsetting = 1,
2107                                         .altset_idx = 1,
2108                                         .attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
2109                                         .endpoint = 0x81,
2110                                         .ep_attr = 0x05,
2111                                         .rates = SNDRV_PCM_RATE_44100 |
2112                                                  SNDRV_PCM_RATE_48000 |
2113                                                  SNDRV_PCM_RATE_88200 |
2114                                                  SNDRV_PCM_RATE_96000,
2115                                         .rate_min = 44100,
2116                                         .rate_max = 96000,
2117                                         .nr_rates = 4,
2118                                         .rate_table = (unsigned int[]) {
2119                                                 44100, 48000, 88200, 96000
2120                                         },
2121                                         .clock = 0x80,
2122                                 }
2123                         },
2124                         /* MIDI */
2125                         {
2126                                 .ifnum = -1 /* Interface = 4 */
2127                         }
2128                 }
2129         }
2130 },
2131 {
2132         USB_DEVICE_VENDOR_SPEC(0x0763, 0x2080),
2133         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2134                 /* .vendor_name = "M-Audio", */
2135                 /* .product_name = "Fast Track Ultra", */
2136                 .ifnum = QUIRK_ANY_INTERFACE,
2137                 .type = QUIRK_COMPOSITE,
2138                 .data = & (const struct snd_usb_audio_quirk[]) {
2139                         {
2140                                 .ifnum = 0,
2141                                 .type = QUIRK_AUDIO_STANDARD_MIXER,
2142                         },
2143                         {
2144                                 .ifnum = 1,
2145                                 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
2146                                 .data = & (const struct audioformat) {
2147                                         .formats = SNDRV_PCM_FMTBIT_S24_3LE,
2148                                         .channels = 8,
2149                                         .iface = 1,
2150                                         .altsetting = 1,
2151                                         .altset_idx = 1,
2152                                         .attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
2153                                         .endpoint = 0x01,
2154                                         .ep_attr = 0x09,
2155                                         .rates = SNDRV_PCM_RATE_44100 |
2156                                                  SNDRV_PCM_RATE_48000 |
2157                                                  SNDRV_PCM_RATE_88200 |
2158                                                  SNDRV_PCM_RATE_96000,
2159                                         .rate_min = 44100,
2160                                         .rate_max = 96000,
2161                                         .nr_rates = 4,
2162                                         .rate_table = (unsigned int[]) {
2163                                                 44100, 48000, 88200, 96000
2164                                         }
2165                                 }
2166                         },
2167                         {
2168                                 .ifnum = 2,
2169                                 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
2170                                 .data = & (const struct audioformat) {
2171                                         .formats = SNDRV_PCM_FMTBIT_S24_3LE,
2172                                         .channels = 8,
2173                                         .iface = 2,
2174                                         .altsetting = 1,
2175                                         .altset_idx = 1,
2176                                         .attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
2177                                         .endpoint = 0x81,
2178                                         .ep_attr = 0x05,
2179                                         .rates = SNDRV_PCM_RATE_44100 |
2180                                                  SNDRV_PCM_RATE_48000 |
2181                                                  SNDRV_PCM_RATE_88200 |
2182                                                  SNDRV_PCM_RATE_96000,
2183                                         .rate_min = 44100,
2184                                         .rate_max = 96000,
2185                                         .nr_rates = 4,
2186                                         .rate_table = (unsigned int[]) {
2187                                                 44100, 48000, 88200, 96000
2188                                         }
2189                                 }
2190                         },
2191                         /* interface 3 (MIDI) is standard compliant */
2192                         {
2193                                 .ifnum = -1
2194                         }
2195                 }
2196         }
2197 },
2198 {
2199         USB_DEVICE_VENDOR_SPEC(0x0763, 0x2081),
2200         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2201                 /* .vendor_name = "M-Audio", */
2202                 /* .product_name = "Fast Track Ultra 8R", */
2203                 .ifnum = QUIRK_ANY_INTERFACE,
2204                 .type = QUIRK_COMPOSITE,
2205                 .data = & (const struct snd_usb_audio_quirk[]) {
2206                         {
2207                                 .ifnum = 0,
2208                                 .type = QUIRK_AUDIO_STANDARD_MIXER,
2209                         },
2210                         {
2211                                 .ifnum = 1,
2212                                 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
2213                                 .data = & (const struct audioformat) {
2214                                         .formats = SNDRV_PCM_FMTBIT_S24_3LE,
2215                                         .channels = 8,
2216                                         .iface = 1,
2217                                         .altsetting = 1,
2218                                         .altset_idx = 1,
2219                                         .attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
2220                                         .endpoint = 0x01,
2221                                         .ep_attr = 0x09,
2222                                         .rates = SNDRV_PCM_RATE_44100 |
2223                                                  SNDRV_PCM_RATE_48000 |
2224                                                  SNDRV_PCM_RATE_88200 |
2225                                                  SNDRV_PCM_RATE_96000,
2226                                         .rate_min = 44100,
2227                                         .rate_max = 96000,
2228                                         .nr_rates = 4,
2229                                         .rate_table = (unsigned int[]) {
2230                                                         44100, 48000, 88200, 96000
2231                                         }
2232                                 }
2233                         },
2234                         {
2235                                 .ifnum = 2,
2236                                 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
2237                                 .data = & (const struct audioformat) {
2238                                         .formats = SNDRV_PCM_FMTBIT_S24_3LE,
2239                                         .channels = 8,
2240                                         .iface = 2,
2241                                         .altsetting = 1,
2242                                         .altset_idx = 1,
2243                                         .attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
2244                                         .endpoint = 0x81,
2245                                         .ep_attr = 0x05,
2246                                         .rates = SNDRV_PCM_RATE_44100 |
2247                                                  SNDRV_PCM_RATE_48000 |
2248                                                  SNDRV_PCM_RATE_88200 |
2249                                                  SNDRV_PCM_RATE_96000,
2250                                         .rate_min = 44100,
2251                                         .rate_max = 96000,
2252                                         .nr_rates = 4,
2253                                         .rate_table = (unsigned int[]) {
2254                                                 44100, 48000, 88200, 96000
2255                                         }
2256                                 }
2257                         },
2258                         /* interface 3 (MIDI) is standard compliant */
2259                         {
2260                                 .ifnum = -1
2261                         }
2262                 }
2263         }
2264 },
2265
2266 /* Casio devices */
2267 {
2268         USB_DEVICE(0x07cf, 0x6801),
2269         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2270                 .vendor_name = "Casio",
2271                 .product_name = "PL-40R",
2272                 .ifnum = 0,
2273                 .type = QUIRK_MIDI_YAMAHA
2274         }
2275 },
2276 {
2277         /* this ID is used by several devices without a product ID */
2278         USB_DEVICE(0x07cf, 0x6802),
2279         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2280                 .vendor_name = "Casio",
2281                 .product_name = "Keyboard",
2282                 .ifnum = 0,
2283                 .type = QUIRK_MIDI_YAMAHA
2284         }
2285 },
2286
2287 /* Mark of the Unicorn devices */
2288 {
2289         /* thanks to Robert A. Lerche <ral 'at' msbit.com> */
2290         .match_flags = USB_DEVICE_ID_MATCH_VENDOR |
2291                        USB_DEVICE_ID_MATCH_PRODUCT |
2292                        USB_DEVICE_ID_MATCH_DEV_SUBCLASS,
2293         .idVendor = 0x07fd,
2294         .idProduct = 0x0001,
2295         .bDeviceSubClass = 2,
2296         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2297                 .vendor_name = "MOTU",
2298                 .product_name = "Fastlane",
2299                 .ifnum = QUIRK_ANY_INTERFACE,
2300                 .type = QUIRK_COMPOSITE,
2301                 .data = & (const struct snd_usb_audio_quirk[]) {
2302                         {
2303                                 .ifnum = 0,
2304                                 .type = QUIRK_MIDI_RAW_BYTES
2305                         },
2306                         {
2307                                 .ifnum = 1,
2308                                 .type = QUIRK_IGNORE_INTERFACE
2309                         },
2310                         {
2311                                 .ifnum = -1
2312                         }
2313                 }
2314         }
2315 },
2316
2317 /* Emagic devices */
2318 {
2319         USB_DEVICE(0x086a, 0x0001),
2320         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2321                 .vendor_name = "Emagic",
2322                 .product_name = "Unitor8",
2323                 .ifnum = 2,
2324                 .type = QUIRK_MIDI_EMAGIC,
2325                 .data = & (const struct snd_usb_midi_endpoint_info) {
2326                         .out_cables = 0x80ff,
2327                         .in_cables  = 0x80ff
2328                 }
2329         }
2330 },
2331 {
2332         USB_DEVICE(0x086a, 0x0002),
2333         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2334                 .vendor_name = "Emagic",
2335                 /* .product_name = "AMT8", */
2336                 .ifnum = 2,
2337                 .type = QUIRK_MIDI_EMAGIC,
2338                 .data = & (const struct snd_usb_midi_endpoint_info) {
2339                         .out_cables = 0x80ff,
2340                         .in_cables  = 0x80ff
2341                 }
2342         }
2343 },
2344 {
2345         USB_DEVICE(0x086a, 0x0003),
2346         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2347                 .vendor_name = "Emagic",
2348                 /* .product_name = "MT4", */
2349                 .ifnum = 2,
2350                 .type = QUIRK_MIDI_EMAGIC,
2351                 .data = & (const struct snd_usb_midi_endpoint_info) {
2352                         .out_cables = 0x800f,
2353                         .in_cables  = 0x8003
2354                 }
2355         }
2356 },
2357
2358 /* KORG devices */
2359 {
2360         USB_DEVICE_VENDOR_SPEC(0x0944, 0x0200),
2361         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2362                 .vendor_name = "KORG, Inc.",
2363                 /* .product_name = "PANDORA PX5D", */
2364                 .ifnum = 3,
2365                 .type = QUIRK_MIDI_STANDARD_INTERFACE,
2366         }
2367 },
2368
2369 {
2370         USB_DEVICE_VENDOR_SPEC(0x0944, 0x0201),
2371         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2372                 .vendor_name = "KORG, Inc.",
2373                 /* .product_name = "ToneLab ST", */
2374                 .ifnum = 3,
2375                 .type = QUIRK_MIDI_STANDARD_INTERFACE,
2376         }
2377 },
2378
2379 /* AKAI devices */
2380 {
2381         USB_DEVICE(0x09e8, 0x0062),
2382         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2383                 .vendor_name = "AKAI",
2384                 .product_name = "MPD16",
2385                 .ifnum = 0,
2386                 .type = QUIRK_MIDI_AKAI,
2387         }
2388 },
2389
2390 {
2391         /* Akai MPC Element */
2392         USB_DEVICE(0x09e8, 0x0021),
2393         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2394                 .ifnum = QUIRK_ANY_INTERFACE,
2395                 .type = QUIRK_COMPOSITE,
2396                 .data = & (const struct snd_usb_audio_quirk[]) {
2397                         {
2398                                 .ifnum = 0,
2399                                 .type = QUIRK_IGNORE_INTERFACE
2400                         },
2401                         {
2402                                 .ifnum = 1,
2403                                 .type = QUIRK_MIDI_STANDARD_INTERFACE
2404                         },
2405                         {
2406                                 .ifnum = -1
2407                         }
2408                 }
2409         }
2410 },
2411
2412 /* Steinberg devices */
2413 {
2414         /* Steinberg MI2 */
2415         USB_DEVICE_VENDOR_SPEC(0x0a4e, 0x2040),
2416         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2417                 .ifnum = QUIRK_ANY_INTERFACE,
2418                 .type = QUIRK_COMPOSITE,
2419                 .data = & (const struct snd_usb_audio_quirk[]) {
2420                         {
2421                                 .ifnum = 0,
2422                                 .type = QUIRK_AUDIO_STANDARD_INTERFACE
2423                         },
2424                         {
2425                                 .ifnum = 1,
2426                                 .type = QUIRK_AUDIO_STANDARD_INTERFACE
2427                         },
2428                         {
2429                                 .ifnum = 2,
2430                                 .type = QUIRK_AUDIO_STANDARD_INTERFACE
2431                         },
2432                         {
2433                                 .ifnum = 3,
2434                                 .type = QUIRK_MIDI_FIXED_ENDPOINT,
2435                                 .data = &(const struct snd_usb_midi_endpoint_info) {
2436                                         .out_cables = 0x0001,
2437                                         .in_cables  = 0x0001
2438                                 }
2439                         },
2440                         {
2441                                 .ifnum = -1
2442                         }
2443                 }
2444         }
2445 },
2446 {
2447         /* Steinberg MI4 */
2448         USB_DEVICE_VENDOR_SPEC(0x0a4e, 0x4040),
2449         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2450                 .ifnum = QUIRK_ANY_INTERFACE,
2451                 .type = QUIRK_COMPOSITE,
2452                 .data = & (const struct snd_usb_audio_quirk[]) {
2453                         {
2454                                 .ifnum = 0,
2455                                 .type = QUIRK_AUDIO_STANDARD_INTERFACE
2456                         },
2457                         {
2458                                 .ifnum = 1,
2459                                 .type = QUIRK_AUDIO_STANDARD_INTERFACE
2460                         },
2461                         {
2462                                 .ifnum = 2,
2463                                 .type = QUIRK_AUDIO_STANDARD_INTERFACE
2464                         },
2465                         {
2466                                 .ifnum = 3,
2467                                 .type = QUIRK_MIDI_FIXED_ENDPOINT,
2468                                 .data = &(const struct snd_usb_midi_endpoint_info) {
2469                                         .out_cables = 0x0001,
2470                                         .in_cables  = 0x0001
2471                                 }
2472                         },
2473                         {
2474                                 .ifnum = -1
2475                         }
2476                 }
2477         }
2478 },
2479
2480 /* TerraTec devices */
2481 {
2482         USB_DEVICE_VENDOR_SPEC(0x0ccd, 0x0012),
2483         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2484                 .vendor_name = "TerraTec",
2485                 .product_name = "PHASE 26",
2486                 .ifnum = 3,
2487                 .type = QUIRK_MIDI_STANDARD_INTERFACE
2488         }
2489 },
2490 {
2491         USB_DEVICE_VENDOR_SPEC(0x0ccd, 0x0013),
2492         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2493                 .vendor_name = "TerraTec",
2494                 .product_name = "PHASE 26",
2495                 .ifnum = 3,
2496                 .type = QUIRK_MIDI_STANDARD_INTERFACE
2497         }
2498 },
2499 {
2500         USB_DEVICE_VENDOR_SPEC(0x0ccd, 0x0014),
2501         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2502                 .vendor_name = "TerraTec",
2503                 .product_name = "PHASE 26",
2504                 .ifnum = 3,
2505                 .type = QUIRK_MIDI_STANDARD_INTERFACE
2506         }
2507 },
2508 {
2509         USB_DEVICE(0x0ccd, 0x0035),
2510         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2511                 .vendor_name = "Miditech",
2512                 .product_name = "Play'n Roll",
2513                 .ifnum = 0,
2514                 .type = QUIRK_MIDI_CME
2515         }
2516 },
2517
2518 /* Novation EMS devices */
2519 {
2520         USB_DEVICE_VENDOR_SPEC(0x1235, 0x0001),
2521         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2522                 .vendor_name = "Novation",
2523                 .product_name = "ReMOTE Audio/XStation",
2524                 .ifnum = 4,
2525                 .type = QUIRK_MIDI_NOVATION
2526         }
2527 },
2528 {
2529         USB_DEVICE_VENDOR_SPEC(0x1235, 0x0002),
2530         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2531                 .vendor_name = "Novation",
2532                 .product_name = "Speedio",
2533                 .ifnum = 3,
2534                 .type = QUIRK_MIDI_NOVATION
2535         }
2536 },
2537 {
2538         USB_DEVICE(0x1235, 0x000a),
2539         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2540                 /* .vendor_name = "Novation", */
2541                 /* .product_name = "Nocturn", */
2542                 .ifnum = 0,
2543                 .type = QUIRK_MIDI_RAW_BYTES
2544         }
2545 },
2546 {
2547         USB_DEVICE(0x1235, 0x000e),
2548         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2549                 /* .vendor_name = "Novation", */
2550                 /* .product_name = "Launchpad", */
2551                 .ifnum = 0,
2552                 .type = QUIRK_MIDI_RAW_BYTES
2553         }
2554 },
2555 {
2556         USB_DEVICE(0x1235, 0x0010),
2557         .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
2558                 .vendor_name = "Focusrite",
2559                 .product_name = "Saffire 6 USB",
2560                 .ifnum = QUIRK_ANY_INTERFACE,
2561                 .type = QUIRK_COMPOSITE,
2562                 .data = (const struct snd_usb_audio_quirk[]) {
2563                         {
2564                                 .ifnum = 0,
2565                                 .type = QUIRK_AUDIO_STANDARD_MIXER,
2566                         },
2567                         {
2568                                 .ifnum = 0,
2569                                 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
2570                                 .data = &(const struct audioformat) {
2571                                         .formats = SNDRV_PCM_FMTBIT_S24_3LE,
2572                                         .channels = 4,
2573                                         .iface = 0,
2574                                         .altsetting = 1,
2575                                         .altset_idx = 1,
2576                                         .attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
2577                                         .endpoint = 0x01,
2578                                         .ep_attr = USB_ENDPOINT_XFER_ISOC,
2579                                         .datainterval = 1,
2580                                         .maxpacksize = 0x024c,
2581                                         .rates = SNDRV_PCM_RATE_44100 |
2582                                                  SNDRV_PCM_RATE_48000,
2583                                         .rate_min = 44100,
2584                                         .rate_max = 48000,
2585                                         .nr_rates = 2,
2586                                         .rate_table = (unsigned int[]) {
2587                                                 44100, 48000
2588                                         }
2589                                 }
2590                         },
2591                         {
2592                                 .ifnum = 0,
2593                                 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
2594                                 .data = &(const struct audioformat) {
2595                                         .formats = SNDRV_PCM_FMTBIT_S24_3LE,
2596                                         .channels = 2,
2597                                         .iface = 0,
2598                                         .altsetting = 1,
2599                                         .altset_idx = 1,
2600                                         .attributes = 0,
2601                                         .endpoint = 0x82,
2602                                         .ep_attr = USB_ENDPOINT_XFER_ISOC,
2603                                         .datainterval = 1,
2604                                         .maxpacksize = 0x0126,
2605                                         .rates = SNDRV_PCM_RATE_44100 |
2606                                                  SNDRV_PCM_RATE_48000,
2607                                         .rate_min = 44100,
2608                                         .rate_max = 48000,
2609                                         .nr_rates = 2,
2610                                         .rate_table = (unsigned int[]) {
2611                                                 44100, 48000
2612                                         }
2613                                 }
2614                         },
2615                         {
2616                                 .ifnum = 1,
2617                                 .type = QUIRK_MIDI_RAW_BYTES
2618                         },
2619                         {
2620                                 .ifnum = -1
2621                         }
2622                 }
2623         }
2624 },
2625 {
2626         USB_DEVICE(0x1235, 0x0018),
2627         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2628                 .vendor_name = "Novation",
2629                 .product_name = "Twitch",
2630                 .ifnum = QUIRK_ANY_INTERFACE,
2631                 .type = QUIRK_COMPOSITE,
2632                 .data = (const struct snd_usb_audio_quirk[]) {
2633                         {
2634                                 .ifnum = 0,
2635                                 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
2636                                 .data = & (const struct audioformat) {
2637                                         .formats = SNDRV_PCM_FMTBIT_S24_3LE,
2638                                         .channels = 4,
2639                                         .iface = 0,
2640                                         .altsetting = 1,
2641                                         .altset_idx = 1,
2642                                         .attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
2643                                         .endpoint = 0x01,
2644                                         .ep_attr = USB_ENDPOINT_XFER_ISOC,
2645                                         .rates = SNDRV_PCM_RATE_44100 |
2646                                                  SNDRV_PCM_RATE_48000,
2647                                         .rate_min = 44100,
2648                                         .rate_max = 48000,
2649                                         .nr_rates = 2,
2650                                         .rate_table = (unsigned int[]) {
2651                                                 44100, 48000
2652                                         }
2653                                 }
2654                         },
2655                         {
2656                                 .ifnum = 1,
2657                                 .type = QUIRK_MIDI_RAW_BYTES
2658                         },
2659                         {
2660                                 .ifnum = -1
2661                         }
2662                 }
2663         }
2664 },
2665 {
2666         USB_DEVICE_VENDOR_SPEC(0x1235, 0x4661),
2667         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2668                 .vendor_name = "Novation",
2669                 .product_name = "ReMOTE25",
2670                 .ifnum = 0,
2671                 .type = QUIRK_MIDI_NOVATION
2672         }
2673 },
2674
2675 /* Access Music devices */
2676 {
2677         /* VirusTI Desktop */
2678         USB_DEVICE_VENDOR_SPEC(0x133e, 0x0815),
2679         .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
2680                 .ifnum = QUIRK_ANY_INTERFACE,
2681                 .type = QUIRK_COMPOSITE,
2682                 .data = &(const struct snd_usb_audio_quirk[]) {
2683                         {
2684                                 .ifnum = 3,
2685                                 .type = QUIRK_MIDI_FIXED_ENDPOINT,
2686                                 .data = &(const struct snd_usb_midi_endpoint_info) {
2687                                         .out_cables = 0x0003,
2688                                         .in_cables  = 0x0003
2689                                 }
2690                         },
2691                         {
2692                                 .ifnum = 4,
2693                                 .type = QUIRK_IGNORE_INTERFACE
2694                         },
2695                         {
2696                                 .ifnum = -1
2697                         }
2698                 }
2699         }
2700 },
2701
2702 /* Lenovo ThinkStation P620 Rear Line-in, Line-out and Microphone */
2703 {
2704         USB_DEVICE(0x17aa, 0x1046),
2705         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2706                 .ifnum = QUIRK_ANY_INTERFACE,
2707                 .type = QUIRK_SETUP_DISABLE_AUTOSUSPEND
2708         }
2709 },
2710 /* Lenovo ThinkStation P620 Internal Speaker + Front Headset */
2711 {
2712         USB_DEVICE(0x17aa, 0x104d),
2713         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2714                 .ifnum = QUIRK_ANY_INTERFACE,
2715                 .type = QUIRK_SETUP_DISABLE_AUTOSUSPEND
2716         }
2717 },
2718
2719 /* Native Instruments MK2 series */
2720 {
2721         /* Komplete Audio 6 */
2722         .match_flags = USB_DEVICE_ID_MATCH_DEVICE,
2723         .idVendor = 0x17cc,
2724         .idProduct = 0x1000,
2725 },
2726 {
2727         /* Traktor Audio 6 */
2728         .match_flags = USB_DEVICE_ID_MATCH_DEVICE,
2729         .idVendor = 0x17cc,
2730         .idProduct = 0x1010,
2731 },
2732 {
2733         /* Traktor Audio 10 */
2734         .match_flags = USB_DEVICE_ID_MATCH_DEVICE,
2735         .idVendor = 0x17cc,
2736         .idProduct = 0x1020,
2737 },
2738
2739 /* QinHeng devices */
2740 {
2741         USB_DEVICE(0x1a86, 0x752d),
2742         .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
2743                 .vendor_name = "QinHeng",
2744                 .product_name = "CH345",
2745                 .ifnum = 1,
2746                 .type = QUIRK_MIDI_CH345
2747         }
2748 },
2749
2750 /* KeithMcMillen Stringport */
2751 { USB_DEVICE(0x1f38, 0x0001) }, /* FIXME: should be more restrictive matching */
2752
2753 /* Miditech devices */
2754 {
2755         USB_DEVICE(0x4752, 0x0011),
2756         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2757                 .vendor_name = "Miditech",
2758                 .product_name = "Midistart-2",
2759                 .ifnum = 0,
2760                 .type = QUIRK_MIDI_CME
2761         }
2762 },
2763
2764 /* Central Music devices */
2765 {
2766         /* this ID used by both Miditech MidiStudio-2 and CME UF-x */
2767         USB_DEVICE(0x7104, 0x2202),
2768         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2769                 .ifnum = 0,
2770                 .type = QUIRK_MIDI_CME
2771         }
2772 },
2773
2774 /*
2775  * Auvitek au0828 devices with audio interface.
2776  * This should be kept in sync with drivers/media/usb/au0828/au0828-cards.c
2777  * Please notice that some drivers are DVB only, and don't need to be
2778  * here. That's the case, for example, of DVICO_FUSIONHDTV7.
2779  */
2780
2781 #define AU0828_DEVICE(vid, pid, vname, pname) { \
2782         USB_AUDIO_DEVICE(vid, pid), \
2783         .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) { \
2784                 .vendor_name = vname, \
2785                 .product_name = pname, \
2786                 .ifnum = QUIRK_ANY_INTERFACE, \
2787                 .type = QUIRK_AUDIO_ALIGN_TRANSFER, \
2788                 .shares_media_device = 1, \
2789         } \
2790 }
2791
2792 AU0828_DEVICE(0x2040, 0x7200, "Hauppauge", "HVR-950Q"),
2793 AU0828_DEVICE(0x2040, 0x7240, "Hauppauge", "HVR-850"),
2794 AU0828_DEVICE(0x2040, 0x7210, "Hauppauge", "HVR-950Q"),
2795 AU0828_DEVICE(0x2040, 0x7217, "Hauppauge", "HVR-950Q"),
2796 AU0828_DEVICE(0x2040, 0x721b, "Hauppauge", "HVR-950Q"),
2797 AU0828_DEVICE(0x2040, 0x721e, "Hauppauge", "HVR-950Q"),
2798 AU0828_DEVICE(0x2040, 0x721f, "Hauppauge", "HVR-950Q"),
2799 AU0828_DEVICE(0x2040, 0x7280, "Hauppauge", "HVR-950Q"),
2800 AU0828_DEVICE(0x0fd9, 0x0008, "Hauppauge", "HVR-950Q"),
2801 AU0828_DEVICE(0x2040, 0x7201, "Hauppauge", "HVR-950Q-MXL"),
2802 AU0828_DEVICE(0x2040, 0x7211, "Hauppauge", "HVR-950Q-MXL"),
2803 AU0828_DEVICE(0x2040, 0x7281, "Hauppauge", "HVR-950Q-MXL"),
2804 AU0828_DEVICE(0x05e1, 0x0480, "Hauppauge", "Woodbury"),
2805 AU0828_DEVICE(0x2040, 0x8200, "Hauppauge", "Woodbury"),
2806 AU0828_DEVICE(0x2040, 0x7260, "Hauppauge", "HVR-950Q"),
2807 AU0828_DEVICE(0x2040, 0x7213, "Hauppauge", "HVR-950Q"),
2808 AU0828_DEVICE(0x2040, 0x7270, "Hauppauge", "HVR-950Q"),
2809
2810 /* Syntek STK1160 */
2811 {
2812         USB_AUDIO_DEVICE(0x05e1, 0x0408),
2813         .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
2814                 .vendor_name = "Syntek",
2815                 .product_name = "STK1160",
2816                 .ifnum = QUIRK_ANY_INTERFACE,
2817                 .type = QUIRK_AUDIO_ALIGN_TRANSFER
2818         }
2819 },
2820
2821 /* Digidesign Mbox */
2822 {
2823         /* Thanks to Clemens Ladisch <clemens@ladisch.de> */
2824         USB_DEVICE(0x0dba, 0x1000),
2825         .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
2826                 .vendor_name = "Digidesign",
2827                 .product_name = "MBox",
2828                 .ifnum = QUIRK_ANY_INTERFACE,
2829                 .type = QUIRK_COMPOSITE,
2830                 .data = (const struct snd_usb_audio_quirk[]){
2831                         {
2832                                 .ifnum = 0,
2833                                 .type = QUIRK_AUDIO_STANDARD_MIXER,
2834                         },
2835                         {
2836                                 .ifnum = 1,
2837                                 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
2838                                 .data = &(const struct audioformat) {
2839                                         .formats = SNDRV_PCM_FMTBIT_S24_3BE,
2840                                         .channels = 2,
2841                                         .iface = 1,
2842                                         .altsetting = 1,
2843                                         .altset_idx = 1,
2844                                         .attributes = 0x4,
2845                                         .endpoint = 0x02,
2846                                         .ep_attr = USB_ENDPOINT_XFER_ISOC |
2847                                                 USB_ENDPOINT_SYNC_SYNC,
2848                                         .maxpacksize = 0x130,
2849                                         .rates = SNDRV_PCM_RATE_48000,
2850                                         .rate_min = 48000,
2851                                         .rate_max = 48000,
2852                                         .nr_rates = 1,
2853                                         .rate_table = (unsigned int[]) {
2854                                                 48000
2855                                         }
2856                                 }
2857                         },
2858                         {
2859                                 .ifnum = 1,
2860                                 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
2861                                 .data = &(const struct audioformat) {
2862                                         .formats = SNDRV_PCM_FMTBIT_S24_3BE,
2863                                         .channels = 2,
2864                                         .iface = 1,
2865                                         .altsetting = 1,
2866                                         .altset_idx = 1,
2867                                         .attributes = 0x4,
2868                                         .endpoint = 0x81,
2869                                         .ep_attr = USB_ENDPOINT_XFER_ISOC |
2870                                                 USB_ENDPOINT_SYNC_ASYNC,
2871                                         .maxpacksize = 0x130,
2872                                         .rates = SNDRV_PCM_RATE_48000,
2873                                         .rate_min = 48000,
2874                                         .rate_max = 48000,
2875                                         .nr_rates = 1,
2876                                         .rate_table = (unsigned int[]) {
2877                                                 48000
2878                                         }
2879                                 }
2880                         },
2881                         {
2882                                 .ifnum = -1
2883                         }
2884                 }
2885         }
2886 },
2887
2888 /* DIGIDESIGN MBOX 2 */
2889 {
2890         USB_DEVICE(0x0dba, 0x3000),
2891         .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
2892                 .vendor_name = "Digidesign",
2893                 .product_name = "Mbox 2",
2894                 .ifnum = QUIRK_ANY_INTERFACE,
2895                 .type = QUIRK_COMPOSITE,
2896                 .data = (const struct snd_usb_audio_quirk[]) {
2897                         {
2898                                 .ifnum = 0,
2899                                 .type = QUIRK_IGNORE_INTERFACE
2900                         },
2901                         {
2902                                 .ifnum = 1,
2903                                 .type = QUIRK_IGNORE_INTERFACE
2904                         },
2905                         {
2906                                 .ifnum = 2,
2907                                 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
2908                                 .data = &(const struct audioformat) {
2909                                         .formats = SNDRV_PCM_FMTBIT_S24_3BE,
2910                                         .channels = 2,
2911                                         .iface = 2,
2912                                         .altsetting = 2,
2913                                         .altset_idx = 1,
2914                                         .attributes = 0x00,
2915                                         .endpoint = 0x03,
2916                                         .ep_attr = USB_ENDPOINT_SYNC_ASYNC,
2917                                         .rates = SNDRV_PCM_RATE_48000,
2918                                         .rate_min = 48000,
2919                                         .rate_max = 48000,
2920                                         .nr_rates = 1,
2921                                         .rate_table = (unsigned int[]) {
2922                                                 48000
2923                                         }
2924                                 }
2925                         },
2926                         {
2927                                 .ifnum = 3,
2928                                 .type = QUIRK_IGNORE_INTERFACE
2929                         },
2930                         {
2931                                 .ifnum = 4,
2932                                 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
2933                                 .data = &(const struct audioformat) {
2934                                 .formats = SNDRV_PCM_FMTBIT_S24_3BE,
2935                                         .channels = 2,
2936                                         .iface = 4,
2937                                         .altsetting = 2,
2938                                         .altset_idx = 1,
2939                                         .attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
2940                                         .endpoint = 0x85,
2941                                         .ep_attr = USB_ENDPOINT_SYNC_SYNC,
2942                                         .rates = SNDRV_PCM_RATE_48000,
2943                                         .rate_min = 48000,
2944                                         .rate_max = 48000,
2945                                         .nr_rates = 1,
2946                                         .rate_table = (unsigned int[]) {
2947                                                 48000
2948                                         }
2949                                 }
2950                         },
2951                         {
2952                                 .ifnum = 5,
2953                                 .type = QUIRK_IGNORE_INTERFACE
2954                         },
2955                         {
2956                                 .ifnum = 6,
2957                                 .type = QUIRK_MIDI_MIDIMAN,
2958                                 .data = &(const struct snd_usb_midi_endpoint_info) {
2959                                         .out_ep =  0x02,
2960                                         .out_cables = 0x0001,
2961                                         .in_ep = 0x81,
2962                                         .in_interval = 0x01,
2963                                         .in_cables = 0x0001
2964                                 }
2965                         },
2966                         {
2967                                 .ifnum = -1
2968                         }
2969                 }
2970         }
2971 },
2972 {
2973         /* Tascam US122 MKII - playback-only support */
2974         USB_DEVICE_VENDOR_SPEC(0x0644, 0x8021),
2975         .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
2976                 .vendor_name = "TASCAM",
2977                 .product_name = "US122 MKII",
2978                 .ifnum = QUIRK_ANY_INTERFACE,
2979                 .type = QUIRK_COMPOSITE,
2980                 .data = (const struct snd_usb_audio_quirk[]) {
2981                         {
2982                                 .ifnum = 0,
2983                                 .type = QUIRK_IGNORE_INTERFACE
2984                         },
2985                         {
2986                                 .ifnum = 1,
2987                                 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
2988                                 .data = &(const struct audioformat) {
2989                                         .formats = SNDRV_PCM_FMTBIT_S24_3LE,
2990                                         .channels = 2,
2991                                         .iface = 1,
2992                                         .altsetting = 1,
2993                                         .altset_idx = 1,
2994                                         .attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
2995                                         .endpoint = 0x02,
2996                                         .ep_attr = USB_ENDPOINT_XFER_ISOC,
2997                                         .rates = SNDRV_PCM_RATE_44100 |
2998                                                  SNDRV_PCM_RATE_48000 |
2999                                                  SNDRV_PCM_RATE_88200 |
3000                                                  SNDRV_PCM_RATE_96000,
3001                                         .rate_min = 44100,
3002                                         .rate_max = 96000,
3003                                         .nr_rates = 4,
3004                                         .rate_table = (unsigned int[]) {
3005                                                 44100, 48000, 88200, 96000
3006                                         }
3007                                 }
3008                         },
3009                         {
3010                                 .ifnum = -1
3011                         }
3012                 }
3013         }
3014 },
3015
3016 /* Microsoft XboxLive Headset/Xbox Communicator */
3017 {
3018         USB_DEVICE(0x045e, 0x0283),
3019         .bInterfaceClass = USB_CLASS_PER_INTERFACE,
3020         .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
3021                 .vendor_name = "Microsoft",
3022                 .product_name = "XboxLive Headset/Xbox Communicator",
3023                 .ifnum = QUIRK_ANY_INTERFACE,
3024                 .type = QUIRK_COMPOSITE,
3025                 .data = &(const struct snd_usb_audio_quirk[]) {
3026                         {
3027                                 /* playback */
3028                                 .ifnum = 0,
3029                                 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
3030                                 .data = &(const struct audioformat) {
3031                                         .formats = SNDRV_PCM_FMTBIT_S16_LE,
3032                                         .channels = 1,
3033                                         .iface = 0,
3034                                         .altsetting = 0,
3035                                         .altset_idx = 0,
3036                                         .attributes = 0,
3037                                         .endpoint = 0x04,
3038                                         .ep_attr = 0x05,
3039                                         .rates = SNDRV_PCM_RATE_CONTINUOUS,
3040                                         .rate_min = 22050,
3041                                         .rate_max = 22050
3042                                 }
3043                         },
3044                         {
3045                                 /* capture */
3046                                 .ifnum = 1,
3047                                 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
3048                                 .data = &(const struct audioformat) {
3049                                         .formats = SNDRV_PCM_FMTBIT_S16_LE,
3050                                         .channels = 1,
3051                                         .iface = 1,
3052                                         .altsetting = 0,
3053                                         .altset_idx = 0,
3054                                         .attributes = 0,
3055                                         .endpoint = 0x85,
3056                                         .ep_attr = 0x05,
3057                                         .rates = SNDRV_PCM_RATE_CONTINUOUS,
3058                                         .rate_min = 16000,
3059                                         .rate_max = 16000
3060                                 }
3061                         },
3062                         {
3063                                 .ifnum = -1
3064                         }
3065                 }
3066         }
3067 },
3068
3069 /* Reloop Play */
3070 {
3071         USB_DEVICE(0x200c, 0x100b),
3072         .bInterfaceClass = USB_CLASS_PER_INTERFACE,
3073         .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
3074                 .ifnum = QUIRK_ANY_INTERFACE,
3075                 .type = QUIRK_COMPOSITE,
3076                 .data = &(const struct snd_usb_audio_quirk[]) {
3077                         {
3078                                 .ifnum = 0,
3079                                 .type = QUIRK_AUDIO_STANDARD_MIXER,
3080                         },
3081                         {
3082                                 .ifnum = 1,
3083                                 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
3084                                 .data = &(const struct audioformat) {
3085                                         .formats = SNDRV_PCM_FMTBIT_S24_3LE,
3086                                         .channels = 4,
3087                                         .iface = 1,
3088                                         .altsetting = 1,
3089                                         .altset_idx = 1,
3090                                         .attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
3091                                         .endpoint = 0x01,
3092                                         .ep_attr = USB_ENDPOINT_SYNC_ADAPTIVE,
3093                                         .rates = SNDRV_PCM_RATE_44100 |
3094                                                  SNDRV_PCM_RATE_48000,
3095                                         .rate_min = 44100,
3096                                         .rate_max = 48000,
3097                                         .nr_rates = 2,
3098                                         .rate_table = (unsigned int[]) {
3099                                                 44100, 48000
3100                                         }
3101                                 }
3102                         },
3103                         {
3104                                 .ifnum = -1
3105                         }
3106                 }
3107         }
3108 },
3109
3110 {
3111         /*
3112          * ZOOM R16/24 in audio interface mode.
3113          * Playback requires an extra four byte LE length indicator
3114          * at the start of each isochronous packet. This quirk is
3115          * enabled in create_standard_audio_quirk().
3116          */
3117         USB_DEVICE(0x1686, 0x00dd),
3118         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
3119                 .ifnum = QUIRK_ANY_INTERFACE,
3120                 .type = QUIRK_COMPOSITE,
3121                 .data = (const struct snd_usb_audio_quirk[]) {
3122                         {
3123                                 /* Playback  */
3124                                 .ifnum = 1,
3125                                 .type = QUIRK_AUDIO_STANDARD_INTERFACE,
3126                         },
3127                         {
3128                                 /* Capture */
3129                                 .ifnum = 2,
3130                                 .type = QUIRK_AUDIO_STANDARD_INTERFACE,
3131                         },
3132                         {
3133                                 /* Midi */
3134                                 .ifnum = 3,
3135                                 .type = QUIRK_MIDI_STANDARD_INTERFACE
3136                         },
3137                         {
3138                                 .ifnum = -1
3139                         },
3140                 }
3141         }
3142 },
3143
3144 {
3145         /*
3146          * Some USB MIDI devices don't have an audio control interface,
3147          * so we have to grab MIDI streaming interfaces here.
3148          */
3149         .match_flags = USB_DEVICE_ID_MATCH_INT_CLASS |
3150                        USB_DEVICE_ID_MATCH_INT_SUBCLASS,
3151         .bInterfaceClass = USB_CLASS_AUDIO,
3152         .bInterfaceSubClass = USB_SUBCLASS_MIDISTREAMING,
3153         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
3154                 .ifnum = QUIRK_ANY_INTERFACE,
3155                 .type = QUIRK_MIDI_STANDARD_INTERFACE
3156         }
3157 },
3158
3159 /* disabled due to regression for other devices;
3160  * see https://bugzilla.kernel.org/show_bug.cgi?id=199905
3161  */
3162 #if 0
3163 {
3164         /*
3165          * Nura's first gen headphones use Cambridge Silicon Radio's vendor
3166          * ID, but it looks like the product ID actually is only for Nura.
3167          * The capture interface does not work at all (even on Windows),
3168          * and only the 48 kHz sample rate works for the playback interface.
3169          */
3170         USB_DEVICE(0x0a12, 0x1243),
3171         .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
3172                 .ifnum = QUIRK_ANY_INTERFACE,
3173                 .type = QUIRK_COMPOSITE,
3174                 .data = (const struct snd_usb_audio_quirk[]) {
3175                         {
3176                                 .ifnum = 0,
3177                                 .type = QUIRK_AUDIO_STANDARD_MIXER,
3178                         },
3179                         /* Capture */
3180                         {
3181                                 .ifnum = 1,
3182                                 .type = QUIRK_IGNORE_INTERFACE,
3183                         },
3184                         /* Playback */
3185                         {
3186                                 .ifnum = 2,
3187                                 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
3188                                 .data = &(const struct audioformat) {
3189                                         .formats = SNDRV_PCM_FMTBIT_S16_LE,
3190                                         .channels = 2,
3191                                         .iface = 2,
3192                                         .altsetting = 1,
3193                                         .altset_idx = 1,
3194                                         .attributes = UAC_EP_CS_ATTR_FILL_MAX |
3195                                                 UAC_EP_CS_ATTR_SAMPLE_RATE,
3196                                         .endpoint = 0x03,
3197                                         .ep_attr = USB_ENDPOINT_XFER_ISOC,
3198                                         .rates = SNDRV_PCM_RATE_48000,
3199                                         .rate_min = 48000,
3200                                         .rate_max = 48000,
3201                                         .nr_rates = 1,
3202                                         .rate_table = (unsigned int[]) {
3203                                                 48000
3204                                         }
3205                                 }
3206                         },
3207                         {
3208                                 .ifnum = -1
3209                         },
3210                 }
3211         }
3212 },
3213 #endif /* disabled */
3214
3215 {
3216         /*
3217          * Bower's & Wilkins PX headphones only support the 48 kHz sample rate
3218          * even though it advertises more. The capture interface doesn't work
3219          * even on windows.
3220          */
3221         USB_DEVICE(0x19b5, 0x0021),
3222         .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
3223                 .ifnum = QUIRK_ANY_INTERFACE,
3224                 .type = QUIRK_COMPOSITE,
3225                 .data = (const struct snd_usb_audio_quirk[]) {
3226                         {
3227                                 .ifnum = 0,
3228                                 .type = QUIRK_AUDIO_STANDARD_MIXER,
3229                         },
3230                         /* Playback */
3231                         {
3232                                 .ifnum = 1,
3233                                 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
3234                                 .data = &(const struct audioformat) {
3235                                         .formats = SNDRV_PCM_FMTBIT_S16_LE,
3236                                         .channels = 2,
3237                                         .iface = 1,
3238                                         .altsetting = 1,
3239                                         .altset_idx = 1,
3240                                         .attributes = UAC_EP_CS_ATTR_FILL_MAX |
3241                                                 UAC_EP_CS_ATTR_SAMPLE_RATE,
3242                                         .endpoint = 0x03,
3243                                         .ep_attr = USB_ENDPOINT_XFER_ISOC,
3244                                         .rates = SNDRV_PCM_RATE_48000,
3245                                         .rate_min = 48000,
3246                                         .rate_max = 48000,
3247                                         .nr_rates = 1,
3248                                         .rate_table = (unsigned int[]) {
3249                                                 48000
3250                                         }
3251                                 }
3252                         },
3253                         {
3254                                 .ifnum = -1
3255                         },
3256                 }
3257         }
3258 },
3259 /* MOTU Microbook II */
3260 {
3261         USB_DEVICE_VENDOR_SPEC(0x07fd, 0x0004),
3262         .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
3263                 .vendor_name = "MOTU",
3264                 .product_name = "MicroBookII",
3265                 .ifnum = QUIRK_ANY_INTERFACE,
3266                 .type = QUIRK_COMPOSITE,
3267                 .data = (const struct snd_usb_audio_quirk[]) {
3268                         {
3269                                 .ifnum = 0,
3270                                 .type = QUIRK_AUDIO_STANDARD_MIXER,
3271                         },
3272                         {
3273                                 .ifnum = 0,
3274                                 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
3275                                 .data = &(const struct audioformat) {
3276                                         .formats = SNDRV_PCM_FMTBIT_S24_3BE,
3277                                         .channels = 6,
3278                                         .iface = 0,
3279                                         .altsetting = 1,
3280                                         .altset_idx = 1,
3281                                         .attributes = 0,
3282                                         .endpoint = 0x84,
3283                                         .rates = SNDRV_PCM_RATE_96000,
3284                                         .ep_attr = USB_ENDPOINT_XFER_ISOC |
3285                                                    USB_ENDPOINT_SYNC_ASYNC,
3286                                         .rate_min = 96000,
3287                                         .rate_max = 96000,
3288                                         .nr_rates = 1,
3289                                         .maxpacksize = 0x00d8,
3290                                         .rate_table = (unsigned int[]) {
3291                                                 96000
3292                                         }
3293                                 }
3294                         },
3295                         {
3296                                 .ifnum = 0,
3297                                 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
3298                                 .data = &(const struct audioformat) {
3299                                         .formats = SNDRV_PCM_FMTBIT_S24_3BE,
3300                                         .channels = 8,
3301                                         .iface = 0,
3302                                         .altsetting = 1,
3303                                         .altset_idx = 1,
3304                                         .attributes = 0,
3305                                         .endpoint = 0x03,
3306                                         .rates = SNDRV_PCM_RATE_96000,
3307                                         .ep_attr = USB_ENDPOINT_XFER_ISOC |
3308                                                    USB_ENDPOINT_SYNC_ASYNC,
3309                                         .rate_min = 96000,
3310                                         .rate_max = 96000,
3311                                         .nr_rates = 1,
3312                                         .maxpacksize = 0x0120,
3313                                         .rate_table = (unsigned int[]) {
3314                                                 96000
3315                                         }
3316                                 }
3317                         },
3318                         {
3319                                 .ifnum = -1
3320                         }
3321                 }
3322         }
3323 },
3324 {
3325         /*
3326          * PIONEER DJ DDJ-SX3
3327          * PCM is 12 channels out, 10 channels in @ 44.1 fixed
3328          * interface 0, vendor class alt setting 1 for endpoints 5 and 0x86
3329          * The feedback for the output is the input.
3330          */
3331         USB_DEVICE_VENDOR_SPEC(0x2b73, 0x0023),
3332         .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
3333                 .ifnum = QUIRK_ANY_INTERFACE,
3334                 .type = QUIRK_COMPOSITE,
3335                 .data = (const struct snd_usb_audio_quirk[]) {
3336                         {
3337                                 .ifnum = 0,
3338                                 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
3339                                 .data = &(const struct audioformat) {
3340                                         .formats = SNDRV_PCM_FMTBIT_S32_LE,
3341                                         .channels = 12,
3342                                         .iface = 0,
3343                                         .altsetting = 1,
3344                                         .altset_idx = 1,
3345                                         .endpoint = 0x05,
3346                                         .ep_attr = USB_ENDPOINT_XFER_ISOC|
3347                                                    USB_ENDPOINT_SYNC_ASYNC,
3348                                         .rates = SNDRV_PCM_RATE_44100,
3349                                         .rate_min = 44100,
3350                                         .rate_max = 44100,
3351                                         .nr_rates = 1,
3352                                         .rate_table = (unsigned int[]) { 44100 }
3353                                 }
3354                         },
3355                         {
3356                                 .ifnum = 0,
3357                                 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
3358                                 .data = &(const struct audioformat) {
3359                                         .formats = SNDRV_PCM_FMTBIT_S32_LE,
3360                                         .channels = 10,
3361                                         .iface = 0,
3362                                         .altsetting = 1,
3363                                         .altset_idx = 1,
3364                                         .endpoint = 0x86,
3365                                         .ep_idx = 1,
3366                                         .ep_attr = USB_ENDPOINT_XFER_ISOC|
3367                                                  USB_ENDPOINT_SYNC_ASYNC|
3368                                                  USB_ENDPOINT_USAGE_IMPLICIT_FB,
3369                                         .rates = SNDRV_PCM_RATE_44100,
3370                                         .rate_min = 44100,
3371                                         .rate_max = 44100,
3372                                         .nr_rates = 1,
3373                                         .rate_table = (unsigned int[]) { 44100 }
3374                                 }
3375                         },
3376                         {
3377                                 .ifnum = -1
3378                         }
3379                 }
3380         }
3381 },
3382 {
3383         /*
3384          * Pioneer DJ DJM-250MK2
3385          * PCM is 8 channels out @ 48 fixed (endpoint 0x01)
3386          * and 8 channels in @ 48 fixed (endpoint 0x82).
3387          *
3388          * Both playback and recording is working, even simultaneously.
3389          *
3390          * Playback channels could be mapped to:
3391          *  - CH1
3392          *  - CH2
3393          *  - AUX
3394          *
3395          * Recording channels could be mapped to:
3396          *  - Post CH1 Fader
3397          *  - Post CH2 Fader
3398          *  - Cross Fader A
3399          *  - Cross Fader B
3400          *  - MIC
3401          *  - AUX
3402          *  - REC OUT
3403          *
3404          * There is remaining problem with recording directly from PHONO/LINE.
3405          * If we map a channel to:
3406          *  - CH1 Control Tone PHONO
3407          *  - CH1 Control Tone LINE
3408          *  - CH2 Control Tone PHONO
3409          *  - CH2 Control Tone LINE
3410          * it is silent.
3411          * There is no signal even on other operating systems with official drivers.
3412          * The signal appears only when a supported application is started.
3413          * This needs to be investigated yet...
3414          * (there is quite a lot communication on the USB in both directions)
3415          *
3416          * In current version this mixer could be used for playback
3417          * and for recording from vinyls (through Post CH* Fader)
3418          * but not for DVS (Digital Vinyl Systems) like in Mixxx.
3419          */
3420         USB_DEVICE_VENDOR_SPEC(0x2b73, 0x0017),
3421         .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
3422                 .ifnum = QUIRK_ANY_INTERFACE,
3423                 .type = QUIRK_COMPOSITE,
3424                 .data = (const struct snd_usb_audio_quirk[]) {
3425                         {
3426                                 .ifnum = 0,
3427                                 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
3428                                 .data = &(const struct audioformat) {
3429                                         .formats = SNDRV_PCM_FMTBIT_S24_3LE,
3430                                         .channels = 8, // outputs
3431                                         .iface = 0,
3432                                         .altsetting = 1,
3433                                         .altset_idx = 1,
3434                                         .endpoint = 0x01,
3435                                         .ep_attr = USB_ENDPOINT_XFER_ISOC|
3436                                                 USB_ENDPOINT_SYNC_ASYNC,
3437                                         .rates = SNDRV_PCM_RATE_48000,
3438                                         .rate_min = 48000,
3439                                         .rate_max = 48000,
3440                                         .nr_rates = 1,
3441                                         .rate_table = (unsigned int[]) { 48000 }
3442                                         }
3443                         },
3444                         {
3445                                 .ifnum = 0,
3446                                 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
3447                                 .data = &(const struct audioformat) {
3448                                         .formats = SNDRV_PCM_FMTBIT_S24_3LE,
3449                                         .channels = 8, // inputs
3450                                         .iface = 0,
3451                                         .altsetting = 1,
3452                                         .altset_idx = 1,
3453                                         .endpoint = 0x82,
3454                                         .ep_idx = 1,
3455                                         .ep_attr = USB_ENDPOINT_XFER_ISOC|
3456                                                 USB_ENDPOINT_SYNC_ASYNC|
3457                                                 USB_ENDPOINT_USAGE_IMPLICIT_FB,
3458                                         .rates = SNDRV_PCM_RATE_48000,
3459                                         .rate_min = 48000,
3460                                         .rate_max = 48000,
3461                                         .nr_rates = 1,
3462                                         .rate_table = (unsigned int[]) { 48000 }
3463                                 }
3464                         },
3465                         {
3466                                 .ifnum = -1
3467                         }
3468                 }
3469         }
3470 },
3471 {
3472         /*
3473          * PIONEER DJ DDJ-RB
3474          * PCM is 4 channels out, 2 dummy channels in @ 44.1 fixed
3475          * The feedback for the output is the dummy input.
3476          */
3477         USB_DEVICE_VENDOR_SPEC(0x2b73, 0x000e),
3478         .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
3479                 .ifnum = QUIRK_ANY_INTERFACE,
3480                 .type = QUIRK_COMPOSITE,
3481                 .data = (const struct snd_usb_audio_quirk[]) {
3482                         {
3483                                 .ifnum = 0,
3484                                 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
3485                                 .data = &(const struct audioformat) {
3486                                         .formats = SNDRV_PCM_FMTBIT_S24_3LE,
3487                                         .channels = 4,
3488                                         .iface = 0,
3489                                         .altsetting = 1,
3490                                         .altset_idx = 1,
3491                                         .endpoint = 0x01,
3492                                         .ep_attr = USB_ENDPOINT_XFER_ISOC|
3493                                                    USB_ENDPOINT_SYNC_ASYNC,
3494                                         .rates = SNDRV_PCM_RATE_44100,
3495                                         .rate_min = 44100,
3496                                         .rate_max = 44100,
3497                                         .nr_rates = 1,
3498                                         .rate_table = (unsigned int[]) { 44100 }
3499                                 }
3500                         },
3501                         {
3502                                 .ifnum = 0,
3503                                 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
3504                                 .data = &(const struct audioformat) {
3505                                         .formats = SNDRV_PCM_FMTBIT_S24_3LE,
3506                                         .channels = 2,
3507                                         .iface = 0,
3508                                         .altsetting = 1,
3509                                         .altset_idx = 1,
3510                                         .endpoint = 0x82,
3511                                         .ep_idx = 1,
3512                                         .ep_attr = USB_ENDPOINT_XFER_ISOC|
3513                                                  USB_ENDPOINT_SYNC_ASYNC|
3514                                                  USB_ENDPOINT_USAGE_IMPLICIT_FB,
3515                                         .rates = SNDRV_PCM_RATE_44100,
3516                                         .rate_min = 44100,
3517                                         .rate_max = 44100,
3518                                         .nr_rates = 1,
3519                                         .rate_table = (unsigned int[]) { 44100 }
3520                                 }
3521                         },
3522                         {
3523                                 .ifnum = -1
3524                         }
3525                 }
3526         }
3527 },
3528
3529 {
3530         /*
3531          * PIONEER DJ DDJ-RR
3532          * PCM is 6 channels out & 4 channels in @ 44.1 fixed
3533          */
3534         USB_DEVICE_VENDOR_SPEC(0x2b73, 0x000d),
3535         .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
3536                 .ifnum = QUIRK_ANY_INTERFACE,
3537                 .type = QUIRK_COMPOSITE,
3538                 .data = (const struct snd_usb_audio_quirk[]) {
3539                         {
3540                                 .ifnum = 0,
3541                                 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
3542                                 .data = &(const struct audioformat) {
3543                                         .formats = SNDRV_PCM_FMTBIT_S24_3LE,
3544                                         .channels = 6, //Master, Headphones & Booth
3545                                         .iface = 0,
3546                                         .altsetting = 1,
3547                                         .altset_idx = 1,
3548                                         .endpoint = 0x01,
3549                                         .ep_attr = USB_ENDPOINT_XFER_ISOC|
3550                                                    USB_ENDPOINT_SYNC_ASYNC,
3551                                         .rates = SNDRV_PCM_RATE_44100,
3552                                         .rate_min = 44100,
3553                                         .rate_max = 44100,
3554                                         .nr_rates = 1,
3555                                         .rate_table = (unsigned int[]) { 44100 }
3556                                 }
3557                         },
3558                         {
3559                                 .ifnum = 0,
3560                                 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
3561                                 .data = &(const struct audioformat) {
3562                                         .formats = SNDRV_PCM_FMTBIT_S24_3LE,
3563                                         .channels = 4, //2x RCA inputs (CH1 & CH2)
3564                                         .iface = 0,
3565                                         .altsetting = 1,
3566                                         .altset_idx = 1,
3567                                         .endpoint = 0x82,
3568                                         .ep_idx = 1,
3569                                         .ep_attr = USB_ENDPOINT_XFER_ISOC|
3570                                                  USB_ENDPOINT_SYNC_ASYNC|
3571                                                  USB_ENDPOINT_USAGE_IMPLICIT_FB,
3572                                         .rates = SNDRV_PCM_RATE_44100,
3573                                         .rate_min = 44100,
3574                                         .rate_max = 44100,
3575                                         .nr_rates = 1,
3576                                         .rate_table = (unsigned int[]) { 44100 }
3577                                 }
3578                         },
3579                         {
3580                                 .ifnum = -1
3581                         }
3582                 }
3583         }
3584 },
3585
3586 {
3587         /*
3588          * PIONEER DJ DDJ-SR2
3589          * PCM is 4 channels out, 6 channels in @ 44.1 fixed
3590          * The Feedback for the output is the input
3591          */
3592         USB_DEVICE_VENDOR_SPEC(0x2b73, 0x001e),
3593                 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
3594                 .ifnum = QUIRK_ANY_INTERFACE,
3595                 .type = QUIRK_COMPOSITE,
3596                 .data = (const struct snd_usb_audio_quirk[]) {
3597                         {
3598                                 .ifnum = 0,
3599                                 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
3600                                 .data = &(const struct audioformat) {
3601                                         .formats = SNDRV_PCM_FMTBIT_S24_3LE,
3602                                         .channels = 4,
3603                                         .iface = 0,
3604                                         .altsetting = 1,
3605                                         .altset_idx = 1,
3606                                         .endpoint = 0x01,
3607                                         .ep_attr = USB_ENDPOINT_XFER_ISOC|
3608                                                 USB_ENDPOINT_SYNC_ASYNC,
3609                                         .rates = SNDRV_PCM_RATE_44100,
3610                                         .rate_min = 44100,
3611                                         .rate_max = 44100,
3612                                         .nr_rates = 1,
3613                                         .rate_table = (unsigned int[]) { 44100 }
3614                                 }
3615                         },
3616                         {
3617                                 .ifnum = 0,
3618                                 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
3619                                 .data = &(const struct audioformat) {
3620                                         .formats = SNDRV_PCM_FMTBIT_S24_3LE,
3621                                         .channels = 6,
3622                                         .iface = 0,
3623                                         .altsetting = 1,
3624                                         .altset_idx = 1,
3625                                         .endpoint = 0x82,
3626                                         .ep_idx = 1,
3627                                         .ep_attr = USB_ENDPOINT_XFER_ISOC|
3628                                                 USB_ENDPOINT_SYNC_ASYNC|
3629                                         USB_ENDPOINT_USAGE_IMPLICIT_FB,
3630                                         .rates = SNDRV_PCM_RATE_44100,
3631                                         .rate_min = 44100,
3632                                         .rate_max = 44100,
3633                                         .nr_rates = 1,
3634                                         .rate_table = (unsigned int[]) { 44100 }
3635                                 }
3636                         },
3637                         {
3638                                 .ifnum = -1
3639                         }
3640                 }
3641         }
3642 },
3643
3644 {
3645         /*
3646          * Pioneer DJ DJM-900NXS2
3647          * 10 channels playback & 12 channels capture @ 44.1/48/96kHz S24LE
3648          */
3649         USB_DEVICE_VENDOR_SPEC(0x2b73, 0x000a),
3650         .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
3651                 .ifnum = QUIRK_ANY_INTERFACE,
3652                 .type = QUIRK_COMPOSITE,
3653                 .data = (const struct snd_usb_audio_quirk[]) {
3654                         {
3655                                 .ifnum = 0,
3656                                 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
3657                                 .data = &(const struct audioformat) {
3658                                         .formats = SNDRV_PCM_FMTBIT_S24_3LE,
3659                                         .channels = 10,
3660                                         .iface = 0,
3661                                         .altsetting = 1,
3662                                         .altset_idx = 1,
3663                                         .endpoint = 0x01,
3664                                         .ep_attr = USB_ENDPOINT_XFER_ISOC|
3665                                             USB_ENDPOINT_SYNC_ASYNC,
3666                                         .rates = SNDRV_PCM_RATE_44100|
3667                                             SNDRV_PCM_RATE_48000|
3668                                             SNDRV_PCM_RATE_96000,
3669                                         .rate_min = 44100,
3670                                         .rate_max = 96000,
3671                                         .nr_rates = 3,
3672                                         .rate_table = (unsigned int[]) {
3673                                                 44100, 48000, 96000
3674                                         }
3675                                 }
3676                         },
3677                         {
3678                                 .ifnum = 0,
3679                                 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
3680                                 .data = &(const struct audioformat) {
3681                                         .formats = SNDRV_PCM_FMTBIT_S24_3LE,
3682                                         .channels = 12,
3683                                         .iface = 0,
3684                                         .altsetting = 1,
3685                                         .altset_idx = 1,
3686                                         .endpoint = 0x82,
3687                                         .ep_idx = 1,
3688                                         .ep_attr = USB_ENDPOINT_XFER_ISOC|
3689                                             USB_ENDPOINT_SYNC_ASYNC|
3690                                             USB_ENDPOINT_USAGE_IMPLICIT_FB,
3691                                         .rates = SNDRV_PCM_RATE_44100|
3692                                             SNDRV_PCM_RATE_48000|
3693                                             SNDRV_PCM_RATE_96000,
3694                                         .rate_min = 44100,
3695                                         .rate_max = 96000,
3696                                         .nr_rates = 3,
3697                                         .rate_table = (unsigned int[]) {
3698                                                 44100, 48000, 96000
3699                                         }
3700                                 }
3701                         },
3702                         {
3703                                 .ifnum = -1
3704                         }
3705                 }
3706         }
3707 },
3708
3709 /*
3710  * MacroSilicon MS2109 based HDMI capture cards
3711  *
3712  * These claim 96kHz 1ch in the descriptors, but are actually 48kHz 2ch.
3713  * They also need QUIRK_AUDIO_ALIGN_TRANSFER, which makes one wonder if
3714  * they pretend to be 96kHz mono as a workaround for stereo being broken
3715  * by that...
3716  *
3717  * They also have an issue with initial stream alignment that causes the
3718  * channels to be swapped and out of phase, which is dealt with in quirks.c.
3719  */
3720 {
3721         USB_AUDIO_DEVICE(0x534d, 0x2109),
3722         .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
3723                 .vendor_name = "MacroSilicon",
3724                 .product_name = "MS2109",
3725                 .ifnum = QUIRK_ANY_INTERFACE,
3726                 .type = QUIRK_COMPOSITE,
3727                 .data = &(const struct snd_usb_audio_quirk[]) {
3728                         {
3729                                 .ifnum = 2,
3730                                 .type = QUIRK_AUDIO_ALIGN_TRANSFER,
3731                         },
3732                         {
3733                                 .ifnum = 2,
3734                                 .type = QUIRK_AUDIO_STANDARD_MIXER,
3735                         },
3736                         {
3737                                 .ifnum = 3,
3738                                 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
3739                                 .data = &(const struct audioformat) {
3740                                         .formats = SNDRV_PCM_FMTBIT_S16_LE,
3741                                         .channels = 2,
3742                                         .iface = 3,
3743                                         .altsetting = 1,
3744                                         .altset_idx = 1,
3745                                         .attributes = 0,
3746                                         .endpoint = 0x82,
3747                                         .ep_attr = USB_ENDPOINT_XFER_ISOC |
3748                                                 USB_ENDPOINT_SYNC_ASYNC,
3749                                         .rates = SNDRV_PCM_RATE_CONTINUOUS,
3750                                         .rate_min = 48000,
3751                                         .rate_max = 48000,
3752                                 }
3753                         },
3754                         {
3755                                 .ifnum = -1
3756                         }
3757                 }
3758         }
3759 },
3760 {
3761         /*
3762          * Pioneer DJ DJM-750
3763          * 8 channels playback & 8 channels capture @ 44.1/48/96kHz S24LE
3764          */
3765         USB_DEVICE_VENDOR_SPEC(0x08e4, 0x017f),
3766         .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
3767                 .ifnum = QUIRK_ANY_INTERFACE,
3768                 .type = QUIRK_COMPOSITE,
3769                 .data = (const struct snd_usb_audio_quirk[]) {
3770                         {
3771                                 .ifnum = 0,
3772                                 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
3773                                 .data = &(const struct audioformat) {
3774                                         .formats = SNDRV_PCM_FMTBIT_S24_3LE,
3775                                         .channels = 8,
3776                                         .iface = 0,
3777                                         .altsetting = 1,
3778                                         .altset_idx = 1,
3779                                         .endpoint = 0x05,
3780                                         .ep_attr = USB_ENDPOINT_XFER_ISOC|
3781                                             USB_ENDPOINT_SYNC_ASYNC,
3782                                         .rates = SNDRV_PCM_RATE_44100|
3783                                                 SNDRV_PCM_RATE_48000|
3784                                                 SNDRV_PCM_RATE_96000,
3785                                         .rate_min = 44100,
3786                                         .rate_max = 96000,
3787                                         .nr_rates = 3,
3788                                         .rate_table = (unsigned int[]) { 44100, 48000, 96000 }
3789                                 }
3790                         },
3791                         {
3792                                 .ifnum = 0,
3793                                 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
3794                                 .data = &(const struct audioformat) {
3795                                         .formats = SNDRV_PCM_FMTBIT_S24_3LE,
3796                                         .channels = 8,
3797                                         .iface = 0,
3798                                         .altsetting = 1,
3799                                         .altset_idx = 1,
3800                                         .endpoint = 0x86,
3801                                         .ep_idx = 1,
3802                                         .ep_attr = USB_ENDPOINT_XFER_ISOC|
3803                                                 USB_ENDPOINT_SYNC_ASYNC|
3804                                                 USB_ENDPOINT_USAGE_IMPLICIT_FB,
3805                                         .rates = SNDRV_PCM_RATE_44100|
3806                                                 SNDRV_PCM_RATE_48000|
3807                                                 SNDRV_PCM_RATE_96000,
3808                                         .rate_min = 44100,
3809                                         .rate_max = 96000,
3810                                         .nr_rates = 3,
3811                                         .rate_table = (unsigned int[]) { 44100, 48000, 96000 }
3812                                 }
3813                         },
3814                         {
3815                                 .ifnum = -1
3816                         }
3817                 }
3818         }
3819 },
3820 {
3821         /*
3822          * Pioneer DJ DJM-450
3823          * PCM is 8 channels out @ 48 fixed (endpoint 0x01)
3824          * and 8 channels in @ 48 fixed (endpoint 0x82).
3825          */
3826         USB_DEVICE_VENDOR_SPEC(0x2b73, 0x0013),
3827         .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
3828                 .ifnum = QUIRK_ANY_INTERFACE,
3829                 .type = QUIRK_COMPOSITE,
3830                 .data = (const struct snd_usb_audio_quirk[]) {
3831                         {
3832                                 .ifnum = 0,
3833                                 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
3834                                 .data = &(const struct audioformat) {
3835                                         .formats = SNDRV_PCM_FMTBIT_S24_3LE,
3836                                         .channels = 8, // outputs
3837                                         .iface = 0,
3838                                         .altsetting = 1,
3839                                         .altset_idx = 1,
3840                                         .endpoint = 0x01,
3841                                         .ep_attr = USB_ENDPOINT_XFER_ISOC|
3842                                                 USB_ENDPOINT_SYNC_ASYNC,
3843                                         .rates = SNDRV_PCM_RATE_48000,
3844                                         .rate_min = 48000,
3845                                         .rate_max = 48000,
3846                                         .nr_rates = 1,
3847                                         .rate_table = (unsigned int[]) { 48000 }
3848                                         }
3849                         },
3850                         {
3851                                 .ifnum = 0,
3852                                 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
3853                                 .data = &(const struct audioformat) {
3854                                         .formats = SNDRV_PCM_FMTBIT_S24_3LE,
3855                                         .channels = 8, // inputs
3856                                         .iface = 0,
3857                                         .altsetting = 1,
3858                                         .altset_idx = 1,
3859                                         .endpoint = 0x82,
3860                                         .ep_idx = 1,
3861                                         .ep_attr = USB_ENDPOINT_XFER_ISOC|
3862                                                 USB_ENDPOINT_SYNC_ASYNC|
3863                                                 USB_ENDPOINT_USAGE_IMPLICIT_FB,
3864                                         .rates = SNDRV_PCM_RATE_48000,
3865                                         .rate_min = 48000,
3866                                         .rate_max = 48000,
3867                                         .nr_rates = 1,
3868                                         .rate_table = (unsigned int[]) { 48000 }
3869                                 }
3870                         },
3871                         {
3872                                 .ifnum = -1
3873                         }
3874                 }
3875         }
3876 },
3877
3878 #undef USB_DEVICE_VENDOR_SPEC
3879 #undef USB_AUDIO_DEVICE