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