Merge tag 'sched_ext-for-6.12-rc1-fixes' of git://git.kernel.org/pub/scm/linux/kernel...
[linux-2.6-block.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                                         .fmt_bits = 24,
3017                                         .channels = 4,
3018                                         .iface = 2,
3019                                         .altsetting = 1,
3020                                         .altset_idx = 1,
3021                                         .attributes = 0x00,
3022                                         .endpoint = USB_RECIP_INTERFACE | USB_DIR_OUT,
3023                                         .ep_attr = USB_ENDPOINT_XFER_ISOC |
3024                                                 USB_ENDPOINT_SYNC_ASYNC,
3025                                         .rates = SNDRV_PCM_RATE_44100 | SNDRV_PCM_RATE_48000 |
3026                                                         SNDRV_PCM_RATE_88200 | SNDRV_PCM_RATE_96000,
3027                                         .rate_min = 44100,
3028                                         .rate_max = 96000,
3029                                         .nr_rates = 4,
3030                                         .rate_table = (unsigned int[]) {
3031                                                 44100, 48000, 88200, 96000
3032                                         },
3033                                         .sync_ep = USB_RECIP_INTERFACE | USB_DIR_IN,
3034                                         .sync_iface = 3,
3035                                         .sync_altsetting = 1,
3036                                         .sync_ep_idx = 1,
3037                                         .implicit_fb = 1,
3038                                 }
3039                         },
3040                         {
3041                                 .ifnum = 3,
3042                                 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
3043                                 .data = &(const struct audioformat) {
3044                                         .formats = SNDRV_PCM_FMTBIT_S24_3LE,
3045                                         .fmt_bits = 24,
3046                                         .channels = 4,
3047                                         .iface = 3,
3048                                         .altsetting = 1,
3049                                         .altset_idx = 1,
3050                                         .attributes = 0x00,
3051                                         .endpoint = USB_RECIP_INTERFACE | USB_DIR_IN,
3052                                         .ep_attr = USB_ENDPOINT_XFER_ISOC |
3053                                                 USB_ENDPOINT_SYNC_ASYNC,
3054                                         .maxpacksize = 0x009c,
3055                                         .rates = SNDRV_PCM_RATE_44100 | SNDRV_PCM_RATE_48000 |
3056                                                         SNDRV_PCM_RATE_88200 | SNDRV_PCM_RATE_96000,
3057                                         .rate_min = 44100,
3058                                         .rate_max = 96000,
3059                                         .nr_rates = 4,
3060                                         .rate_table = (unsigned int[]) {
3061                                                 44100, 48000, 88200, 96000
3062                                         },
3063                                         .implicit_fb = 0,
3064                                 }
3065                         },
3066                         {
3067                                 .ifnum = 4,
3068                                 .type = QUIRK_MIDI_FIXED_ENDPOINT,
3069                                 .data = &(const struct snd_usb_midi_endpoint_info) {
3070                                         .out_cables = 0x0001,
3071                                         .in_cables  = 0x0001
3072                                 }
3073                         },
3074                         {
3075                                 .ifnum = -1
3076                         }
3077                 }
3078         }
3079 },
3080 {
3081         /* Tascam US122 MKII - playback-only support */
3082         USB_DEVICE_VENDOR_SPEC(0x0644, 0x8021),
3083         .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
3084                 .vendor_name = "TASCAM",
3085                 .product_name = "US122 MKII",
3086                 .ifnum = QUIRK_ANY_INTERFACE,
3087                 .type = QUIRK_COMPOSITE,
3088                 .data = (const struct snd_usb_audio_quirk[]) {
3089                         {
3090                                 .ifnum = 0,
3091                                 .type = QUIRK_IGNORE_INTERFACE
3092                         },
3093                         {
3094                                 .ifnum = 1,
3095                                 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
3096                                 .data = &(const struct audioformat) {
3097                                         .formats = SNDRV_PCM_FMTBIT_S24_3LE,
3098                                         .channels = 2,
3099                                         .iface = 1,
3100                                         .altsetting = 1,
3101                                         .altset_idx = 1,
3102                                         .attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
3103                                         .endpoint = 0x02,
3104                                         .ep_attr = USB_ENDPOINT_XFER_ISOC,
3105                                         .rates = SNDRV_PCM_RATE_44100 |
3106                                                  SNDRV_PCM_RATE_48000 |
3107                                                  SNDRV_PCM_RATE_88200 |
3108                                                  SNDRV_PCM_RATE_96000,
3109                                         .rate_min = 44100,
3110                                         .rate_max = 96000,
3111                                         .nr_rates = 4,
3112                                         .rate_table = (unsigned int[]) {
3113                                                 44100, 48000, 88200, 96000
3114                                         }
3115                                 }
3116                         },
3117                         {
3118                                 .ifnum = -1
3119                         }
3120                 }
3121         }
3122 },
3123
3124 /* Denon DN-X1600 */
3125 {
3126         USB_AUDIO_DEVICE(0x154e, 0x500e),
3127         .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
3128                 .vendor_name = "Denon",
3129                 .product_name = "DN-X1600",
3130                 .ifnum = QUIRK_ANY_INTERFACE,
3131                 .type = QUIRK_COMPOSITE,
3132                 .data = (const struct snd_usb_audio_quirk[]){
3133                         {
3134                                 .ifnum = 0,
3135                                 .type = QUIRK_IGNORE_INTERFACE,
3136                         },
3137                         {
3138                                 .ifnum = 1,
3139                                 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
3140                                 .data = &(const struct audioformat) {
3141                                         .formats = SNDRV_PCM_FMTBIT_S24_3LE,
3142                                         .channels = 8,
3143                                         .iface = 1,
3144                                         .altsetting = 1,
3145                                         .altset_idx = 1,
3146                                         .attributes = 0x0,
3147                                         .endpoint = 0x01,
3148                                         .ep_attr = USB_ENDPOINT_XFER_ISOC |
3149                                                 USB_ENDPOINT_SYNC_ADAPTIVE,
3150                                         .maxpacksize = 0x138,
3151                                         .rates = SNDRV_PCM_RATE_48000,
3152                                         .rate_min = 48000,
3153                                         .rate_max = 48000,
3154                                         .nr_rates = 1,
3155                                         .rate_table = (unsigned int[]) {
3156                                                 48000
3157                                         }
3158                                 }
3159                         },
3160                         {
3161                                 .ifnum = 2,
3162                                 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
3163                                 .data = &(const struct audioformat) {
3164                                         .formats = SNDRV_PCM_FMTBIT_S24_3LE,
3165                                         .channels = 8,
3166                                         .iface = 2,
3167                                         .altsetting = 1,
3168                                         .altset_idx = 1,
3169                                         .attributes = 0x0,
3170                                         .endpoint = 0x85,
3171                                         .ep_attr = USB_ENDPOINT_XFER_ISOC |
3172                                                 USB_ENDPOINT_SYNC_ADAPTIVE,
3173                                         .maxpacksize = 0x138,
3174                                         .rates = SNDRV_PCM_RATE_48000,
3175                                         .rate_min = 48000,
3176                                         .rate_max = 48000,
3177                                         .nr_rates = 1,
3178                                         .rate_table = (unsigned int[]) {
3179                                                 48000
3180                                         }
3181                                 }
3182                         },
3183                         {
3184                                 .ifnum = 4,
3185                                 .type = QUIRK_MIDI_STANDARD_INTERFACE,
3186                         },
3187                         {
3188                                 .ifnum = -1
3189                         }
3190                 }
3191         }
3192 },
3193
3194 /* Microsoft XboxLive Headset/Xbox Communicator */
3195 {
3196         USB_DEVICE(0x045e, 0x0283),
3197         .bInterfaceClass = USB_CLASS_PER_INTERFACE,
3198         .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
3199                 .vendor_name = "Microsoft",
3200                 .product_name = "XboxLive Headset/Xbox Communicator",
3201                 .ifnum = QUIRK_ANY_INTERFACE,
3202                 .type = QUIRK_COMPOSITE,
3203                 .data = &(const struct snd_usb_audio_quirk[]) {
3204                         {
3205                                 /* playback */
3206                                 .ifnum = 0,
3207                                 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
3208                                 .data = &(const struct audioformat) {
3209                                         .formats = SNDRV_PCM_FMTBIT_S16_LE,
3210                                         .channels = 1,
3211                                         .iface = 0,
3212                                         .altsetting = 0,
3213                                         .altset_idx = 0,
3214                                         .attributes = 0,
3215                                         .endpoint = 0x04,
3216                                         .ep_attr = 0x05,
3217                                         .rates = SNDRV_PCM_RATE_CONTINUOUS,
3218                                         .rate_min = 22050,
3219                                         .rate_max = 22050
3220                                 }
3221                         },
3222                         {
3223                                 /* capture */
3224                                 .ifnum = 1,
3225                                 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
3226                                 .data = &(const struct audioformat) {
3227                                         .formats = SNDRV_PCM_FMTBIT_S16_LE,
3228                                         .channels = 1,
3229                                         .iface = 1,
3230                                         .altsetting = 0,
3231                                         .altset_idx = 0,
3232                                         .attributes = 0,
3233                                         .endpoint = 0x85,
3234                                         .ep_attr = 0x05,
3235                                         .rates = SNDRV_PCM_RATE_CONTINUOUS,
3236                                         .rate_min = 16000,
3237                                         .rate_max = 16000
3238                                 }
3239                         },
3240                         {
3241                                 .ifnum = -1
3242                         }
3243                 }
3244         }
3245 },
3246
3247 /* Reloop Play */
3248 {
3249         USB_DEVICE(0x200c, 0x100b),
3250         .bInterfaceClass = USB_CLASS_PER_INTERFACE,
3251         .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
3252                 .ifnum = QUIRK_ANY_INTERFACE,
3253                 .type = QUIRK_COMPOSITE,
3254                 .data = &(const struct snd_usb_audio_quirk[]) {
3255                         {
3256                                 .ifnum = 0,
3257                                 .type = QUIRK_AUDIO_STANDARD_MIXER,
3258                         },
3259                         {
3260                                 .ifnum = 1,
3261                                 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
3262                                 .data = &(const struct audioformat) {
3263                                         .formats = SNDRV_PCM_FMTBIT_S24_3LE,
3264                                         .channels = 4,
3265                                         .iface = 1,
3266                                         .altsetting = 1,
3267                                         .altset_idx = 1,
3268                                         .attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
3269                                         .endpoint = 0x01,
3270                                         .ep_attr = USB_ENDPOINT_SYNC_ADAPTIVE,
3271                                         .rates = SNDRV_PCM_RATE_44100 |
3272                                                  SNDRV_PCM_RATE_48000,
3273                                         .rate_min = 44100,
3274                                         .rate_max = 48000,
3275                                         .nr_rates = 2,
3276                                         .rate_table = (unsigned int[]) {
3277                                                 44100, 48000
3278                                         }
3279                                 }
3280                         },
3281                         {
3282                                 .ifnum = -1
3283                         }
3284                 }
3285         }
3286 },
3287
3288 {
3289         /*
3290          * ZOOM R16/24 in audio interface mode.
3291          * Playback requires an extra four byte LE length indicator
3292          * at the start of each isochronous packet. This quirk is
3293          * enabled in create_standard_audio_quirk().
3294          */
3295         USB_DEVICE(0x1686, 0x00dd),
3296         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
3297                 .ifnum = QUIRK_ANY_INTERFACE,
3298                 .type = QUIRK_COMPOSITE,
3299                 .data = (const struct snd_usb_audio_quirk[]) {
3300                         {
3301                                 /* Playback  */
3302                                 .ifnum = 1,
3303                                 .type = QUIRK_AUDIO_STANDARD_INTERFACE,
3304                         },
3305                         {
3306                                 /* Capture */
3307                                 .ifnum = 2,
3308                                 .type = QUIRK_AUDIO_STANDARD_INTERFACE,
3309                         },
3310                         {
3311                                 /* Midi */
3312                                 .ifnum = 3,
3313                                 .type = QUIRK_MIDI_STANDARD_INTERFACE
3314                         },
3315                         {
3316                                 .ifnum = -1
3317                         },
3318                 }
3319         }
3320 },
3321
3322 {
3323         /*
3324          * Some USB MIDI devices don't have an audio control interface,
3325          * so we have to grab MIDI streaming interfaces here.
3326          */
3327         .match_flags = USB_DEVICE_ID_MATCH_INT_CLASS |
3328                        USB_DEVICE_ID_MATCH_INT_SUBCLASS,
3329         .bInterfaceClass = USB_CLASS_AUDIO,
3330         .bInterfaceSubClass = USB_SUBCLASS_MIDISTREAMING,
3331         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
3332                 .ifnum = QUIRK_ANY_INTERFACE,
3333                 .type = QUIRK_MIDI_STANDARD_INTERFACE
3334         }
3335 },
3336
3337 /* Rane SL-1 */
3338 {
3339         USB_DEVICE(0x13e5, 0x0001),
3340         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
3341                 .ifnum = QUIRK_ANY_INTERFACE,
3342                 .type = QUIRK_AUDIO_STANDARD_INTERFACE
3343         }
3344 },
3345
3346 /* disabled due to regression for other devices;
3347  * see https://bugzilla.kernel.org/show_bug.cgi?id=199905
3348  */
3349 #if 0
3350 {
3351         /*
3352          * Nura's first gen headphones use Cambridge Silicon Radio's vendor
3353          * ID, but it looks like the product ID actually is only for Nura.
3354          * The capture interface does not work at all (even on Windows),
3355          * and only the 48 kHz sample rate works for the playback interface.
3356          */
3357         USB_DEVICE(0x0a12, 0x1243),
3358         .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
3359                 .ifnum = QUIRK_ANY_INTERFACE,
3360                 .type = QUIRK_COMPOSITE,
3361                 .data = (const struct snd_usb_audio_quirk[]) {
3362                         {
3363                                 .ifnum = 0,
3364                                 .type = QUIRK_AUDIO_STANDARD_MIXER,
3365                         },
3366                         /* Capture */
3367                         {
3368                                 .ifnum = 1,
3369                                 .type = QUIRK_IGNORE_INTERFACE,
3370                         },
3371                         /* Playback */
3372                         {
3373                                 .ifnum = 2,
3374                                 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
3375                                 .data = &(const struct audioformat) {
3376                                         .formats = SNDRV_PCM_FMTBIT_S16_LE,
3377                                         .channels = 2,
3378                                         .iface = 2,
3379                                         .altsetting = 1,
3380                                         .altset_idx = 1,
3381                                         .attributes = UAC_EP_CS_ATTR_FILL_MAX |
3382                                                 UAC_EP_CS_ATTR_SAMPLE_RATE,
3383                                         .endpoint = 0x03,
3384                                         .ep_attr = USB_ENDPOINT_XFER_ISOC,
3385                                         .rates = SNDRV_PCM_RATE_48000,
3386                                         .rate_min = 48000,
3387                                         .rate_max = 48000,
3388                                         .nr_rates = 1,
3389                                         .rate_table = (unsigned int[]) {
3390                                                 48000
3391                                         }
3392                                 }
3393                         },
3394                         {
3395                                 .ifnum = -1
3396                         },
3397                 }
3398         }
3399 },
3400 #endif /* disabled */
3401
3402 {
3403         /*
3404          * Bower's & Wilkins PX headphones only support the 48 kHz sample rate
3405          * even though it advertises more. The capture interface doesn't work
3406          * even on windows.
3407          */
3408         USB_DEVICE(0x19b5, 0x0021),
3409         .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
3410                 .ifnum = QUIRK_ANY_INTERFACE,
3411                 .type = QUIRK_COMPOSITE,
3412                 .data = (const struct snd_usb_audio_quirk[]) {
3413                         {
3414                                 .ifnum = 0,
3415                                 .type = QUIRK_AUDIO_STANDARD_MIXER,
3416                         },
3417                         /* Playback */
3418                         {
3419                                 .ifnum = 1,
3420                                 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
3421                                 .data = &(const struct audioformat) {
3422                                         .formats = SNDRV_PCM_FMTBIT_S16_LE,
3423                                         .channels = 2,
3424                                         .iface = 1,
3425                                         .altsetting = 1,
3426                                         .altset_idx = 1,
3427                                         .attributes = UAC_EP_CS_ATTR_FILL_MAX |
3428                                                 UAC_EP_CS_ATTR_SAMPLE_RATE,
3429                                         .endpoint = 0x03,
3430                                         .ep_attr = USB_ENDPOINT_XFER_ISOC,
3431                                         .rates = SNDRV_PCM_RATE_48000,
3432                                         .rate_min = 48000,
3433                                         .rate_max = 48000,
3434                                         .nr_rates = 1,
3435                                         .rate_table = (unsigned int[]) {
3436                                                 48000
3437                                         }
3438                                 }
3439                         },
3440                         {
3441                                 .ifnum = -1
3442                         },
3443                 }
3444         }
3445 },
3446 /* MOTU Microbook II */
3447 {
3448         USB_DEVICE_VENDOR_SPEC(0x07fd, 0x0004),
3449         .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
3450                 .vendor_name = "MOTU",
3451                 .product_name = "MicroBookII",
3452                 .ifnum = QUIRK_ANY_INTERFACE,
3453                 .type = QUIRK_COMPOSITE,
3454                 .data = (const struct snd_usb_audio_quirk[]) {
3455                         {
3456                                 .ifnum = 0,
3457                                 .type = QUIRK_AUDIO_STANDARD_MIXER,
3458                         },
3459                         {
3460                                 .ifnum = 0,
3461                                 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
3462                                 .data = &(const struct audioformat) {
3463                                         .formats = SNDRV_PCM_FMTBIT_S24_3BE,
3464                                         .channels = 6,
3465                                         .iface = 0,
3466                                         .altsetting = 1,
3467                                         .altset_idx = 1,
3468                                         .attributes = 0,
3469                                         .endpoint = 0x84,
3470                                         .rates = SNDRV_PCM_RATE_96000,
3471                                         .ep_attr = USB_ENDPOINT_XFER_ISOC |
3472                                                    USB_ENDPOINT_SYNC_ASYNC,
3473                                         .rate_min = 96000,
3474                                         .rate_max = 96000,
3475                                         .nr_rates = 1,
3476                                         .maxpacksize = 0x00d8,
3477                                         .rate_table = (unsigned int[]) {
3478                                                 96000
3479                                         }
3480                                 }
3481                         },
3482                         {
3483                                 .ifnum = 0,
3484                                 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
3485                                 .data = &(const struct audioformat) {
3486                                         .formats = SNDRV_PCM_FMTBIT_S24_3BE,
3487                                         .channels = 8,
3488                                         .iface = 0,
3489                                         .altsetting = 1,
3490                                         .altset_idx = 1,
3491                                         .attributes = 0,
3492                                         .endpoint = 0x03,
3493                                         .ep_idx = 1,
3494                                         .rates = SNDRV_PCM_RATE_96000,
3495                                         .ep_attr = USB_ENDPOINT_XFER_ISOC |
3496                                                    USB_ENDPOINT_SYNC_ASYNC,
3497                                         .rate_min = 96000,
3498                                         .rate_max = 96000,
3499                                         .nr_rates = 1,
3500                                         .maxpacksize = 0x0120,
3501                                         .rate_table = (unsigned int[]) {
3502                                                 96000
3503                                         }
3504                                 }
3505                         },
3506                         {
3507                                 .ifnum = -1
3508                         }
3509                 }
3510         }
3511 },
3512 {
3513         /*
3514          * PIONEER DJ DDJ-SX3
3515          * PCM is 12 channels out, 10 channels in @ 44.1 fixed
3516          * interface 0, vendor class alt setting 1 for endpoints 5 and 0x86
3517          * The feedback for the output is the input.
3518          */
3519         USB_DEVICE_VENDOR_SPEC(0x2b73, 0x0023),
3520         .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
3521                 .ifnum = QUIRK_ANY_INTERFACE,
3522                 .type = QUIRK_COMPOSITE,
3523                 .data = (const struct snd_usb_audio_quirk[]) {
3524                         {
3525                                 .ifnum = 0,
3526                                 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
3527                                 .data = &(const struct audioformat) {
3528                                         .formats = SNDRV_PCM_FMTBIT_S32_LE,
3529                                         .channels = 12,
3530                                         .iface = 0,
3531                                         .altsetting = 1,
3532                                         .altset_idx = 1,
3533                                         .endpoint = 0x05,
3534                                         .ep_attr = USB_ENDPOINT_XFER_ISOC|
3535                                                    USB_ENDPOINT_SYNC_ASYNC,
3536                                         .rates = SNDRV_PCM_RATE_44100,
3537                                         .rate_min = 44100,
3538                                         .rate_max = 44100,
3539                                         .nr_rates = 1,
3540                                         .rate_table = (unsigned int[]) { 44100 }
3541                                 }
3542                         },
3543                         {
3544                                 .ifnum = 0,
3545                                 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
3546                                 .data = &(const struct audioformat) {
3547                                         .formats = SNDRV_PCM_FMTBIT_S32_LE,
3548                                         .channels = 10,
3549                                         .iface = 0,
3550                                         .altsetting = 1,
3551                                         .altset_idx = 1,
3552                                         .endpoint = 0x86,
3553                                         .ep_idx = 1,
3554                                         .ep_attr = USB_ENDPOINT_XFER_ISOC|
3555                                                  USB_ENDPOINT_SYNC_ASYNC|
3556                                                  USB_ENDPOINT_USAGE_IMPLICIT_FB,
3557                                         .rates = SNDRV_PCM_RATE_44100,
3558                                         .rate_min = 44100,
3559                                         .rate_max = 44100,
3560                                         .nr_rates = 1,
3561                                         .rate_table = (unsigned int[]) { 44100 }
3562                                 }
3563                         },
3564                         {
3565                                 .ifnum = -1
3566                         }
3567                 }
3568         }
3569 },
3570 {
3571         /*
3572          * Pioneer DJ DJM-250MK2
3573          * PCM is 8 channels out @ 48 fixed (endpoint 0x01)
3574          * and 8 channels in @ 48 fixed (endpoint 0x82).
3575          *
3576          * Both playback and recording is working, even simultaneously.
3577          *
3578          * Playback channels could be mapped to:
3579          *  - CH1
3580          *  - CH2
3581          *  - AUX
3582          *
3583          * Recording channels could be mapped to:
3584          *  - Post CH1 Fader
3585          *  - Post CH2 Fader
3586          *  - Cross Fader A
3587          *  - Cross Fader B
3588          *  - MIC
3589          *  - AUX
3590          *  - REC OUT
3591          *
3592          * There is remaining problem with recording directly from PHONO/LINE.
3593          * If we map a channel to:
3594          *  - CH1 Control Tone PHONO
3595          *  - CH1 Control Tone LINE
3596          *  - CH2 Control Tone PHONO
3597          *  - CH2 Control Tone LINE
3598          * it is silent.
3599          * There is no signal even on other operating systems with official drivers.
3600          * The signal appears only when a supported application is started.
3601          * This needs to be investigated yet...
3602          * (there is quite a lot communication on the USB in both directions)
3603          *
3604          * In current version this mixer could be used for playback
3605          * and for recording from vinyls (through Post CH* Fader)
3606          * but not for DVS (Digital Vinyl Systems) like in Mixxx.
3607          */
3608         USB_DEVICE_VENDOR_SPEC(0x2b73, 0x0017),
3609         .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
3610                 .ifnum = QUIRK_ANY_INTERFACE,
3611                 .type = QUIRK_COMPOSITE,
3612                 .data = (const struct snd_usb_audio_quirk[]) {
3613                         {
3614                                 .ifnum = 0,
3615                                 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
3616                                 .data = &(const struct audioformat) {
3617                                         .formats = SNDRV_PCM_FMTBIT_S24_3LE,
3618                                         .channels = 8, // outputs
3619                                         .iface = 0,
3620                                         .altsetting = 1,
3621                                         .altset_idx = 1,
3622                                         .endpoint = 0x01,
3623                                         .ep_attr = USB_ENDPOINT_XFER_ISOC|
3624                                                 USB_ENDPOINT_SYNC_ASYNC,
3625                                         .rates = SNDRV_PCM_RATE_48000,
3626                                         .rate_min = 48000,
3627                                         .rate_max = 48000,
3628                                         .nr_rates = 1,
3629                                         .rate_table = (unsigned int[]) { 48000 }
3630                                         }
3631                         },
3632                         {
3633                                 .ifnum = 0,
3634                                 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
3635                                 .data = &(const struct audioformat) {
3636                                         .formats = SNDRV_PCM_FMTBIT_S24_3LE,
3637                                         .channels = 8, // inputs
3638                                         .iface = 0,
3639                                         .altsetting = 1,
3640                                         .altset_idx = 1,
3641                                         .endpoint = 0x82,
3642                                         .ep_idx = 1,
3643                                         .ep_attr = USB_ENDPOINT_XFER_ISOC|
3644                                                 USB_ENDPOINT_SYNC_ASYNC|
3645                                                 USB_ENDPOINT_USAGE_IMPLICIT_FB,
3646                                         .rates = SNDRV_PCM_RATE_48000,
3647                                         .rate_min = 48000,
3648                                         .rate_max = 48000,
3649                                         .nr_rates = 1,
3650                                         .rate_table = (unsigned int[]) { 48000 }
3651                                 }
3652                         },
3653                         {
3654                                 .ifnum = -1
3655                         }
3656                 }
3657         }
3658 },
3659 {
3660         /*
3661          * PIONEER DJ DDJ-RB
3662          * PCM is 4 channels out, 2 dummy channels in @ 44.1 fixed
3663          * The feedback for the output is the dummy input.
3664          */
3665         USB_DEVICE_VENDOR_SPEC(0x2b73, 0x000e),
3666         .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
3667                 .ifnum = QUIRK_ANY_INTERFACE,
3668                 .type = QUIRK_COMPOSITE,
3669                 .data = (const struct snd_usb_audio_quirk[]) {
3670                         {
3671                                 .ifnum = 0,
3672                                 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
3673                                 .data = &(const struct audioformat) {
3674                                         .formats = SNDRV_PCM_FMTBIT_S24_3LE,
3675                                         .channels = 4,
3676                                         .iface = 0,
3677                                         .altsetting = 1,
3678                                         .altset_idx = 1,
3679                                         .endpoint = 0x01,
3680                                         .ep_attr = USB_ENDPOINT_XFER_ISOC|
3681                                                    USB_ENDPOINT_SYNC_ASYNC,
3682                                         .rates = SNDRV_PCM_RATE_44100,
3683                                         .rate_min = 44100,
3684                                         .rate_max = 44100,
3685                                         .nr_rates = 1,
3686                                         .rate_table = (unsigned int[]) { 44100 }
3687                                 }
3688                         },
3689                         {
3690                                 .ifnum = 0,
3691                                 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
3692                                 .data = &(const struct audioformat) {
3693                                         .formats = SNDRV_PCM_FMTBIT_S24_3LE,
3694                                         .channels = 2,
3695                                         .iface = 0,
3696                                         .altsetting = 1,
3697                                         .altset_idx = 1,
3698                                         .endpoint = 0x82,
3699                                         .ep_idx = 1,
3700                                         .ep_attr = USB_ENDPOINT_XFER_ISOC|
3701                                                  USB_ENDPOINT_SYNC_ASYNC|
3702                                                  USB_ENDPOINT_USAGE_IMPLICIT_FB,
3703                                         .rates = SNDRV_PCM_RATE_44100,
3704                                         .rate_min = 44100,
3705                                         .rate_max = 44100,
3706                                         .nr_rates = 1,
3707                                         .rate_table = (unsigned int[]) { 44100 }
3708                                 }
3709                         },
3710                         {
3711                                 .ifnum = -1
3712                         }
3713                 }
3714         }
3715 },
3716
3717 {
3718         /*
3719          * PIONEER DJ DDJ-RR
3720          * PCM is 6 channels out & 4 channels in @ 44.1 fixed
3721          */
3722         USB_DEVICE_VENDOR_SPEC(0x2b73, 0x000d),
3723         .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
3724                 .ifnum = QUIRK_ANY_INTERFACE,
3725                 .type = QUIRK_COMPOSITE,
3726                 .data = (const struct snd_usb_audio_quirk[]) {
3727                         {
3728                                 .ifnum = 0,
3729                                 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
3730                                 .data = &(const struct audioformat) {
3731                                         .formats = SNDRV_PCM_FMTBIT_S24_3LE,
3732                                         .channels = 6, //Master, Headphones & Booth
3733                                         .iface = 0,
3734                                         .altsetting = 1,
3735                                         .altset_idx = 1,
3736                                         .endpoint = 0x01,
3737                                         .ep_attr = USB_ENDPOINT_XFER_ISOC|
3738                                                    USB_ENDPOINT_SYNC_ASYNC,
3739                                         .rates = SNDRV_PCM_RATE_44100,
3740                                         .rate_min = 44100,
3741                                         .rate_max = 44100,
3742                                         .nr_rates = 1,
3743                                         .rate_table = (unsigned int[]) { 44100 }
3744                                 }
3745                         },
3746                         {
3747                                 .ifnum = 0,
3748                                 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
3749                                 .data = &(const struct audioformat) {
3750                                         .formats = SNDRV_PCM_FMTBIT_S24_3LE,
3751                                         .channels = 4, //2x RCA inputs (CH1 & CH2)
3752                                         .iface = 0,
3753                                         .altsetting = 1,
3754                                         .altset_idx = 1,
3755                                         .endpoint = 0x82,
3756                                         .ep_idx = 1,
3757                                         .ep_attr = USB_ENDPOINT_XFER_ISOC|
3758                                                  USB_ENDPOINT_SYNC_ASYNC|
3759                                                  USB_ENDPOINT_USAGE_IMPLICIT_FB,
3760                                         .rates = SNDRV_PCM_RATE_44100,
3761                                         .rate_min = 44100,
3762                                         .rate_max = 44100,
3763                                         .nr_rates = 1,
3764                                         .rate_table = (unsigned int[]) { 44100 }
3765                                 }
3766                         },
3767                         {
3768                                 .ifnum = -1
3769                         }
3770                 }
3771         }
3772 },
3773
3774 {
3775         /*
3776          * PIONEER DJ DDJ-SR2
3777          * PCM is 4 channels out, 6 channels in @ 44.1 fixed
3778          * The Feedback for the output is the input
3779          */
3780         USB_DEVICE_VENDOR_SPEC(0x2b73, 0x001e),
3781                 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
3782                 .ifnum = QUIRK_ANY_INTERFACE,
3783                 .type = QUIRK_COMPOSITE,
3784                 .data = (const struct snd_usb_audio_quirk[]) {
3785                         {
3786                                 .ifnum = 0,
3787                                 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
3788                                 .data = &(const struct audioformat) {
3789                                         .formats = SNDRV_PCM_FMTBIT_S24_3LE,
3790                                         .channels = 4,
3791                                         .iface = 0,
3792                                         .altsetting = 1,
3793                                         .altset_idx = 1,
3794                                         .endpoint = 0x01,
3795                                         .ep_attr = USB_ENDPOINT_XFER_ISOC|
3796                                                 USB_ENDPOINT_SYNC_ASYNC,
3797                                         .rates = SNDRV_PCM_RATE_44100,
3798                                         .rate_min = 44100,
3799                                         .rate_max = 44100,
3800                                         .nr_rates = 1,
3801                                         .rate_table = (unsigned int[]) { 44100 }
3802                                 }
3803                         },
3804                         {
3805                                 .ifnum = 0,
3806                                 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
3807                                 .data = &(const struct audioformat) {
3808                                         .formats = SNDRV_PCM_FMTBIT_S24_3LE,
3809                                         .channels = 6,
3810                                         .iface = 0,
3811                                         .altsetting = 1,
3812                                         .altset_idx = 1,
3813                                         .endpoint = 0x82,
3814                                         .ep_idx = 1,
3815                                         .ep_attr = USB_ENDPOINT_XFER_ISOC|
3816                                                 USB_ENDPOINT_SYNC_ASYNC|
3817                                         USB_ENDPOINT_USAGE_IMPLICIT_FB,
3818                                         .rates = SNDRV_PCM_RATE_44100,
3819                                         .rate_min = 44100,
3820                                         .rate_max = 44100,
3821                                         .nr_rates = 1,
3822                                         .rate_table = (unsigned int[]) { 44100 }
3823                                 }
3824                         },
3825                         {
3826                                 .ifnum = -1
3827                         }
3828                 }
3829         }
3830 },
3831
3832 {
3833         /*
3834          * Pioneer DJ DJM-900NXS2
3835          * 10 channels playback & 12 channels capture @ 44.1/48/96kHz S24LE
3836          */
3837         USB_DEVICE_VENDOR_SPEC(0x2b73, 0x000a),
3838         .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
3839                 .ifnum = QUIRK_ANY_INTERFACE,
3840                 .type = QUIRK_COMPOSITE,
3841                 .data = (const struct snd_usb_audio_quirk[]) {
3842                         {
3843                                 .ifnum = 0,
3844                                 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
3845                                 .data = &(const struct audioformat) {
3846                                         .formats = SNDRV_PCM_FMTBIT_S24_3LE,
3847                                         .channels = 10,
3848                                         .iface = 0,
3849                                         .altsetting = 1,
3850                                         .altset_idx = 1,
3851                                         .endpoint = 0x01,
3852                                         .ep_attr = USB_ENDPOINT_XFER_ISOC|
3853                                             USB_ENDPOINT_SYNC_ASYNC,
3854                                         .rates = SNDRV_PCM_RATE_44100|
3855                                             SNDRV_PCM_RATE_48000|
3856                                             SNDRV_PCM_RATE_96000,
3857                                         .rate_min = 44100,
3858                                         .rate_max = 96000,
3859                                         .nr_rates = 3,
3860                                         .rate_table = (unsigned int[]) {
3861                                                 44100, 48000, 96000
3862                                         }
3863                                 }
3864                         },
3865                         {
3866                                 .ifnum = 0,
3867                                 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
3868                                 .data = &(const struct audioformat) {
3869                                         .formats = SNDRV_PCM_FMTBIT_S24_3LE,
3870                                         .channels = 12,
3871                                         .iface = 0,
3872                                         .altsetting = 1,
3873                                         .altset_idx = 1,
3874                                         .endpoint = 0x82,
3875                                         .ep_idx = 1,
3876                                         .ep_attr = USB_ENDPOINT_XFER_ISOC|
3877                                             USB_ENDPOINT_SYNC_ASYNC|
3878                                             USB_ENDPOINT_USAGE_IMPLICIT_FB,
3879                                         .rates = SNDRV_PCM_RATE_44100|
3880                                             SNDRV_PCM_RATE_48000|
3881                                             SNDRV_PCM_RATE_96000,
3882                                         .rate_min = 44100,
3883                                         .rate_max = 96000,
3884                                         .nr_rates = 3,
3885                                         .rate_table = (unsigned int[]) {
3886                                                 44100, 48000, 96000
3887                                         }
3888                                 }
3889                         },
3890                         {
3891                                 .ifnum = -1
3892                         }
3893                 }
3894         }
3895 },
3896
3897 {
3898         /*
3899          * PIONEER DJ DDJ-800
3900          * PCM is 6 channels out, 6 channels in @ 44.1 fixed
3901          * The Feedback for the output is the input
3902          */
3903         USB_DEVICE_VENDOR_SPEC(0x2b73, 0x0029),
3904                 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
3905                 .ifnum = QUIRK_ANY_INTERFACE,
3906                 .type = QUIRK_COMPOSITE,
3907                 .data = (const struct snd_usb_audio_quirk[]) {
3908                         {
3909                                 .ifnum = 0,
3910                                 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
3911                                 .data = &(const struct audioformat) {
3912                                         .formats = SNDRV_PCM_FMTBIT_S24_3LE,
3913                                         .channels = 6,
3914                                         .iface = 0,
3915                                         .altsetting = 1,
3916                                         .altset_idx = 1,
3917                                         .endpoint = 0x01,
3918                                         .ep_attr = USB_ENDPOINT_XFER_ISOC|
3919                                                 USB_ENDPOINT_SYNC_ASYNC,
3920                                         .rates = SNDRV_PCM_RATE_44100,
3921                                         .rate_min = 44100,
3922                                         .rate_max = 44100,
3923                                         .nr_rates = 1,
3924                                         .rate_table = (unsigned int[]) { 44100 }
3925                                 }
3926                         },
3927                         {
3928                                 .ifnum = 0,
3929                                 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
3930                                 .data = &(const struct audioformat) {
3931                                         .formats = SNDRV_PCM_FMTBIT_S24_3LE,
3932                                         .channels = 6,
3933                                         .iface = 0,
3934                                         .altsetting = 1,
3935                                         .altset_idx = 1,
3936                                         .endpoint = 0x82,
3937                                         .ep_idx = 1,
3938                                         .ep_attr = USB_ENDPOINT_XFER_ISOC|
3939                                                 USB_ENDPOINT_SYNC_ASYNC|
3940                                         USB_ENDPOINT_USAGE_IMPLICIT_FB,
3941                                         .rates = SNDRV_PCM_RATE_44100,
3942                                         .rate_min = 44100,
3943                                         .rate_max = 44100,
3944                                         .nr_rates = 1,
3945                                         .rate_table = (unsigned int[]) { 44100 }
3946                                 }
3947                         },
3948                         {
3949                                 .ifnum = -1
3950                         }
3951                 }
3952         }
3953 },
3954
3955 /*
3956  * MacroSilicon MS2100/MS2106 based AV capture cards
3957  *
3958  * These claim 96kHz 1ch in the descriptors, but are actually 48kHz 2ch.
3959  * They also need QUIRK_FLAG_ALIGN_TRANSFER, which makes one wonder if
3960  * they pretend to be 96kHz mono as a workaround for stereo being broken
3961  * by that...
3962  *
3963  * They also have an issue with initial stream alignment that causes the
3964  * channels to be swapped and out of phase, which is dealt with in quirks.c.
3965  */
3966 {
3967         USB_AUDIO_DEVICE(0x534d, 0x0021),
3968         .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
3969                 .vendor_name = "MacroSilicon",
3970                 .product_name = "MS210x",
3971                 .ifnum = QUIRK_ANY_INTERFACE,
3972                 .type = QUIRK_COMPOSITE,
3973                 .data = &(const struct snd_usb_audio_quirk[]) {
3974                         {
3975                                 .ifnum = 2,
3976                                 .type = QUIRK_AUDIO_STANDARD_MIXER,
3977                         },
3978                         {
3979                                 .ifnum = 3,
3980                                 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
3981                                 .data = &(const struct audioformat) {
3982                                         .formats = SNDRV_PCM_FMTBIT_S16_LE,
3983                                         .channels = 2,
3984                                         .iface = 3,
3985                                         .altsetting = 1,
3986                                         .altset_idx = 1,
3987                                         .attributes = 0,
3988                                         .endpoint = 0x82,
3989                                         .ep_attr = USB_ENDPOINT_XFER_ISOC |
3990                                                 USB_ENDPOINT_SYNC_ASYNC,
3991                                         .rates = SNDRV_PCM_RATE_CONTINUOUS,
3992                                         .rate_min = 48000,
3993                                         .rate_max = 48000,
3994                                 }
3995                         },
3996                         {
3997                                 .ifnum = -1
3998                         }
3999                 }
4000         }
4001 },
4002
4003 /*
4004  * MacroSilicon MS2109 based HDMI capture cards
4005  *
4006  * These claim 96kHz 1ch in the descriptors, but are actually 48kHz 2ch.
4007  * They also need QUIRK_FLAG_ALIGN_TRANSFER, which makes one wonder if
4008  * they pretend to be 96kHz mono as a workaround for stereo being broken
4009  * by that...
4010  *
4011  * They also have an issue with initial stream alignment that causes the
4012  * channels to be swapped and out of phase, which is dealt with in quirks.c.
4013  */
4014 {
4015         USB_AUDIO_DEVICE(0x534d, 0x2109),
4016         .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
4017                 .vendor_name = "MacroSilicon",
4018                 .product_name = "MS2109",
4019                 .ifnum = QUIRK_ANY_INTERFACE,
4020                 .type = QUIRK_COMPOSITE,
4021                 .data = &(const struct snd_usb_audio_quirk[]) {
4022                         {
4023                                 .ifnum = 2,
4024                                 .type = QUIRK_AUDIO_STANDARD_MIXER,
4025                         },
4026                         {
4027                                 .ifnum = 3,
4028                                 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
4029                                 .data = &(const struct audioformat) {
4030                                         .formats = SNDRV_PCM_FMTBIT_S16_LE,
4031                                         .channels = 2,
4032                                         .iface = 3,
4033                                         .altsetting = 1,
4034                                         .altset_idx = 1,
4035                                         .attributes = 0,
4036                                         .endpoint = 0x82,
4037                                         .ep_attr = USB_ENDPOINT_XFER_ISOC |
4038                                                 USB_ENDPOINT_SYNC_ASYNC,
4039                                         .rates = SNDRV_PCM_RATE_CONTINUOUS,
4040                                         .rate_min = 48000,
4041                                         .rate_max = 48000,
4042                                 }
4043                         },
4044                         {
4045                                 .ifnum = -1
4046                         }
4047                 }
4048         }
4049 },
4050 {
4051         /*
4052          * Pioneer DJ DJM-750
4053          * 8 channels playback & 8 channels capture @ 44.1/48/96kHz S24LE
4054          */
4055         USB_DEVICE_VENDOR_SPEC(0x08e4, 0x017f),
4056         .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
4057                 .ifnum = QUIRK_ANY_INTERFACE,
4058                 .type = QUIRK_COMPOSITE,
4059                 .data = (const struct snd_usb_audio_quirk[]) {
4060                         {
4061                                 .ifnum = 0,
4062                                 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
4063                                 .data = &(const struct audioformat) {
4064                                         .formats = SNDRV_PCM_FMTBIT_S24_3LE,
4065                                         .channels = 8,
4066                                         .iface = 0,
4067                                         .altsetting = 1,
4068                                         .altset_idx = 1,
4069                                         .endpoint = 0x05,
4070                                         .ep_attr = USB_ENDPOINT_XFER_ISOC|
4071                                             USB_ENDPOINT_SYNC_ASYNC,
4072                                         .rates = SNDRV_PCM_RATE_44100|
4073                                                 SNDRV_PCM_RATE_48000|
4074                                                 SNDRV_PCM_RATE_96000,
4075                                         .rate_min = 44100,
4076                                         .rate_max = 96000,
4077                                         .nr_rates = 3,
4078                                         .rate_table = (unsigned int[]) { 44100, 48000, 96000 }
4079                                 }
4080                         },
4081                         {
4082                                 .ifnum = 0,
4083                                 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
4084                                 .data = &(const struct audioformat) {
4085                                         .formats = SNDRV_PCM_FMTBIT_S24_3LE,
4086                                         .channels = 8,
4087                                         .iface = 0,
4088                                         .altsetting = 1,
4089                                         .altset_idx = 1,
4090                                         .endpoint = 0x86,
4091                                         .ep_idx = 1,
4092                                         .ep_attr = USB_ENDPOINT_XFER_ISOC|
4093                                                 USB_ENDPOINT_SYNC_ASYNC|
4094                                                 USB_ENDPOINT_USAGE_IMPLICIT_FB,
4095                                         .rates = SNDRV_PCM_RATE_44100|
4096                                                 SNDRV_PCM_RATE_48000|
4097                                                 SNDRV_PCM_RATE_96000,
4098                                         .rate_min = 44100,
4099                                         .rate_max = 96000,
4100                                         .nr_rates = 3,
4101                                         .rate_table = (unsigned int[]) { 44100, 48000, 96000 }
4102                                 }
4103                         },
4104                         {
4105                                 .ifnum = -1
4106                         }
4107                 }
4108         }
4109 },
4110 {
4111         /*
4112          * Pioneer DJ DJM-750MK2
4113          * 10 channels playback & 12 channels capture @ 48kHz S24LE
4114          */
4115         USB_DEVICE_VENDOR_SPEC(0x2b73, 0x001b),
4116         .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
4117                 .ifnum = QUIRK_ANY_INTERFACE,
4118                 .type = QUIRK_COMPOSITE,
4119                 .data = (const struct snd_usb_audio_quirk[]) {
4120                         {
4121                                 .ifnum = 0,
4122                                 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
4123                                 .data = &(const struct audioformat) {
4124                                         .formats = SNDRV_PCM_FMTBIT_S24_3LE,
4125                                         .channels = 10,
4126                                         .iface = 0,
4127                                         .altsetting = 1,
4128                                         .altset_idx = 1,
4129                                         .endpoint = 0x01,
4130                                         .ep_attr = USB_ENDPOINT_XFER_ISOC|
4131                                             USB_ENDPOINT_SYNC_ASYNC,
4132                                         .rates = SNDRV_PCM_RATE_48000,
4133                                         .rate_min = 48000,
4134                                         .rate_max = 48000,
4135                                         .nr_rates = 1,
4136                                         .rate_table = (unsigned int[]) {
4137                                                 48000
4138                                         }
4139                                 }
4140                         },
4141                         {
4142                                 .ifnum = 0,
4143                                 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
4144                                 .data = &(const struct audioformat) {
4145                                         .formats = SNDRV_PCM_FMTBIT_S24_3LE,
4146                                         .channels = 12,
4147                                         .iface = 0,
4148                                         .altsetting = 1,
4149                                         .altset_idx = 1,
4150                                         .endpoint = 0x82,
4151                                         .ep_idx = 1,
4152                                         .ep_attr = USB_ENDPOINT_XFER_ISOC|
4153                                                 USB_ENDPOINT_SYNC_ASYNC|
4154                                                 USB_ENDPOINT_USAGE_IMPLICIT_FB,
4155                                         .rates = SNDRV_PCM_RATE_48000,
4156                                         .rate_min = 48000,
4157                                         .rate_max = 48000,
4158                                         .nr_rates = 1,
4159                                         .rate_table = (unsigned int[]) { 48000 }
4160                                 }
4161                         },
4162                         {
4163                                 .ifnum = -1
4164                         }
4165                 }
4166         }
4167 },
4168 {
4169         /*
4170          * Pioneer DJ DJM-850
4171          * 8 channels playback and 8 channels capture @ 44.1/48/96kHz S24LE
4172          * Playback on EP 0x05
4173          * Capture on EP 0x86
4174          */
4175         USB_DEVICE_VENDOR_SPEC(0x08e4, 0x0163),
4176         .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
4177                 .ifnum = QUIRK_ANY_INTERFACE,
4178                 .type = QUIRK_COMPOSITE,
4179                 .data = (const struct snd_usb_audio_quirk[]) {
4180                         {
4181                                 .ifnum = 0,
4182                                 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
4183                                 .data = &(const struct audioformat) {
4184                                         .formats = SNDRV_PCM_FMTBIT_S24_3LE,
4185                                         .channels = 8,
4186                                         .iface = 0,
4187                                         .altsetting = 1,
4188                                         .altset_idx = 1,
4189                                         .endpoint = 0x05,
4190                                         .ep_attr = USB_ENDPOINT_XFER_ISOC|
4191                                             USB_ENDPOINT_SYNC_ASYNC|
4192                                                 USB_ENDPOINT_USAGE_DATA,
4193                                         .rates = SNDRV_PCM_RATE_44100|
4194                                                 SNDRV_PCM_RATE_48000|
4195                                                 SNDRV_PCM_RATE_96000,
4196                                         .rate_min = 44100,
4197                                         .rate_max = 96000,
4198                                         .nr_rates = 3,
4199                                         .rate_table = (unsigned int[]) { 44100, 48000, 96000 }
4200                                 }
4201                         },
4202                         {
4203                                 .ifnum = 0,
4204                                 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
4205                                 .data = &(const struct audioformat) {
4206                                         .formats = SNDRV_PCM_FMTBIT_S24_3LE,
4207                                         .channels = 8,
4208                                         .iface = 0,
4209                                         .altsetting = 1,
4210                                         .altset_idx = 1,
4211                                         .endpoint = 0x86,
4212                                         .ep_idx = 1,
4213                                         .ep_attr = USB_ENDPOINT_XFER_ISOC|
4214                                                 USB_ENDPOINT_SYNC_ASYNC|
4215                                                 USB_ENDPOINT_USAGE_DATA,
4216                                         .rates = SNDRV_PCM_RATE_44100|
4217                                                 SNDRV_PCM_RATE_48000|
4218                                                 SNDRV_PCM_RATE_96000,
4219                                         .rate_min = 44100,
4220                                         .rate_max = 96000,
4221                                         .nr_rates = 3,
4222                                         .rate_table = (unsigned int[]) { 44100, 48000, 96000 }
4223                                 }
4224                         },
4225                         {
4226                                 .ifnum = -1
4227                         }
4228                 }
4229         }
4230 },
4231 {
4232         /*
4233          * Pioneer DJ DJM-450
4234          * PCM is 8 channels out @ 48 fixed (endpoint 0x01)
4235          * and 8 channels in @ 48 fixed (endpoint 0x82).
4236          */
4237         USB_DEVICE_VENDOR_SPEC(0x2b73, 0x0013),
4238         .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
4239                 .ifnum = QUIRK_ANY_INTERFACE,
4240                 .type = QUIRK_COMPOSITE,
4241                 .data = (const struct snd_usb_audio_quirk[]) {
4242                         {
4243                                 .ifnum = 0,
4244                                 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
4245                                 .data = &(const struct audioformat) {
4246                                         .formats = SNDRV_PCM_FMTBIT_S24_3LE,
4247                                         .channels = 8, // outputs
4248                                         .iface = 0,
4249                                         .altsetting = 1,
4250                                         .altset_idx = 1,
4251                                         .endpoint = 0x01,
4252                                         .ep_attr = USB_ENDPOINT_XFER_ISOC|
4253                                                 USB_ENDPOINT_SYNC_ASYNC,
4254                                         .rates = SNDRV_PCM_RATE_48000,
4255                                         .rate_min = 48000,
4256                                         .rate_max = 48000,
4257                                         .nr_rates = 1,
4258                                         .rate_table = (unsigned int[]) { 48000 }
4259                                         }
4260                         },
4261                         {
4262                                 .ifnum = 0,
4263                                 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
4264                                 .data = &(const struct audioformat) {
4265                                         .formats = SNDRV_PCM_FMTBIT_S24_3LE,
4266                                         .channels = 8, // inputs
4267                                         .iface = 0,
4268                                         .altsetting = 1,
4269                                         .altset_idx = 1,
4270                                         .endpoint = 0x82,
4271                                         .ep_idx = 1,
4272                                         .ep_attr = USB_ENDPOINT_XFER_ISOC|
4273                                                 USB_ENDPOINT_SYNC_ASYNC|
4274                                                 USB_ENDPOINT_USAGE_IMPLICIT_FB,
4275                                         .rates = SNDRV_PCM_RATE_48000,
4276                                         .rate_min = 48000,
4277                                         .rate_max = 48000,
4278                                         .nr_rates = 1,
4279                                         .rate_table = (unsigned int[]) { 48000 }
4280                                 }
4281                         },
4282                         {
4283                                 .ifnum = -1
4284                         }
4285                 }
4286         }
4287 },
4288 {
4289         /*
4290          * Sennheiser GSP670
4291          * Change order of interfaces loaded
4292          */
4293         USB_DEVICE(0x1395, 0x0300),
4294         .bInterfaceClass = USB_CLASS_PER_INTERFACE,
4295         .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
4296                 .ifnum = QUIRK_ANY_INTERFACE,
4297                 .type = QUIRK_COMPOSITE,
4298                 .data = &(const struct snd_usb_audio_quirk[]) {
4299                         // Communication
4300                         {
4301                                 .ifnum = 3,
4302                                 .type = QUIRK_AUDIO_STANDARD_INTERFACE
4303                         },
4304                         // Recording
4305                         {
4306                                 .ifnum = 4,
4307                                 .type = QUIRK_AUDIO_STANDARD_INTERFACE
4308                         },
4309                         // Main
4310                         {
4311                                 .ifnum = 1,
4312                                 .type = QUIRK_AUDIO_STANDARD_INTERFACE
4313                         },
4314                         {
4315                                 .ifnum = -1
4316                         }
4317                 }
4318         }
4319 },
4320 {
4321         /*
4322          * Fiero SC-01 (firmware v1.0.0 @ 48 kHz)
4323          */
4324         USB_DEVICE(0x2b53, 0x0023),
4325         .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
4326                 .vendor_name = "Fiero",
4327                 .product_name = "SC-01",
4328                 .ifnum = QUIRK_ANY_INTERFACE,
4329                 .type = QUIRK_COMPOSITE,
4330                 .data = &(const struct snd_usb_audio_quirk[]) {
4331                         {
4332                                 .ifnum = 0,
4333                                 .type = QUIRK_AUDIO_STANDARD_INTERFACE
4334                         },
4335                         /* Playback */
4336                         {
4337                                 .ifnum = 1,
4338                                 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
4339                                 .data = &(const struct audioformat) {
4340                                         .formats = SNDRV_PCM_FMTBIT_S32_LE,
4341                                         .channels = 2,
4342                                         .fmt_bits = 24,
4343                                         .iface = 1,
4344                                         .altsetting = 1,
4345                                         .altset_idx = 1,
4346                                         .endpoint = 0x01,
4347                                         .ep_attr = USB_ENDPOINT_XFER_ISOC |
4348                                                    USB_ENDPOINT_SYNC_ASYNC,
4349                                         .rates = SNDRV_PCM_RATE_48000,
4350                                         .rate_min = 48000,
4351                                         .rate_max = 48000,
4352                                         .nr_rates = 1,
4353                                         .rate_table = (unsigned int[]) { 48000 },
4354                                         .clock = 0x29
4355                                 }
4356                         },
4357                         /* Capture */
4358                         {
4359                                 .ifnum = 2,
4360                                 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
4361                                 .data = &(const struct audioformat) {
4362                                         .formats = SNDRV_PCM_FMTBIT_S32_LE,
4363                                         .channels = 2,
4364                                         .fmt_bits = 24,
4365                                         .iface = 2,
4366                                         .altsetting = 1,
4367                                         .altset_idx = 1,
4368                                         .endpoint = 0x82,
4369                                         .ep_attr = USB_ENDPOINT_XFER_ISOC |
4370                                                    USB_ENDPOINT_SYNC_ASYNC |
4371                                                    USB_ENDPOINT_USAGE_IMPLICIT_FB,
4372                                         .rates = SNDRV_PCM_RATE_48000,
4373                                         .rate_min = 48000,
4374                                         .rate_max = 48000,
4375                                         .nr_rates = 1,
4376                                         .rate_table = (unsigned int[]) { 48000 },
4377                                         .clock = 0x29
4378                                 }
4379                         },
4380                         {
4381                                 .ifnum = -1
4382                         }
4383                 }
4384         }
4385 },
4386 {
4387         /*
4388          * Fiero SC-01 (firmware v1.0.0 @ 96 kHz)
4389          */
4390         USB_DEVICE(0x2b53, 0x0024),
4391         .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
4392                 .vendor_name = "Fiero",
4393                 .product_name = "SC-01",
4394                 .ifnum = QUIRK_ANY_INTERFACE,
4395                 .type = QUIRK_COMPOSITE,
4396                 .data = &(const struct snd_usb_audio_quirk[]) {
4397                         {
4398                                 .ifnum = 0,
4399                                 .type = QUIRK_AUDIO_STANDARD_INTERFACE
4400                         },
4401                         /* Playback */
4402                         {
4403                                 .ifnum = 1,
4404                                 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
4405                                 .data = &(const struct audioformat) {
4406                                         .formats = SNDRV_PCM_FMTBIT_S32_LE,
4407                                         .channels = 2,
4408                                         .fmt_bits = 24,
4409                                         .iface = 1,
4410                                         .altsetting = 1,
4411                                         .altset_idx = 1,
4412                                         .endpoint = 0x01,
4413                                         .ep_attr = USB_ENDPOINT_XFER_ISOC |
4414                                                    USB_ENDPOINT_SYNC_ASYNC,
4415                                         .rates = SNDRV_PCM_RATE_96000,
4416                                         .rate_min = 96000,
4417                                         .rate_max = 96000,
4418                                         .nr_rates = 1,
4419                                         .rate_table = (unsigned int[]) { 96000 },
4420                                         .clock = 0x29
4421                                 }
4422                         },
4423                         /* Capture */
4424                         {
4425                                 .ifnum = 2,
4426                                 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
4427                                 .data = &(const struct audioformat) {
4428                                         .formats = SNDRV_PCM_FMTBIT_S32_LE,
4429                                         .channels = 2,
4430                                         .fmt_bits = 24,
4431                                         .iface = 2,
4432                                         .altsetting = 1,
4433                                         .altset_idx = 1,
4434                                         .endpoint = 0x82,
4435                                         .ep_attr = USB_ENDPOINT_XFER_ISOC |
4436                                                    USB_ENDPOINT_SYNC_ASYNC |
4437                                                    USB_ENDPOINT_USAGE_IMPLICIT_FB,
4438                                         .rates = SNDRV_PCM_RATE_96000,
4439                                         .rate_min = 96000,
4440                                         .rate_max = 96000,
4441                                         .nr_rates = 1,
4442                                         .rate_table = (unsigned int[]) { 96000 },
4443                                         .clock = 0x29
4444                                 }
4445                         },
4446                         {
4447                                 .ifnum = -1
4448                         }
4449                 }
4450         }
4451 },
4452 {
4453         /*
4454          * Fiero SC-01 (firmware v1.1.0)
4455          */
4456         USB_DEVICE(0x2b53, 0x0031),
4457         .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
4458                 .vendor_name = "Fiero",
4459                 .product_name = "SC-01",
4460                 .ifnum = QUIRK_ANY_INTERFACE,
4461                 .type = QUIRK_COMPOSITE,
4462                 .data = &(const struct snd_usb_audio_quirk[]) {
4463                         {
4464                                 .ifnum = 0,
4465                                 .type = QUIRK_AUDIO_STANDARD_INTERFACE
4466                         },
4467                         /* Playback */
4468                         {
4469                                 .ifnum = 1,
4470                                 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
4471                                 .data = &(const struct audioformat) {
4472                                         .formats = SNDRV_PCM_FMTBIT_S32_LE,
4473                                         .channels = 2,
4474                                         .fmt_bits = 24,
4475                                         .iface = 1,
4476                                         .altsetting = 1,
4477                                         .altset_idx = 1,
4478                                         .endpoint = 0x01,
4479                                         .ep_attr = USB_ENDPOINT_XFER_ISOC |
4480                                                    USB_ENDPOINT_SYNC_ASYNC,
4481                                         .rates = SNDRV_PCM_RATE_48000 |
4482                                                  SNDRV_PCM_RATE_96000,
4483                                         .rate_min = 48000,
4484                                         .rate_max = 96000,
4485                                         .nr_rates = 2,
4486                                         .rate_table = (unsigned int[]) { 48000, 96000 },
4487                                         .clock = 0x29
4488                                 }
4489                         },
4490                         /* Capture */
4491                         {
4492                                 .ifnum = 2,
4493                                 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
4494                                 .data = &(const struct audioformat) {
4495                                         .formats = SNDRV_PCM_FMTBIT_S32_LE,
4496                                         .channels = 2,
4497                                         .fmt_bits = 24,
4498                                         .iface = 2,
4499                                         .altsetting = 1,
4500                                         .altset_idx = 1,
4501                                         .endpoint = 0x82,
4502                                         .ep_attr = USB_ENDPOINT_XFER_ISOC |
4503                                                    USB_ENDPOINT_SYNC_ASYNC |
4504                                                    USB_ENDPOINT_USAGE_IMPLICIT_FB,
4505                                         .rates = SNDRV_PCM_RATE_48000 |
4506                                                  SNDRV_PCM_RATE_96000,
4507                                         .rate_min = 48000,
4508                                         .rate_max = 96000,
4509                                         .nr_rates = 2,
4510                                         .rate_table = (unsigned int[]) { 48000, 96000 },
4511                                         .clock = 0x29
4512                                 }
4513                         },
4514                         {
4515                                 .ifnum = -1
4516                         }
4517                 }
4518         }
4519 },
4520 {
4521         /* Advanced modes of the Mythware XA001AU.
4522          * For the standard mode, Mythware XA001AU has ID ffad:a001
4523          */
4524         USB_DEVICE_VENDOR_SPEC(0xffad, 0xa001),
4525         .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
4526                 .vendor_name = "Mythware",
4527                 .product_name = "XA001AU",
4528                 .ifnum = QUIRK_ANY_INTERFACE,
4529                 .type = QUIRK_COMPOSITE,
4530                 .data = (const struct snd_usb_audio_quirk[]) {
4531                         {
4532                                 .ifnum = 0,
4533                                 .type = QUIRK_IGNORE_INTERFACE,
4534                         },
4535                         {
4536                                 .ifnum = 1,
4537                                 .type = QUIRK_AUDIO_STANDARD_INTERFACE,
4538                         },
4539                         {
4540                                 .ifnum = 2,
4541                                 .type = QUIRK_AUDIO_STANDARD_INTERFACE,
4542                         },
4543                         {
4544                                 .ifnum = -1
4545                         }
4546                 }
4547         }
4548 },
4549
4550 #undef USB_DEVICE_VENDOR_SPEC
4551 #undef USB_AUDIO_DEVICE