Merge tag 'driver-core-5.14-rc5' of git://git.kernel.org/pub/scm/linux/kernel/git...
[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
1678 /* UA101 and co are supported by another driver */
1679 {
1680         USB_DEVICE(0x0582, 0x0044), /* UA-1000 high speed */
1681         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1682                 .ifnum = QUIRK_NODEV_INTERFACE
1683         },
1684 },
1685 {
1686         USB_DEVICE(0x0582, 0x007d), /* UA-101 high speed */
1687         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1688                 .ifnum = QUIRK_NODEV_INTERFACE
1689         },
1690 },
1691 {
1692         USB_DEVICE(0x0582, 0x008d), /* UA-101 full speed */
1693         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1694                 .ifnum = QUIRK_NODEV_INTERFACE
1695         },
1696 },
1697
1698 /* this catches most recent vendor-specific Roland devices */
1699 {
1700         .match_flags = USB_DEVICE_ID_MATCH_VENDOR |
1701                        USB_DEVICE_ID_MATCH_INT_CLASS,
1702         .idVendor = 0x0582,
1703         .bInterfaceClass = USB_CLASS_VENDOR_SPEC,
1704         .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
1705                 .ifnum = QUIRK_ANY_INTERFACE,
1706                 .type = QUIRK_AUTODETECT
1707         }
1708 },
1709
1710 /* Guillemot devices */
1711 {
1712         /*
1713          * This is for the "Windows Edition" where the external MIDI ports are
1714          * the only MIDI ports; the control data is reported through HID
1715          * interfaces.  The "Macintosh Edition" has ID 0xd002 and uses standard
1716          * compliant USB MIDI ports for external MIDI and controls.
1717          */
1718         USB_DEVICE_VENDOR_SPEC(0x06f8, 0xb000),
1719         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1720                 .vendor_name = "Hercules",
1721                 .product_name = "DJ Console (WE)",
1722                 .ifnum = 4,
1723                 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1724                 .data = & (const struct snd_usb_midi_endpoint_info) {
1725                         .out_cables = 0x0001,
1726                         .in_cables = 0x0001
1727                 }
1728         }
1729 },
1730
1731 /* Midiman/M-Audio devices */
1732 {
1733         USB_DEVICE_VENDOR_SPEC(0x0763, 0x1002),
1734         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1735                 .vendor_name = "M-Audio",
1736                 .product_name = "MidiSport 2x2",
1737                 .ifnum = QUIRK_ANY_INTERFACE,
1738                 .type = QUIRK_MIDI_MIDIMAN,
1739                 .data = & (const struct snd_usb_midi_endpoint_info) {
1740                         .out_cables = 0x0003,
1741                         .in_cables  = 0x0003
1742                 }
1743         }
1744 },
1745 {
1746         USB_DEVICE_VENDOR_SPEC(0x0763, 0x1011),
1747         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1748                 .vendor_name = "M-Audio",
1749                 .product_name = "MidiSport 1x1",
1750                 .ifnum = QUIRK_ANY_INTERFACE,
1751                 .type = QUIRK_MIDI_MIDIMAN,
1752                 .data = & (const struct snd_usb_midi_endpoint_info) {
1753                         .out_cables = 0x0001,
1754                         .in_cables  = 0x0001
1755                 }
1756         }
1757 },
1758 {
1759         USB_DEVICE_VENDOR_SPEC(0x0763, 0x1015),
1760         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1761                 .vendor_name = "M-Audio",
1762                 .product_name = "Keystation",
1763                 .ifnum = QUIRK_ANY_INTERFACE,
1764                 .type = QUIRK_MIDI_MIDIMAN,
1765                 .data = & (const struct snd_usb_midi_endpoint_info) {
1766                         .out_cables = 0x0001,
1767                         .in_cables  = 0x0001
1768                 }
1769         }
1770 },
1771 {
1772         USB_DEVICE_VENDOR_SPEC(0x0763, 0x1021),
1773         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1774                 .vendor_name = "M-Audio",
1775                 .product_name = "MidiSport 4x4",
1776                 .ifnum = QUIRK_ANY_INTERFACE,
1777                 .type = QUIRK_MIDI_MIDIMAN,
1778                 .data = & (const struct snd_usb_midi_endpoint_info) {
1779                         .out_cables = 0x000f,
1780                         .in_cables  = 0x000f
1781                 }
1782         }
1783 },
1784 {
1785         /*
1786          * For hardware revision 1.05; in the later revisions (1.10 and
1787          * 1.21), 0x1031 is the ID for the device without firmware.
1788          * Thanks to Olaf Giesbrecht <Olaf_Giesbrecht@yahoo.de>
1789          */
1790         USB_DEVICE_VER(0x0763, 0x1031, 0x0100, 0x0109),
1791         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1792                 .vendor_name = "M-Audio",
1793                 .product_name = "MidiSport 8x8",
1794                 .ifnum = QUIRK_ANY_INTERFACE,
1795                 .type = QUIRK_MIDI_MIDIMAN,
1796                 .data = & (const struct snd_usb_midi_endpoint_info) {
1797                         .out_cables = 0x01ff,
1798                         .in_cables  = 0x01ff
1799                 }
1800         }
1801 },
1802 {
1803         USB_DEVICE_VENDOR_SPEC(0x0763, 0x1033),
1804         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1805                 .vendor_name = "M-Audio",
1806                 .product_name = "MidiSport 8x8",
1807                 .ifnum = QUIRK_ANY_INTERFACE,
1808                 .type = QUIRK_MIDI_MIDIMAN,
1809                 .data = & (const struct snd_usb_midi_endpoint_info) {
1810                         .out_cables = 0x01ff,
1811                         .in_cables  = 0x01ff
1812                 }
1813         }
1814 },
1815 {
1816         USB_DEVICE_VENDOR_SPEC(0x0763, 0x1041),
1817         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1818                 .vendor_name = "M-Audio",
1819                 .product_name = "MidiSport 2x4",
1820                 .ifnum = QUIRK_ANY_INTERFACE,
1821                 .type = QUIRK_MIDI_MIDIMAN,
1822                 .data = & (const struct snd_usb_midi_endpoint_info) {
1823                         .out_cables = 0x000f,
1824                         .in_cables  = 0x0003
1825                 }
1826         }
1827 },
1828 {
1829         USB_DEVICE_VENDOR_SPEC(0x0763, 0x2001),
1830         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1831                 .vendor_name = "M-Audio",
1832                 .product_name = "Quattro",
1833                 .ifnum = QUIRK_ANY_INTERFACE,
1834                 .type = QUIRK_COMPOSITE,
1835                 .data = & (const struct snd_usb_audio_quirk[]) {
1836                         /*
1837                          * Interfaces 0-2 are "Windows-compatible", 16-bit only,
1838                          * and share endpoints with the other interfaces.
1839                          * Ignore them.  The other interfaces can do 24 bits,
1840                          * but captured samples are big-endian (see usbaudio.c).
1841                          */
1842                         {
1843                                 .ifnum = 0,
1844                                 .type = QUIRK_IGNORE_INTERFACE
1845                         },
1846                         {
1847                                 .ifnum = 1,
1848                                 .type = QUIRK_IGNORE_INTERFACE
1849                         },
1850                         {
1851                                 .ifnum = 2,
1852                                 .type = QUIRK_IGNORE_INTERFACE
1853                         },
1854                         {
1855                                 .ifnum = 3,
1856                                 .type = QUIRK_IGNORE_INTERFACE
1857                         },
1858                         {
1859                                 .ifnum = 4,
1860                                 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1861                         },
1862                         {
1863                                 .ifnum = 5,
1864                                 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1865                         },
1866                         {
1867                                 .ifnum = 6,
1868                                 .type = QUIRK_IGNORE_INTERFACE
1869                         },
1870                         {
1871                                 .ifnum = 7,
1872                                 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1873                         },
1874                         {
1875                                 .ifnum = 8,
1876                                 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1877                         },
1878                         {
1879                                 .ifnum = 9,
1880                                 .type = QUIRK_MIDI_MIDIMAN,
1881                                 .data = & (const struct snd_usb_midi_endpoint_info) {
1882                                         .out_cables = 0x0001,
1883                                         .in_cables  = 0x0001
1884                                 }
1885                         },
1886                         {
1887                                 .ifnum = -1
1888                         }
1889                 }
1890         }
1891 },
1892 {
1893         USB_DEVICE_VENDOR_SPEC(0x0763, 0x2003),
1894         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1895                 .vendor_name = "M-Audio",
1896                 .product_name = "AudioPhile",
1897                 .ifnum = 6,
1898                 .type = QUIRK_MIDI_MIDIMAN,
1899                 .data = & (const struct snd_usb_midi_endpoint_info) {
1900                         .out_cables = 0x0001,
1901                         .in_cables  = 0x0001
1902                 }
1903         }
1904 },
1905 {
1906         USB_DEVICE_VENDOR_SPEC(0x0763, 0x2008),
1907         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1908                 .vendor_name = "M-Audio",
1909                 .product_name = "Ozone",
1910                 .ifnum = 3,
1911                 .type = QUIRK_MIDI_MIDIMAN,
1912                 .data = & (const struct snd_usb_midi_endpoint_info) {
1913                         .out_cables = 0x0001,
1914                         .in_cables  = 0x0001
1915                 }
1916         }
1917 },
1918 {
1919         USB_DEVICE_VENDOR_SPEC(0x0763, 0x200d),
1920         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1921                 .vendor_name = "M-Audio",
1922                 .product_name = "OmniStudio",
1923                 .ifnum = QUIRK_ANY_INTERFACE,
1924                 .type = QUIRK_COMPOSITE,
1925                 .data = & (const struct snd_usb_audio_quirk[]) {
1926                         {
1927                                 .ifnum = 0,
1928                                 .type = QUIRK_IGNORE_INTERFACE
1929                         },
1930                         {
1931                                 .ifnum = 1,
1932                                 .type = QUIRK_IGNORE_INTERFACE
1933                         },
1934                         {
1935                                 .ifnum = 2,
1936                                 .type = QUIRK_IGNORE_INTERFACE
1937                         },
1938                         {
1939                                 .ifnum = 3,
1940                                 .type = QUIRK_IGNORE_INTERFACE
1941                         },
1942                         {
1943                                 .ifnum = 4,
1944                                 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1945                         },
1946                         {
1947                                 .ifnum = 5,
1948                                 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1949                         },
1950                         {
1951                                 .ifnum = 6,
1952                                 .type = QUIRK_IGNORE_INTERFACE
1953                         },
1954                         {
1955                                 .ifnum = 7,
1956                                 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1957                         },
1958                         {
1959                                 .ifnum = 8,
1960                                 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1961                         },
1962                         {
1963                                 .ifnum = 9,
1964                                 .type = QUIRK_MIDI_MIDIMAN,
1965                                 .data = & (const struct snd_usb_midi_endpoint_info) {
1966                                         .out_cables = 0x0001,
1967                                         .in_cables  = 0x0001
1968                                 }
1969                         },
1970                         {
1971                                 .ifnum = -1
1972                         }
1973                 }
1974         }
1975 },
1976 {
1977         USB_DEVICE(0x0763, 0x2019),
1978         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1979                 /* .vendor_name = "M-Audio", */
1980                 /* .product_name = "Ozone Academic", */
1981                 .ifnum = QUIRK_ANY_INTERFACE,
1982                 .type = QUIRK_COMPOSITE,
1983                 .data = & (const struct snd_usb_audio_quirk[]) {
1984                         {
1985                                 .ifnum = 0,
1986                                 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1987                         },
1988                         {
1989                                 .ifnum = 1,
1990                                 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1991                         },
1992                         {
1993                                 .ifnum = 2,
1994                                 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1995                         },
1996                         {
1997                                 .ifnum = 3,
1998                                 .type = QUIRK_MIDI_MIDIMAN,
1999                                 .data = & (const struct snd_usb_midi_endpoint_info) {
2000                                         .out_cables = 0x0001,
2001                                         .in_cables  = 0x0001
2002                                 }
2003                         },
2004                         {
2005                                 .ifnum = -1
2006                         }
2007                 }
2008         }
2009 },
2010 {
2011         USB_DEVICE_VENDOR_SPEC(0x0763, 0x2030),
2012         .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
2013                 /* .vendor_name = "M-Audio", */
2014                 /* .product_name = "Fast Track C400", */
2015                 .ifnum = QUIRK_ANY_INTERFACE,
2016                 .type = QUIRK_COMPOSITE,
2017                 .data = &(const struct snd_usb_audio_quirk[]) {
2018                         {
2019                                 .ifnum = 1,
2020                                 .type = QUIRK_AUDIO_STANDARD_MIXER,
2021                         },
2022                         /* Playback */
2023                         {
2024                                 .ifnum = 2,
2025                                 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
2026                                 .data = &(const struct audioformat) {
2027                                         .formats = SNDRV_PCM_FMTBIT_S24_3LE,
2028                                         .channels = 6,
2029                                         .iface = 2,
2030                                         .altsetting = 1,
2031                                         .altset_idx = 1,
2032                                         .attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
2033                                         .endpoint = 0x01,
2034                                         .ep_attr = 0x09,
2035                                         .rates = SNDRV_PCM_RATE_44100 |
2036                                                  SNDRV_PCM_RATE_48000 |
2037                                                  SNDRV_PCM_RATE_88200 |
2038                                                  SNDRV_PCM_RATE_96000,
2039                                         .rate_min = 44100,
2040                                         .rate_max = 96000,
2041                                         .nr_rates = 4,
2042                                         .rate_table = (unsigned int[]) {
2043                                                         44100, 48000, 88200, 96000
2044                                         },
2045                                         .clock = 0x80,
2046                                 }
2047                         },
2048                         /* Capture */
2049                         {
2050                                 .ifnum = 3,
2051                                 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
2052                                 .data = &(const struct audioformat) {
2053                                         .formats = SNDRV_PCM_FMTBIT_S24_3LE,
2054                                         .channels = 4,
2055                                         .iface = 3,
2056                                         .altsetting = 1,
2057                                         .altset_idx = 1,
2058                                         .attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
2059                                         .endpoint = 0x81,
2060                                         .ep_attr = 0x05,
2061                                         .rates = SNDRV_PCM_RATE_44100 |
2062                                                  SNDRV_PCM_RATE_48000 |
2063                                                  SNDRV_PCM_RATE_88200 |
2064                                                  SNDRV_PCM_RATE_96000,
2065                                         .rate_min = 44100,
2066                                         .rate_max = 96000,
2067                                         .nr_rates = 4,
2068                                         .rate_table = (unsigned int[]) {
2069                                                 44100, 48000, 88200, 96000
2070                                         },
2071                                         .clock = 0x80,
2072                                 }
2073                         },
2074                         /* MIDI */
2075                         {
2076                                 .ifnum = -1 /* Interface = 4 */
2077                         }
2078                 }
2079         }
2080 },
2081 {
2082         USB_DEVICE_VENDOR_SPEC(0x0763, 0x2031),
2083         .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
2084                 /* .vendor_name = "M-Audio", */
2085                 /* .product_name = "Fast Track C600", */
2086                 .ifnum = QUIRK_ANY_INTERFACE,
2087                 .type = QUIRK_COMPOSITE,
2088                 .data = &(const struct snd_usb_audio_quirk[]) {
2089                         {
2090                                 .ifnum = 1,
2091                                 .type = QUIRK_AUDIO_STANDARD_MIXER,
2092                         },
2093                         /* Playback */
2094                         {
2095                                 .ifnum = 2,
2096                                 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
2097                                 .data = &(const struct audioformat) {
2098                                         .formats = SNDRV_PCM_FMTBIT_S24_3LE,
2099                                         .channels = 8,
2100                                         .iface = 2,
2101                                         .altsetting = 1,
2102                                         .altset_idx = 1,
2103                                         .attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
2104                                         .endpoint = 0x01,
2105                                         .ep_attr = 0x09,
2106                                         .rates = SNDRV_PCM_RATE_44100 |
2107                                                  SNDRV_PCM_RATE_48000 |
2108                                                  SNDRV_PCM_RATE_88200 |
2109                                                  SNDRV_PCM_RATE_96000,
2110                                         .rate_min = 44100,
2111                                         .rate_max = 96000,
2112                                         .nr_rates = 4,
2113                                         .rate_table = (unsigned int[]) {
2114                                                         44100, 48000, 88200, 96000
2115                                         },
2116                                         .clock = 0x80,
2117                                 }
2118                         },
2119                         /* Capture */
2120                         {
2121                                 .ifnum = 3,
2122                                 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
2123                                 .data = &(const struct audioformat) {
2124                                         .formats = SNDRV_PCM_FMTBIT_S24_3LE,
2125                                         .channels = 6,
2126                                         .iface = 3,
2127                                         .altsetting = 1,
2128                                         .altset_idx = 1,
2129                                         .attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
2130                                         .endpoint = 0x81,
2131                                         .ep_attr = 0x05,
2132                                         .rates = SNDRV_PCM_RATE_44100 |
2133                                                  SNDRV_PCM_RATE_48000 |
2134                                                  SNDRV_PCM_RATE_88200 |
2135                                                  SNDRV_PCM_RATE_96000,
2136                                         .rate_min = 44100,
2137                                         .rate_max = 96000,
2138                                         .nr_rates = 4,
2139                                         .rate_table = (unsigned int[]) {
2140                                                 44100, 48000, 88200, 96000
2141                                         },
2142                                         .clock = 0x80,
2143                                 }
2144                         },
2145                         /* MIDI */
2146                         {
2147                                 .ifnum = -1 /* Interface = 4 */
2148                         }
2149                 }
2150         }
2151 },
2152 {
2153         USB_DEVICE_VENDOR_SPEC(0x0763, 0x2080),
2154         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2155                 /* .vendor_name = "M-Audio", */
2156                 /* .product_name = "Fast Track Ultra", */
2157                 .ifnum = QUIRK_ANY_INTERFACE,
2158                 .type = QUIRK_COMPOSITE,
2159                 .data = & (const struct snd_usb_audio_quirk[]) {
2160                         {
2161                                 .ifnum = 0,
2162                                 .type = QUIRK_AUDIO_STANDARD_MIXER,
2163                         },
2164                         {
2165                                 .ifnum = 1,
2166                                 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
2167                                 .data = & (const struct audioformat) {
2168                                         .formats = SNDRV_PCM_FMTBIT_S24_3LE,
2169                                         .channels = 8,
2170                                         .iface = 1,
2171                                         .altsetting = 1,
2172                                         .altset_idx = 1,
2173                                         .attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
2174                                         .endpoint = 0x01,
2175                                         .ep_attr = 0x09,
2176                                         .rates = SNDRV_PCM_RATE_44100 |
2177                                                  SNDRV_PCM_RATE_48000 |
2178                                                  SNDRV_PCM_RATE_88200 |
2179                                                  SNDRV_PCM_RATE_96000,
2180                                         .rate_min = 44100,
2181                                         .rate_max = 96000,
2182                                         .nr_rates = 4,
2183                                         .rate_table = (unsigned int[]) {
2184                                                 44100, 48000, 88200, 96000
2185                                         }
2186                                 }
2187                         },
2188                         {
2189                                 .ifnum = 2,
2190                                 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
2191                                 .data = & (const struct audioformat) {
2192                                         .formats = SNDRV_PCM_FMTBIT_S24_3LE,
2193                                         .channels = 8,
2194                                         .iface = 2,
2195                                         .altsetting = 1,
2196                                         .altset_idx = 1,
2197                                         .attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
2198                                         .endpoint = 0x81,
2199                                         .ep_attr = 0x05,
2200                                         .rates = SNDRV_PCM_RATE_44100 |
2201                                                  SNDRV_PCM_RATE_48000 |
2202                                                  SNDRV_PCM_RATE_88200 |
2203                                                  SNDRV_PCM_RATE_96000,
2204                                         .rate_min = 44100,
2205                                         .rate_max = 96000,
2206                                         .nr_rates = 4,
2207                                         .rate_table = (unsigned int[]) {
2208                                                 44100, 48000, 88200, 96000
2209                                         }
2210                                 }
2211                         },
2212                         /* interface 3 (MIDI) is standard compliant */
2213                         {
2214                                 .ifnum = -1
2215                         }
2216                 }
2217         }
2218 },
2219 {
2220         USB_DEVICE_VENDOR_SPEC(0x0763, 0x2081),
2221         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2222                 /* .vendor_name = "M-Audio", */
2223                 /* .product_name = "Fast Track Ultra 8R", */
2224                 .ifnum = QUIRK_ANY_INTERFACE,
2225                 .type = QUIRK_COMPOSITE,
2226                 .data = & (const struct snd_usb_audio_quirk[]) {
2227                         {
2228                                 .ifnum = 0,
2229                                 .type = QUIRK_AUDIO_STANDARD_MIXER,
2230                         },
2231                         {
2232                                 .ifnum = 1,
2233                                 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
2234                                 .data = & (const struct audioformat) {
2235                                         .formats = SNDRV_PCM_FMTBIT_S24_3LE,
2236                                         .channels = 8,
2237                                         .iface = 1,
2238                                         .altsetting = 1,
2239                                         .altset_idx = 1,
2240                                         .attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
2241                                         .endpoint = 0x01,
2242                                         .ep_attr = 0x09,
2243                                         .rates = SNDRV_PCM_RATE_44100 |
2244                                                  SNDRV_PCM_RATE_48000 |
2245                                                  SNDRV_PCM_RATE_88200 |
2246                                                  SNDRV_PCM_RATE_96000,
2247                                         .rate_min = 44100,
2248                                         .rate_max = 96000,
2249                                         .nr_rates = 4,
2250                                         .rate_table = (unsigned int[]) {
2251                                                         44100, 48000, 88200, 96000
2252                                         }
2253                                 }
2254                         },
2255                         {
2256                                 .ifnum = 2,
2257                                 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
2258                                 .data = & (const struct audioformat) {
2259                                         .formats = SNDRV_PCM_FMTBIT_S24_3LE,
2260                                         .channels = 8,
2261                                         .iface = 2,
2262                                         .altsetting = 1,
2263                                         .altset_idx = 1,
2264                                         .attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
2265                                         .endpoint = 0x81,
2266                                         .ep_attr = 0x05,
2267                                         .rates = SNDRV_PCM_RATE_44100 |
2268                                                  SNDRV_PCM_RATE_48000 |
2269                                                  SNDRV_PCM_RATE_88200 |
2270                                                  SNDRV_PCM_RATE_96000,
2271                                         .rate_min = 44100,
2272                                         .rate_max = 96000,
2273                                         .nr_rates = 4,
2274                                         .rate_table = (unsigned int[]) {
2275                                                 44100, 48000, 88200, 96000
2276                                         }
2277                                 }
2278                         },
2279                         /* interface 3 (MIDI) is standard compliant */
2280                         {
2281                                 .ifnum = -1
2282                         }
2283                 }
2284         }
2285 },
2286
2287 /* Casio devices */
2288 {
2289         USB_DEVICE(0x07cf, 0x6801),
2290         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2291                 .vendor_name = "Casio",
2292                 .product_name = "PL-40R",
2293                 .ifnum = 0,
2294                 .type = QUIRK_MIDI_YAMAHA
2295         }
2296 },
2297 {
2298         /* this ID is used by several devices without a product ID */
2299         USB_DEVICE(0x07cf, 0x6802),
2300         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2301                 .vendor_name = "Casio",
2302                 .product_name = "Keyboard",
2303                 .ifnum = 0,
2304                 .type = QUIRK_MIDI_YAMAHA
2305         }
2306 },
2307
2308 /* Mark of the Unicorn devices */
2309 {
2310         /* thanks to Robert A. Lerche <ral 'at' msbit.com> */
2311         .match_flags = USB_DEVICE_ID_MATCH_VENDOR |
2312                        USB_DEVICE_ID_MATCH_PRODUCT |
2313                        USB_DEVICE_ID_MATCH_DEV_SUBCLASS,
2314         .idVendor = 0x07fd,
2315         .idProduct = 0x0001,
2316         .bDeviceSubClass = 2,
2317         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2318                 .vendor_name = "MOTU",
2319                 .product_name = "Fastlane",
2320                 .ifnum = QUIRK_ANY_INTERFACE,
2321                 .type = QUIRK_COMPOSITE,
2322                 .data = & (const struct snd_usb_audio_quirk[]) {
2323                         {
2324                                 .ifnum = 0,
2325                                 .type = QUIRK_MIDI_RAW_BYTES
2326                         },
2327                         {
2328                                 .ifnum = 1,
2329                                 .type = QUIRK_IGNORE_INTERFACE
2330                         },
2331                         {
2332                                 .ifnum = -1
2333                         }
2334                 }
2335         }
2336 },
2337
2338 /* Emagic devices */
2339 {
2340         USB_DEVICE(0x086a, 0x0001),
2341         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2342                 .vendor_name = "Emagic",
2343                 .product_name = "Unitor8",
2344                 .ifnum = 2,
2345                 .type = QUIRK_MIDI_EMAGIC,
2346                 .data = & (const struct snd_usb_midi_endpoint_info) {
2347                         .out_cables = 0x80ff,
2348                         .in_cables  = 0x80ff
2349                 }
2350         }
2351 },
2352 {
2353         USB_DEVICE(0x086a, 0x0002),
2354         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2355                 .vendor_name = "Emagic",
2356                 /* .product_name = "AMT8", */
2357                 .ifnum = 2,
2358                 .type = QUIRK_MIDI_EMAGIC,
2359                 .data = & (const struct snd_usb_midi_endpoint_info) {
2360                         .out_cables = 0x80ff,
2361                         .in_cables  = 0x80ff
2362                 }
2363         }
2364 },
2365 {
2366         USB_DEVICE(0x086a, 0x0003),
2367         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2368                 .vendor_name = "Emagic",
2369                 /* .product_name = "MT4", */
2370                 .ifnum = 2,
2371                 .type = QUIRK_MIDI_EMAGIC,
2372                 .data = & (const struct snd_usb_midi_endpoint_info) {
2373                         .out_cables = 0x800f,
2374                         .in_cables  = 0x8003
2375                 }
2376         }
2377 },
2378
2379 /* KORG devices */
2380 {
2381         USB_DEVICE_VENDOR_SPEC(0x0944, 0x0200),
2382         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2383                 .vendor_name = "KORG, Inc.",
2384                 /* .product_name = "PANDORA PX5D", */
2385                 .ifnum = 3,
2386                 .type = QUIRK_MIDI_STANDARD_INTERFACE,
2387         }
2388 },
2389
2390 {
2391         USB_DEVICE_VENDOR_SPEC(0x0944, 0x0201),
2392         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2393                 .vendor_name = "KORG, Inc.",
2394                 /* .product_name = "ToneLab ST", */
2395                 .ifnum = 3,
2396                 .type = QUIRK_MIDI_STANDARD_INTERFACE,
2397         }
2398 },
2399
2400 {
2401         USB_DEVICE_VENDOR_SPEC(0x0944, 0x0204),
2402         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2403                 .vendor_name = "KORG, Inc.",
2404                 /* .product_name = "ToneLab EX", */
2405                 .ifnum = 3,
2406                 .type = QUIRK_MIDI_STANDARD_INTERFACE,
2407         }
2408 },
2409
2410 /* AKAI devices */
2411 {
2412         USB_DEVICE(0x09e8, 0x0062),
2413         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2414                 .vendor_name = "AKAI",
2415                 .product_name = "MPD16",
2416                 .ifnum = 0,
2417                 .type = QUIRK_MIDI_AKAI,
2418         }
2419 },
2420
2421 {
2422         /* Akai MPC Element */
2423         USB_DEVICE(0x09e8, 0x0021),
2424         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2425                 .ifnum = QUIRK_ANY_INTERFACE,
2426                 .type = QUIRK_COMPOSITE,
2427                 .data = & (const struct snd_usb_audio_quirk[]) {
2428                         {
2429                                 .ifnum = 0,
2430                                 .type = QUIRK_IGNORE_INTERFACE
2431                         },
2432                         {
2433                                 .ifnum = 1,
2434                                 .type = QUIRK_MIDI_STANDARD_INTERFACE
2435                         },
2436                         {
2437                                 .ifnum = -1
2438                         }
2439                 }
2440         }
2441 },
2442
2443 /* Steinberg devices */
2444 {
2445         /* Steinberg MI2 */
2446         USB_DEVICE_VENDOR_SPEC(0x0a4e, 0x2040),
2447         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2448                 .ifnum = QUIRK_ANY_INTERFACE,
2449                 .type = QUIRK_COMPOSITE,
2450                 .data = & (const struct snd_usb_audio_quirk[]) {
2451                         {
2452                                 .ifnum = 0,
2453                                 .type = QUIRK_AUDIO_STANDARD_INTERFACE
2454                         },
2455                         {
2456                                 .ifnum = 1,
2457                                 .type = QUIRK_AUDIO_STANDARD_INTERFACE
2458                         },
2459                         {
2460                                 .ifnum = 2,
2461                                 .type = QUIRK_AUDIO_STANDARD_INTERFACE
2462                         },
2463                         {
2464                                 .ifnum = 3,
2465                                 .type = QUIRK_MIDI_FIXED_ENDPOINT,
2466                                 .data = &(const struct snd_usb_midi_endpoint_info) {
2467                                         .out_cables = 0x0001,
2468                                         .in_cables  = 0x0001
2469                                 }
2470                         },
2471                         {
2472                                 .ifnum = -1
2473                         }
2474                 }
2475         }
2476 },
2477 {
2478         /* Steinberg MI4 */
2479         USB_DEVICE_VENDOR_SPEC(0x0a4e, 0x4040),
2480         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2481                 .ifnum = QUIRK_ANY_INTERFACE,
2482                 .type = QUIRK_COMPOSITE,
2483                 .data = & (const struct snd_usb_audio_quirk[]) {
2484                         {
2485                                 .ifnum = 0,
2486                                 .type = QUIRK_AUDIO_STANDARD_INTERFACE
2487                         },
2488                         {
2489                                 .ifnum = 1,
2490                                 .type = QUIRK_AUDIO_STANDARD_INTERFACE
2491                         },
2492                         {
2493                                 .ifnum = 2,
2494                                 .type = QUIRK_AUDIO_STANDARD_INTERFACE
2495                         },
2496                         {
2497                                 .ifnum = 3,
2498                                 .type = QUIRK_MIDI_FIXED_ENDPOINT,
2499                                 .data = &(const struct snd_usb_midi_endpoint_info) {
2500                                         .out_cables = 0x0001,
2501                                         .in_cables  = 0x0001
2502                                 }
2503                         },
2504                         {
2505                                 .ifnum = -1
2506                         }
2507                 }
2508         }
2509 },
2510
2511 /* TerraTec devices */
2512 {
2513         USB_DEVICE_VENDOR_SPEC(0x0ccd, 0x0012),
2514         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2515                 .vendor_name = "TerraTec",
2516                 .product_name = "PHASE 26",
2517                 .ifnum = 3,
2518                 .type = QUIRK_MIDI_STANDARD_INTERFACE
2519         }
2520 },
2521 {
2522         USB_DEVICE_VENDOR_SPEC(0x0ccd, 0x0013),
2523         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2524                 .vendor_name = "TerraTec",
2525                 .product_name = "PHASE 26",
2526                 .ifnum = 3,
2527                 .type = QUIRK_MIDI_STANDARD_INTERFACE
2528         }
2529 },
2530 {
2531         USB_DEVICE_VENDOR_SPEC(0x0ccd, 0x0014),
2532         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2533                 .vendor_name = "TerraTec",
2534                 .product_name = "PHASE 26",
2535                 .ifnum = 3,
2536                 .type = QUIRK_MIDI_STANDARD_INTERFACE
2537         }
2538 },
2539 {
2540         USB_DEVICE(0x0ccd, 0x0035),
2541         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2542                 .vendor_name = "Miditech",
2543                 .product_name = "Play'n Roll",
2544                 .ifnum = 0,
2545                 .type = QUIRK_MIDI_CME
2546         }
2547 },
2548
2549 /* Novation EMS devices */
2550 {
2551         USB_DEVICE_VENDOR_SPEC(0x1235, 0x0001),
2552         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2553                 .vendor_name = "Novation",
2554                 .product_name = "ReMOTE Audio/XStation",
2555                 .ifnum = 4,
2556                 .type = QUIRK_MIDI_NOVATION
2557         }
2558 },
2559 {
2560         USB_DEVICE_VENDOR_SPEC(0x1235, 0x0002),
2561         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2562                 .vendor_name = "Novation",
2563                 .product_name = "Speedio",
2564                 .ifnum = 3,
2565                 .type = QUIRK_MIDI_NOVATION
2566         }
2567 },
2568 {
2569         USB_DEVICE(0x1235, 0x000a),
2570         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2571                 /* .vendor_name = "Novation", */
2572                 /* .product_name = "Nocturn", */
2573                 .ifnum = 0,
2574                 .type = QUIRK_MIDI_RAW_BYTES
2575         }
2576 },
2577 {
2578         USB_DEVICE(0x1235, 0x000e),
2579         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2580                 /* .vendor_name = "Novation", */
2581                 /* .product_name = "Launchpad", */
2582                 .ifnum = 0,
2583                 .type = QUIRK_MIDI_RAW_BYTES
2584         }
2585 },
2586 {
2587         USB_DEVICE(0x1235, 0x0010),
2588         .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
2589                 .vendor_name = "Focusrite",
2590                 .product_name = "Saffire 6 USB",
2591                 .ifnum = QUIRK_ANY_INTERFACE,
2592                 .type = QUIRK_COMPOSITE,
2593                 .data = (const struct snd_usb_audio_quirk[]) {
2594                         {
2595                                 .ifnum = 0,
2596                                 .type = QUIRK_AUDIO_STANDARD_MIXER,
2597                         },
2598                         {
2599                                 .ifnum = 0,
2600                                 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
2601                                 .data = &(const struct audioformat) {
2602                                         .formats = SNDRV_PCM_FMTBIT_S24_3LE,
2603                                         .channels = 4,
2604                                         .iface = 0,
2605                                         .altsetting = 1,
2606                                         .altset_idx = 1,
2607                                         .attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
2608                                         .endpoint = 0x01,
2609                                         .ep_attr = USB_ENDPOINT_XFER_ISOC,
2610                                         .datainterval = 1,
2611                                         .maxpacksize = 0x024c,
2612                                         .rates = SNDRV_PCM_RATE_44100 |
2613                                                  SNDRV_PCM_RATE_48000,
2614                                         .rate_min = 44100,
2615                                         .rate_max = 48000,
2616                                         .nr_rates = 2,
2617                                         .rate_table = (unsigned int[]) {
2618                                                 44100, 48000
2619                                         }
2620                                 }
2621                         },
2622                         {
2623                                 .ifnum = 0,
2624                                 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
2625                                 .data = &(const struct audioformat) {
2626                                         .formats = SNDRV_PCM_FMTBIT_S24_3LE,
2627                                         .channels = 2,
2628                                         .iface = 0,
2629                                         .altsetting = 1,
2630                                         .altset_idx = 1,
2631                                         .attributes = 0,
2632                                         .endpoint = 0x82,
2633                                         .ep_attr = USB_ENDPOINT_XFER_ISOC,
2634                                         .datainterval = 1,
2635                                         .maxpacksize = 0x0126,
2636                                         .rates = SNDRV_PCM_RATE_44100 |
2637                                                  SNDRV_PCM_RATE_48000,
2638                                         .rate_min = 44100,
2639                                         .rate_max = 48000,
2640                                         .nr_rates = 2,
2641                                         .rate_table = (unsigned int[]) {
2642                                                 44100, 48000
2643                                         }
2644                                 }
2645                         },
2646                         {
2647                                 .ifnum = 1,
2648                                 .type = QUIRK_MIDI_RAW_BYTES
2649                         },
2650                         {
2651                                 .ifnum = -1
2652                         }
2653                 }
2654         }
2655 },
2656 {
2657         USB_DEVICE(0x1235, 0x0018),
2658         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2659                 .vendor_name = "Novation",
2660                 .product_name = "Twitch",
2661                 .ifnum = QUIRK_ANY_INTERFACE,
2662                 .type = QUIRK_COMPOSITE,
2663                 .data = (const struct snd_usb_audio_quirk[]) {
2664                         {
2665                                 .ifnum = 0,
2666                                 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
2667                                 .data = & (const struct audioformat) {
2668                                         .formats = SNDRV_PCM_FMTBIT_S24_3LE,
2669                                         .channels = 4,
2670                                         .iface = 0,
2671                                         .altsetting = 1,
2672                                         .altset_idx = 1,
2673                                         .attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
2674                                         .endpoint = 0x01,
2675                                         .ep_attr = USB_ENDPOINT_XFER_ISOC,
2676                                         .rates = SNDRV_PCM_RATE_44100 |
2677                                                  SNDRV_PCM_RATE_48000,
2678                                         .rate_min = 44100,
2679                                         .rate_max = 48000,
2680                                         .nr_rates = 2,
2681                                         .rate_table = (unsigned int[]) {
2682                                                 44100, 48000
2683                                         }
2684                                 }
2685                         },
2686                         {
2687                                 .ifnum = 1,
2688                                 .type = QUIRK_MIDI_RAW_BYTES
2689                         },
2690                         {
2691                                 .ifnum = -1
2692                         }
2693                 }
2694         }
2695 },
2696 {
2697         USB_DEVICE_VENDOR_SPEC(0x1235, 0x4661),
2698         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2699                 .vendor_name = "Novation",
2700                 .product_name = "ReMOTE25",
2701                 .ifnum = 0,
2702                 .type = QUIRK_MIDI_NOVATION
2703         }
2704 },
2705
2706 /* Access Music devices */
2707 {
2708         /* VirusTI Desktop */
2709         USB_DEVICE_VENDOR_SPEC(0x133e, 0x0815),
2710         .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
2711                 .ifnum = QUIRK_ANY_INTERFACE,
2712                 .type = QUIRK_COMPOSITE,
2713                 .data = &(const struct snd_usb_audio_quirk[]) {
2714                         {
2715                                 .ifnum = 3,
2716                                 .type = QUIRK_MIDI_FIXED_ENDPOINT,
2717                                 .data = &(const struct snd_usb_midi_endpoint_info) {
2718                                         .out_cables = 0x0003,
2719                                         .in_cables  = 0x0003
2720                                 }
2721                         },
2722                         {
2723                                 .ifnum = 4,
2724                                 .type = QUIRK_IGNORE_INTERFACE
2725                         },
2726                         {
2727                                 .ifnum = -1
2728                         }
2729                 }
2730         }
2731 },
2732
2733 /* Lenovo ThinkStation P620 Rear Line-in, Line-out and Microphone */
2734 {
2735         USB_DEVICE(0x17aa, 0x1046),
2736         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2737                 .ifnum = QUIRK_ANY_INTERFACE,
2738                 .type = QUIRK_SETUP_DISABLE_AUTOSUSPEND
2739         }
2740 },
2741 /* Lenovo ThinkStation P620 Internal Speaker + Front Headset */
2742 {
2743         USB_DEVICE(0x17aa, 0x104d),
2744         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2745                 .ifnum = QUIRK_ANY_INTERFACE,
2746                 .type = QUIRK_SETUP_DISABLE_AUTOSUSPEND
2747         }
2748 },
2749
2750 /* Native Instruments MK2 series */
2751 {
2752         /* Komplete Audio 6 */
2753         .match_flags = USB_DEVICE_ID_MATCH_DEVICE,
2754         .idVendor = 0x17cc,
2755         .idProduct = 0x1000,
2756 },
2757 {
2758         /* Traktor Audio 6 */
2759         .match_flags = USB_DEVICE_ID_MATCH_DEVICE,
2760         .idVendor = 0x17cc,
2761         .idProduct = 0x1010,
2762 },
2763 {
2764         /* Traktor Audio 10 */
2765         .match_flags = USB_DEVICE_ID_MATCH_DEVICE,
2766         .idVendor = 0x17cc,
2767         .idProduct = 0x1020,
2768 },
2769
2770 /* QinHeng devices */
2771 {
2772         USB_DEVICE(0x1a86, 0x752d),
2773         .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
2774                 .vendor_name = "QinHeng",
2775                 .product_name = "CH345",
2776                 .ifnum = 1,
2777                 .type = QUIRK_MIDI_CH345
2778         }
2779 },
2780
2781 /* KeithMcMillen Stringport */
2782 { USB_DEVICE(0x1f38, 0x0001) }, /* FIXME: should be more restrictive matching */
2783
2784 /* Miditech devices */
2785 {
2786         USB_DEVICE(0x4752, 0x0011),
2787         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2788                 .vendor_name = "Miditech",
2789                 .product_name = "Midistart-2",
2790                 .ifnum = 0,
2791                 .type = QUIRK_MIDI_CME
2792         }
2793 },
2794
2795 /* Central Music devices */
2796 {
2797         /* this ID used by both Miditech MidiStudio-2 and CME UF-x */
2798         USB_DEVICE(0x7104, 0x2202),
2799         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2800                 .ifnum = 0,
2801                 .type = QUIRK_MIDI_CME
2802         }
2803 },
2804
2805 /*
2806  * Auvitek au0828 devices with audio interface.
2807  * This should be kept in sync with drivers/media/usb/au0828/au0828-cards.c
2808  * Please notice that some drivers are DVB only, and don't need to be
2809  * here. That's the case, for example, of DVICO_FUSIONHDTV7.
2810  */
2811
2812 #define AU0828_DEVICE(vid, pid, vname, pname) { \
2813         USB_AUDIO_DEVICE(vid, pid), \
2814         .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) { \
2815                 .vendor_name = vname, \
2816                 .product_name = pname, \
2817                 .ifnum = QUIRK_ANY_INTERFACE, \
2818                 .type = QUIRK_AUDIO_ALIGN_TRANSFER, \
2819                 .shares_media_device = 1, \
2820         } \
2821 }
2822
2823 AU0828_DEVICE(0x2040, 0x7200, "Hauppauge", "HVR-950Q"),
2824 AU0828_DEVICE(0x2040, 0x7240, "Hauppauge", "HVR-850"),
2825 AU0828_DEVICE(0x2040, 0x7210, "Hauppauge", "HVR-950Q"),
2826 AU0828_DEVICE(0x2040, 0x7217, "Hauppauge", "HVR-950Q"),
2827 AU0828_DEVICE(0x2040, 0x721b, "Hauppauge", "HVR-950Q"),
2828 AU0828_DEVICE(0x2040, 0x721e, "Hauppauge", "HVR-950Q"),
2829 AU0828_DEVICE(0x2040, 0x721f, "Hauppauge", "HVR-950Q"),
2830 AU0828_DEVICE(0x2040, 0x7280, "Hauppauge", "HVR-950Q"),
2831 AU0828_DEVICE(0x0fd9, 0x0008, "Hauppauge", "HVR-950Q"),
2832 AU0828_DEVICE(0x2040, 0x7201, "Hauppauge", "HVR-950Q-MXL"),
2833 AU0828_DEVICE(0x2040, 0x7211, "Hauppauge", "HVR-950Q-MXL"),
2834 AU0828_DEVICE(0x2040, 0x7281, "Hauppauge", "HVR-950Q-MXL"),
2835 AU0828_DEVICE(0x05e1, 0x0480, "Hauppauge", "Woodbury"),
2836 AU0828_DEVICE(0x2040, 0x8200, "Hauppauge", "Woodbury"),
2837 AU0828_DEVICE(0x2040, 0x7260, "Hauppauge", "HVR-950Q"),
2838 AU0828_DEVICE(0x2040, 0x7213, "Hauppauge", "HVR-950Q"),
2839 AU0828_DEVICE(0x2040, 0x7270, "Hauppauge", "HVR-950Q"),
2840
2841 /* Syntek STK1160 */
2842 {
2843         USB_AUDIO_DEVICE(0x05e1, 0x0408),
2844         .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
2845                 .vendor_name = "Syntek",
2846                 .product_name = "STK1160",
2847                 .ifnum = QUIRK_ANY_INTERFACE,
2848                 .type = QUIRK_AUDIO_ALIGN_TRANSFER
2849         }
2850 },
2851
2852 /* Digidesign Mbox */
2853 {
2854         /* Thanks to Clemens Ladisch <clemens@ladisch.de> */
2855         USB_DEVICE(0x0dba, 0x1000),
2856         .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
2857                 .vendor_name = "Digidesign",
2858                 .product_name = "MBox",
2859                 .ifnum = QUIRK_ANY_INTERFACE,
2860                 .type = QUIRK_COMPOSITE,
2861                 .data = (const struct snd_usb_audio_quirk[]){
2862                         {
2863                                 .ifnum = 0,
2864                                 .type = QUIRK_AUDIO_STANDARD_MIXER,
2865                         },
2866                         {
2867                                 .ifnum = 1,
2868                                 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
2869                                 .data = &(const struct audioformat) {
2870                                         .formats = SNDRV_PCM_FMTBIT_S24_3BE,
2871                                         .channels = 2,
2872                                         .iface = 1,
2873                                         .altsetting = 1,
2874                                         .altset_idx = 1,
2875                                         .attributes = 0x4,
2876                                         .endpoint = 0x02,
2877                                         .ep_attr = USB_ENDPOINT_XFER_ISOC |
2878                                                 USB_ENDPOINT_SYNC_SYNC,
2879                                         .maxpacksize = 0x130,
2880                                         .rates = SNDRV_PCM_RATE_48000,
2881                                         .rate_min = 48000,
2882                                         .rate_max = 48000,
2883                                         .nr_rates = 1,
2884                                         .rate_table = (unsigned int[]) {
2885                                                 48000
2886                                         }
2887                                 }
2888                         },
2889                         {
2890                                 .ifnum = 1,
2891                                 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
2892                                 .data = &(const struct audioformat) {
2893                                         .formats = SNDRV_PCM_FMTBIT_S24_3BE,
2894                                         .channels = 2,
2895                                         .iface = 1,
2896                                         .altsetting = 1,
2897                                         .altset_idx = 1,
2898                                         .attributes = 0x4,
2899                                         .endpoint = 0x81,
2900                                         .ep_attr = USB_ENDPOINT_XFER_ISOC |
2901                                                 USB_ENDPOINT_SYNC_ASYNC,
2902                                         .maxpacksize = 0x130,
2903                                         .rates = SNDRV_PCM_RATE_48000,
2904                                         .rate_min = 48000,
2905                                         .rate_max = 48000,
2906                                         .nr_rates = 1,
2907                                         .rate_table = (unsigned int[]) {
2908                                                 48000
2909                                         }
2910                                 }
2911                         },
2912                         {
2913                                 .ifnum = -1
2914                         }
2915                 }
2916         }
2917 },
2918
2919 /* DIGIDESIGN MBOX 2 */
2920 {
2921         USB_DEVICE(0x0dba, 0x3000),
2922         .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
2923                 .vendor_name = "Digidesign",
2924                 .product_name = "Mbox 2",
2925                 .ifnum = QUIRK_ANY_INTERFACE,
2926                 .type = QUIRK_COMPOSITE,
2927                 .data = (const struct snd_usb_audio_quirk[]) {
2928                         {
2929                                 .ifnum = 0,
2930                                 .type = QUIRK_IGNORE_INTERFACE
2931                         },
2932                         {
2933                                 .ifnum = 1,
2934                                 .type = QUIRK_IGNORE_INTERFACE
2935                         },
2936                         {
2937                                 .ifnum = 2,
2938                                 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
2939                                 .data = &(const struct audioformat) {
2940                                         .formats = SNDRV_PCM_FMTBIT_S24_3BE,
2941                                         .channels = 2,
2942                                         .iface = 2,
2943                                         .altsetting = 2,
2944                                         .altset_idx = 1,
2945                                         .attributes = 0x00,
2946                                         .endpoint = 0x03,
2947                                         .ep_attr = USB_ENDPOINT_SYNC_ASYNC,
2948                                         .rates = SNDRV_PCM_RATE_48000,
2949                                         .rate_min = 48000,
2950                                         .rate_max = 48000,
2951                                         .nr_rates = 1,
2952                                         .rate_table = (unsigned int[]) {
2953                                                 48000
2954                                         }
2955                                 }
2956                         },
2957                         {
2958                                 .ifnum = 3,
2959                                 .type = QUIRK_IGNORE_INTERFACE
2960                         },
2961                         {
2962                                 .ifnum = 4,
2963                                 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
2964                                 .data = &(const struct audioformat) {
2965                                 .formats = SNDRV_PCM_FMTBIT_S24_3BE,
2966                                         .channels = 2,
2967                                         .iface = 4,
2968                                         .altsetting = 2,
2969                                         .altset_idx = 1,
2970                                         .attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
2971                                         .endpoint = 0x85,
2972                                         .ep_attr = USB_ENDPOINT_SYNC_SYNC,
2973                                         .rates = SNDRV_PCM_RATE_48000,
2974                                         .rate_min = 48000,
2975                                         .rate_max = 48000,
2976                                         .nr_rates = 1,
2977                                         .rate_table = (unsigned int[]) {
2978                                                 48000
2979                                         }
2980                                 }
2981                         },
2982                         {
2983                                 .ifnum = 5,
2984                                 .type = QUIRK_IGNORE_INTERFACE
2985                         },
2986                         {
2987                                 .ifnum = 6,
2988                                 .type = QUIRK_MIDI_MIDIMAN,
2989                                 .data = &(const struct snd_usb_midi_endpoint_info) {
2990                                         .out_ep =  0x02,
2991                                         .out_cables = 0x0001,
2992                                         .in_ep = 0x81,
2993                                         .in_interval = 0x01,
2994                                         .in_cables = 0x0001
2995                                 }
2996                         },
2997                         {
2998                                 .ifnum = -1
2999                         }
3000                 }
3001         }
3002 },
3003 {
3004         /* Tascam US122 MKII - playback-only support */
3005         USB_DEVICE_VENDOR_SPEC(0x0644, 0x8021),
3006         .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
3007                 .vendor_name = "TASCAM",
3008                 .product_name = "US122 MKII",
3009                 .ifnum = QUIRK_ANY_INTERFACE,
3010                 .type = QUIRK_COMPOSITE,
3011                 .data = (const struct snd_usb_audio_quirk[]) {
3012                         {
3013                                 .ifnum = 0,
3014                                 .type = QUIRK_IGNORE_INTERFACE
3015                         },
3016                         {
3017                                 .ifnum = 1,
3018                                 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
3019                                 .data = &(const struct audioformat) {
3020                                         .formats = SNDRV_PCM_FMTBIT_S24_3LE,
3021                                         .channels = 2,
3022                                         .iface = 1,
3023                                         .altsetting = 1,
3024                                         .altset_idx = 1,
3025                                         .attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
3026                                         .endpoint = 0x02,
3027                                         .ep_attr = USB_ENDPOINT_XFER_ISOC,
3028                                         .rates = SNDRV_PCM_RATE_44100 |
3029                                                  SNDRV_PCM_RATE_48000 |
3030                                                  SNDRV_PCM_RATE_88200 |
3031                                                  SNDRV_PCM_RATE_96000,
3032                                         .rate_min = 44100,
3033                                         .rate_max = 96000,
3034                                         .nr_rates = 4,
3035                                         .rate_table = (unsigned int[]) {
3036                                                 44100, 48000, 88200, 96000
3037                                         }
3038                                 }
3039                         },
3040                         {
3041                                 .ifnum = -1
3042                         }
3043                 }
3044         }
3045 },
3046
3047 /* Denon DN-X1600 */
3048 {
3049         USB_AUDIO_DEVICE(0x154e, 0x500e),
3050         .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
3051                 .vendor_name = "Denon",
3052                 .product_name = "DN-X1600",
3053                 .ifnum = QUIRK_ANY_INTERFACE,
3054                 .type = QUIRK_COMPOSITE,
3055                 .data = (const struct snd_usb_audio_quirk[]){
3056                         {
3057                                 .ifnum = 0,
3058                                 .type = QUIRK_IGNORE_INTERFACE,
3059                         },
3060                         {
3061                                 .ifnum = 1,
3062                                 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
3063                                 .data = &(const struct audioformat) {
3064                                         .formats = SNDRV_PCM_FMTBIT_S24_3LE,
3065                                         .channels = 8,
3066                                         .iface = 1,
3067                                         .altsetting = 1,
3068                                         .altset_idx = 1,
3069                                         .attributes = 0x0,
3070                                         .endpoint = 0x01,
3071                                         .ep_attr = USB_ENDPOINT_XFER_ISOC |
3072                                                 USB_ENDPOINT_SYNC_ADAPTIVE,
3073                                         .maxpacksize = 0x138,
3074                                         .rates = SNDRV_PCM_RATE_48000,
3075                                         .rate_min = 48000,
3076                                         .rate_max = 48000,
3077                                         .nr_rates = 1,
3078                                         .rate_table = (unsigned int[]) {
3079                                                 48000
3080                                         }
3081                                 }
3082                         },
3083                         {
3084                                 .ifnum = 2,
3085                                 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
3086                                 .data = &(const struct audioformat) {
3087                                         .formats = SNDRV_PCM_FMTBIT_S24_3LE,
3088                                         .channels = 8,
3089                                         .iface = 2,
3090                                         .altsetting = 1,
3091                                         .altset_idx = 1,
3092                                         .attributes = 0x0,
3093                                         .endpoint = 0x85,
3094                                         .ep_attr = USB_ENDPOINT_XFER_ISOC |
3095                                                 USB_ENDPOINT_SYNC_ADAPTIVE,
3096                                         .maxpacksize = 0x138,
3097                                         .rates = SNDRV_PCM_RATE_48000,
3098                                         .rate_min = 48000,
3099                                         .rate_max = 48000,
3100                                         .nr_rates = 1,
3101                                         .rate_table = (unsigned int[]) {
3102                                                 48000
3103                                         }
3104                                 }
3105                         },
3106                         {
3107                                 .ifnum = 4,
3108                                 .type = QUIRK_MIDI_STANDARD_INTERFACE,
3109                         },
3110                         {
3111                                 .ifnum = -1
3112                         }
3113                 }
3114         }
3115 },
3116
3117 /* Microsoft XboxLive Headset/Xbox Communicator */
3118 {
3119         USB_DEVICE(0x045e, 0x0283),
3120         .bInterfaceClass = USB_CLASS_PER_INTERFACE,
3121         .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
3122                 .vendor_name = "Microsoft",
3123                 .product_name = "XboxLive Headset/Xbox Communicator",
3124                 .ifnum = QUIRK_ANY_INTERFACE,
3125                 .type = QUIRK_COMPOSITE,
3126                 .data = &(const struct snd_usb_audio_quirk[]) {
3127                         {
3128                                 /* playback */
3129                                 .ifnum = 0,
3130                                 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
3131                                 .data = &(const struct audioformat) {
3132                                         .formats = SNDRV_PCM_FMTBIT_S16_LE,
3133                                         .channels = 1,
3134                                         .iface = 0,
3135                                         .altsetting = 0,
3136                                         .altset_idx = 0,
3137                                         .attributes = 0,
3138                                         .endpoint = 0x04,
3139                                         .ep_attr = 0x05,
3140                                         .rates = SNDRV_PCM_RATE_CONTINUOUS,
3141                                         .rate_min = 22050,
3142                                         .rate_max = 22050
3143                                 }
3144                         },
3145                         {
3146                                 /* capture */
3147                                 .ifnum = 1,
3148                                 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
3149                                 .data = &(const struct audioformat) {
3150                                         .formats = SNDRV_PCM_FMTBIT_S16_LE,
3151                                         .channels = 1,
3152                                         .iface = 1,
3153                                         .altsetting = 0,
3154                                         .altset_idx = 0,
3155                                         .attributes = 0,
3156                                         .endpoint = 0x85,
3157                                         .ep_attr = 0x05,
3158                                         .rates = SNDRV_PCM_RATE_CONTINUOUS,
3159                                         .rate_min = 16000,
3160                                         .rate_max = 16000
3161                                 }
3162                         },
3163                         {
3164                                 .ifnum = -1
3165                         }
3166                 }
3167         }
3168 },
3169
3170 /* Reloop Play */
3171 {
3172         USB_DEVICE(0x200c, 0x100b),
3173         .bInterfaceClass = USB_CLASS_PER_INTERFACE,
3174         .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
3175                 .ifnum = QUIRK_ANY_INTERFACE,
3176                 .type = QUIRK_COMPOSITE,
3177                 .data = &(const struct snd_usb_audio_quirk[]) {
3178                         {
3179                                 .ifnum = 0,
3180                                 .type = QUIRK_AUDIO_STANDARD_MIXER,
3181                         },
3182                         {
3183                                 .ifnum = 1,
3184                                 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
3185                                 .data = &(const struct audioformat) {
3186                                         .formats = SNDRV_PCM_FMTBIT_S24_3LE,
3187                                         .channels = 4,
3188                                         .iface = 1,
3189                                         .altsetting = 1,
3190                                         .altset_idx = 1,
3191                                         .attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
3192                                         .endpoint = 0x01,
3193                                         .ep_attr = USB_ENDPOINT_SYNC_ADAPTIVE,
3194                                         .rates = SNDRV_PCM_RATE_44100 |
3195                                                  SNDRV_PCM_RATE_48000,
3196                                         .rate_min = 44100,
3197                                         .rate_max = 48000,
3198                                         .nr_rates = 2,
3199                                         .rate_table = (unsigned int[]) {
3200                                                 44100, 48000
3201                                         }
3202                                 }
3203                         },
3204                         {
3205                                 .ifnum = -1
3206                         }
3207                 }
3208         }
3209 },
3210
3211 {
3212         /*
3213          * ZOOM R16/24 in audio interface mode.
3214          * Playback requires an extra four byte LE length indicator
3215          * at the start of each isochronous packet. This quirk is
3216          * enabled in create_standard_audio_quirk().
3217          */
3218         USB_DEVICE(0x1686, 0x00dd),
3219         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
3220                 .ifnum = QUIRK_ANY_INTERFACE,
3221                 .type = QUIRK_COMPOSITE,
3222                 .data = (const struct snd_usb_audio_quirk[]) {
3223                         {
3224                                 /* Playback  */
3225                                 .ifnum = 1,
3226                                 .type = QUIRK_AUDIO_STANDARD_INTERFACE,
3227                         },
3228                         {
3229                                 /* Capture */
3230                                 .ifnum = 2,
3231                                 .type = QUIRK_AUDIO_STANDARD_INTERFACE,
3232                         },
3233                         {
3234                                 /* Midi */
3235                                 .ifnum = 3,
3236                                 .type = QUIRK_MIDI_STANDARD_INTERFACE
3237                         },
3238                         {
3239                                 .ifnum = -1
3240                         },
3241                 }
3242         }
3243 },
3244
3245 {
3246         /*
3247          * Some USB MIDI devices don't have an audio control interface,
3248          * so we have to grab MIDI streaming interfaces here.
3249          */
3250         .match_flags = USB_DEVICE_ID_MATCH_INT_CLASS |
3251                        USB_DEVICE_ID_MATCH_INT_SUBCLASS,
3252         .bInterfaceClass = USB_CLASS_AUDIO,
3253         .bInterfaceSubClass = USB_SUBCLASS_MIDISTREAMING,
3254         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
3255                 .ifnum = QUIRK_ANY_INTERFACE,
3256                 .type = QUIRK_MIDI_STANDARD_INTERFACE
3257         }
3258 },
3259
3260 /* disabled due to regression for other devices;
3261  * see https://bugzilla.kernel.org/show_bug.cgi?id=199905
3262  */
3263 #if 0
3264 {
3265         /*
3266          * Nura's first gen headphones use Cambridge Silicon Radio's vendor
3267          * ID, but it looks like the product ID actually is only for Nura.
3268          * The capture interface does not work at all (even on Windows),
3269          * and only the 48 kHz sample rate works for the playback interface.
3270          */
3271         USB_DEVICE(0x0a12, 0x1243),
3272         .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
3273                 .ifnum = QUIRK_ANY_INTERFACE,
3274                 .type = QUIRK_COMPOSITE,
3275                 .data = (const struct snd_usb_audio_quirk[]) {
3276                         {
3277                                 .ifnum = 0,
3278                                 .type = QUIRK_AUDIO_STANDARD_MIXER,
3279                         },
3280                         /* Capture */
3281                         {
3282                                 .ifnum = 1,
3283                                 .type = QUIRK_IGNORE_INTERFACE,
3284                         },
3285                         /* Playback */
3286                         {
3287                                 .ifnum = 2,
3288                                 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
3289                                 .data = &(const struct audioformat) {
3290                                         .formats = SNDRV_PCM_FMTBIT_S16_LE,
3291                                         .channels = 2,
3292                                         .iface = 2,
3293                                         .altsetting = 1,
3294                                         .altset_idx = 1,
3295                                         .attributes = UAC_EP_CS_ATTR_FILL_MAX |
3296                                                 UAC_EP_CS_ATTR_SAMPLE_RATE,
3297                                         .endpoint = 0x03,
3298                                         .ep_attr = USB_ENDPOINT_XFER_ISOC,
3299                                         .rates = SNDRV_PCM_RATE_48000,
3300                                         .rate_min = 48000,
3301                                         .rate_max = 48000,
3302                                         .nr_rates = 1,
3303                                         .rate_table = (unsigned int[]) {
3304                                                 48000
3305                                         }
3306                                 }
3307                         },
3308                         {
3309                                 .ifnum = -1
3310                         },
3311                 }
3312         }
3313 },
3314 #endif /* disabled */
3315
3316 {
3317         /*
3318          * Bower's & Wilkins PX headphones only support the 48 kHz sample rate
3319          * even though it advertises more. The capture interface doesn't work
3320          * even on windows.
3321          */
3322         USB_DEVICE(0x19b5, 0x0021),
3323         .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
3324                 .ifnum = QUIRK_ANY_INTERFACE,
3325                 .type = QUIRK_COMPOSITE,
3326                 .data = (const struct snd_usb_audio_quirk[]) {
3327                         {
3328                                 .ifnum = 0,
3329                                 .type = QUIRK_AUDIO_STANDARD_MIXER,
3330                         },
3331                         /* Playback */
3332                         {
3333                                 .ifnum = 1,
3334                                 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
3335                                 .data = &(const struct audioformat) {
3336                                         .formats = SNDRV_PCM_FMTBIT_S16_LE,
3337                                         .channels = 2,
3338                                         .iface = 1,
3339                                         .altsetting = 1,
3340                                         .altset_idx = 1,
3341                                         .attributes = UAC_EP_CS_ATTR_FILL_MAX |
3342                                                 UAC_EP_CS_ATTR_SAMPLE_RATE,
3343                                         .endpoint = 0x03,
3344                                         .ep_attr = USB_ENDPOINT_XFER_ISOC,
3345                                         .rates = SNDRV_PCM_RATE_48000,
3346                                         .rate_min = 48000,
3347                                         .rate_max = 48000,
3348                                         .nr_rates = 1,
3349                                         .rate_table = (unsigned int[]) {
3350                                                 48000
3351                                         }
3352                                 }
3353                         },
3354                         {
3355                                 .ifnum = -1
3356                         },
3357                 }
3358         }
3359 },
3360 /* MOTU Microbook II */
3361 {
3362         USB_DEVICE_VENDOR_SPEC(0x07fd, 0x0004),
3363         .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
3364                 .vendor_name = "MOTU",
3365                 .product_name = "MicroBookII",
3366                 .ifnum = QUIRK_ANY_INTERFACE,
3367                 .type = QUIRK_COMPOSITE,
3368                 .data = (const struct snd_usb_audio_quirk[]) {
3369                         {
3370                                 .ifnum = 0,
3371                                 .type = QUIRK_AUDIO_STANDARD_MIXER,
3372                         },
3373                         {
3374                                 .ifnum = 0,
3375                                 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
3376                                 .data = &(const struct audioformat) {
3377                                         .formats = SNDRV_PCM_FMTBIT_S24_3BE,
3378                                         .channels = 6,
3379                                         .iface = 0,
3380                                         .altsetting = 1,
3381                                         .altset_idx = 1,
3382                                         .attributes = 0,
3383                                         .endpoint = 0x84,
3384                                         .rates = SNDRV_PCM_RATE_96000,
3385                                         .ep_attr = USB_ENDPOINT_XFER_ISOC |
3386                                                    USB_ENDPOINT_SYNC_ASYNC,
3387                                         .rate_min = 96000,
3388                                         .rate_max = 96000,
3389                                         .nr_rates = 1,
3390                                         .maxpacksize = 0x00d8,
3391                                         .rate_table = (unsigned int[]) {
3392                                                 96000
3393                                         }
3394                                 }
3395                         },
3396                         {
3397                                 .ifnum = 0,
3398                                 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
3399                                 .data = &(const struct audioformat) {
3400                                         .formats = SNDRV_PCM_FMTBIT_S24_3BE,
3401                                         .channels = 8,
3402                                         .iface = 0,
3403                                         .altsetting = 1,
3404                                         .altset_idx = 1,
3405                                         .attributes = 0,
3406                                         .endpoint = 0x03,
3407                                         .rates = SNDRV_PCM_RATE_96000,
3408                                         .ep_attr = USB_ENDPOINT_XFER_ISOC |
3409                                                    USB_ENDPOINT_SYNC_ASYNC,
3410                                         .rate_min = 96000,
3411                                         .rate_max = 96000,
3412                                         .nr_rates = 1,
3413                                         .maxpacksize = 0x0120,
3414                                         .rate_table = (unsigned int[]) {
3415                                                 96000
3416                                         }
3417                                 }
3418                         },
3419                         {
3420                                 .ifnum = -1
3421                         }
3422                 }
3423         }
3424 },
3425 {
3426         /*
3427          * PIONEER DJ DDJ-SX3
3428          * PCM is 12 channels out, 10 channels in @ 44.1 fixed
3429          * interface 0, vendor class alt setting 1 for endpoints 5 and 0x86
3430          * The feedback for the output is the input.
3431          */
3432         USB_DEVICE_VENDOR_SPEC(0x2b73, 0x0023),
3433         .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
3434                 .ifnum = QUIRK_ANY_INTERFACE,
3435                 .type = QUIRK_COMPOSITE,
3436                 .data = (const struct snd_usb_audio_quirk[]) {
3437                         {
3438                                 .ifnum = 0,
3439                                 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
3440                                 .data = &(const struct audioformat) {
3441                                         .formats = SNDRV_PCM_FMTBIT_S32_LE,
3442                                         .channels = 12,
3443                                         .iface = 0,
3444                                         .altsetting = 1,
3445                                         .altset_idx = 1,
3446                                         .endpoint = 0x05,
3447                                         .ep_attr = USB_ENDPOINT_XFER_ISOC|
3448                                                    USB_ENDPOINT_SYNC_ASYNC,
3449                                         .rates = SNDRV_PCM_RATE_44100,
3450                                         .rate_min = 44100,
3451                                         .rate_max = 44100,
3452                                         .nr_rates = 1,
3453                                         .rate_table = (unsigned int[]) { 44100 }
3454                                 }
3455                         },
3456                         {
3457                                 .ifnum = 0,
3458                                 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
3459                                 .data = &(const struct audioformat) {
3460                                         .formats = SNDRV_PCM_FMTBIT_S32_LE,
3461                                         .channels = 10,
3462                                         .iface = 0,
3463                                         .altsetting = 1,
3464                                         .altset_idx = 1,
3465                                         .endpoint = 0x86,
3466                                         .ep_idx = 1,
3467                                         .ep_attr = USB_ENDPOINT_XFER_ISOC|
3468                                                  USB_ENDPOINT_SYNC_ASYNC|
3469                                                  USB_ENDPOINT_USAGE_IMPLICIT_FB,
3470                                         .rates = SNDRV_PCM_RATE_44100,
3471                                         .rate_min = 44100,
3472                                         .rate_max = 44100,
3473                                         .nr_rates = 1,
3474                                         .rate_table = (unsigned int[]) { 44100 }
3475                                 }
3476                         },
3477                         {
3478                                 .ifnum = -1
3479                         }
3480                 }
3481         }
3482 },
3483 {
3484         /*
3485          * Pioneer DJ DJM-250MK2
3486          * PCM is 8 channels out @ 48 fixed (endpoint 0x01)
3487          * and 8 channels in @ 48 fixed (endpoint 0x82).
3488          *
3489          * Both playback and recording is working, even simultaneously.
3490          *
3491          * Playback channels could be mapped to:
3492          *  - CH1
3493          *  - CH2
3494          *  - AUX
3495          *
3496          * Recording channels could be mapped to:
3497          *  - Post CH1 Fader
3498          *  - Post CH2 Fader
3499          *  - Cross Fader A
3500          *  - Cross Fader B
3501          *  - MIC
3502          *  - AUX
3503          *  - REC OUT
3504          *
3505          * There is remaining problem with recording directly from PHONO/LINE.
3506          * If we map a channel to:
3507          *  - CH1 Control Tone PHONO
3508          *  - CH1 Control Tone LINE
3509          *  - CH2 Control Tone PHONO
3510          *  - CH2 Control Tone LINE
3511          * it is silent.
3512          * There is no signal even on other operating systems with official drivers.
3513          * The signal appears only when a supported application is started.
3514          * This needs to be investigated yet...
3515          * (there is quite a lot communication on the USB in both directions)
3516          *
3517          * In current version this mixer could be used for playback
3518          * and for recording from vinyls (through Post CH* Fader)
3519          * but not for DVS (Digital Vinyl Systems) like in Mixxx.
3520          */
3521         USB_DEVICE_VENDOR_SPEC(0x2b73, 0x0017),
3522         .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
3523                 .ifnum = QUIRK_ANY_INTERFACE,
3524                 .type = QUIRK_COMPOSITE,
3525                 .data = (const struct snd_usb_audio_quirk[]) {
3526                         {
3527                                 .ifnum = 0,
3528                                 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
3529                                 .data = &(const struct audioformat) {
3530                                         .formats = SNDRV_PCM_FMTBIT_S24_3LE,
3531                                         .channels = 8, // outputs
3532                                         .iface = 0,
3533                                         .altsetting = 1,
3534                                         .altset_idx = 1,
3535                                         .endpoint = 0x01,
3536                                         .ep_attr = USB_ENDPOINT_XFER_ISOC|
3537                                                 USB_ENDPOINT_SYNC_ASYNC,
3538                                         .rates = SNDRV_PCM_RATE_48000,
3539                                         .rate_min = 48000,
3540                                         .rate_max = 48000,
3541                                         .nr_rates = 1,
3542                                         .rate_table = (unsigned int[]) { 48000 }
3543                                         }
3544                         },
3545                         {
3546                                 .ifnum = 0,
3547                                 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
3548                                 .data = &(const struct audioformat) {
3549                                         .formats = SNDRV_PCM_FMTBIT_S24_3LE,
3550                                         .channels = 8, // inputs
3551                                         .iface = 0,
3552                                         .altsetting = 1,
3553                                         .altset_idx = 1,
3554                                         .endpoint = 0x82,
3555                                         .ep_idx = 1,
3556                                         .ep_attr = USB_ENDPOINT_XFER_ISOC|
3557                                                 USB_ENDPOINT_SYNC_ASYNC|
3558                                                 USB_ENDPOINT_USAGE_IMPLICIT_FB,
3559                                         .rates = SNDRV_PCM_RATE_48000,
3560                                         .rate_min = 48000,
3561                                         .rate_max = 48000,
3562                                         .nr_rates = 1,
3563                                         .rate_table = (unsigned int[]) { 48000 }
3564                                 }
3565                         },
3566                         {
3567                                 .ifnum = -1
3568                         }
3569                 }
3570         }
3571 },
3572 {
3573         /*
3574          * PIONEER DJ DDJ-RB
3575          * PCM is 4 channels out, 2 dummy channels in @ 44.1 fixed
3576          * The feedback for the output is the dummy input.
3577          */
3578         USB_DEVICE_VENDOR_SPEC(0x2b73, 0x000e),
3579         .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
3580                 .ifnum = QUIRK_ANY_INTERFACE,
3581                 .type = QUIRK_COMPOSITE,
3582                 .data = (const struct snd_usb_audio_quirk[]) {
3583                         {
3584                                 .ifnum = 0,
3585                                 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
3586                                 .data = &(const struct audioformat) {
3587                                         .formats = SNDRV_PCM_FMTBIT_S24_3LE,
3588                                         .channels = 4,
3589                                         .iface = 0,
3590                                         .altsetting = 1,
3591                                         .altset_idx = 1,
3592                                         .endpoint = 0x01,
3593                                         .ep_attr = USB_ENDPOINT_XFER_ISOC|
3594                                                    USB_ENDPOINT_SYNC_ASYNC,
3595                                         .rates = SNDRV_PCM_RATE_44100,
3596                                         .rate_min = 44100,
3597                                         .rate_max = 44100,
3598                                         .nr_rates = 1,
3599                                         .rate_table = (unsigned int[]) { 44100 }
3600                                 }
3601                         },
3602                         {
3603                                 .ifnum = 0,
3604                                 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
3605                                 .data = &(const struct audioformat) {
3606                                         .formats = SNDRV_PCM_FMTBIT_S24_3LE,
3607                                         .channels = 2,
3608                                         .iface = 0,
3609                                         .altsetting = 1,
3610                                         .altset_idx = 1,
3611                                         .endpoint = 0x82,
3612                                         .ep_idx = 1,
3613                                         .ep_attr = USB_ENDPOINT_XFER_ISOC|
3614                                                  USB_ENDPOINT_SYNC_ASYNC|
3615                                                  USB_ENDPOINT_USAGE_IMPLICIT_FB,
3616                                         .rates = SNDRV_PCM_RATE_44100,
3617                                         .rate_min = 44100,
3618                                         .rate_max = 44100,
3619                                         .nr_rates = 1,
3620                                         .rate_table = (unsigned int[]) { 44100 }
3621                                 }
3622                         },
3623                         {
3624                                 .ifnum = -1
3625                         }
3626                 }
3627         }
3628 },
3629
3630 {
3631         /*
3632          * PIONEER DJ DDJ-RR
3633          * PCM is 6 channels out & 4 channels in @ 44.1 fixed
3634          */
3635         USB_DEVICE_VENDOR_SPEC(0x2b73, 0x000d),
3636         .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
3637                 .ifnum = QUIRK_ANY_INTERFACE,
3638                 .type = QUIRK_COMPOSITE,
3639                 .data = (const struct snd_usb_audio_quirk[]) {
3640                         {
3641                                 .ifnum = 0,
3642                                 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
3643                                 .data = &(const struct audioformat) {
3644                                         .formats = SNDRV_PCM_FMTBIT_S24_3LE,
3645                                         .channels = 6, //Master, Headphones & Booth
3646                                         .iface = 0,
3647                                         .altsetting = 1,
3648                                         .altset_idx = 1,
3649                                         .endpoint = 0x01,
3650                                         .ep_attr = USB_ENDPOINT_XFER_ISOC|
3651                                                    USB_ENDPOINT_SYNC_ASYNC,
3652                                         .rates = SNDRV_PCM_RATE_44100,
3653                                         .rate_min = 44100,
3654                                         .rate_max = 44100,
3655                                         .nr_rates = 1,
3656                                         .rate_table = (unsigned int[]) { 44100 }
3657                                 }
3658                         },
3659                         {
3660                                 .ifnum = 0,
3661                                 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
3662                                 .data = &(const struct audioformat) {
3663                                         .formats = SNDRV_PCM_FMTBIT_S24_3LE,
3664                                         .channels = 4, //2x RCA inputs (CH1 & CH2)
3665                                         .iface = 0,
3666                                         .altsetting = 1,
3667                                         .altset_idx = 1,
3668                                         .endpoint = 0x82,
3669                                         .ep_idx = 1,
3670                                         .ep_attr = USB_ENDPOINT_XFER_ISOC|
3671                                                  USB_ENDPOINT_SYNC_ASYNC|
3672                                                  USB_ENDPOINT_USAGE_IMPLICIT_FB,
3673                                         .rates = SNDRV_PCM_RATE_44100,
3674                                         .rate_min = 44100,
3675                                         .rate_max = 44100,
3676                                         .nr_rates = 1,
3677                                         .rate_table = (unsigned int[]) { 44100 }
3678                                 }
3679                         },
3680                         {
3681                                 .ifnum = -1
3682                         }
3683                 }
3684         }
3685 },
3686
3687 {
3688         /*
3689          * PIONEER DJ DDJ-SR2
3690          * PCM is 4 channels out, 6 channels in @ 44.1 fixed
3691          * The Feedback for the output is the input
3692          */
3693         USB_DEVICE_VENDOR_SPEC(0x2b73, 0x001e),
3694                 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
3695                 .ifnum = QUIRK_ANY_INTERFACE,
3696                 .type = QUIRK_COMPOSITE,
3697                 .data = (const struct snd_usb_audio_quirk[]) {
3698                         {
3699                                 .ifnum = 0,
3700                                 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
3701                                 .data = &(const struct audioformat) {
3702                                         .formats = SNDRV_PCM_FMTBIT_S24_3LE,
3703                                         .channels = 4,
3704                                         .iface = 0,
3705                                         .altsetting = 1,
3706                                         .altset_idx = 1,
3707                                         .endpoint = 0x01,
3708                                         .ep_attr = USB_ENDPOINT_XFER_ISOC|
3709                                                 USB_ENDPOINT_SYNC_ASYNC,
3710                                         .rates = SNDRV_PCM_RATE_44100,
3711                                         .rate_min = 44100,
3712                                         .rate_max = 44100,
3713                                         .nr_rates = 1,
3714                                         .rate_table = (unsigned int[]) { 44100 }
3715                                 }
3716                         },
3717                         {
3718                                 .ifnum = 0,
3719                                 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
3720                                 .data = &(const struct audioformat) {
3721                                         .formats = SNDRV_PCM_FMTBIT_S24_3LE,
3722                                         .channels = 6,
3723                                         .iface = 0,
3724                                         .altsetting = 1,
3725                                         .altset_idx = 1,
3726                                         .endpoint = 0x82,
3727                                         .ep_idx = 1,
3728                                         .ep_attr = USB_ENDPOINT_XFER_ISOC|
3729                                                 USB_ENDPOINT_SYNC_ASYNC|
3730                                         USB_ENDPOINT_USAGE_IMPLICIT_FB,
3731                                         .rates = SNDRV_PCM_RATE_44100,
3732                                         .rate_min = 44100,
3733                                         .rate_max = 44100,
3734                                         .nr_rates = 1,
3735                                         .rate_table = (unsigned int[]) { 44100 }
3736                                 }
3737                         },
3738                         {
3739                                 .ifnum = -1
3740                         }
3741                 }
3742         }
3743 },
3744
3745 {
3746         /*
3747          * Pioneer DJ DJM-900NXS2
3748          * 10 channels playback & 12 channels capture @ 44.1/48/96kHz S24LE
3749          */
3750         USB_DEVICE_VENDOR_SPEC(0x2b73, 0x000a),
3751         .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
3752                 .ifnum = QUIRK_ANY_INTERFACE,
3753                 .type = QUIRK_COMPOSITE,
3754                 .data = (const struct snd_usb_audio_quirk[]) {
3755                         {
3756                                 .ifnum = 0,
3757                                 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
3758                                 .data = &(const struct audioformat) {
3759                                         .formats = SNDRV_PCM_FMTBIT_S24_3LE,
3760                                         .channels = 10,
3761                                         .iface = 0,
3762                                         .altsetting = 1,
3763                                         .altset_idx = 1,
3764                                         .endpoint = 0x01,
3765                                         .ep_attr = USB_ENDPOINT_XFER_ISOC|
3766                                             USB_ENDPOINT_SYNC_ASYNC,
3767                                         .rates = SNDRV_PCM_RATE_44100|
3768                                             SNDRV_PCM_RATE_48000|
3769                                             SNDRV_PCM_RATE_96000,
3770                                         .rate_min = 44100,
3771                                         .rate_max = 96000,
3772                                         .nr_rates = 3,
3773                                         .rate_table = (unsigned int[]) {
3774                                                 44100, 48000, 96000
3775                                         }
3776                                 }
3777                         },
3778                         {
3779                                 .ifnum = 0,
3780                                 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
3781                                 .data = &(const struct audioformat) {
3782                                         .formats = SNDRV_PCM_FMTBIT_S24_3LE,
3783                                         .channels = 12,
3784                                         .iface = 0,
3785                                         .altsetting = 1,
3786                                         .altset_idx = 1,
3787                                         .endpoint = 0x82,
3788                                         .ep_idx = 1,
3789                                         .ep_attr = USB_ENDPOINT_XFER_ISOC|
3790                                             USB_ENDPOINT_SYNC_ASYNC|
3791                                             USB_ENDPOINT_USAGE_IMPLICIT_FB,
3792                                         .rates = SNDRV_PCM_RATE_44100|
3793                                             SNDRV_PCM_RATE_48000|
3794                                             SNDRV_PCM_RATE_96000,
3795                                         .rate_min = 44100,
3796                                         .rate_max = 96000,
3797                                         .nr_rates = 3,
3798                                         .rate_table = (unsigned int[]) {
3799                                                 44100, 48000, 96000
3800                                         }
3801                                 }
3802                         },
3803                         {
3804                                 .ifnum = -1
3805                         }
3806                 }
3807         }
3808 },
3809
3810 /*
3811  * MacroSilicon MS2109 based HDMI capture cards
3812  *
3813  * These claim 96kHz 1ch in the descriptors, but are actually 48kHz 2ch.
3814  * They also need QUIRK_AUDIO_ALIGN_TRANSFER, which makes one wonder if
3815  * they pretend to be 96kHz mono as a workaround for stereo being broken
3816  * by that...
3817  *
3818  * They also have an issue with initial stream alignment that causes the
3819  * channels to be swapped and out of phase, which is dealt with in quirks.c.
3820  */
3821 {
3822         USB_AUDIO_DEVICE(0x534d, 0x2109),
3823         .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
3824                 .vendor_name = "MacroSilicon",
3825                 .product_name = "MS2109",
3826                 .ifnum = QUIRK_ANY_INTERFACE,
3827                 .type = QUIRK_COMPOSITE,
3828                 .data = &(const struct snd_usb_audio_quirk[]) {
3829                         {
3830                                 .ifnum = 2,
3831                                 .type = QUIRK_AUDIO_ALIGN_TRANSFER,
3832                         },
3833                         {
3834                                 .ifnum = 2,
3835                                 .type = QUIRK_AUDIO_STANDARD_MIXER,
3836                         },
3837                         {
3838                                 .ifnum = 3,
3839                                 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
3840                                 .data = &(const struct audioformat) {
3841                                         .formats = SNDRV_PCM_FMTBIT_S16_LE,
3842                                         .channels = 2,
3843                                         .iface = 3,
3844                                         .altsetting = 1,
3845                                         .altset_idx = 1,
3846                                         .attributes = 0,
3847                                         .endpoint = 0x82,
3848                                         .ep_attr = USB_ENDPOINT_XFER_ISOC |
3849                                                 USB_ENDPOINT_SYNC_ASYNC,
3850                                         .rates = SNDRV_PCM_RATE_CONTINUOUS,
3851                                         .rate_min = 48000,
3852                                         .rate_max = 48000,
3853                                 }
3854                         },
3855                         {
3856                                 .ifnum = -1
3857                         }
3858                 }
3859         }
3860 },
3861 {
3862         /*
3863          * Pioneer DJ DJM-750
3864          * 8 channels playback & 8 channels capture @ 44.1/48/96kHz S24LE
3865          */
3866         USB_DEVICE_VENDOR_SPEC(0x08e4, 0x017f),
3867         .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
3868                 .ifnum = QUIRK_ANY_INTERFACE,
3869                 .type = QUIRK_COMPOSITE,
3870                 .data = (const struct snd_usb_audio_quirk[]) {
3871                         {
3872                                 .ifnum = 0,
3873                                 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
3874                                 .data = &(const struct audioformat) {
3875                                         .formats = SNDRV_PCM_FMTBIT_S24_3LE,
3876                                         .channels = 8,
3877                                         .iface = 0,
3878                                         .altsetting = 1,
3879                                         .altset_idx = 1,
3880                                         .endpoint = 0x05,
3881                                         .ep_attr = USB_ENDPOINT_XFER_ISOC|
3882                                             USB_ENDPOINT_SYNC_ASYNC,
3883                                         .rates = SNDRV_PCM_RATE_44100|
3884                                                 SNDRV_PCM_RATE_48000|
3885                                                 SNDRV_PCM_RATE_96000,
3886                                         .rate_min = 44100,
3887                                         .rate_max = 96000,
3888                                         .nr_rates = 3,
3889                                         .rate_table = (unsigned int[]) { 44100, 48000, 96000 }
3890                                 }
3891                         },
3892                         {
3893                                 .ifnum = 0,
3894                                 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
3895                                 .data = &(const struct audioformat) {
3896                                         .formats = SNDRV_PCM_FMTBIT_S24_3LE,
3897                                         .channels = 8,
3898                                         .iface = 0,
3899                                         .altsetting = 1,
3900                                         .altset_idx = 1,
3901                                         .endpoint = 0x86,
3902                                         .ep_idx = 1,
3903                                         .ep_attr = USB_ENDPOINT_XFER_ISOC|
3904                                                 USB_ENDPOINT_SYNC_ASYNC|
3905                                                 USB_ENDPOINT_USAGE_IMPLICIT_FB,
3906                                         .rates = SNDRV_PCM_RATE_44100|
3907                                                 SNDRV_PCM_RATE_48000|
3908                                                 SNDRV_PCM_RATE_96000,
3909                                         .rate_min = 44100,
3910                                         .rate_max = 96000,
3911                                         .nr_rates = 3,
3912                                         .rate_table = (unsigned int[]) { 44100, 48000, 96000 }
3913                                 }
3914                         },
3915                         {
3916                                 .ifnum = -1
3917                         }
3918                 }
3919         }
3920 },
3921 {
3922         /*
3923          * Pioneer DJ DJM-850
3924          * 8 channels playback and 8 channels capture @ 44.1/48/96kHz S24LE
3925          * Playback on EP 0x05
3926          * Capture on EP 0x86
3927          */
3928         USB_DEVICE_VENDOR_SPEC(0x08e4, 0x0163),
3929         .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
3930                 .ifnum = QUIRK_ANY_INTERFACE,
3931                 .type = QUIRK_COMPOSITE,
3932                 .data = (const struct snd_usb_audio_quirk[]) {
3933                         {
3934                                 .ifnum = 0,
3935                                 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
3936                                 .data = &(const struct audioformat) {
3937                                         .formats = SNDRV_PCM_FMTBIT_S24_3LE,
3938                                         .channels = 8,
3939                                         .iface = 0,
3940                                         .altsetting = 1,
3941                                         .altset_idx = 1,
3942                                         .endpoint = 0x05,
3943                                         .ep_attr = USB_ENDPOINT_XFER_ISOC|
3944                                             USB_ENDPOINT_SYNC_ASYNC|
3945                                                 USB_ENDPOINT_USAGE_DATA,
3946                                         .rates = SNDRV_PCM_RATE_44100|
3947                                                 SNDRV_PCM_RATE_48000|
3948                                                 SNDRV_PCM_RATE_96000,
3949                                         .rate_min = 44100,
3950                                         .rate_max = 96000,
3951                                         .nr_rates = 3,
3952                                         .rate_table = (unsigned int[]) { 44100, 48000, 96000 }
3953                                 }
3954                         },
3955                         {
3956                                 .ifnum = 0,
3957                                 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
3958                                 .data = &(const struct audioformat) {
3959                                         .formats = SNDRV_PCM_FMTBIT_S24_3LE,
3960                                         .channels = 8,
3961                                         .iface = 0,
3962                                         .altsetting = 1,
3963                                         .altset_idx = 1,
3964                                         .endpoint = 0x86,
3965                                         .ep_idx = 1,
3966                                         .ep_attr = USB_ENDPOINT_XFER_ISOC|
3967                                                 USB_ENDPOINT_SYNC_ASYNC|
3968                                                 USB_ENDPOINT_USAGE_DATA,
3969                                         .rates = SNDRV_PCM_RATE_44100|
3970                                                 SNDRV_PCM_RATE_48000|
3971                                                 SNDRV_PCM_RATE_96000,
3972                                         .rate_min = 44100,
3973                                         .rate_max = 96000,
3974                                         .nr_rates = 3,
3975                                         .rate_table = (unsigned int[]) { 44100, 48000, 96000 }
3976                                 }
3977                         },
3978                         {
3979                                 .ifnum = -1
3980                         }
3981                 }
3982         }
3983 },
3984 {
3985         /*
3986          * Pioneer DJ DJM-450
3987          * PCM is 8 channels out @ 48 fixed (endpoint 0x01)
3988          * and 8 channels in @ 48 fixed (endpoint 0x82).
3989          */
3990         USB_DEVICE_VENDOR_SPEC(0x2b73, 0x0013),
3991         .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
3992                 .ifnum = QUIRK_ANY_INTERFACE,
3993                 .type = QUIRK_COMPOSITE,
3994                 .data = (const struct snd_usb_audio_quirk[]) {
3995                         {
3996                                 .ifnum = 0,
3997                                 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
3998                                 .data = &(const struct audioformat) {
3999                                         .formats = SNDRV_PCM_FMTBIT_S24_3LE,
4000                                         .channels = 8, // outputs
4001                                         .iface = 0,
4002                                         .altsetting = 1,
4003                                         .altset_idx = 1,
4004                                         .endpoint = 0x01,
4005                                         .ep_attr = USB_ENDPOINT_XFER_ISOC|
4006                                                 USB_ENDPOINT_SYNC_ASYNC,
4007                                         .rates = SNDRV_PCM_RATE_48000,
4008                                         .rate_min = 48000,
4009                                         .rate_max = 48000,
4010                                         .nr_rates = 1,
4011                                         .rate_table = (unsigned int[]) { 48000 }
4012                                         }
4013                         },
4014                         {
4015                                 .ifnum = 0,
4016                                 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
4017                                 .data = &(const struct audioformat) {
4018                                         .formats = SNDRV_PCM_FMTBIT_S24_3LE,
4019                                         .channels = 8, // inputs
4020                                         .iface = 0,
4021                                         .altsetting = 1,
4022                                         .altset_idx = 1,
4023                                         .endpoint = 0x82,
4024                                         .ep_idx = 1,
4025                                         .ep_attr = USB_ENDPOINT_XFER_ISOC|
4026                                                 USB_ENDPOINT_SYNC_ASYNC|
4027                                                 USB_ENDPOINT_USAGE_IMPLICIT_FB,
4028                                         .rates = SNDRV_PCM_RATE_48000,
4029                                         .rate_min = 48000,
4030                                         .rate_max = 48000,
4031                                         .nr_rates = 1,
4032                                         .rate_table = (unsigned int[]) { 48000 }
4033                                 }
4034                         },
4035                         {
4036                                 .ifnum = -1
4037                         }
4038                 }
4039         }
4040 },
4041
4042 #undef USB_DEVICE_VENDOR_SPEC
4043 #undef USB_AUDIO_DEVICE