~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/sound/usb/quirks-table.h

Version: ~ [ linux-6.11.5 ] ~ [ linux-6.10.14 ] ~ [ linux-6.9.12 ] ~ [ linux-6.8.12 ] ~ [ linux-6.7.12 ] ~ [ linux-6.6.58 ] ~ [ linux-6.5.13 ] ~ [ linux-6.4.16 ] ~ [ linux-6.3.13 ] ~ [ linux-6.2.16 ] ~ [ linux-6.1.114 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.169 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.228 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.284 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.322 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.336 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.337 ] ~ [ linux-4.4.302 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.9 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

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

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

sflogo.php