]> git.kernelconcepts.de Git - karo-tx-linux.git/blob - sound/usb/quirks-table.h
Merge 3.1-rc4 into staging-next
[karo-tx-linux.git] / sound / usb / quirks-table.h
1 /*
2  * ALSA USB Audio Driver
3  *
4  * Copyright (c) 2002 by Takashi Iwai <tiwai@suse.de>,
5  *                       Clemens Ladisch <clemens@ladisch.de>
6  *
7  *
8  *  This program is free software; you can redistribute it and/or modify
9  *  it under the terms of the GNU General Public License as published by
10  *  the Free Software Foundation; either version 2 of the License, or
11  *  (at your option) any later version.
12  *
13  *  This program is distributed in the hope that it will be useful,
14  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
15  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16  *  GNU General Public License for more details.
17  *
18  *  You should have received a copy of the GNU General Public License
19  *  along with this program; if not, write to the Free Software
20  *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
21  */
22
23 /*
24  * The contents of this file are part of the driver's id_table.
25  *
26  * In a perfect world, this file would be empty.
27  */
28
29 /*
30  * Use this for devices where other interfaces are standard compliant,
31  * to prevent the quirk being applied to those interfaces. (To work with
32  * hotplugging, bDeviceClass must be set to USB_CLASS_PER_INTERFACE.)
33  */
34 #define USB_DEVICE_VENDOR_SPEC(vend, prod) \
35         .match_flags = USB_DEVICE_ID_MATCH_VENDOR | \
36                        USB_DEVICE_ID_MATCH_PRODUCT | \
37                        USB_DEVICE_ID_MATCH_INT_CLASS, \
38         .idVendor = vend, \
39         .idProduct = prod, \
40         .bInterfaceClass = USB_CLASS_VENDOR_SPEC
41
42 /* Creative/Toshiba Multimedia Center SB-0500 */
43 {
44         USB_DEVICE(0x041e, 0x3048),
45         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
46                 .vendor_name = "Toshiba",
47                 .product_name = "SB-0500",
48                 .ifnum = QUIRK_NO_INTERFACE
49         }
50 },
51
52 /* Creative/E-Mu devices */
53 {
54         USB_DEVICE(0x041e, 0x3010),
55         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
56                 .vendor_name = "Creative Labs",
57                 .product_name = "Sound Blaster MP3+",
58                 .ifnum = QUIRK_NO_INTERFACE
59         }
60 },
61 {
62         /* E-Mu 0202 USB */
63         .match_flags = USB_DEVICE_ID_MATCH_DEVICE,
64         .idVendor = 0x041e,
65         .idProduct = 0x3f02,
66         .bInterfaceClass = USB_CLASS_AUDIO,
67 },
68 {
69         /* E-Mu 0404 USB */
70         .match_flags = USB_DEVICE_ID_MATCH_DEVICE,
71         .idVendor = 0x041e,
72         .idProduct = 0x3f04,
73         .bInterfaceClass = USB_CLASS_AUDIO,
74 },
75 {
76         /* E-Mu Tracker Pre */
77         .match_flags = USB_DEVICE_ID_MATCH_DEVICE,
78         .idVendor = 0x041e,
79         .idProduct = 0x3f0a,
80         .bInterfaceClass = USB_CLASS_AUDIO,
81 },
82 {
83         /* E-Mu 0204 USB */
84         .match_flags = USB_DEVICE_ID_MATCH_DEVICE,
85         .idVendor = 0x041e,
86         .idProduct = 0x3f19,
87         .bInterfaceClass = USB_CLASS_AUDIO,
88 },
89
90 /*
91  * Logitech QuickCam: bDeviceClass is vendor-specific, so generic interface
92  * class matches do not take effect without an explicit ID match.
93  */
94 {
95         .match_flags = USB_DEVICE_ID_MATCH_DEVICE |
96                        USB_DEVICE_ID_MATCH_INT_CLASS |
97                        USB_DEVICE_ID_MATCH_INT_SUBCLASS,
98         .idVendor = 0x046d,
99         .idProduct = 0x0850,
100         .bInterfaceClass = USB_CLASS_AUDIO,
101         .bInterfaceSubClass = USB_SUBCLASS_AUDIOCONTROL
102 },
103 {
104         .match_flags = USB_DEVICE_ID_MATCH_DEVICE |
105                        USB_DEVICE_ID_MATCH_INT_CLASS |
106                        USB_DEVICE_ID_MATCH_INT_SUBCLASS,
107         .idVendor = 0x046d,
108         .idProduct = 0x08ae,
109         .bInterfaceClass = USB_CLASS_AUDIO,
110         .bInterfaceSubClass = USB_SUBCLASS_AUDIOCONTROL
111 },
112 {
113         .match_flags = USB_DEVICE_ID_MATCH_DEVICE |
114                        USB_DEVICE_ID_MATCH_INT_CLASS |
115                        USB_DEVICE_ID_MATCH_INT_SUBCLASS,
116         .idVendor = 0x046d,
117         .idProduct = 0x08c6,
118         .bInterfaceClass = USB_CLASS_AUDIO,
119         .bInterfaceSubClass = USB_SUBCLASS_AUDIOCONTROL
120 },
121 {
122         .match_flags = USB_DEVICE_ID_MATCH_DEVICE |
123                        USB_DEVICE_ID_MATCH_INT_CLASS |
124                        USB_DEVICE_ID_MATCH_INT_SUBCLASS,
125         .idVendor = 0x046d,
126         .idProduct = 0x08f0,
127         .bInterfaceClass = USB_CLASS_AUDIO,
128         .bInterfaceSubClass = USB_SUBCLASS_AUDIOCONTROL
129 },
130 {
131         .match_flags = USB_DEVICE_ID_MATCH_DEVICE |
132                        USB_DEVICE_ID_MATCH_INT_CLASS |
133                        USB_DEVICE_ID_MATCH_INT_SUBCLASS,
134         .idVendor = 0x046d,
135         .idProduct = 0x08f5,
136         .bInterfaceClass = USB_CLASS_AUDIO,
137         .bInterfaceSubClass = USB_SUBCLASS_AUDIOCONTROL
138 },
139 {
140         .match_flags = USB_DEVICE_ID_MATCH_DEVICE |
141                        USB_DEVICE_ID_MATCH_INT_CLASS |
142                        USB_DEVICE_ID_MATCH_INT_SUBCLASS,
143         .idVendor = 0x046d,
144         .idProduct = 0x08f6,
145         .bInterfaceClass = USB_CLASS_AUDIO,
146         .bInterfaceSubClass = USB_SUBCLASS_AUDIOCONTROL
147 },
148 {
149         USB_DEVICE(0x046d, 0x0990),
150         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
151                 .vendor_name = "Logitech, Inc.",
152                 .product_name = "QuickCam Pro 9000",
153                 .ifnum = QUIRK_NO_INTERFACE
154         }
155 },
156
157 /*
158  * Yamaha devices
159  */
160
161 #define YAMAHA_DEVICE(id, name) { \
162         USB_DEVICE(0x0499, id), \
163         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { \
164                 .vendor_name = "Yamaha", \
165                 .product_name = name, \
166                 .ifnum = QUIRK_ANY_INTERFACE, \
167                 .type = QUIRK_MIDI_YAMAHA \
168         } \
169 }
170 #define YAMAHA_INTERFACE(id, intf, name) { \
171         USB_DEVICE_VENDOR_SPEC(0x0499, id), \
172         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { \
173                 .vendor_name = "Yamaha", \
174                 .product_name = name, \
175                 .ifnum = intf, \
176                 .type = QUIRK_MIDI_YAMAHA \
177         } \
178 }
179 YAMAHA_DEVICE(0x1000, "UX256"),
180 YAMAHA_DEVICE(0x1001, "MU1000"),
181 YAMAHA_DEVICE(0x1002, "MU2000"),
182 YAMAHA_DEVICE(0x1003, "MU500"),
183 YAMAHA_INTERFACE(0x1004, 3, "UW500"),
184 YAMAHA_DEVICE(0x1005, "MOTIF6"),
185 YAMAHA_DEVICE(0x1006, "MOTIF7"),
186 YAMAHA_DEVICE(0x1007, "MOTIF8"),
187 YAMAHA_DEVICE(0x1008, "UX96"),
188 YAMAHA_DEVICE(0x1009, "UX16"),
189 YAMAHA_INTERFACE(0x100a, 3, "EOS BX"),
190 YAMAHA_DEVICE(0x100c, "UC-MX"),
191 YAMAHA_DEVICE(0x100d, "UC-KX"),
192 YAMAHA_DEVICE(0x100e, "S08"),
193 YAMAHA_DEVICE(0x100f, "CLP-150"),
194 YAMAHA_DEVICE(0x1010, "CLP-170"),
195 YAMAHA_DEVICE(0x1011, "P-250"),
196 YAMAHA_DEVICE(0x1012, "TYROS"),
197 YAMAHA_DEVICE(0x1013, "PF-500"),
198 YAMAHA_DEVICE(0x1014, "S90"),
199 YAMAHA_DEVICE(0x1015, "MOTIF-R"),
200 YAMAHA_DEVICE(0x1016, "MDP-5"),
201 YAMAHA_DEVICE(0x1017, "CVP-204"),
202 YAMAHA_DEVICE(0x1018, "CVP-206"),
203 YAMAHA_DEVICE(0x1019, "CVP-208"),
204 YAMAHA_DEVICE(0x101a, "CVP-210"),
205 YAMAHA_DEVICE(0x101b, "PSR-1100"),
206 YAMAHA_DEVICE(0x101c, "PSR-2100"),
207 YAMAHA_DEVICE(0x101d, "CLP-175"),
208 YAMAHA_DEVICE(0x101e, "PSR-K1"),
209 YAMAHA_DEVICE(0x101f, "EZ-J24"),
210 YAMAHA_DEVICE(0x1020, "EZ-250i"),
211 YAMAHA_DEVICE(0x1021, "MOTIF ES 6"),
212 YAMAHA_DEVICE(0x1022, "MOTIF ES 7"),
213 YAMAHA_DEVICE(0x1023, "MOTIF ES 8"),
214 YAMAHA_DEVICE(0x1024, "CVP-301"),
215 YAMAHA_DEVICE(0x1025, "CVP-303"),
216 YAMAHA_DEVICE(0x1026, "CVP-305"),
217 YAMAHA_DEVICE(0x1027, "CVP-307"),
218 YAMAHA_DEVICE(0x1028, "CVP-309"),
219 YAMAHA_DEVICE(0x1029, "CVP-309GP"),
220 YAMAHA_DEVICE(0x102a, "PSR-1500"),
221 YAMAHA_DEVICE(0x102b, "PSR-3000"),
222 YAMAHA_DEVICE(0x102e, "ELS-01/01C"),
223 YAMAHA_DEVICE(0x1030, "PSR-295/293"),
224 YAMAHA_DEVICE(0x1031, "DGX-205/203"),
225 YAMAHA_DEVICE(0x1032, "DGX-305"),
226 YAMAHA_DEVICE(0x1033, "DGX-505"),
227 YAMAHA_DEVICE(0x1034, NULL),
228 YAMAHA_DEVICE(0x1035, NULL),
229 YAMAHA_DEVICE(0x1036, NULL),
230 YAMAHA_DEVICE(0x1037, NULL),
231 YAMAHA_DEVICE(0x1038, NULL),
232 YAMAHA_DEVICE(0x1039, NULL),
233 YAMAHA_DEVICE(0x103a, NULL),
234 YAMAHA_DEVICE(0x103b, NULL),
235 YAMAHA_DEVICE(0x103c, NULL),
236 YAMAHA_DEVICE(0x103d, NULL),
237 YAMAHA_DEVICE(0x103e, NULL),
238 YAMAHA_DEVICE(0x103f, NULL),
239 YAMAHA_DEVICE(0x1040, NULL),
240 YAMAHA_DEVICE(0x1041, NULL),
241 YAMAHA_DEVICE(0x1042, NULL),
242 YAMAHA_DEVICE(0x1043, NULL),
243 YAMAHA_DEVICE(0x1044, NULL),
244 YAMAHA_DEVICE(0x1045, NULL),
245 YAMAHA_INTERFACE(0x104e, 0, NULL),
246 YAMAHA_DEVICE(0x104f, NULL),
247 YAMAHA_DEVICE(0x1050, NULL),
248 YAMAHA_DEVICE(0x1051, NULL),
249 YAMAHA_DEVICE(0x1052, NULL),
250 YAMAHA_INTERFACE(0x1053, 0, NULL),
251 YAMAHA_INTERFACE(0x1054, 0, NULL),
252 YAMAHA_DEVICE(0x1055, NULL),
253 YAMAHA_DEVICE(0x1056, NULL),
254 YAMAHA_DEVICE(0x1057, NULL),
255 YAMAHA_DEVICE(0x1058, NULL),
256 YAMAHA_DEVICE(0x1059, NULL),
257 YAMAHA_DEVICE(0x105a, NULL),
258 YAMAHA_DEVICE(0x105b, NULL),
259 YAMAHA_DEVICE(0x105c, NULL),
260 YAMAHA_DEVICE(0x105d, NULL),
261 YAMAHA_DEVICE(0x2000, "DGP-7"),
262 YAMAHA_DEVICE(0x2001, "DGP-5"),
263 YAMAHA_DEVICE(0x2002, NULL),
264 YAMAHA_DEVICE(0x2003, NULL),
265 YAMAHA_DEVICE(0x5000, "CS1D"),
266 YAMAHA_DEVICE(0x5001, "DSP1D"),
267 YAMAHA_DEVICE(0x5002, "DME32"),
268 YAMAHA_DEVICE(0x5003, "DM2000"),
269 YAMAHA_DEVICE(0x5004, "02R96"),
270 YAMAHA_DEVICE(0x5005, "ACU16-C"),
271 YAMAHA_DEVICE(0x5006, "NHB32-C"),
272 YAMAHA_DEVICE(0x5007, "DM1000"),
273 YAMAHA_DEVICE(0x5008, "01V96"),
274 YAMAHA_DEVICE(0x5009, "SPX2000"),
275 YAMAHA_DEVICE(0x500a, "PM5D"),
276 YAMAHA_DEVICE(0x500b, "DME64N"),
277 YAMAHA_DEVICE(0x500c, "DME24N"),
278 YAMAHA_DEVICE(0x500d, NULL),
279 YAMAHA_DEVICE(0x500e, NULL),
280 YAMAHA_DEVICE(0x500f, NULL),
281 YAMAHA_DEVICE(0x7000, "DTX"),
282 YAMAHA_DEVICE(0x7010, "UB99"),
283 #undef YAMAHA_DEVICE
284 #undef YAMAHA_INTERFACE
285
286 /*
287  * Roland/RolandED/Edirol/BOSS devices
288  */
289 {
290         USB_DEVICE(0x0582, 0x0000),
291         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
292                 .vendor_name = "Roland",
293                 .product_name = "UA-100",
294                 .ifnum = QUIRK_ANY_INTERFACE,
295                 .type = QUIRK_COMPOSITE,
296                 .data = (const struct snd_usb_audio_quirk[]) {
297                         {
298                                 .ifnum = 0,
299                                 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
300                                 .data = & (const struct audioformat) {
301                                         .formats = SNDRV_PCM_FMTBIT_S16_LE,
302                                         .channels = 4,
303                                         .iface = 0,
304                                         .altsetting = 1,
305                                         .altset_idx = 1,
306                                         .attributes = 0,
307                                         .endpoint = 0x01,
308                                         .ep_attr = 0x09,
309                                         .rates = SNDRV_PCM_RATE_CONTINUOUS,
310                                         .rate_min = 44100,
311                                         .rate_max = 44100,
312                                 }
313                         },
314                         {
315                                 .ifnum = 1,
316                                 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
317                                 .data = & (const struct audioformat) {
318                                         .formats = SNDRV_PCM_FMTBIT_S16_LE,
319                                         .channels = 2,
320                                         .iface = 1,
321                                         .altsetting = 1,
322                                         .altset_idx = 1,
323                                         .attributes = UAC_EP_CS_ATTR_FILL_MAX,
324                                         .endpoint = 0x81,
325                                         .ep_attr = 0x05,
326                                         .rates = SNDRV_PCM_RATE_CONTINUOUS,
327                                         .rate_min = 44100,
328                                         .rate_max = 44100,
329                                 }
330                         },
331                         {
332                                 .ifnum = 2,
333                                 .type = QUIRK_MIDI_FIXED_ENDPOINT,
334                                 .data = & (const struct snd_usb_midi_endpoint_info) {
335                                         .out_cables = 0x0007,
336                                         .in_cables  = 0x0007
337                                 }
338                         },
339                         {
340                                 .ifnum = -1
341                         }
342                 }
343         }
344 },
345 {
346         USB_DEVICE(0x0582, 0x0002),
347         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
348                 .vendor_name = "EDIROL",
349                 .product_name = "UM-4",
350                 .ifnum = QUIRK_ANY_INTERFACE,
351                 .type = QUIRK_COMPOSITE,
352                 .data = (const struct snd_usb_audio_quirk[]) {
353                         {
354                                 .ifnum = 0,
355                                 .type = QUIRK_IGNORE_INTERFACE
356                         },
357                         {
358                                 .ifnum = 1,
359                                 .type = QUIRK_IGNORE_INTERFACE
360                         },
361                         {
362                                 .ifnum = 2,
363                                 .type = QUIRK_MIDI_FIXED_ENDPOINT,
364                                 .data = & (const struct snd_usb_midi_endpoint_info) {
365                                         .out_cables = 0x000f,
366                                         .in_cables  = 0x000f
367                                 }
368                         },
369                         {
370                                 .ifnum = -1
371                         }
372                 }
373         }
374 },
375 {
376         USB_DEVICE(0x0582, 0x0003),
377         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
378                 .vendor_name = "Roland",
379                 .product_name = "SC-8850",
380                 .ifnum = QUIRK_ANY_INTERFACE,
381                 .type = QUIRK_COMPOSITE,
382                 .data = (const struct snd_usb_audio_quirk[]) {
383                         {
384                                 .ifnum = 0,
385                                 .type = QUIRK_IGNORE_INTERFACE
386                         },
387                         {
388                                 .ifnum = 1,
389                                 .type = QUIRK_IGNORE_INTERFACE
390                         },
391                         {
392                                 .ifnum = 2,
393                                 .type = QUIRK_MIDI_FIXED_ENDPOINT,
394                                 .data = & (const struct snd_usb_midi_endpoint_info) {
395                                         .out_cables = 0x003f,
396                                         .in_cables  = 0x003f
397                                 }
398                         },
399                         {
400                                 .ifnum = -1
401                         }
402                 }
403         }
404 },
405 {
406         USB_DEVICE(0x0582, 0x0004),
407         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
408                 .vendor_name = "Roland",
409                 .product_name = "U-8",
410                 .ifnum = QUIRK_ANY_INTERFACE,
411                 .type = QUIRK_COMPOSITE,
412                 .data = (const struct snd_usb_audio_quirk[]) {
413                         {
414                                 .ifnum = 0,
415                                 .type = QUIRK_IGNORE_INTERFACE
416                         },
417                         {
418                                 .ifnum = 1,
419                                 .type = QUIRK_IGNORE_INTERFACE
420                         },
421                         {
422                                 .ifnum = 2,
423                                 .type = QUIRK_MIDI_FIXED_ENDPOINT,
424                                 .data = & (const struct snd_usb_midi_endpoint_info) {
425                                         .out_cables = 0x0005,
426                                         .in_cables  = 0x0005
427                                 }
428                         },
429                         {
430                                 .ifnum = -1
431                         }
432                 }
433         }
434 },
435 {
436         /* Has ID 0x0099 when not in "Advanced Driver" mode.
437          * The UM-2EX has only one input, but we cannot detect this. */
438         USB_DEVICE(0x0582, 0x0005),
439         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
440                 .vendor_name = "EDIROL",
441                 .product_name = "UM-2",
442                 .ifnum = QUIRK_ANY_INTERFACE,
443                 .type = QUIRK_COMPOSITE,
444                 .data = (const struct snd_usb_audio_quirk[]) {
445                         {
446                                 .ifnum = 0,
447                                 .type = QUIRK_IGNORE_INTERFACE
448                         },
449                         {
450                                 .ifnum = 1,
451                                 .type = QUIRK_IGNORE_INTERFACE
452                         },
453                         {
454                                 .ifnum = 2,
455                                 .type = QUIRK_MIDI_FIXED_ENDPOINT,
456                                 .data = & (const struct snd_usb_midi_endpoint_info) {
457                                         .out_cables = 0x0003,
458                                         .in_cables  = 0x0003
459                                 }
460                         },
461                         {
462                                 .ifnum = -1
463                         }
464                 }
465         }
466 },
467 {
468         USB_DEVICE(0x0582, 0x0007),
469         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
470                 .vendor_name = "Roland",
471                 .product_name = "SC-8820",
472                 .ifnum = QUIRK_ANY_INTERFACE,
473                 .type = QUIRK_COMPOSITE,
474                 .data = (const struct snd_usb_audio_quirk[]) {
475                         {
476                                 .ifnum = 0,
477                                 .type = QUIRK_IGNORE_INTERFACE
478                         },
479                         {
480                                 .ifnum = 1,
481                                 .type = QUIRK_IGNORE_INTERFACE
482                         },
483                         {
484                                 .ifnum = 2,
485                                 .type = QUIRK_MIDI_FIXED_ENDPOINT,
486                                 .data = & (const struct snd_usb_midi_endpoint_info) {
487                                         .out_cables = 0x0013,
488                                         .in_cables  = 0x0013
489                                 }
490                         },
491                         {
492                                 .ifnum = -1
493                         }
494                 }
495         }
496 },
497 {
498         USB_DEVICE(0x0582, 0x0008),
499         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
500                 .vendor_name = "Roland",
501                 .product_name = "PC-300",
502                 .ifnum = QUIRK_ANY_INTERFACE,
503                 .type = QUIRK_COMPOSITE,
504                 .data = (const struct snd_usb_audio_quirk[]) {
505                         {
506                                 .ifnum = 0,
507                                 .type = QUIRK_IGNORE_INTERFACE
508                         },
509                         {
510                                 .ifnum = 1,
511                                 .type = QUIRK_IGNORE_INTERFACE
512                         },
513                         {
514                                 .ifnum = 2,
515                                 .type = QUIRK_MIDI_FIXED_ENDPOINT,
516                                 .data = & (const struct snd_usb_midi_endpoint_info) {
517                                         .out_cables = 0x0001,
518                                         .in_cables  = 0x0001
519                                 }
520                         },
521                         {
522                                 .ifnum = -1
523                         }
524                 }
525         }
526 },
527 {
528         /* has ID 0x009d when not in "Advanced Driver" mode */
529         USB_DEVICE(0x0582, 0x0009),
530         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
531                 .vendor_name = "EDIROL",
532                 .product_name = "UM-1",
533                 .ifnum = QUIRK_ANY_INTERFACE,
534                 .type = QUIRK_COMPOSITE,
535                 .data = (const struct snd_usb_audio_quirk[]) {
536                         {
537                                 .ifnum = 0,
538                                 .type = QUIRK_IGNORE_INTERFACE
539                         },
540                         {
541                                 .ifnum = 1,
542                                 .type = QUIRK_IGNORE_INTERFACE
543                         },
544                         {
545                                 .ifnum = 2,
546                                 .type = QUIRK_MIDI_FIXED_ENDPOINT,
547                                 .data = & (const struct snd_usb_midi_endpoint_info) {
548                                         .out_cables = 0x0001,
549                                         .in_cables  = 0x0001
550                                 }
551                         },
552                         {
553                                 .ifnum = -1
554                         }
555                 }
556         }
557 },
558 {
559         USB_DEVICE(0x0582, 0x000b),
560         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
561                 .vendor_name = "Roland",
562                 .product_name = "SK-500",
563                 .ifnum = QUIRK_ANY_INTERFACE,
564                 .type = QUIRK_COMPOSITE,
565                 .data = (const struct snd_usb_audio_quirk[]) {
566                         {
567                                 .ifnum = 0,
568                                 .type = QUIRK_IGNORE_INTERFACE
569                         },
570                         {
571                                 .ifnum = 1,
572                                 .type = QUIRK_IGNORE_INTERFACE
573                         },
574                         {
575                                 .ifnum = 2,
576                                 .type = QUIRK_MIDI_FIXED_ENDPOINT,
577                                 .data = & (const struct snd_usb_midi_endpoint_info) {
578                                         .out_cables = 0x0013,
579                                         .in_cables  = 0x0013
580                                 }
581                         },
582                         {
583                                 .ifnum = -1
584                         }
585                 }
586         }
587 },
588 {
589         /* thanks to Emiliano Grilli <emillo@libero.it>
590          * for helping researching this data */
591         USB_DEVICE(0x0582, 0x000c),
592         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
593                 .vendor_name = "Roland",
594                 .product_name = "SC-D70",
595                 .ifnum = QUIRK_ANY_INTERFACE,
596                 .type = QUIRK_COMPOSITE,
597                 .data = (const struct snd_usb_audio_quirk[]) {
598                         {
599                                 .ifnum = 0,
600                                 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
601                                 .data = & (const struct audioformat) {
602                                         .formats = SNDRV_PCM_FMTBIT_S24_3LE,
603                                         .channels = 2,
604                                         .iface = 0,
605                                         .altsetting = 1,
606                                         .altset_idx = 1,
607                                         .attributes = 0,
608                                         .endpoint = 0x01,
609                                         .ep_attr = 0x01,
610                                         .rates = SNDRV_PCM_RATE_CONTINUOUS,
611                                         .rate_min = 44100,
612                                         .rate_max = 44100,
613                                 }
614                         },
615                         {
616                                 .ifnum = 1,
617                                 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
618                                 .data = & (const struct audioformat) {
619                                         .formats = SNDRV_PCM_FMTBIT_S24_3LE,
620                                         .channels = 2,
621                                         .iface = 1,
622                                         .altsetting = 1,
623                                         .altset_idx = 1,
624                                         .attributes = 0,
625                                         .endpoint = 0x81,
626                                         .ep_attr = 0x01,
627                                         .rates = SNDRV_PCM_RATE_CONTINUOUS,
628                                         .rate_min = 44100,
629                                         .rate_max = 44100,
630                                 }
631                         },
632                         {
633                                 .ifnum = 2,
634                                 .type = QUIRK_MIDI_FIXED_ENDPOINT,
635                                 .data = & (const struct snd_usb_midi_endpoint_info) {
636                                         .out_cables = 0x0007,
637                                         .in_cables  = 0x0007
638                                 }
639                         },
640                         {
641                                 .ifnum = -1
642                         }
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         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
657                 .vendor_name = "EDIROL",
658                 .product_name = "UA-5",
659                 .ifnum = QUIRK_ANY_INTERFACE,
660                 .type = QUIRK_COMPOSITE,
661                 .data = (const struct snd_usb_audio_quirk[]) {
662                         {
663                                 .ifnum = 1,
664                                 .type = QUIRK_AUDIO_STANDARD_INTERFACE
665                         },
666                         {
667                                 .ifnum = 2,
668                                 .type = QUIRK_AUDIO_STANDARD_INTERFACE
669                         },
670                         {
671                                 .ifnum = -1
672                         }
673                 }
674         }
675 },
676 {
677         /* has ID 0x0013 when not in "Advanced Driver" mode */
678         USB_DEVICE(0x0582, 0x0012),
679         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
680                 .vendor_name = "Roland",
681                 .product_name = "XV-5050",
682                 .ifnum = 0,
683                 .type = QUIRK_MIDI_FIXED_ENDPOINT,
684                 .data = & (const struct snd_usb_midi_endpoint_info) {
685                         .out_cables = 0x0001,
686                         .in_cables  = 0x0001
687                 }
688         }
689 },
690 {
691         /* has ID 0x0015 when not in "Advanced Driver" mode */
692         USB_DEVICE(0x0582, 0x0014),
693         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
694                 .vendor_name = "EDIROL",
695                 .product_name = "UM-880",
696                 .ifnum = 0,
697                 .type = QUIRK_MIDI_FIXED_ENDPOINT,
698                 .data = & (const struct snd_usb_midi_endpoint_info) {
699                         .out_cables = 0x01ff,
700                         .in_cables  = 0x01ff
701                 }
702         }
703 },
704 {
705         /* has ID 0x0017 when not in "Advanced Driver" mode */
706         USB_DEVICE(0x0582, 0x0016),
707         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
708                 .vendor_name = "EDIROL",
709                 .product_name = "SD-90",
710                 .ifnum = QUIRK_ANY_INTERFACE,
711                 .type = QUIRK_COMPOSITE,
712                 .data = (const struct snd_usb_audio_quirk[]) {
713                         {
714                                 .ifnum = 0,
715                                 .type = QUIRK_AUDIO_STANDARD_INTERFACE
716                         },
717                         {
718                                 .ifnum = 1,
719                                 .type = QUIRK_AUDIO_STANDARD_INTERFACE
720                         },
721                         {
722                                 .ifnum = 2,
723                                 .type = QUIRK_MIDI_FIXED_ENDPOINT,
724                                 .data = & (const struct snd_usb_midi_endpoint_info) {
725                                         .out_cables = 0x000f,
726                                         .in_cables  = 0x000f
727                                 }
728                         },
729                         {
730                                 .ifnum = -1
731                         }
732                 }
733         }
734 },
735 {
736         /* has ID 0x001c when not in "Advanced Driver" mode */
737         USB_DEVICE(0x0582, 0x001b),
738         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
739                 .vendor_name = "Roland",
740                 .product_name = "MMP-2",
741                 .ifnum = QUIRK_ANY_INTERFACE,
742                 .type = QUIRK_COMPOSITE,
743                 .data = (const struct snd_usb_audio_quirk[]) {
744                         {
745                                 .ifnum = 0,
746                                 .type = QUIRK_IGNORE_INTERFACE
747                         },
748                         {
749                                 .ifnum = 1,
750                                 .type = QUIRK_IGNORE_INTERFACE
751                         },
752                         {
753                                 .ifnum = 2,
754                                 .type = QUIRK_MIDI_FIXED_ENDPOINT,
755                                 .data = & (const struct snd_usb_midi_endpoint_info) {
756                                         .out_cables = 0x0001,
757                                         .in_cables  = 0x0001
758                                 }
759                         },
760                         {
761                                 .ifnum = -1
762                         }
763                 }
764         }
765 },
766 {
767         /* has ID 0x001e when not in "Advanced Driver" mode */
768         USB_DEVICE(0x0582, 0x001d),
769         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
770                 .vendor_name = "Roland",
771                 .product_name = "V-SYNTH",
772                 .ifnum = 0,
773                 .type = QUIRK_MIDI_FIXED_ENDPOINT,
774                 .data = & (const struct snd_usb_midi_endpoint_info) {
775                         .out_cables = 0x0001,
776                         .in_cables  = 0x0001
777                 }
778         }
779 },
780 {
781         /* has ID 0x0024 when not in "Advanced Driver" mode */
782         USB_DEVICE(0x0582, 0x0023),
783         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
784                 .vendor_name = "EDIROL",
785                 .product_name = "UM-550",
786                 .ifnum = 0,
787                 .type = QUIRK_MIDI_FIXED_ENDPOINT,
788                 .data = & (const struct snd_usb_midi_endpoint_info) {
789                         .out_cables = 0x003f,
790                         .in_cables  = 0x003f
791                 }
792         }
793 },
794 {
795         /*
796          * This quirk is for the "Advanced Driver" mode. If off, the UA-20
797          * has ID 0x0026 and is standard compliant, but has only 16-bit PCM
798          * and no MIDI.
799          */
800         USB_DEVICE(0x0582, 0x0025),
801         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
802                 .vendor_name = "EDIROL",
803                 .product_name = "UA-20",
804                 .ifnum = QUIRK_ANY_INTERFACE,
805                 .type = QUIRK_COMPOSITE,
806                 .data = (const struct snd_usb_audio_quirk[]) {
807                         {
808                                 .ifnum = 0,
809                                 .type = QUIRK_IGNORE_INTERFACE
810                         },
811                         {
812                                 .ifnum = 1,
813                                 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
814                                 .data = & (const struct audioformat) {
815                                         .formats = SNDRV_PCM_FMTBIT_S24_3LE,
816                                         .channels = 2,
817                                         .iface = 1,
818                                         .altsetting = 1,
819                                         .altset_idx = 1,
820                                         .attributes = 0,
821                                         .endpoint = 0x01,
822                                         .ep_attr = 0x01,
823                                         .rates = SNDRV_PCM_RATE_CONTINUOUS,
824                                         .rate_min = 44100,
825                                         .rate_max = 44100,
826                                 }
827                         },
828                         {
829                                 .ifnum = 2,
830                                 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
831                                 .data = & (const struct audioformat) {
832                                         .formats = SNDRV_PCM_FMTBIT_S24_3LE,
833                                         .channels = 2,
834                                         .iface = 2,
835                                         .altsetting = 1,
836                                         .altset_idx = 1,
837                                         .attributes = 0,
838                                         .endpoint = 0x82,
839                                         .ep_attr = 0x01,
840                                         .rates = SNDRV_PCM_RATE_CONTINUOUS,
841                                         .rate_min = 44100,
842                                         .rate_max = 44100,
843                                 }
844                         },
845                         {
846                                 .ifnum = 3,
847                                 .type = QUIRK_MIDI_FIXED_ENDPOINT,
848                                 .data = & (const struct snd_usb_midi_endpoint_info) {
849                                         .out_cables = 0x0001,
850                                         .in_cables  = 0x0001
851                                 }
852                         },
853                         {
854                                 .ifnum = -1
855                         }
856                 }
857         }
858 },
859 {
860         /* has ID 0x0028 when not in "Advanced Driver" mode */
861         USB_DEVICE(0x0582, 0x0027),
862         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
863                 .vendor_name = "EDIROL",
864                 .product_name = "SD-20",
865                 .ifnum = 0,
866                 .type = QUIRK_MIDI_FIXED_ENDPOINT,
867                 .data = & (const struct snd_usb_midi_endpoint_info) {
868                         .out_cables = 0x0003,
869                         .in_cables  = 0x0007
870                 }
871         }
872 },
873 {
874         /* has ID 0x002a when not in "Advanced Driver" mode */
875         USB_DEVICE(0x0582, 0x0029),
876         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
877                 .vendor_name = "EDIROL",
878                 .product_name = "SD-80",
879                 .ifnum = 0,
880                 .type = QUIRK_MIDI_FIXED_ENDPOINT,
881                 .data = & (const struct snd_usb_midi_endpoint_info) {
882                         .out_cables = 0x000f,
883                         .in_cables  = 0x000f
884                 }
885         }
886 },
887 {       /*
888          * This quirk is for the "Advanced" modes of the Edirol UA-700.
889          * If the sample format switch is not in an advanced setting, the
890          * UA-700 has ID 0x0582/0x002c and is standard compliant (no quirks),
891          * but offers only 16-bit PCM and no MIDI.
892          */
893         USB_DEVICE_VENDOR_SPEC(0x0582, 0x002b),
894         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
895                 .vendor_name = "EDIROL",
896                 .product_name = "UA-700",
897                 .ifnum = QUIRK_ANY_INTERFACE,
898                 .type = QUIRK_COMPOSITE,
899                 .data = (const struct snd_usb_audio_quirk[]) {
900                         {
901                                 .ifnum = 1,
902                                 .type = QUIRK_AUDIO_EDIROL_UAXX
903                         },
904                         {
905                                 .ifnum = 2,
906                                 .type = QUIRK_AUDIO_EDIROL_UAXX
907                         },
908                         {
909                                 .ifnum = 3,
910                                 .type = QUIRK_AUDIO_EDIROL_UAXX
911                         },
912                         {
913                                 .ifnum = -1
914                         }
915                 }
916         }
917 },
918 {
919         /* has ID 0x002e when not in "Advanced Driver" mode */
920         USB_DEVICE(0x0582, 0x002d),
921         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
922                 .vendor_name = "Roland",
923                 .product_name = "XV-2020",
924                 .ifnum = 0,
925                 .type = QUIRK_MIDI_FIXED_ENDPOINT,
926                 .data = & (const struct snd_usb_midi_endpoint_info) {
927                         .out_cables = 0x0001,
928                         .in_cables  = 0x0001
929                 }
930         }
931 },
932 {
933         /* has ID 0x0030 when not in "Advanced Driver" mode */
934         USB_DEVICE(0x0582, 0x002f),
935         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
936                 .vendor_name = "Roland",
937                 .product_name = "VariOS",
938                 .ifnum = 0,
939                 .type = QUIRK_MIDI_FIXED_ENDPOINT,
940                 .data = & (const struct snd_usb_midi_endpoint_info) {
941                         .out_cables = 0x0007,
942                         .in_cables  = 0x0007
943                 }
944         }
945 },
946 {
947         /* has ID 0x0034 when not in "Advanced Driver" mode */
948         USB_DEVICE(0x0582, 0x0033),
949         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
950                 .vendor_name = "EDIROL",
951                 .product_name = "PCR",
952                 .ifnum = 0,
953                 .type = QUIRK_MIDI_FIXED_ENDPOINT,
954                 .data = & (const struct snd_usb_midi_endpoint_info) {
955                         .out_cables = 0x0003,
956                         .in_cables  = 0x0007
957                 }
958         }
959 },
960         /* TODO: add Roland M-1000 support */
961 {
962         /*
963          * Has ID 0x0038 when not in "Advanced Driver" mode;
964          * later revisions use IDs 0x0054 and 0x00a2.
965          */
966         USB_DEVICE(0x0582, 0x0037),
967         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
968                 .vendor_name = "Roland",
969                 .product_name = "Digital Piano",
970                 .ifnum = 0,
971                 .type = QUIRK_MIDI_FIXED_ENDPOINT,
972                 .data = & (const struct snd_usb_midi_endpoint_info) {
973                         .out_cables = 0x0001,
974                         .in_cables  = 0x0001
975                 }
976         }
977 },
978 {
979         /*
980          * This quirk is for the "Advanced Driver" mode.  If off, the GS-10
981          * has ID 0x003c and is standard compliant, but has only 16-bit PCM
982          * and no MIDI.
983          */
984         USB_DEVICE_VENDOR_SPEC(0x0582, 0x003b),
985         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
986                 .vendor_name = "BOSS",
987                 .product_name = "GS-10",
988                 .ifnum = QUIRK_ANY_INTERFACE,
989                 .type = QUIRK_COMPOSITE,
990                 .data = & (const struct snd_usb_audio_quirk[]) {
991                         {
992                                 .ifnum = 1,
993                                 .type = QUIRK_AUDIO_STANDARD_INTERFACE
994                         },
995                         {
996                                 .ifnum = 2,
997                                 .type = QUIRK_AUDIO_STANDARD_INTERFACE
998                         },
999                         {
1000                                 .ifnum = 3,
1001                                 .type = QUIRK_MIDI_STANDARD_INTERFACE
1002                         },
1003                         {
1004                                 .ifnum = -1
1005                         }
1006                 }
1007         }
1008 },
1009 {
1010         /* has ID 0x0041 when not in "Advanced Driver" mode */
1011         USB_DEVICE(0x0582, 0x0040),
1012         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1013                 .vendor_name = "Roland",
1014                 .product_name = "GI-20",
1015                 .ifnum = 0,
1016                 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1017                 .data = & (const struct snd_usb_midi_endpoint_info) {
1018                         .out_cables = 0x0001,
1019                         .in_cables  = 0x0001
1020                 }
1021         }
1022 },
1023 {
1024         /* has ID 0x0043 when not in "Advanced Driver" mode */
1025         USB_DEVICE(0x0582, 0x0042),
1026         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1027                 .vendor_name = "Roland",
1028                 .product_name = "RS-70",
1029                 .ifnum = 0,
1030                 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1031                 .data = & (const struct snd_usb_midi_endpoint_info) {
1032                         .out_cables = 0x0001,
1033                         .in_cables  = 0x0001
1034                 }
1035         }
1036 },
1037 {
1038         /* has ID 0x0049 when not in "Advanced Driver" mode */
1039         USB_DEVICE(0x0582, 0x0047),
1040         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1041                 /* .vendor_name = "EDIROL", */
1042                 /* .product_name = "UR-80", */
1043                 .ifnum = QUIRK_ANY_INTERFACE,
1044                 .type = QUIRK_COMPOSITE,
1045                 .data = (const struct snd_usb_audio_quirk[]) {
1046                         /* in the 96 kHz modes, only interface 1 is there */
1047                         {
1048                                 .ifnum = 1,
1049                                 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1050                         },
1051                         {
1052                                 .ifnum = 2,
1053                                 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1054                         },
1055                         {
1056                                 .ifnum = -1
1057                         }
1058                 }
1059         }
1060 },
1061 {
1062         /* has ID 0x004a when not in "Advanced Driver" mode */
1063         USB_DEVICE(0x0582, 0x0048),
1064         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1065                 /* .vendor_name = "EDIROL", */
1066                 /* .product_name = "UR-80", */
1067                 .ifnum = 0,
1068                 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1069                 .data = & (const struct snd_usb_midi_endpoint_info) {
1070                         .out_cables = 0x0003,
1071                         .in_cables  = 0x0007
1072                 }
1073         }
1074 },
1075         /* TODO: add Edirol M-100FX support */
1076 {
1077         /* has ID 0x004e when not in "Advanced Driver" mode */
1078         USB_DEVICE(0x0582, 0x004c),
1079         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1080                 .vendor_name = "EDIROL",
1081                 .product_name = "PCR-A",
1082                 .ifnum = QUIRK_ANY_INTERFACE,
1083                 .type = QUIRK_COMPOSITE,
1084                 .data = (const struct snd_usb_audio_quirk[]) {
1085                         {
1086                                 .ifnum = 1,
1087                                 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1088                         },
1089                         {
1090                                 .ifnum = 2,
1091                                 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1092                         },
1093                         {
1094                                 .ifnum = -1
1095                         }
1096                 }
1097         }
1098 },
1099 {
1100         /* has ID 0x004f when not in "Advanced Driver" mode */
1101         USB_DEVICE(0x0582, 0x004d),
1102         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1103                 .vendor_name = "EDIROL",
1104                 .product_name = "PCR-A",
1105                 .ifnum = 0,
1106                 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1107                 .data = & (const struct snd_usb_midi_endpoint_info) {
1108                         .out_cables = 0x0003,
1109                         .in_cables  = 0x0007
1110                 }
1111         }
1112 },
1113 {
1114         /*
1115          * This quirk is for the "Advanced Driver" mode. If off, the UA-3FX
1116          * is standard compliant, but has only 16-bit PCM.
1117          */
1118         USB_DEVICE(0x0582, 0x0050),
1119         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1120                 .vendor_name = "EDIROL",
1121                 .product_name = "UA-3FX",
1122                 .ifnum = QUIRK_ANY_INTERFACE,
1123                 .type = QUIRK_COMPOSITE,
1124                 .data = (const struct snd_usb_audio_quirk[]) {
1125                         {
1126                                 .ifnum = 1,
1127                                 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1128                         },
1129                         {
1130                                 .ifnum = 2,
1131                                 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1132                         },
1133                         {
1134                                 .ifnum = -1
1135                         }
1136                 }
1137         }
1138 },
1139 {
1140         USB_DEVICE(0x0582, 0x0052),
1141         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1142                 .vendor_name = "EDIROL",
1143                 .product_name = "UM-1SX",
1144                 .ifnum = 0,
1145                 .type = QUIRK_MIDI_STANDARD_INTERFACE
1146         }
1147 },
1148 {
1149         USB_DEVICE(0x0582, 0x0060),
1150         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1151                 .vendor_name = "Roland",
1152                 .product_name = "EXR Series",
1153                 .ifnum = 0,
1154                 .type = QUIRK_MIDI_STANDARD_INTERFACE
1155         }
1156 },
1157 {
1158         /* has ID 0x0066 when not in "Advanced Driver" mode */
1159         USB_DEVICE(0x0582, 0x0064),
1160         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1161                 /* .vendor_name = "EDIROL", */
1162                 /* .product_name = "PCR-1", */
1163                 .ifnum = QUIRK_ANY_INTERFACE,
1164                 .type = QUIRK_COMPOSITE,
1165                 .data = (const struct snd_usb_audio_quirk[]) {
1166                         {
1167                                 .ifnum = 1,
1168                                 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1169                         },
1170                         {
1171                                 .ifnum = 2,
1172                                 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1173                         },
1174                         {
1175                                 .ifnum = -1
1176                         }
1177                 }
1178         }
1179 },
1180 {
1181         /* has ID 0x0067 when not in "Advanced Driver" mode */
1182         USB_DEVICE(0x0582, 0x0065),
1183         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1184                 /* .vendor_name = "EDIROL", */
1185                 /* .product_name = "PCR-1", */
1186                 .ifnum = 0,
1187                 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1188                 .data = & (const struct snd_usb_midi_endpoint_info) {
1189                         .out_cables = 0x0001,
1190                         .in_cables  = 0x0003
1191                 }
1192         }
1193 },
1194 {
1195         /* has ID 0x006b when not in "Advanced Driver" mode */
1196         USB_DEVICE_VENDOR_SPEC(0x0582, 0x006a),
1197         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1198                 .vendor_name = "Roland",
1199                 .product_name = "SP-606",
1200                 .ifnum = 3,
1201                 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1202                 .data = & (const struct snd_usb_midi_endpoint_info) {
1203                         .out_cables = 0x0001,
1204                         .in_cables  = 0x0001
1205                 }
1206         }
1207 },
1208 {
1209         /* has ID 0x006e when not in "Advanced Driver" mode */
1210         USB_DEVICE(0x0582, 0x006d),
1211         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1212                 .vendor_name = "Roland",
1213                 .product_name = "FANTOM-X",
1214                 .ifnum = 0,
1215                 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1216                 .data = & (const struct snd_usb_midi_endpoint_info) {
1217                         .out_cables = 0x0001,
1218                         .in_cables  = 0x0001
1219                 }
1220         }
1221 },
1222 {       /*
1223          * This quirk is for the "Advanced" modes of the Edirol UA-25.
1224          * If the switch is not in an advanced setting, the UA-25 has
1225          * ID 0x0582/0x0073 and is standard compliant (no quirks), but
1226          * offers only 16-bit PCM at 44.1 kHz and no MIDI.
1227          */
1228         USB_DEVICE_VENDOR_SPEC(0x0582, 0x0074),
1229         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1230                 .vendor_name = "EDIROL",
1231                 .product_name = "UA-25",
1232                 .ifnum = QUIRK_ANY_INTERFACE,
1233                 .type = QUIRK_COMPOSITE,
1234                 .data = (const struct snd_usb_audio_quirk[]) {
1235                         {
1236                                 .ifnum = 0,
1237                                 .type = QUIRK_AUDIO_EDIROL_UAXX
1238                         },
1239                         {
1240                                 .ifnum = 1,
1241                                 .type = QUIRK_AUDIO_EDIROL_UAXX
1242                         },
1243                         {
1244                                 .ifnum = 2,
1245                                 .type = QUIRK_AUDIO_EDIROL_UAXX
1246                         },
1247                         {
1248                                 .ifnum = -1
1249                         }
1250                 }
1251         }
1252 },
1253 {
1254         /* has ID 0x0076 when not in "Advanced Driver" mode */
1255         USB_DEVICE(0x0582, 0x0075),
1256         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1257                 .vendor_name = "BOSS",
1258                 .product_name = "DR-880",
1259                 .ifnum = 0,
1260                 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1261                 .data = & (const struct snd_usb_midi_endpoint_info) {
1262                         .out_cables = 0x0001,
1263                         .in_cables  = 0x0001
1264                 }
1265         }
1266 },
1267 {
1268         /* has ID 0x007b when not in "Advanced Driver" mode */
1269         USB_DEVICE_VENDOR_SPEC(0x0582, 0x007a),
1270         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1271                 .vendor_name = "Roland",
1272                 /* "RD" or "RD-700SX"? */
1273                 .ifnum = 0,
1274                 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1275                 .data = & (const struct snd_usb_midi_endpoint_info) {
1276                         .out_cables = 0x0003,
1277                         .in_cables  = 0x0003
1278                 }
1279         }
1280 },
1281 {
1282         /* has ID 0x0081 when not in "Advanced Driver" mode */
1283         USB_DEVICE(0x0582, 0x0080),
1284         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1285                 .vendor_name = "Roland",
1286                 .product_name = "G-70",
1287                 .ifnum = 0,
1288                 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1289                 .data = & (const struct snd_usb_midi_endpoint_info) {
1290                         .out_cables = 0x0001,
1291                         .in_cables  = 0x0001
1292                 }
1293         }
1294 },
1295         /* TODO: add Roland V-SYNTH XT support */
1296         /* TODO: add BOSS GT-PRO support */
1297 {
1298         /* has ID 0x008c when not in "Advanced Driver" mode */
1299         USB_DEVICE(0x0582, 0x008b),
1300         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1301                 .vendor_name = "EDIROL",
1302                 .product_name = "PC-50",
1303                 .ifnum = 0,
1304                 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1305                 .data = & (const struct snd_usb_midi_endpoint_info) {
1306                         .out_cables = 0x0001,
1307                         .in_cables  = 0x0001
1308                 }
1309         }
1310 },
1311         /* TODO: add Edirol PC-80 support */
1312 {
1313         USB_DEVICE(0x0582, 0x0096),
1314         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1315                 .vendor_name = "EDIROL",
1316                 .product_name = "UA-1EX",
1317                 .ifnum = QUIRK_ANY_INTERFACE,
1318                 .type = QUIRK_COMPOSITE,
1319                 .data = (const struct snd_usb_audio_quirk[]) {
1320                         {
1321                                 .ifnum = 0,
1322                                 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1323                         },
1324                         {
1325                                 .ifnum = 1,
1326                                 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1327                         },
1328                         {
1329                                 .ifnum = -1
1330                         }
1331                 }
1332         }
1333 },
1334 {
1335         USB_DEVICE(0x0582, 0x009a),
1336         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1337                 .vendor_name = "EDIROL",
1338                 .product_name = "UM-3EX",
1339                 .ifnum = 0,
1340                 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1341                 .data = & (const struct snd_usb_midi_endpoint_info) {
1342                         .out_cables = 0x000f,
1343                         .in_cables  = 0x000f
1344                 }
1345         }
1346 },
1347 {
1348         /*
1349          * This quirk is for the "Advanced Driver" mode. If off, the UA-4FX
1350          * is standard compliant, but has only 16-bit PCM and no MIDI.
1351          */
1352         USB_DEVICE(0x0582, 0x00a3),
1353         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1354                 .vendor_name = "EDIROL",
1355                 .product_name = "UA-4FX",
1356                 .ifnum = QUIRK_ANY_INTERFACE,
1357                 .type = QUIRK_COMPOSITE,
1358                 .data = (const struct snd_usb_audio_quirk[]) {
1359                         {
1360                                 .ifnum = 0,
1361                                 .type = QUIRK_AUDIO_EDIROL_UAXX
1362                         },
1363                         {
1364                                 .ifnum = 1,
1365                                 .type = QUIRK_AUDIO_EDIROL_UAXX
1366                         },
1367                         {
1368                                 .ifnum = 2,
1369                                 .type = QUIRK_AUDIO_EDIROL_UAXX
1370                         },
1371                         {
1372                                 .ifnum = -1
1373                         }
1374                 }
1375         }
1376 },
1377         /* TODO: add Edirol MD-P1 support */
1378 {
1379         USB_DEVICE(0x582, 0x00a6),
1380         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1381                 .vendor_name = "Roland",
1382                 .product_name = "Juno-G",
1383                 .ifnum = 0,
1384                 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1385                 .data = & (const struct snd_usb_midi_endpoint_info) {
1386                         .out_cables = 0x0001,
1387                         .in_cables  = 0x0001
1388                 }
1389         }
1390 },
1391 {
1392         /* Roland SH-201 */
1393         USB_DEVICE(0x0582, 0x00ad),
1394         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1395                 .vendor_name = "Roland",
1396                 .product_name = "SH-201",
1397                 .ifnum = QUIRK_ANY_INTERFACE,
1398                 .type = QUIRK_COMPOSITE,
1399                 .data = (const struct snd_usb_audio_quirk[]) {
1400                         {
1401                                 .ifnum = 0,
1402                                 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1403                         },
1404                         {
1405                                 .ifnum = 1,
1406                                 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1407                         },
1408                         {
1409                                 .ifnum = 2,
1410                                 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1411                                 .data = & (const struct snd_usb_midi_endpoint_info) {
1412                                         .out_cables = 0x0001,
1413                                         .in_cables  = 0x0001
1414                                 }
1415                         },
1416                         {
1417                                 .ifnum = -1
1418                         }
1419                 }
1420         }
1421 },
1422 {
1423         /* Roland SonicCell */
1424         USB_DEVICE(0x0582, 0x00c2),
1425         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1426                 .vendor_name = "Roland",
1427                 .product_name = "SonicCell",
1428                 .ifnum = QUIRK_ANY_INTERFACE,
1429                 .type = QUIRK_COMPOSITE,
1430                 .data = (const struct snd_usb_audio_quirk[]) {
1431                         {
1432                                 .ifnum = 0,
1433                                 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1434                         },
1435                         {
1436                                 .ifnum = 1,
1437                                 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1438                         },
1439                         {
1440                                 .ifnum = 2,
1441                                 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1442                                 .data = & (const struct snd_usb_midi_endpoint_info) {
1443                                         .out_cables = 0x0001,
1444                                         .in_cables  = 0x0001
1445                                 }
1446                         },
1447                         {
1448                                 .ifnum = -1
1449                         }
1450                 }
1451         }
1452 },
1453 {
1454         /* Edirol M-16DX */
1455         /* FIXME: This quirk gives a good-working capture stream but the
1456          *        playback seems problematic because of lacking of sync
1457          *        with capture stream.  It needs to sync with the capture
1458          *        clock.  As now, you'll get frequent sound distortions
1459          *        via the playback.
1460          */
1461         USB_DEVICE(0x0582, 0x00c4),
1462         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1463                 .ifnum = QUIRK_ANY_INTERFACE,
1464                 .type = QUIRK_COMPOSITE,
1465                 .data = (const struct snd_usb_audio_quirk[]) {
1466                         {
1467                                 .ifnum = 0,
1468                                 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1469                         },
1470                         {
1471                                 .ifnum = 1,
1472                                 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1473                         },
1474                         {
1475                                 .ifnum = 2,
1476                                 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1477                                 .data = & (const struct snd_usb_midi_endpoint_info) {
1478                                         .out_cables = 0x0001,
1479                                         .in_cables  = 0x0001
1480                                 }
1481                         },
1482                         {
1483                                 .ifnum = -1
1484                         }
1485                 }
1486         }
1487 },
1488 {
1489         /* BOSS GT-10 */
1490         USB_DEVICE(0x0582, 0x00da),
1491         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1492                 .ifnum = QUIRK_ANY_INTERFACE,
1493                 .type = QUIRK_COMPOSITE,
1494                 .data = (const struct snd_usb_audio_quirk[]) {
1495                         {
1496                                 .ifnum = 0,
1497                                 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1498                         },
1499                         {
1500                                 .ifnum = 1,
1501                                 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1502                         },
1503                         {
1504                                 .ifnum = 2,
1505                                 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1506                                 .data = & (const struct snd_usb_midi_endpoint_info) {
1507                                         .out_cables = 0x0001,
1508                                         .in_cables  = 0x0001
1509                                 }
1510                         },
1511                         {
1512                                 .ifnum = -1
1513                         }
1514                 }
1515         }
1516 },
1517 {
1518         /* Advanced modes of the Edirol UA-25EX.
1519          * For the standard mode, UA-25EX has ID 0582:00e7, which
1520          * offers only 16-bit PCM at 44.1 kHz and no MIDI.
1521          */
1522         USB_DEVICE_VENDOR_SPEC(0x0582, 0x00e6),
1523         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1524                 .vendor_name = "EDIROL",
1525                 .product_name = "UA-25EX",
1526                 .ifnum = QUIRK_ANY_INTERFACE,
1527                 .type = QUIRK_COMPOSITE,
1528                 .data = (const struct snd_usb_audio_quirk[]) {
1529                         {
1530                                 .ifnum = 0,
1531                                 .type = QUIRK_AUDIO_EDIROL_UAXX
1532                         },
1533                         {
1534                                 .ifnum = 1,
1535                                 .type = QUIRK_AUDIO_EDIROL_UAXX
1536                         },
1537                         {
1538                                 .ifnum = 2,
1539                                 .type = QUIRK_AUDIO_EDIROL_UAXX
1540                         },
1541                         {
1542                                 .ifnum = -1
1543                         }
1544                 }
1545         }
1546 },
1547 {
1548         /* has ID 0x00ea when not in Advanced Driver mode */
1549         USB_DEVICE_VENDOR_SPEC(0x0582, 0x00e9),
1550         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1551                 /* .vendor_name = "Roland", */
1552                 /* .product_name = "UA-1G", */
1553                 .ifnum = QUIRK_ANY_INTERFACE,
1554                 .type = QUIRK_COMPOSITE,
1555                 .data = (const struct snd_usb_audio_quirk[]) {
1556                         {
1557                                 .ifnum = 0,
1558                                 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1559                         },
1560                         {
1561                                 .ifnum = 1,
1562                                 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1563                         },
1564                         {
1565                                 .ifnum = -1
1566                         }
1567                 }
1568         }
1569 },
1570 {
1571         USB_DEVICE_VENDOR_SPEC(0x0582, 0x0104),
1572         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1573                 /* .vendor_name = "Roland", */
1574                 /* .product_name = "UM-1G", */
1575                 .ifnum = 0,
1576                 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1577                 .data = & (const struct snd_usb_midi_endpoint_info) {
1578                         .out_cables = 0x0001,
1579                         .in_cables  = 0x0001
1580                 }
1581         }
1582 },
1583 {
1584         /* Boss JS-8 Jam Station  */
1585         USB_DEVICE(0x0582, 0x0109),
1586         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1587                 /* .vendor_name = "BOSS", */
1588                 /* .product_name = "JS-8", */
1589                 .ifnum = QUIRK_ANY_INTERFACE,
1590                 .type = QUIRK_COMPOSITE,
1591                 .data = (const struct snd_usb_audio_quirk[]) {
1592                         {
1593                                 .ifnum = 0,
1594                                 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1595                         },
1596                         {
1597                                 .ifnum = 1,
1598                                 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1599                         },
1600                         {
1601                                 .ifnum = 2,
1602                                 .type = QUIRK_MIDI_STANDARD_INTERFACE
1603                         },
1604                         {
1605                                 .ifnum = -1
1606                         }
1607                 }
1608         }
1609 },
1610 {
1611         /* has ID 0x0110 when not in Advanced Driver mode */
1612         USB_DEVICE_VENDOR_SPEC(0x0582, 0x010f),
1613         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1614                 /* .vendor_name = "Roland", */
1615                 /* .product_name = "A-PRO", */
1616                 .ifnum = 1,
1617                 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1618                 .data = & (const struct snd_usb_midi_endpoint_info) {
1619                         .out_cables = 0x0003,
1620                         .in_cables  = 0x0007
1621                 }
1622         }
1623 },
1624 {
1625         USB_DEVICE(0x0582, 0x0113),
1626         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1627                 /* .vendor_name = "BOSS", */
1628                 /* .product_name = "ME-25", */
1629                 .ifnum = QUIRK_ANY_INTERFACE,
1630                 .type = QUIRK_COMPOSITE,
1631                 .data = (const struct snd_usb_audio_quirk[]) {
1632                         {
1633                                 .ifnum = 0,
1634                                 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1635                         },
1636                         {
1637                                 .ifnum = 1,
1638                                 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1639                         },
1640                         {
1641                                 .ifnum = 2,
1642                                 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1643                                 .data = & (const struct snd_usb_midi_endpoint_info) {
1644                                         .out_cables = 0x0001,
1645                                         .in_cables  = 0x0001
1646                                 }
1647                         },
1648                         {
1649                                 .ifnum = -1
1650                         }
1651                 }
1652         }
1653 },
1654 {
1655         USB_DEVICE(0x0582, 0x0127),
1656         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1657                 /* .vendor_name = "Roland", */
1658                 /* .product_name = "GR-55", */
1659                 .ifnum = QUIRK_ANY_INTERFACE,
1660                 .type = QUIRK_COMPOSITE,
1661                 .data = (const struct snd_usb_audio_quirk[]) {
1662                         {
1663                                 .ifnum = 0,
1664                                 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1665                         },
1666                         {
1667                                 .ifnum = 1,
1668                                 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1669                         },
1670                         {
1671                                 .ifnum = 2,
1672                                 .type = QUIRK_MIDI_STANDARD_INTERFACE
1673                         },
1674                         {
1675                                 .ifnum = -1
1676                         }
1677                 }
1678         }
1679 },
1680 {
1681         USB_DEVICE(0x0582, 0x011e),
1682         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1683                 /* .vendor_name = "BOSS", */
1684                 /* .product_name = "BR-800", */
1685                 .ifnum = QUIRK_ANY_INTERFACE,
1686                 .type = QUIRK_COMPOSITE,
1687                 .data = (const struct snd_usb_audio_quirk[]) {
1688                         {
1689                                 .ifnum = 0,
1690                                 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1691                         },
1692                         {
1693                                 .ifnum = 1,
1694                                 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1695                         },
1696                         {
1697                                 .ifnum = 2,
1698                                 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1699                                 .data = & (const struct snd_usb_midi_endpoint_info) {
1700                                         .out_cables = 0x0001,
1701                                         .in_cables  = 0x0001
1702                                 }
1703                         },
1704                         {
1705                                 .ifnum = -1
1706                         }
1707                 }
1708         }
1709 },
1710 {
1711         USB_DEVICE(0x0582, 0x0130),
1712         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1713                 /* .vendor_name = "BOSS", */
1714                 /* .product_name = "MICRO BR-80", */
1715                 .ifnum = QUIRK_ANY_INTERFACE,
1716                 .type = QUIRK_COMPOSITE,
1717                 .data = (const struct snd_usb_audio_quirk[]) {
1718                         {
1719                                 .ifnum = 0,
1720                                 .type = QUIRK_IGNORE_INTERFACE
1721                         },
1722                         {
1723                                 .ifnum = 1,
1724                                 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1725                         },
1726                         {
1727                                 .ifnum = 2,
1728                                 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1729                         },
1730                         {
1731                                 .ifnum = 3,
1732                                 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1733                                 .data = & (const struct snd_usb_midi_endpoint_info) {
1734                                         .out_cables = 0x0001,
1735                                         .in_cables  = 0x0001
1736                                 }
1737                         },
1738                         {
1739                                 .ifnum = -1
1740                         }
1741                 }
1742         }
1743 },
1744
1745 /* Guillemot devices */
1746 {
1747         /*
1748          * This is for the "Windows Edition" where the external MIDI ports are
1749          * the only MIDI ports; the control data is reported through HID
1750          * interfaces.  The "Macintosh Edition" has ID 0xd002 and uses standard
1751          * compliant USB MIDI ports for external MIDI and controls.
1752          */
1753         USB_DEVICE_VENDOR_SPEC(0x06f8, 0xb000),
1754         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1755                 .vendor_name = "Hercules",
1756                 .product_name = "DJ Console (WE)",
1757                 .ifnum = 4,
1758                 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1759                 .data = & (const struct snd_usb_midi_endpoint_info) {
1760                         .out_cables = 0x0001,
1761                         .in_cables = 0x0001
1762                 }
1763         }
1764 },
1765
1766 /* Midiman/M-Audio devices */
1767 {
1768         USB_DEVICE_VENDOR_SPEC(0x0763, 0x1002),
1769         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1770                 .vendor_name = "M-Audio",
1771                 .product_name = "MidiSport 2x2",
1772                 .ifnum = QUIRK_ANY_INTERFACE,
1773                 .type = QUIRK_MIDI_MIDIMAN,
1774                 .data = & (const struct snd_usb_midi_endpoint_info) {
1775                         .out_cables = 0x0003,
1776                         .in_cables  = 0x0003
1777                 }
1778         }
1779 },
1780 {
1781         USB_DEVICE_VENDOR_SPEC(0x0763, 0x1011),
1782         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1783                 .vendor_name = "M-Audio",
1784                 .product_name = "MidiSport 1x1",
1785                 .ifnum = QUIRK_ANY_INTERFACE,
1786                 .type = QUIRK_MIDI_MIDIMAN,
1787                 .data = & (const struct snd_usb_midi_endpoint_info) {
1788                         .out_cables = 0x0001,
1789                         .in_cables  = 0x0001
1790                 }
1791         }
1792 },
1793 {
1794         USB_DEVICE_VENDOR_SPEC(0x0763, 0x1015),
1795         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1796                 .vendor_name = "M-Audio",
1797                 .product_name = "Keystation",
1798                 .ifnum = QUIRK_ANY_INTERFACE,
1799                 .type = QUIRK_MIDI_MIDIMAN,
1800                 .data = & (const struct snd_usb_midi_endpoint_info) {
1801                         .out_cables = 0x0001,
1802                         .in_cables  = 0x0001
1803                 }
1804         }
1805 },
1806 {
1807         USB_DEVICE_VENDOR_SPEC(0x0763, 0x1021),
1808         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1809                 .vendor_name = "M-Audio",
1810                 .product_name = "MidiSport 4x4",
1811                 .ifnum = QUIRK_ANY_INTERFACE,
1812                 .type = QUIRK_MIDI_MIDIMAN,
1813                 .data = & (const struct snd_usb_midi_endpoint_info) {
1814                         .out_cables = 0x000f,
1815                         .in_cables  = 0x000f
1816                 }
1817         }
1818 },
1819 {
1820         /*
1821          * For hardware revision 1.05; in the later revisions (1.10 and
1822          * 1.21), 0x1031 is the ID for the device without firmware.
1823          * Thanks to Olaf Giesbrecht <Olaf_Giesbrecht@yahoo.de>
1824          */
1825         USB_DEVICE_VER(0x0763, 0x1031, 0x0100, 0x0109),
1826         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1827                 .vendor_name = "M-Audio",
1828                 .product_name = "MidiSport 8x8",
1829                 .ifnum = QUIRK_ANY_INTERFACE,
1830                 .type = QUIRK_MIDI_MIDIMAN,
1831                 .data = & (const struct snd_usb_midi_endpoint_info) {
1832                         .out_cables = 0x01ff,
1833                         .in_cables  = 0x01ff
1834                 }
1835         }
1836 },
1837 {
1838         USB_DEVICE_VENDOR_SPEC(0x0763, 0x1033),
1839         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1840                 .vendor_name = "M-Audio",
1841                 .product_name = "MidiSport 8x8",
1842                 .ifnum = QUIRK_ANY_INTERFACE,
1843                 .type = QUIRK_MIDI_MIDIMAN,
1844                 .data = & (const struct snd_usb_midi_endpoint_info) {
1845                         .out_cables = 0x01ff,
1846                         .in_cables  = 0x01ff
1847                 }
1848         }
1849 },
1850 {
1851         USB_DEVICE_VENDOR_SPEC(0x0763, 0x1041),
1852         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1853                 .vendor_name = "M-Audio",
1854                 .product_name = "MidiSport 2x4",
1855                 .ifnum = QUIRK_ANY_INTERFACE,
1856                 .type = QUIRK_MIDI_MIDIMAN,
1857                 .data = & (const struct snd_usb_midi_endpoint_info) {
1858                         .out_cables = 0x000f,
1859                         .in_cables  = 0x0003
1860                 }
1861         }
1862 },
1863 {
1864         USB_DEVICE_VENDOR_SPEC(0x0763, 0x2001),
1865         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1866                 .vendor_name = "M-Audio",
1867                 .product_name = "Quattro",
1868                 .ifnum = QUIRK_ANY_INTERFACE,
1869                 .type = QUIRK_COMPOSITE,
1870                 .data = & (const struct snd_usb_audio_quirk[]) {
1871                         /*
1872                          * Interfaces 0-2 are "Windows-compatible", 16-bit only,
1873                          * and share endpoints with the other interfaces.
1874                          * Ignore them.  The other interfaces can do 24 bits,
1875                          * but captured samples are big-endian (see usbaudio.c).
1876                          */
1877                         {
1878                                 .ifnum = 0,
1879                                 .type = QUIRK_IGNORE_INTERFACE
1880                         },
1881                         {
1882                                 .ifnum = 1,
1883                                 .type = QUIRK_IGNORE_INTERFACE
1884                         },
1885                         {
1886                                 .ifnum = 2,
1887                                 .type = QUIRK_IGNORE_INTERFACE
1888                         },
1889                         {
1890                                 .ifnum = 3,
1891                                 .type = QUIRK_IGNORE_INTERFACE
1892                         },
1893                         {
1894                                 .ifnum = 4,
1895                                 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1896                         },
1897                         {
1898                                 .ifnum = 5,
1899                                 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1900                         },
1901                         {
1902                                 .ifnum = 6,
1903                                 .type = QUIRK_IGNORE_INTERFACE
1904                         },
1905                         {
1906                                 .ifnum = 7,
1907                                 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1908                         },
1909                         {
1910                                 .ifnum = 8,
1911                                 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1912                         },
1913                         {
1914                                 .ifnum = 9,
1915                                 .type = QUIRK_MIDI_MIDIMAN,
1916                                 .data = & (const struct snd_usb_midi_endpoint_info) {
1917                                         .out_cables = 0x0001,
1918                                         .in_cables  = 0x0001
1919                                 }
1920                         },
1921                         {
1922                                 .ifnum = -1
1923                         }
1924                 }
1925         }
1926 },
1927 {
1928         USB_DEVICE_VENDOR_SPEC(0x0763, 0x2003),
1929         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1930                 .vendor_name = "M-Audio",
1931                 .product_name = "AudioPhile",
1932                 .ifnum = 6,
1933                 .type = QUIRK_MIDI_MIDIMAN,
1934                 .data = & (const struct snd_usb_midi_endpoint_info) {
1935                         .out_cables = 0x0001,
1936                         .in_cables  = 0x0001
1937                 }
1938         }
1939 },
1940 {
1941         USB_DEVICE_VENDOR_SPEC(0x0763, 0x2008),
1942         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1943                 .vendor_name = "M-Audio",
1944                 .product_name = "Ozone",
1945                 .ifnum = 3,
1946                 .type = QUIRK_MIDI_MIDIMAN,
1947                 .data = & (const struct snd_usb_midi_endpoint_info) {
1948                         .out_cables = 0x0001,
1949                         .in_cables  = 0x0001
1950                 }
1951         }
1952 },
1953 {
1954         USB_DEVICE_VENDOR_SPEC(0x0763, 0x200d),
1955         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1956                 .vendor_name = "M-Audio",
1957                 .product_name = "OmniStudio",
1958                 .ifnum = QUIRK_ANY_INTERFACE,
1959                 .type = QUIRK_COMPOSITE,
1960                 .data = & (const struct snd_usb_audio_quirk[]) {
1961                         {
1962                                 .ifnum = 0,
1963                                 .type = QUIRK_IGNORE_INTERFACE
1964                         },
1965                         {
1966                                 .ifnum = 1,
1967                                 .type = QUIRK_IGNORE_INTERFACE
1968                         },
1969                         {
1970                                 .ifnum = 2,
1971                                 .type = QUIRK_IGNORE_INTERFACE
1972                         },
1973                         {
1974                                 .ifnum = 3,
1975                                 .type = QUIRK_IGNORE_INTERFACE
1976                         },
1977                         {
1978                                 .ifnum = 4,
1979                                 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1980                         },
1981                         {
1982                                 .ifnum = 5,
1983                                 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1984                         },
1985                         {
1986                                 .ifnum = 6,
1987                                 .type = QUIRK_IGNORE_INTERFACE
1988                         },
1989                         {
1990                                 .ifnum = 7,
1991                                 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1992                         },
1993                         {
1994                                 .ifnum = 8,
1995                                 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1996                         },
1997                         {
1998                                 .ifnum = 9,
1999                                 .type = QUIRK_MIDI_MIDIMAN,
2000                                 .data = & (const struct snd_usb_midi_endpoint_info) {
2001                                         .out_cables = 0x0001,
2002                                         .in_cables  = 0x0001
2003                                 }
2004                         },
2005                         {
2006                                 .ifnum = -1
2007                         }
2008                 }
2009         }
2010 },
2011 {
2012         USB_DEVICE(0x0763, 0x2019),
2013         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2014                 /* .vendor_name = "M-Audio", */
2015                 /* .product_name = "Ozone Academic", */
2016                 .ifnum = QUIRK_ANY_INTERFACE,
2017                 .type = QUIRK_COMPOSITE,
2018                 .data = & (const struct snd_usb_audio_quirk[]) {
2019                         {
2020                                 .ifnum = 0,
2021                                 .type = QUIRK_AUDIO_STANDARD_INTERFACE
2022                         },
2023                         {
2024                                 .ifnum = 1,
2025                                 .type = QUIRK_AUDIO_STANDARD_INTERFACE
2026                         },
2027                         {
2028                                 .ifnum = 2,
2029                                 .type = QUIRK_AUDIO_STANDARD_INTERFACE
2030                         },
2031                         {
2032                                 .ifnum = 3,
2033                                 .type = QUIRK_MIDI_MIDIMAN,
2034                                 .data = & (const struct snd_usb_midi_endpoint_info) {
2035                                         .out_cables = 0x0001,
2036                                         .in_cables  = 0x0001
2037                                 }
2038                         },
2039                         {
2040                                 .ifnum = -1
2041                         }
2042                 }
2043         }
2044 },
2045 {
2046         USB_DEVICE_VENDOR_SPEC(0x0763, 0x2080),
2047         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2048                 /* .vendor_name = "M-Audio", */
2049                 /* .product_name = "Fast Track Ultra", */
2050                 .ifnum = QUIRK_ANY_INTERFACE,
2051                 .type = QUIRK_COMPOSITE,
2052                 .data = & (const struct snd_usb_audio_quirk[]) {
2053                         {
2054                                 .ifnum = 0,
2055                                 .type = QUIRK_AUDIO_STANDARD_MIXER,
2056                         },
2057                         {
2058                                 .ifnum = 1,
2059                                 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
2060                                 .data = & (const struct audioformat) {
2061                                         .formats = SNDRV_PCM_FMTBIT_S24_3LE,
2062                                         .channels = 8,
2063                                         .iface = 1,
2064                                         .altsetting = 1,
2065                                         .altset_idx = 1,
2066                                         .attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
2067                                         .endpoint = 0x01,
2068                                         .ep_attr = 0x09,
2069                                         .rates = SNDRV_PCM_RATE_44100 |
2070                                                  SNDRV_PCM_RATE_48000 |
2071                                                  SNDRV_PCM_RATE_88200 |
2072                                                  SNDRV_PCM_RATE_96000,
2073                                         .rate_min = 44100,
2074                                         .rate_max = 96000,
2075                                         .nr_rates = 4,
2076                                         .rate_table = (unsigned int[]) {
2077                                                 44100, 48000, 88200, 96000
2078                                         }
2079                                 }
2080                         },
2081                         {
2082                                 .ifnum = 2,
2083                                 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
2084                                 .data = & (const struct audioformat) {
2085                                         .formats = SNDRV_PCM_FMTBIT_S24_3LE,
2086                                         .channels = 8,
2087                                         .iface = 2,
2088                                         .altsetting = 1,
2089                                         .altset_idx = 1,
2090                                         .attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
2091                                         .endpoint = 0x81,
2092                                         .ep_attr = 0x05,
2093                                         .rates = SNDRV_PCM_RATE_44100 |
2094                                                  SNDRV_PCM_RATE_48000 |
2095                                                  SNDRV_PCM_RATE_88200 |
2096                                                  SNDRV_PCM_RATE_96000,
2097                                         .rate_min = 44100,
2098                                         .rate_max = 96000,
2099                                         .nr_rates = 4,
2100                                         .rate_table = (unsigned int[]) {
2101                                                 44100, 48000, 88200, 96000
2102                                         }
2103                                 }
2104                         },
2105                         /* interface 3 (MIDI) is standard compliant */
2106                         {
2107                                 .ifnum = -1
2108                         }
2109                 }
2110         }
2111 },
2112 {
2113         USB_DEVICE_VENDOR_SPEC(0x0763, 0x2081),
2114         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2115                 /* .vendor_name = "M-Audio", */
2116                 /* .product_name = "Fast Track Ultra 8R", */
2117                 .ifnum = QUIRK_ANY_INTERFACE,
2118                 .type = QUIRK_COMPOSITE,
2119                 .data = & (const struct snd_usb_audio_quirk[]) {
2120                         {
2121                                 .ifnum = 0,
2122                                 .type = QUIRK_AUDIO_STANDARD_MIXER,
2123                         },
2124                         {
2125                                 .ifnum = 1,
2126                                 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
2127                                 .data = & (const struct audioformat) {
2128                                         .formats = SNDRV_PCM_FMTBIT_S24_3LE,
2129                                         .channels = 8,
2130                                         .iface = 1,
2131                                         .altsetting = 1,
2132                                         .altset_idx = 1,
2133                                         .attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
2134                                         .endpoint = 0x01,
2135                                         .ep_attr = 0x09,
2136                                         .rates = SNDRV_PCM_RATE_44100 |
2137                                                  SNDRV_PCM_RATE_48000 |
2138                                                  SNDRV_PCM_RATE_88200 |
2139                                                  SNDRV_PCM_RATE_96000,
2140                                         .rate_min = 44100,
2141                                         .rate_max = 96000,
2142                                         .nr_rates = 4,
2143                                         .rate_table = (unsigned int[]) {
2144                                                         44100, 48000, 88200, 96000
2145                                         }
2146                                 }
2147                         },
2148                         {
2149                                 .ifnum = 2,
2150                                 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
2151                                 .data = & (const struct audioformat) {
2152                                         .formats = SNDRV_PCM_FMTBIT_S24_3LE,
2153                                         .channels = 8,
2154                                         .iface = 2,
2155                                         .altsetting = 1,
2156                                         .altset_idx = 1,
2157                                         .attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
2158                                         .endpoint = 0x81,
2159                                         .ep_attr = 0x05,
2160                                         .rates = SNDRV_PCM_RATE_44100 |
2161                                                  SNDRV_PCM_RATE_48000 |
2162                                                  SNDRV_PCM_RATE_88200 |
2163                                                  SNDRV_PCM_RATE_96000,
2164                                         .rate_min = 44100,
2165                                         .rate_max = 96000,
2166                                         .nr_rates = 4,
2167                                         .rate_table = (unsigned int[]) {
2168                                                 44100, 48000, 88200, 96000
2169                                         }
2170                                 }
2171                         },
2172                         /* interface 3 (MIDI) is standard compliant */
2173                         {
2174                                 .ifnum = -1
2175                         }
2176                 }
2177         }
2178 },
2179
2180 /* Casio devices */
2181 {
2182         USB_DEVICE(0x07cf, 0x6801),
2183         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2184                 .vendor_name = "Casio",
2185                 .product_name = "PL-40R",
2186                 .ifnum = 0,
2187                 .type = QUIRK_MIDI_YAMAHA
2188         }
2189 },
2190 {
2191         /* this ID is used by several devices without a product ID */
2192         USB_DEVICE(0x07cf, 0x6802),
2193         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2194                 .vendor_name = "Casio",
2195                 .product_name = "Keyboard",
2196                 .ifnum = 0,
2197                 .type = QUIRK_MIDI_YAMAHA
2198         }
2199 },
2200
2201 /* Mark of the Unicorn devices */
2202 {
2203         /* thanks to Robert A. Lerche <ral 'at' msbit.com> */
2204         .match_flags = USB_DEVICE_ID_MATCH_VENDOR |
2205                        USB_DEVICE_ID_MATCH_PRODUCT |
2206                        USB_DEVICE_ID_MATCH_DEV_SUBCLASS,
2207         .idVendor = 0x07fd,
2208         .idProduct = 0x0001,
2209         .bDeviceSubClass = 2,
2210         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2211                 .vendor_name = "MOTU",
2212                 .product_name = "Fastlane",
2213                 .ifnum = QUIRK_ANY_INTERFACE,
2214                 .type = QUIRK_COMPOSITE,
2215                 .data = & (const struct snd_usb_audio_quirk[]) {
2216                         {
2217                                 .ifnum = 0,
2218                                 .type = QUIRK_MIDI_RAW_BYTES
2219                         },
2220                         {
2221                                 .ifnum = 1,
2222                                 .type = QUIRK_IGNORE_INTERFACE
2223                         },
2224                         {
2225                                 .ifnum = -1
2226                         }
2227                 }
2228         }
2229 },
2230
2231 /* Emagic devices */
2232 {
2233         USB_DEVICE(0x086a, 0x0001),
2234         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2235                 .vendor_name = "Emagic",
2236                 /* .product_name = "Unitor8", */
2237                 .ifnum = 2,
2238                 .type = QUIRK_MIDI_EMAGIC,
2239                 .data = & (const struct snd_usb_midi_endpoint_info) {
2240                         .out_cables = 0x80ff,
2241                         .in_cables  = 0x80ff
2242                 }
2243         }
2244 },
2245 {
2246         USB_DEVICE(0x086a, 0x0002),
2247         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2248                 .vendor_name = "Emagic",
2249                 /* .product_name = "AMT8", */
2250                 .ifnum = 2,
2251                 .type = QUIRK_MIDI_EMAGIC,
2252                 .data = & (const struct snd_usb_midi_endpoint_info) {
2253                         .out_cables = 0x80ff,
2254                         .in_cables  = 0x80ff
2255                 }
2256         }
2257 },
2258 {
2259         USB_DEVICE(0x086a, 0x0003),
2260         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2261                 .vendor_name = "Emagic",
2262                 /* .product_name = "MT4", */
2263                 .ifnum = 2,
2264                 .type = QUIRK_MIDI_EMAGIC,
2265                 .data = & (const struct snd_usb_midi_endpoint_info) {
2266                         .out_cables = 0x800f,
2267                         .in_cables  = 0x8003
2268                 }
2269         }
2270 },
2271
2272 /* KORG devices */
2273 {
2274         USB_DEVICE_VENDOR_SPEC(0x0944, 0x0200),
2275         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2276                 .vendor_name = "KORG, Inc.",
2277                 /* .product_name = "PANDORA PX5D", */
2278                 .ifnum = 3,
2279                 .type = QUIRK_MIDI_STANDARD_INTERFACE,
2280         }
2281 },
2282
2283 /* AKAI devices */
2284 {
2285         USB_DEVICE(0x09e8, 0x0062),
2286         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2287                 .vendor_name = "AKAI",
2288                 .product_name = "MPD16",
2289                 .ifnum = 0,
2290                 .type = QUIRK_MIDI_AKAI,
2291         }
2292 },
2293
2294 /* TerraTec devices */
2295 {
2296         USB_DEVICE_VENDOR_SPEC(0x0ccd, 0x0012),
2297         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2298                 .vendor_name = "TerraTec",
2299                 .product_name = "PHASE 26",
2300                 .ifnum = 3,
2301                 .type = QUIRK_MIDI_STANDARD_INTERFACE
2302         }
2303 },
2304 {
2305         USB_DEVICE_VENDOR_SPEC(0x0ccd, 0x0013),
2306         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2307                 .vendor_name = "TerraTec",
2308                 .product_name = "PHASE 26",
2309                 .ifnum = 3,
2310                 .type = QUIRK_MIDI_STANDARD_INTERFACE
2311         }
2312 },
2313 {
2314         USB_DEVICE_VENDOR_SPEC(0x0ccd, 0x0014),
2315         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2316                 .vendor_name = "TerraTec",
2317                 .product_name = "PHASE 26",
2318                 .ifnum = 3,
2319                 .type = QUIRK_MIDI_STANDARD_INTERFACE
2320         }
2321 },
2322 {
2323         USB_DEVICE(0x0ccd, 0x0028),
2324         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2325                 .vendor_name = "TerraTec",
2326                 .product_name = "Aureon5.1MkII",
2327                 .ifnum = QUIRK_NO_INTERFACE
2328         }
2329 },
2330 {
2331         USB_DEVICE(0x0ccd, 0x0035),
2332         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2333                 .vendor_name = "Miditech",
2334                 .product_name = "Play'n Roll",
2335                 .ifnum = 0,
2336                 .type = QUIRK_MIDI_CME
2337         }
2338 },
2339
2340 /* Stanton/N2IT Final Scratch v1 device ('Scratchamp') */
2341 {
2342         USB_DEVICE(0x103d, 0x0100),
2343                 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2344                 .vendor_name = "Stanton",
2345                 .product_name = "ScratchAmp",
2346                 .ifnum = QUIRK_NO_INTERFACE
2347         }
2348 },
2349 {
2350         USB_DEVICE(0x103d, 0x0101),
2351                 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2352                 .vendor_name = "Stanton",
2353                 .product_name = "ScratchAmp",
2354                 .ifnum = QUIRK_NO_INTERFACE
2355         }
2356 },
2357
2358 /* Novation EMS devices */
2359 {
2360         USB_DEVICE_VENDOR_SPEC(0x1235, 0x0001),
2361         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2362                 .vendor_name = "Novation",
2363                 .product_name = "ReMOTE Audio/XStation",
2364                 .ifnum = 4,
2365                 .type = QUIRK_MIDI_NOVATION
2366         }
2367 },
2368 {
2369         USB_DEVICE_VENDOR_SPEC(0x1235, 0x0002),
2370         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2371                 .vendor_name = "Novation",
2372                 .product_name = "Speedio",
2373                 .ifnum = 3,
2374                 .type = QUIRK_MIDI_NOVATION
2375         }
2376 },
2377 {
2378         USB_DEVICE(0x1235, 0x000e),
2379         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2380                 /* .vendor_name = "Novation", */
2381                 /* .product_name = "Launchpad", */
2382                 .ifnum = 0,
2383                 .type = QUIRK_MIDI_RAW_BYTES
2384         }
2385 },
2386 {
2387         USB_DEVICE_VENDOR_SPEC(0x1235, 0x4661),
2388         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2389                 .vendor_name = "Novation",
2390                 .product_name = "ReMOTE25",
2391                 .ifnum = 0,
2392                 .type = QUIRK_MIDI_NOVATION
2393         }
2394 },
2395
2396 /* Access Music devices */
2397 {
2398         /* VirusTI Desktop */
2399         USB_DEVICE_VENDOR_SPEC(0x133e, 0x0815),
2400         .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
2401                 .ifnum = QUIRK_ANY_INTERFACE,
2402                 .type = QUIRK_COMPOSITE,
2403                 .data = &(const struct snd_usb_audio_quirk[]) {
2404                         {
2405                                 .ifnum = 3,
2406                                 .type = QUIRK_MIDI_FIXED_ENDPOINT,
2407                                 .data = &(const struct snd_usb_midi_endpoint_info) {
2408                                         .out_cables = 0x0003,
2409                                         .in_cables  = 0x0003
2410                                 }
2411                         },
2412                         {
2413                                 .ifnum = 4,
2414                                 .type = QUIRK_IGNORE_INTERFACE
2415                         },
2416                         {
2417                                 .ifnum = -1
2418                         }
2419                 }
2420         }
2421 },
2422
2423 /* */
2424 {
2425         /* aka. Serato Scratch Live DJ Box */
2426         USB_DEVICE(0x13e5, 0x0001),
2427         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2428                 .vendor_name = "Rane",
2429                 .product_name = "SL-1",
2430                 .ifnum = QUIRK_NO_INTERFACE
2431         }
2432 },
2433
2434 /* Native Instruments MK2 series */
2435 {
2436         /* Komplete Audio 6 */
2437         .match_flags = USB_DEVICE_ID_MATCH_DEVICE,
2438         .idVendor = 0x17cc,
2439         .idProduct = 0x1000,
2440 },
2441 {
2442         /* Traktor Audio 6 */
2443         .match_flags = USB_DEVICE_ID_MATCH_DEVICE,
2444         .idVendor = 0x17cc,
2445         .idProduct = 0x1010,
2446 },
2447 {
2448         /* Traktor Audio 10 */
2449         .match_flags = USB_DEVICE_ID_MATCH_DEVICE,
2450         .idVendor = 0x17cc,
2451         .idProduct = 0x1020,
2452 },
2453
2454 /* KeithMcMillen Stringport */
2455 {
2456         USB_DEVICE(0x1f38, 0x0001),
2457         .bInterfaceClass = USB_CLASS_AUDIO,
2458 },
2459
2460 /* Miditech devices */
2461 {
2462         USB_DEVICE(0x4752, 0x0011),
2463         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2464                 .vendor_name = "Miditech",
2465                 .product_name = "Midistart-2",
2466                 .ifnum = 0,
2467                 .type = QUIRK_MIDI_CME
2468         }
2469 },
2470
2471 /* Central Music devices */
2472 {
2473         /* this ID used by both Miditech MidiStudio-2 and CME UF-x */
2474         USB_DEVICE(0x7104, 0x2202),
2475         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2476                 .ifnum = 0,
2477                 .type = QUIRK_MIDI_CME
2478         }
2479 },
2480
2481 /* Hauppauge HVR-950Q and HVR-850 */
2482 {
2483         USB_DEVICE_VENDOR_SPEC(0x2040, 0x7200),
2484         .match_flags = USB_DEVICE_ID_MATCH_DEVICE |
2485                        USB_DEVICE_ID_MATCH_INT_CLASS |
2486                        USB_DEVICE_ID_MATCH_INT_SUBCLASS,
2487         .bInterfaceClass = USB_CLASS_AUDIO,
2488         .bInterfaceSubClass = USB_SUBCLASS_AUDIOCONTROL,
2489         .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
2490                 .vendor_name = "Hauppauge",
2491                 .product_name = "HVR-950Q",
2492                 .ifnum = QUIRK_ANY_INTERFACE,
2493                 .type = QUIRK_AUDIO_ALIGN_TRANSFER,
2494         }
2495 },
2496 {
2497         USB_DEVICE_VENDOR_SPEC(0x2040, 0x7240),
2498         .match_flags = USB_DEVICE_ID_MATCH_DEVICE |
2499                        USB_DEVICE_ID_MATCH_INT_CLASS |
2500                        USB_DEVICE_ID_MATCH_INT_SUBCLASS,
2501         .bInterfaceClass = USB_CLASS_AUDIO,
2502         .bInterfaceSubClass = USB_SUBCLASS_AUDIOCONTROL,
2503         .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
2504                 .vendor_name = "Hauppauge",
2505                 .product_name = "HVR-850",
2506                 .ifnum = QUIRK_ANY_INTERFACE,
2507                 .type = QUIRK_AUDIO_ALIGN_TRANSFER,
2508         }
2509 },
2510 {
2511         USB_DEVICE_VENDOR_SPEC(0x2040, 0x7210),
2512         .match_flags = USB_DEVICE_ID_MATCH_DEVICE |
2513                        USB_DEVICE_ID_MATCH_INT_CLASS |
2514                        USB_DEVICE_ID_MATCH_INT_SUBCLASS,
2515         .bInterfaceClass = USB_CLASS_AUDIO,
2516         .bInterfaceSubClass = USB_SUBCLASS_AUDIOCONTROL,
2517         .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
2518                 .vendor_name = "Hauppauge",
2519                 .product_name = "HVR-950Q",
2520                 .ifnum = QUIRK_ANY_INTERFACE,
2521                 .type = QUIRK_AUDIO_ALIGN_TRANSFER,
2522         }
2523 },
2524 {
2525         USB_DEVICE_VENDOR_SPEC(0x2040, 0x7217),
2526         .match_flags = USB_DEVICE_ID_MATCH_DEVICE |
2527                        USB_DEVICE_ID_MATCH_INT_CLASS |
2528                        USB_DEVICE_ID_MATCH_INT_SUBCLASS,
2529         .bInterfaceClass = USB_CLASS_AUDIO,
2530         .bInterfaceSubClass = USB_SUBCLASS_AUDIOCONTROL,
2531         .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
2532                 .vendor_name = "Hauppauge",
2533                 .product_name = "HVR-950Q",
2534                 .ifnum = QUIRK_ANY_INTERFACE,
2535                 .type = QUIRK_AUDIO_ALIGN_TRANSFER,
2536         }
2537 },
2538 {
2539         USB_DEVICE_VENDOR_SPEC(0x2040, 0x721b),
2540         .match_flags = USB_DEVICE_ID_MATCH_DEVICE |
2541                        USB_DEVICE_ID_MATCH_INT_CLASS |
2542                        USB_DEVICE_ID_MATCH_INT_SUBCLASS,
2543         .bInterfaceClass = USB_CLASS_AUDIO,
2544         .bInterfaceSubClass = USB_SUBCLASS_AUDIOCONTROL,
2545         .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
2546                 .vendor_name = "Hauppauge",
2547                 .product_name = "HVR-950Q",
2548                 .ifnum = QUIRK_ANY_INTERFACE,
2549                 .type = QUIRK_AUDIO_ALIGN_TRANSFER,
2550         }
2551 },
2552 {
2553         USB_DEVICE_VENDOR_SPEC(0x2040, 0x721e),
2554         .match_flags = USB_DEVICE_ID_MATCH_DEVICE |
2555                        USB_DEVICE_ID_MATCH_INT_CLASS |
2556                        USB_DEVICE_ID_MATCH_INT_SUBCLASS,
2557         .bInterfaceClass = USB_CLASS_AUDIO,
2558         .bInterfaceSubClass = USB_SUBCLASS_AUDIOCONTROL,
2559         .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
2560                 .vendor_name = "Hauppauge",
2561                 .product_name = "HVR-950Q",
2562                 .ifnum = QUIRK_ANY_INTERFACE,
2563                 .type = QUIRK_AUDIO_ALIGN_TRANSFER,
2564         }
2565 },
2566 {
2567         USB_DEVICE_VENDOR_SPEC(0x2040, 0x721f),
2568         .match_flags = USB_DEVICE_ID_MATCH_DEVICE |
2569                        USB_DEVICE_ID_MATCH_INT_CLASS |
2570                        USB_DEVICE_ID_MATCH_INT_SUBCLASS,
2571         .bInterfaceClass = USB_CLASS_AUDIO,
2572         .bInterfaceSubClass = USB_SUBCLASS_AUDIOCONTROL,
2573         .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
2574                 .vendor_name = "Hauppauge",
2575                 .product_name = "HVR-950Q",
2576                 .ifnum = QUIRK_ANY_INTERFACE,
2577                 .type = QUIRK_AUDIO_ALIGN_TRANSFER,
2578         }
2579 },
2580 {
2581         USB_DEVICE_VENDOR_SPEC(0x2040, 0x7280),
2582         .match_flags = USB_DEVICE_ID_MATCH_DEVICE |
2583                        USB_DEVICE_ID_MATCH_INT_CLASS |
2584                        USB_DEVICE_ID_MATCH_INT_SUBCLASS,
2585         .bInterfaceClass = USB_CLASS_AUDIO,
2586         .bInterfaceSubClass = USB_SUBCLASS_AUDIOCONTROL,
2587         .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
2588                 .vendor_name = "Hauppauge",
2589                 .product_name = "HVR-950Q",
2590                 .ifnum = QUIRK_ANY_INTERFACE,
2591                 .type = QUIRK_AUDIO_ALIGN_TRANSFER,
2592         }
2593 },
2594 {
2595         USB_DEVICE_VENDOR_SPEC(0x0fd9, 0x0008),
2596         .match_flags = USB_DEVICE_ID_MATCH_DEVICE |
2597                        USB_DEVICE_ID_MATCH_INT_CLASS |
2598                        USB_DEVICE_ID_MATCH_INT_SUBCLASS,
2599         .bInterfaceClass = USB_CLASS_AUDIO,
2600         .bInterfaceSubClass = USB_SUBCLASS_AUDIOCONTROL,
2601         .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
2602                 .vendor_name = "Hauppauge",
2603                 .product_name = "HVR-950Q",
2604                 .ifnum = QUIRK_ANY_INTERFACE,
2605                 .type = QUIRK_AUDIO_ALIGN_TRANSFER,
2606         }
2607 },
2608
2609 /* Digidesign Mbox */
2610 {
2611         /* Thanks to Clemens Ladisch <clemens@ladisch.de> */
2612         USB_DEVICE(0x0dba, 0x1000),
2613         .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
2614                 .vendor_name = "Digidesign",
2615                 .product_name = "MBox",
2616                 .ifnum = QUIRK_ANY_INTERFACE,
2617                 .type = QUIRK_COMPOSITE,
2618                 .data = (const struct snd_usb_audio_quirk[]){
2619                         {
2620                                 .ifnum = 0,
2621                                 .type = QUIRK_IGNORE_INTERFACE,
2622                         },
2623                         {
2624                                 .ifnum = 1,
2625                                 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
2626                                 .data = &(const struct audioformat) {
2627                                         .formats = SNDRV_PCM_FMTBIT_S24_3BE,
2628                                         .channels = 2,
2629                                         .iface = 1,
2630                                         .altsetting = 1,
2631                                         .altset_idx = 1,
2632                                         .attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
2633                                         .endpoint = 0x02,
2634                                         .ep_attr = 0x01,
2635                                         .maxpacksize = 0x130,
2636                                         .rates = SNDRV_PCM_RATE_44100 |
2637                                                  SNDRV_PCM_RATE_48000,
2638                                         .rate_min = 44100,
2639                                         .rate_max = 48000,
2640                                         .nr_rates = 2,
2641                                         .rate_table = (unsigned int[]) {
2642                                                 44100, 48000
2643                                         }
2644                                 }
2645                         },
2646                         {
2647                                 .ifnum = -1
2648                         }
2649                 }
2650
2651         }
2652 },
2653
2654 {
2655         /*
2656          * Some USB MIDI devices don't have an audio control interface,
2657          * so we have to grab MIDI streaming interfaces here.
2658          */
2659         .match_flags = USB_DEVICE_ID_MATCH_INT_CLASS |
2660                        USB_DEVICE_ID_MATCH_INT_SUBCLASS,
2661         .bInterfaceClass = USB_CLASS_AUDIO,
2662         .bInterfaceSubClass = USB_SUBCLASS_MIDISTREAMING,
2663         .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2664                 .ifnum = QUIRK_ANY_INTERFACE,
2665                 .type = QUIRK_MIDI_STANDARD_INTERFACE
2666         }
2667 },
2668
2669 #undef USB_DEVICE_VENDOR_SPEC