2 * ALSA USB Audio Driver
4 * Copyright (c) 2002 by Takashi Iwai <tiwai@suse.de>,
5 * Clemens Ladisch <clemens@ladisch.de>
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.
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.
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
24 * The contents of this file are part of the driver's id_table.
26 * In a perfect world, this file would be empty.
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.)
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, \
40 .bInterfaceClass = USB_CLASS_VENDOR_SPEC
44 USB_DEVICE(0x0403, 0xb8d8),
45 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
46 /* .vendor_name = "STARR LABS", */
47 /* .product_name = "Starr Labs MIDI USB device", */
49 .type = QUIRK_MIDI_FTDI
55 USB_DEVICE(0x041e, 0x0005),
56 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
58 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
59 .data = &(const struct audioformat) {
60 .formats = SNDRV_PCM_FMTBIT_S16_LE,
66 .ep_attr = USB_ENDPOINT_XFER_ISOC,
68 .rates = SNDRV_PCM_RATE_CONTINUOUS,
75 /* Creative/Toshiba Multimedia Center SB-0500 */
77 USB_DEVICE(0x041e, 0x3048),
78 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
79 .vendor_name = "Toshiba",
80 .product_name = "SB-0500",
81 .ifnum = QUIRK_NO_INTERFACE
85 /* Creative/E-Mu devices */
87 USB_DEVICE(0x041e, 0x3010),
88 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
89 .vendor_name = "Creative Labs",
90 .product_name = "Sound Blaster MP3+",
91 .ifnum = QUIRK_NO_INTERFACE
96 .match_flags = USB_DEVICE_ID_MATCH_DEVICE,
99 .bInterfaceClass = USB_CLASS_AUDIO,
103 .match_flags = USB_DEVICE_ID_MATCH_DEVICE,
106 .bInterfaceClass = USB_CLASS_AUDIO,
109 /* E-Mu Tracker Pre */
110 .match_flags = USB_DEVICE_ID_MATCH_DEVICE,
113 .bInterfaceClass = USB_CLASS_AUDIO,
117 .match_flags = USB_DEVICE_ID_MATCH_DEVICE,
120 .bInterfaceClass = USB_CLASS_AUDIO,
125 * When not ignored, causes instability issues for some users, forcing them to
126 * blacklist the entire module.
129 USB_DEVICE(0x0424, 0xb832),
130 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
131 .vendor_name = "Standard Microsystems Corp.",
132 .product_name = "HP Wireless Audio",
133 .ifnum = QUIRK_ANY_INTERFACE,
134 .type = QUIRK_COMPOSITE,
135 .data = (const struct snd_usb_audio_quirk[]) {
139 .type = QUIRK_IGNORE_INTERFACE,
144 .type = QUIRK_IGNORE_INTERFACE,
149 .type = QUIRK_IGNORE_INTERFACE,
151 /* HID Device, .ifnum = 3 */
160 * Logitech QuickCam: bDeviceClass is vendor-specific, so generic interface
161 * class matches do not take effect without an explicit ID match.
164 .match_flags = USB_DEVICE_ID_MATCH_DEVICE |
165 USB_DEVICE_ID_MATCH_INT_CLASS |
166 USB_DEVICE_ID_MATCH_INT_SUBCLASS,
169 .bInterfaceClass = USB_CLASS_AUDIO,
170 .bInterfaceSubClass = USB_SUBCLASS_AUDIOCONTROL
173 .match_flags = USB_DEVICE_ID_MATCH_DEVICE |
174 USB_DEVICE_ID_MATCH_INT_CLASS |
175 USB_DEVICE_ID_MATCH_INT_SUBCLASS,
178 .bInterfaceClass = USB_CLASS_AUDIO,
179 .bInterfaceSubClass = USB_SUBCLASS_AUDIOCONTROL
182 .match_flags = USB_DEVICE_ID_MATCH_DEVICE |
183 USB_DEVICE_ID_MATCH_INT_CLASS |
184 USB_DEVICE_ID_MATCH_INT_SUBCLASS,
187 .bInterfaceClass = USB_CLASS_AUDIO,
188 .bInterfaceSubClass = USB_SUBCLASS_AUDIOCONTROL
191 .match_flags = USB_DEVICE_ID_MATCH_DEVICE |
192 USB_DEVICE_ID_MATCH_INT_CLASS |
193 USB_DEVICE_ID_MATCH_INT_SUBCLASS,
196 .bInterfaceClass = USB_CLASS_AUDIO,
197 .bInterfaceSubClass = USB_SUBCLASS_AUDIOCONTROL
200 .match_flags = USB_DEVICE_ID_MATCH_DEVICE |
201 USB_DEVICE_ID_MATCH_INT_CLASS |
202 USB_DEVICE_ID_MATCH_INT_SUBCLASS,
205 .bInterfaceClass = USB_CLASS_AUDIO,
206 .bInterfaceSubClass = USB_SUBCLASS_AUDIOCONTROL
209 .match_flags = USB_DEVICE_ID_MATCH_DEVICE |
210 USB_DEVICE_ID_MATCH_INT_CLASS |
211 USB_DEVICE_ID_MATCH_INT_SUBCLASS,
214 .bInterfaceClass = USB_CLASS_AUDIO,
215 .bInterfaceSubClass = USB_SUBCLASS_AUDIOCONTROL
218 USB_DEVICE(0x046d, 0x0990),
219 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
220 .vendor_name = "Logitech, Inc.",
221 .product_name = "QuickCam Pro 9000",
222 .ifnum = QUIRK_NO_INTERFACE
230 #define YAMAHA_DEVICE(id, name) { \
231 USB_DEVICE(0x0499, id), \
232 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { \
233 .vendor_name = "Yamaha", \
234 .product_name = name, \
235 .ifnum = QUIRK_ANY_INTERFACE, \
236 .type = QUIRK_MIDI_YAMAHA \
239 #define YAMAHA_INTERFACE(id, intf, name) { \
240 USB_DEVICE_VENDOR_SPEC(0x0499, id), \
241 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { \
242 .vendor_name = "Yamaha", \
243 .product_name = name, \
245 .type = QUIRK_MIDI_YAMAHA \
248 YAMAHA_DEVICE(0x1000, "UX256"),
249 YAMAHA_DEVICE(0x1001, "MU1000"),
250 YAMAHA_DEVICE(0x1002, "MU2000"),
251 YAMAHA_DEVICE(0x1003, "MU500"),
252 YAMAHA_INTERFACE(0x1004, 3, "UW500"),
253 YAMAHA_DEVICE(0x1005, "MOTIF6"),
254 YAMAHA_DEVICE(0x1006, "MOTIF7"),
255 YAMAHA_DEVICE(0x1007, "MOTIF8"),
256 YAMAHA_DEVICE(0x1008, "UX96"),
257 YAMAHA_DEVICE(0x1009, "UX16"),
258 YAMAHA_INTERFACE(0x100a, 3, "EOS BX"),
259 YAMAHA_DEVICE(0x100c, "UC-MX"),
260 YAMAHA_DEVICE(0x100d, "UC-KX"),
261 YAMAHA_DEVICE(0x100e, "S08"),
262 YAMAHA_DEVICE(0x100f, "CLP-150"),
263 YAMAHA_DEVICE(0x1010, "CLP-170"),
264 YAMAHA_DEVICE(0x1011, "P-250"),
265 YAMAHA_DEVICE(0x1012, "TYROS"),
266 YAMAHA_DEVICE(0x1013, "PF-500"),
267 YAMAHA_DEVICE(0x1014, "S90"),
268 YAMAHA_DEVICE(0x1015, "MOTIF-R"),
269 YAMAHA_DEVICE(0x1016, "MDP-5"),
270 YAMAHA_DEVICE(0x1017, "CVP-204"),
271 YAMAHA_DEVICE(0x1018, "CVP-206"),
272 YAMAHA_DEVICE(0x1019, "CVP-208"),
273 YAMAHA_DEVICE(0x101a, "CVP-210"),
274 YAMAHA_DEVICE(0x101b, "PSR-1100"),
275 YAMAHA_DEVICE(0x101c, "PSR-2100"),
276 YAMAHA_DEVICE(0x101d, "CLP-175"),
277 YAMAHA_DEVICE(0x101e, "PSR-K1"),
278 YAMAHA_DEVICE(0x101f, "EZ-J24"),
279 YAMAHA_DEVICE(0x1020, "EZ-250i"),
280 YAMAHA_DEVICE(0x1021, "MOTIF ES 6"),
281 YAMAHA_DEVICE(0x1022, "MOTIF ES 7"),
282 YAMAHA_DEVICE(0x1023, "MOTIF ES 8"),
283 YAMAHA_DEVICE(0x1024, "CVP-301"),
284 YAMAHA_DEVICE(0x1025, "CVP-303"),
285 YAMAHA_DEVICE(0x1026, "CVP-305"),
286 YAMAHA_DEVICE(0x1027, "CVP-307"),
287 YAMAHA_DEVICE(0x1028, "CVP-309"),
288 YAMAHA_DEVICE(0x1029, "CVP-309GP"),
289 YAMAHA_DEVICE(0x102a, "PSR-1500"),
290 YAMAHA_DEVICE(0x102b, "PSR-3000"),
291 YAMAHA_DEVICE(0x102e, "ELS-01/01C"),
292 YAMAHA_DEVICE(0x1030, "PSR-295/293"),
293 YAMAHA_DEVICE(0x1031, "DGX-205/203"),
294 YAMAHA_DEVICE(0x1032, "DGX-305"),
295 YAMAHA_DEVICE(0x1033, "DGX-505"),
296 YAMAHA_DEVICE(0x1034, NULL),
297 YAMAHA_DEVICE(0x1035, NULL),
298 YAMAHA_DEVICE(0x1036, NULL),
299 YAMAHA_DEVICE(0x1037, NULL),
300 YAMAHA_DEVICE(0x1038, NULL),
301 YAMAHA_DEVICE(0x1039, NULL),
302 YAMAHA_DEVICE(0x103a, NULL),
303 YAMAHA_DEVICE(0x103b, NULL),
304 YAMAHA_DEVICE(0x103c, NULL),
305 YAMAHA_DEVICE(0x103d, NULL),
306 YAMAHA_DEVICE(0x103e, NULL),
307 YAMAHA_DEVICE(0x103f, NULL),
308 YAMAHA_DEVICE(0x1040, NULL),
309 YAMAHA_DEVICE(0x1041, NULL),
310 YAMAHA_DEVICE(0x1042, NULL),
311 YAMAHA_DEVICE(0x1043, NULL),
312 YAMAHA_DEVICE(0x1044, NULL),
313 YAMAHA_DEVICE(0x1045, NULL),
314 YAMAHA_INTERFACE(0x104e, 0, NULL),
315 YAMAHA_DEVICE(0x104f, NULL),
316 YAMAHA_DEVICE(0x1050, NULL),
317 YAMAHA_DEVICE(0x1051, NULL),
318 YAMAHA_DEVICE(0x1052, NULL),
319 YAMAHA_INTERFACE(0x1053, 0, NULL),
320 YAMAHA_INTERFACE(0x1054, 0, NULL),
321 YAMAHA_DEVICE(0x1055, NULL),
322 YAMAHA_DEVICE(0x1056, NULL),
323 YAMAHA_DEVICE(0x1057, NULL),
324 YAMAHA_DEVICE(0x1058, NULL),
325 YAMAHA_DEVICE(0x1059, NULL),
326 YAMAHA_DEVICE(0x105a, NULL),
327 YAMAHA_DEVICE(0x105b, NULL),
328 YAMAHA_DEVICE(0x105c, NULL),
329 YAMAHA_DEVICE(0x105d, NULL),
331 USB_DEVICE(0x0499, 0x1503),
332 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
333 /* .vendor_name = "Yamaha", */
334 /* .product_name = "MOX6/MOX8", */
335 .ifnum = QUIRK_ANY_INTERFACE,
336 .type = QUIRK_COMPOSITE,
337 .data = (const struct snd_usb_audio_quirk[]) {
340 .type = QUIRK_AUDIO_STANDARD_INTERFACE
344 .type = QUIRK_AUDIO_STANDARD_INTERFACE
348 .type = QUIRK_MIDI_YAMAHA
357 USB_DEVICE(0x0499, 0x1507),
358 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
359 /* .vendor_name = "Yamaha", */
360 /* .product_name = "THR10", */
361 .ifnum = QUIRK_ANY_INTERFACE,
362 .type = QUIRK_COMPOSITE,
363 .data = (const struct snd_usb_audio_quirk[]) {
366 .type = QUIRK_AUDIO_STANDARD_INTERFACE
370 .type = QUIRK_AUDIO_STANDARD_INTERFACE
374 .type = QUIRK_MIDI_YAMAHA
383 USB_DEVICE(0x0499, 0x150a),
384 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
385 /* .vendor_name = "Yamaha", */
386 /* .product_name = "THR5A", */
387 .ifnum = QUIRK_ANY_INTERFACE,
388 .type = QUIRK_COMPOSITE,
389 .data = (const struct snd_usb_audio_quirk[]) {
392 .type = QUIRK_AUDIO_STANDARD_INTERFACE
396 .type = QUIRK_AUDIO_STANDARD_INTERFACE
400 .type = QUIRK_MIDI_YAMAHA
409 USB_DEVICE(0x0499, 0x150c),
410 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
411 /* .vendor_name = "Yamaha", */
412 /* .product_name = "THR10C", */
413 .ifnum = QUIRK_ANY_INTERFACE,
414 .type = QUIRK_COMPOSITE,
415 .data = (const struct snd_usb_audio_quirk[]) {
418 .type = QUIRK_AUDIO_STANDARD_INTERFACE
422 .type = QUIRK_AUDIO_STANDARD_INTERFACE
426 .type = QUIRK_MIDI_YAMAHA
434 YAMAHA_DEVICE(0x2000, "DGP-7"),
435 YAMAHA_DEVICE(0x2001, "DGP-5"),
436 YAMAHA_DEVICE(0x2002, NULL),
437 YAMAHA_DEVICE(0x2003, NULL),
438 YAMAHA_DEVICE(0x5000, "CS1D"),
439 YAMAHA_DEVICE(0x5001, "DSP1D"),
440 YAMAHA_DEVICE(0x5002, "DME32"),
441 YAMAHA_DEVICE(0x5003, "DM2000"),
442 YAMAHA_DEVICE(0x5004, "02R96"),
443 YAMAHA_DEVICE(0x5005, "ACU16-C"),
444 YAMAHA_DEVICE(0x5006, "NHB32-C"),
445 YAMAHA_DEVICE(0x5007, "DM1000"),
446 YAMAHA_DEVICE(0x5008, "01V96"),
447 YAMAHA_DEVICE(0x5009, "SPX2000"),
448 YAMAHA_DEVICE(0x500a, "PM5D"),
449 YAMAHA_DEVICE(0x500b, "DME64N"),
450 YAMAHA_DEVICE(0x500c, "DME24N"),
451 YAMAHA_DEVICE(0x500d, NULL),
452 YAMAHA_DEVICE(0x500e, NULL),
453 YAMAHA_DEVICE(0x500f, NULL),
454 YAMAHA_DEVICE(0x7000, "DTX"),
455 YAMAHA_DEVICE(0x7010, "UB99"),
457 #undef YAMAHA_INTERFACE
458 /* this catches most recent vendor-specific Yamaha devices */
460 .match_flags = USB_DEVICE_ID_MATCH_VENDOR |
461 USB_DEVICE_ID_MATCH_INT_CLASS,
463 .bInterfaceClass = USB_CLASS_VENDOR_SPEC,
464 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
465 .ifnum = QUIRK_ANY_INTERFACE,
466 .type = QUIRK_AUTODETECT
471 * Roland/RolandED/Edirol/BOSS devices
474 USB_DEVICE(0x0582, 0x0000),
475 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
476 .vendor_name = "Roland",
477 .product_name = "UA-100",
478 .ifnum = QUIRK_ANY_INTERFACE,
479 .type = QUIRK_COMPOSITE,
480 .data = (const struct snd_usb_audio_quirk[]) {
483 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
484 .data = & (const struct audioformat) {
485 .formats = SNDRV_PCM_FMTBIT_S16_LE,
493 .rates = SNDRV_PCM_RATE_CONTINUOUS,
500 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
501 .data = & (const struct audioformat) {
502 .formats = SNDRV_PCM_FMTBIT_S16_LE,
507 .attributes = UAC_EP_CS_ATTR_FILL_MAX,
510 .rates = SNDRV_PCM_RATE_CONTINUOUS,
517 .type = QUIRK_MIDI_FIXED_ENDPOINT,
518 .data = & (const struct snd_usb_midi_endpoint_info) {
519 .out_cables = 0x0007,
530 USB_DEVICE(0x0582, 0x0002),
531 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
532 .vendor_name = "EDIROL",
533 .product_name = "UM-4",
534 .ifnum = QUIRK_ANY_INTERFACE,
535 .type = QUIRK_COMPOSITE,
536 .data = (const struct snd_usb_audio_quirk[]) {
539 .type = QUIRK_IGNORE_INTERFACE
543 .type = QUIRK_IGNORE_INTERFACE
547 .type = QUIRK_MIDI_FIXED_ENDPOINT,
548 .data = & (const struct snd_usb_midi_endpoint_info) {
549 .out_cables = 0x000f,
560 USB_DEVICE(0x0582, 0x0003),
561 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
562 .vendor_name = "Roland",
563 .product_name = "SC-8850",
564 .ifnum = QUIRK_ANY_INTERFACE,
565 .type = QUIRK_COMPOSITE,
566 .data = (const struct snd_usb_audio_quirk[]) {
569 .type = QUIRK_IGNORE_INTERFACE
573 .type = QUIRK_IGNORE_INTERFACE
577 .type = QUIRK_MIDI_FIXED_ENDPOINT,
578 .data = & (const struct snd_usb_midi_endpoint_info) {
579 .out_cables = 0x003f,
590 USB_DEVICE(0x0582, 0x0004),
591 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
592 .vendor_name = "Roland",
593 .product_name = "U-8",
594 .ifnum = QUIRK_ANY_INTERFACE,
595 .type = QUIRK_COMPOSITE,
596 .data = (const struct snd_usb_audio_quirk[]) {
599 .type = QUIRK_IGNORE_INTERFACE
603 .type = QUIRK_IGNORE_INTERFACE
607 .type = QUIRK_MIDI_FIXED_ENDPOINT,
608 .data = & (const struct snd_usb_midi_endpoint_info) {
609 .out_cables = 0x0005,
620 /* Has ID 0x0099 when not in "Advanced Driver" mode.
621 * The UM-2EX has only one input, but we cannot detect this. */
622 USB_DEVICE(0x0582, 0x0005),
623 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
624 .vendor_name = "EDIROL",
625 .product_name = "UM-2",
626 .ifnum = QUIRK_ANY_INTERFACE,
627 .type = QUIRK_COMPOSITE,
628 .data = (const struct snd_usb_audio_quirk[]) {
631 .type = QUIRK_IGNORE_INTERFACE
635 .type = QUIRK_IGNORE_INTERFACE
639 .type = QUIRK_MIDI_FIXED_ENDPOINT,
640 .data = & (const struct snd_usb_midi_endpoint_info) {
641 .out_cables = 0x0003,
652 USB_DEVICE(0x0582, 0x0007),
653 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
654 .vendor_name = "Roland",
655 .product_name = "SC-8820",
656 .ifnum = QUIRK_ANY_INTERFACE,
657 .type = QUIRK_COMPOSITE,
658 .data = (const struct snd_usb_audio_quirk[]) {
661 .type = QUIRK_IGNORE_INTERFACE
665 .type = QUIRK_IGNORE_INTERFACE
669 .type = QUIRK_MIDI_FIXED_ENDPOINT,
670 .data = & (const struct snd_usb_midi_endpoint_info) {
671 .out_cables = 0x0013,
682 USB_DEVICE(0x0582, 0x0008),
683 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
684 .vendor_name = "Roland",
685 .product_name = "PC-300",
686 .ifnum = QUIRK_ANY_INTERFACE,
687 .type = QUIRK_COMPOSITE,
688 .data = (const struct snd_usb_audio_quirk[]) {
691 .type = QUIRK_IGNORE_INTERFACE
695 .type = QUIRK_IGNORE_INTERFACE
699 .type = QUIRK_MIDI_FIXED_ENDPOINT,
700 .data = & (const struct snd_usb_midi_endpoint_info) {
701 .out_cables = 0x0001,
712 /* has ID 0x009d when not in "Advanced Driver" mode */
713 USB_DEVICE(0x0582, 0x0009),
714 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
715 .vendor_name = "EDIROL",
716 .product_name = "UM-1",
717 .ifnum = QUIRK_ANY_INTERFACE,
718 .type = QUIRK_COMPOSITE,
719 .data = (const struct snd_usb_audio_quirk[]) {
722 .type = QUIRK_IGNORE_INTERFACE
726 .type = QUIRK_IGNORE_INTERFACE
730 .type = QUIRK_MIDI_FIXED_ENDPOINT,
731 .data = & (const struct snd_usb_midi_endpoint_info) {
732 .out_cables = 0x0001,
743 USB_DEVICE(0x0582, 0x000b),
744 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
745 .vendor_name = "Roland",
746 .product_name = "SK-500",
747 .ifnum = QUIRK_ANY_INTERFACE,
748 .type = QUIRK_COMPOSITE,
749 .data = (const struct snd_usb_audio_quirk[]) {
752 .type = QUIRK_IGNORE_INTERFACE
756 .type = QUIRK_IGNORE_INTERFACE
760 .type = QUIRK_MIDI_FIXED_ENDPOINT,
761 .data = & (const struct snd_usb_midi_endpoint_info) {
762 .out_cables = 0x0013,
773 /* thanks to Emiliano Grilli <emillo@libero.it>
774 * for helping researching this data */
775 USB_DEVICE(0x0582, 0x000c),
776 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
777 .vendor_name = "Roland",
778 .product_name = "SC-D70",
779 .ifnum = QUIRK_ANY_INTERFACE,
780 .type = QUIRK_COMPOSITE,
781 .data = (const struct snd_usb_audio_quirk[]) {
784 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
785 .data = & (const struct audioformat) {
786 .formats = SNDRV_PCM_FMTBIT_S24_3LE,
794 .rates = SNDRV_PCM_RATE_CONTINUOUS,
801 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
802 .data = & (const struct audioformat) {
803 .formats = SNDRV_PCM_FMTBIT_S24_3LE,
811 .rates = SNDRV_PCM_RATE_CONTINUOUS,
818 .type = QUIRK_MIDI_FIXED_ENDPOINT,
819 .data = & (const struct snd_usb_midi_endpoint_info) {
820 .out_cables = 0x0007,
831 * This quirk is for the "Advanced Driver" mode of the Edirol UA-5.
832 * If the advanced mode switch at the back of the unit is off, the
833 * UA-5 has ID 0x0582/0x0011 and is standard compliant (no quirks),
834 * but offers only 16-bit PCM.
835 * In advanced mode, the UA-5 will output S24_3LE samples (two
836 * channels) at the rate indicated on the front switch, including
837 * the 96kHz sample rate.
839 USB_DEVICE(0x0582, 0x0010),
840 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
841 .vendor_name = "EDIROL",
842 .product_name = "UA-5",
843 .ifnum = QUIRK_ANY_INTERFACE,
844 .type = QUIRK_COMPOSITE,
845 .data = (const struct snd_usb_audio_quirk[]) {
848 .type = QUIRK_AUDIO_STANDARD_INTERFACE
852 .type = QUIRK_AUDIO_STANDARD_INTERFACE
861 /* has ID 0x0013 when not in "Advanced Driver" mode */
862 USB_DEVICE(0x0582, 0x0012),
863 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
864 .vendor_name = "Roland",
865 .product_name = "XV-5050",
867 .type = QUIRK_MIDI_FIXED_ENDPOINT,
868 .data = & (const struct snd_usb_midi_endpoint_info) {
869 .out_cables = 0x0001,
875 /* has ID 0x0015 when not in "Advanced Driver" mode */
876 USB_DEVICE(0x0582, 0x0014),
877 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
878 .vendor_name = "EDIROL",
879 .product_name = "UM-880",
881 .type = QUIRK_MIDI_FIXED_ENDPOINT,
882 .data = & (const struct snd_usb_midi_endpoint_info) {
883 .out_cables = 0x01ff,
889 /* has ID 0x0017 when not in "Advanced Driver" mode */
890 USB_DEVICE(0x0582, 0x0016),
891 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
892 .vendor_name = "EDIROL",
893 .product_name = "SD-90",
894 .ifnum = QUIRK_ANY_INTERFACE,
895 .type = QUIRK_COMPOSITE,
896 .data = (const struct snd_usb_audio_quirk[]) {
899 .type = QUIRK_AUDIO_STANDARD_INTERFACE
903 .type = QUIRK_AUDIO_STANDARD_INTERFACE
907 .type = QUIRK_MIDI_FIXED_ENDPOINT,
908 .data = & (const struct snd_usb_midi_endpoint_info) {
909 .out_cables = 0x000f,
920 /* has ID 0x001c when not in "Advanced Driver" mode */
921 USB_DEVICE(0x0582, 0x001b),
922 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
923 .vendor_name = "Roland",
924 .product_name = "MMP-2",
925 .ifnum = QUIRK_ANY_INTERFACE,
926 .type = QUIRK_COMPOSITE,
927 .data = (const struct snd_usb_audio_quirk[]) {
930 .type = QUIRK_IGNORE_INTERFACE
934 .type = QUIRK_IGNORE_INTERFACE
938 .type = QUIRK_MIDI_FIXED_ENDPOINT,
939 .data = & (const struct snd_usb_midi_endpoint_info) {
940 .out_cables = 0x0001,
951 /* has ID 0x001e when not in "Advanced Driver" mode */
952 USB_DEVICE(0x0582, 0x001d),
953 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
954 .vendor_name = "Roland",
955 .product_name = "V-SYNTH",
957 .type = QUIRK_MIDI_FIXED_ENDPOINT,
958 .data = & (const struct snd_usb_midi_endpoint_info) {
959 .out_cables = 0x0001,
965 /* has ID 0x0024 when not in "Advanced Driver" mode */
966 USB_DEVICE(0x0582, 0x0023),
967 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
968 .vendor_name = "EDIROL",
969 .product_name = "UM-550",
971 .type = QUIRK_MIDI_FIXED_ENDPOINT,
972 .data = & (const struct snd_usb_midi_endpoint_info) {
973 .out_cables = 0x003f,
980 * This quirk is for the "Advanced Driver" mode. If off, the UA-20
981 * has ID 0x0026 and is standard compliant, but has only 16-bit PCM
984 USB_DEVICE(0x0582, 0x0025),
985 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
986 .vendor_name = "EDIROL",
987 .product_name = "UA-20",
988 .ifnum = QUIRK_ANY_INTERFACE,
989 .type = QUIRK_COMPOSITE,
990 .data = (const struct snd_usb_audio_quirk[]) {
993 .type = QUIRK_IGNORE_INTERFACE
997 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
998 .data = & (const struct audioformat) {
999 .formats = SNDRV_PCM_FMTBIT_S24_3LE,
1007 .rates = SNDRV_PCM_RATE_CONTINUOUS,
1014 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
1015 .data = & (const struct audioformat) {
1016 .formats = SNDRV_PCM_FMTBIT_S24_3LE,
1024 .rates = SNDRV_PCM_RATE_CONTINUOUS,
1031 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1032 .data = & (const struct snd_usb_midi_endpoint_info) {
1033 .out_cables = 0x0001,
1044 /* has ID 0x0028 when not in "Advanced Driver" mode */
1045 USB_DEVICE(0x0582, 0x0027),
1046 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1047 .vendor_name = "EDIROL",
1048 .product_name = "SD-20",
1050 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1051 .data = & (const struct snd_usb_midi_endpoint_info) {
1052 .out_cables = 0x0003,
1058 /* has ID 0x002a when not in "Advanced Driver" mode */
1059 USB_DEVICE(0x0582, 0x0029),
1060 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1061 .vendor_name = "EDIROL",
1062 .product_name = "SD-80",
1064 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1065 .data = & (const struct snd_usb_midi_endpoint_info) {
1066 .out_cables = 0x000f,
1072 * This quirk is for the "Advanced" modes of the Edirol UA-700.
1073 * If the sample format switch is not in an advanced setting, the
1074 * UA-700 has ID 0x0582/0x002c and is standard compliant (no quirks),
1075 * but offers only 16-bit PCM and no MIDI.
1077 USB_DEVICE_VENDOR_SPEC(0x0582, 0x002b),
1078 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1079 .vendor_name = "EDIROL",
1080 .product_name = "UA-700",
1081 .ifnum = QUIRK_ANY_INTERFACE,
1082 .type = QUIRK_COMPOSITE,
1083 .data = (const struct snd_usb_audio_quirk[]) {
1086 .type = QUIRK_AUDIO_EDIROL_UAXX
1090 .type = QUIRK_AUDIO_EDIROL_UAXX
1094 .type = QUIRK_AUDIO_EDIROL_UAXX
1103 /* has ID 0x002e when not in "Advanced Driver" mode */
1104 USB_DEVICE(0x0582, 0x002d),
1105 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1106 .vendor_name = "Roland",
1107 .product_name = "XV-2020",
1109 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1110 .data = & (const struct snd_usb_midi_endpoint_info) {
1111 .out_cables = 0x0001,
1117 /* has ID 0x0030 when not in "Advanced Driver" mode */
1118 USB_DEVICE(0x0582, 0x002f),
1119 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1120 .vendor_name = "Roland",
1121 .product_name = "VariOS",
1123 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1124 .data = & (const struct snd_usb_midi_endpoint_info) {
1125 .out_cables = 0x0007,
1131 /* has ID 0x0034 when not in "Advanced Driver" mode */
1132 USB_DEVICE(0x0582, 0x0033),
1133 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1134 .vendor_name = "EDIROL",
1135 .product_name = "PCR",
1137 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1138 .data = & (const struct snd_usb_midi_endpoint_info) {
1139 .out_cables = 0x0003,
1146 * Has ID 0x0038 when not in "Advanced Driver" mode;
1147 * later revisions use IDs 0x0054 and 0x00a2.
1149 USB_DEVICE(0x0582, 0x0037),
1150 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1151 .vendor_name = "Roland",
1152 .product_name = "Digital Piano",
1154 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1155 .data = & (const struct snd_usb_midi_endpoint_info) {
1156 .out_cables = 0x0001,
1163 * This quirk is for the "Advanced Driver" mode. If off, the GS-10
1164 * has ID 0x003c and is standard compliant, but has only 16-bit PCM
1167 USB_DEVICE_VENDOR_SPEC(0x0582, 0x003b),
1168 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1169 .vendor_name = "BOSS",
1170 .product_name = "GS-10",
1171 .ifnum = QUIRK_ANY_INTERFACE,
1172 .type = QUIRK_COMPOSITE,
1173 .data = & (const struct snd_usb_audio_quirk[]) {
1176 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1180 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1184 .type = QUIRK_MIDI_STANDARD_INTERFACE
1193 /* has ID 0x0041 when not in "Advanced Driver" mode */
1194 USB_DEVICE(0x0582, 0x0040),
1195 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1196 .vendor_name = "Roland",
1197 .product_name = "GI-20",
1199 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1200 .data = & (const struct snd_usb_midi_endpoint_info) {
1201 .out_cables = 0x0001,
1207 /* has ID 0x0043 when not in "Advanced Driver" mode */
1208 USB_DEVICE(0x0582, 0x0042),
1209 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1210 .vendor_name = "Roland",
1211 .product_name = "RS-70",
1213 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1214 .data = & (const struct snd_usb_midi_endpoint_info) {
1215 .out_cables = 0x0001,
1221 /* has ID 0x0049 when not in "Advanced Driver" mode */
1222 USB_DEVICE(0x0582, 0x0047),
1223 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1224 /* .vendor_name = "EDIROL", */
1225 /* .product_name = "UR-80", */
1226 .ifnum = QUIRK_ANY_INTERFACE,
1227 .type = QUIRK_COMPOSITE,
1228 .data = (const struct snd_usb_audio_quirk[]) {
1229 /* in the 96 kHz modes, only interface 1 is there */
1232 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1236 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1245 /* has ID 0x004a when not in "Advanced Driver" mode */
1246 USB_DEVICE(0x0582, 0x0048),
1247 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1248 /* .vendor_name = "EDIROL", */
1249 /* .product_name = "UR-80", */
1251 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1252 .data = & (const struct snd_usb_midi_endpoint_info) {
1253 .out_cables = 0x0003,
1259 /* has ID 0x004e when not in "Advanced Driver" mode */
1260 USB_DEVICE(0x0582, 0x004c),
1261 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1262 .vendor_name = "EDIROL",
1263 .product_name = "PCR-A",
1264 .ifnum = QUIRK_ANY_INTERFACE,
1265 .type = QUIRK_COMPOSITE,
1266 .data = (const struct snd_usb_audio_quirk[]) {
1269 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1273 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1282 /* has ID 0x004f when not in "Advanced Driver" mode */
1283 USB_DEVICE(0x0582, 0x004d),
1284 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1285 .vendor_name = "EDIROL",
1286 .product_name = "PCR-A",
1288 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1289 .data = & (const struct snd_usb_midi_endpoint_info) {
1290 .out_cables = 0x0003,
1297 * This quirk is for the "Advanced Driver" mode. If off, the UA-3FX
1298 * is standard compliant, but has only 16-bit PCM.
1300 USB_DEVICE(0x0582, 0x0050),
1301 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1302 .vendor_name = "EDIROL",
1303 .product_name = "UA-3FX",
1304 .ifnum = QUIRK_ANY_INTERFACE,
1305 .type = QUIRK_COMPOSITE,
1306 .data = (const struct snd_usb_audio_quirk[]) {
1309 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1313 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1322 USB_DEVICE(0x0582, 0x0052),
1323 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1324 .vendor_name = "EDIROL",
1325 .product_name = "UM-1SX",
1327 .type = QUIRK_MIDI_STANDARD_INTERFACE
1331 USB_DEVICE(0x0582, 0x0060),
1332 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1333 .vendor_name = "Roland",
1334 .product_name = "EXR Series",
1336 .type = QUIRK_MIDI_STANDARD_INTERFACE
1340 /* has ID 0x0066 when not in "Advanced Driver" mode */
1341 USB_DEVICE(0x0582, 0x0064),
1342 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1343 /* .vendor_name = "EDIROL", */
1344 /* .product_name = "PCR-1", */
1345 .ifnum = QUIRK_ANY_INTERFACE,
1346 .type = QUIRK_COMPOSITE,
1347 .data = (const struct snd_usb_audio_quirk[]) {
1350 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1354 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1363 /* has ID 0x0067 when not in "Advanced Driver" mode */
1364 USB_DEVICE(0x0582, 0x0065),
1365 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1366 /* .vendor_name = "EDIROL", */
1367 /* .product_name = "PCR-1", */
1369 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1370 .data = & (const struct snd_usb_midi_endpoint_info) {
1371 .out_cables = 0x0001,
1377 /* has ID 0x006e when not in "Advanced Driver" mode */
1378 USB_DEVICE(0x0582, 0x006d),
1379 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1380 .vendor_name = "Roland",
1381 .product_name = "FANTOM-X",
1383 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1384 .data = & (const struct snd_usb_midi_endpoint_info) {
1385 .out_cables = 0x0001,
1391 * This quirk is for the "Advanced" modes of the Edirol UA-25.
1392 * If the switch is not in an advanced setting, the UA-25 has
1393 * ID 0x0582/0x0073 and is standard compliant (no quirks), but
1394 * offers only 16-bit PCM at 44.1 kHz and no MIDI.
1396 USB_DEVICE_VENDOR_SPEC(0x0582, 0x0074),
1397 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1398 .vendor_name = "EDIROL",
1399 .product_name = "UA-25",
1400 .ifnum = QUIRK_ANY_INTERFACE,
1401 .type = QUIRK_COMPOSITE,
1402 .data = (const struct snd_usb_audio_quirk[]) {
1405 .type = QUIRK_AUDIO_EDIROL_UAXX
1409 .type = QUIRK_AUDIO_EDIROL_UAXX
1413 .type = QUIRK_AUDIO_EDIROL_UAXX
1422 /* has ID 0x0076 when not in "Advanced Driver" mode */
1423 USB_DEVICE(0x0582, 0x0075),
1424 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1425 .vendor_name = "BOSS",
1426 .product_name = "DR-880",
1428 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1429 .data = & (const struct snd_usb_midi_endpoint_info) {
1430 .out_cables = 0x0001,
1436 /* has ID 0x007b when not in "Advanced Driver" mode */
1437 USB_DEVICE_VENDOR_SPEC(0x0582, 0x007a),
1438 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1439 .vendor_name = "Roland",
1440 /* "RD" or "RD-700SX"? */
1442 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1443 .data = & (const struct snd_usb_midi_endpoint_info) {
1444 .out_cables = 0x0003,
1450 /* has ID 0x0081 when not in "Advanced Driver" mode */
1451 USB_DEVICE(0x0582, 0x0080),
1452 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1453 .vendor_name = "Roland",
1454 .product_name = "G-70",
1456 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1457 .data = & (const struct snd_usb_midi_endpoint_info) {
1458 .out_cables = 0x0001,
1464 /* has ID 0x008c when not in "Advanced Driver" mode */
1465 USB_DEVICE(0x0582, 0x008b),
1466 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1467 .vendor_name = "EDIROL",
1468 .product_name = "PC-50",
1470 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1471 .data = & (const struct snd_usb_midi_endpoint_info) {
1472 .out_cables = 0x0001,
1479 * This quirk is for the "Advanced Driver" mode. If off, the UA-4FX
1480 * is standard compliant, but has only 16-bit PCM and no MIDI.
1482 USB_DEVICE(0x0582, 0x00a3),
1483 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1484 .vendor_name = "EDIROL",
1485 .product_name = "UA-4FX",
1486 .ifnum = QUIRK_ANY_INTERFACE,
1487 .type = QUIRK_COMPOSITE,
1488 .data = (const struct snd_usb_audio_quirk[]) {
1491 .type = QUIRK_AUDIO_EDIROL_UAXX
1495 .type = QUIRK_AUDIO_EDIROL_UAXX
1499 .type = QUIRK_AUDIO_EDIROL_UAXX
1509 USB_DEVICE(0x0582, 0x00c4),
1510 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1511 .ifnum = QUIRK_ANY_INTERFACE,
1512 .type = QUIRK_COMPOSITE,
1513 .data = (const struct snd_usb_audio_quirk[]) {
1516 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1520 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1524 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1525 .data = & (const struct snd_usb_midi_endpoint_info) {
1526 .out_cables = 0x0001,
1537 /* Advanced modes of the Edirol UA-25EX.
1538 * For the standard mode, UA-25EX has ID 0582:00e7, which
1539 * offers only 16-bit PCM at 44.1 kHz and no MIDI.
1541 USB_DEVICE_VENDOR_SPEC(0x0582, 0x00e6),
1542 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1543 .vendor_name = "EDIROL",
1544 .product_name = "UA-25EX",
1545 .ifnum = QUIRK_ANY_INTERFACE,
1546 .type = QUIRK_COMPOSITE,
1547 .data = (const struct snd_usb_audio_quirk[]) {
1550 .type = QUIRK_AUDIO_EDIROL_UAXX
1554 .type = QUIRK_AUDIO_EDIROL_UAXX
1558 .type = QUIRK_AUDIO_EDIROL_UAXX
1568 USB_DEVICE_VENDOR_SPEC(0x0582, 0x0108),
1569 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1571 .type = QUIRK_MIDI_STANDARD_INTERFACE
1574 /* this catches most recent vendor-specific Roland devices */
1576 .match_flags = USB_DEVICE_ID_MATCH_VENDOR |
1577 USB_DEVICE_ID_MATCH_INT_CLASS,
1579 .bInterfaceClass = USB_CLASS_VENDOR_SPEC,
1580 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
1581 .ifnum = QUIRK_ANY_INTERFACE,
1582 .type = QUIRK_AUTODETECT
1586 /* Guillemot devices */
1589 * This is for the "Windows Edition" where the external MIDI ports are
1590 * the only MIDI ports; the control data is reported through HID
1591 * interfaces. The "Macintosh Edition" has ID 0xd002 and uses standard
1592 * compliant USB MIDI ports for external MIDI and controls.
1594 USB_DEVICE_VENDOR_SPEC(0x06f8, 0xb000),
1595 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1596 .vendor_name = "Hercules",
1597 .product_name = "DJ Console (WE)",
1599 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1600 .data = & (const struct snd_usb_midi_endpoint_info) {
1601 .out_cables = 0x0001,
1607 /* Midiman/M-Audio devices */
1609 USB_DEVICE_VENDOR_SPEC(0x0763, 0x1002),
1610 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1611 .vendor_name = "M-Audio",
1612 .product_name = "MidiSport 2x2",
1613 .ifnum = QUIRK_ANY_INTERFACE,
1614 .type = QUIRK_MIDI_MIDIMAN,
1615 .data = & (const struct snd_usb_midi_endpoint_info) {
1616 .out_cables = 0x0003,
1622 USB_DEVICE_VENDOR_SPEC(0x0763, 0x1011),
1623 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1624 .vendor_name = "M-Audio",
1625 .product_name = "MidiSport 1x1",
1626 .ifnum = QUIRK_ANY_INTERFACE,
1627 .type = QUIRK_MIDI_MIDIMAN,
1628 .data = & (const struct snd_usb_midi_endpoint_info) {
1629 .out_cables = 0x0001,
1635 USB_DEVICE_VENDOR_SPEC(0x0763, 0x1015),
1636 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1637 .vendor_name = "M-Audio",
1638 .product_name = "Keystation",
1639 .ifnum = QUIRK_ANY_INTERFACE,
1640 .type = QUIRK_MIDI_MIDIMAN,
1641 .data = & (const struct snd_usb_midi_endpoint_info) {
1642 .out_cables = 0x0001,
1648 USB_DEVICE_VENDOR_SPEC(0x0763, 0x1021),
1649 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1650 .vendor_name = "M-Audio",
1651 .product_name = "MidiSport 4x4",
1652 .ifnum = QUIRK_ANY_INTERFACE,
1653 .type = QUIRK_MIDI_MIDIMAN,
1654 .data = & (const struct snd_usb_midi_endpoint_info) {
1655 .out_cables = 0x000f,
1662 * For hardware revision 1.05; in the later revisions (1.10 and
1663 * 1.21), 0x1031 is the ID for the device without firmware.
1664 * Thanks to Olaf Giesbrecht <Olaf_Giesbrecht@yahoo.de>
1666 USB_DEVICE_VER(0x0763, 0x1031, 0x0100, 0x0109),
1667 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1668 .vendor_name = "M-Audio",
1669 .product_name = "MidiSport 8x8",
1670 .ifnum = QUIRK_ANY_INTERFACE,
1671 .type = QUIRK_MIDI_MIDIMAN,
1672 .data = & (const struct snd_usb_midi_endpoint_info) {
1673 .out_cables = 0x01ff,
1679 USB_DEVICE_VENDOR_SPEC(0x0763, 0x1033),
1680 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1681 .vendor_name = "M-Audio",
1682 .product_name = "MidiSport 8x8",
1683 .ifnum = QUIRK_ANY_INTERFACE,
1684 .type = QUIRK_MIDI_MIDIMAN,
1685 .data = & (const struct snd_usb_midi_endpoint_info) {
1686 .out_cables = 0x01ff,
1692 USB_DEVICE_VENDOR_SPEC(0x0763, 0x1041),
1693 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1694 .vendor_name = "M-Audio",
1695 .product_name = "MidiSport 2x4",
1696 .ifnum = QUIRK_ANY_INTERFACE,
1697 .type = QUIRK_MIDI_MIDIMAN,
1698 .data = & (const struct snd_usb_midi_endpoint_info) {
1699 .out_cables = 0x000f,
1705 USB_DEVICE_VENDOR_SPEC(0x0763, 0x2001),
1706 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1707 .vendor_name = "M-Audio",
1708 .product_name = "Quattro",
1709 .ifnum = QUIRK_ANY_INTERFACE,
1710 .type = QUIRK_COMPOSITE,
1711 .data = & (const struct snd_usb_audio_quirk[]) {
1713 * Interfaces 0-2 are "Windows-compatible", 16-bit only,
1714 * and share endpoints with the other interfaces.
1715 * Ignore them. The other interfaces can do 24 bits,
1716 * but captured samples are big-endian (see usbaudio.c).
1720 .type = QUIRK_IGNORE_INTERFACE
1724 .type = QUIRK_IGNORE_INTERFACE
1728 .type = QUIRK_IGNORE_INTERFACE
1732 .type = QUIRK_IGNORE_INTERFACE
1736 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1740 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1744 .type = QUIRK_IGNORE_INTERFACE
1748 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1752 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1756 .type = QUIRK_MIDI_MIDIMAN,
1757 .data = & (const struct snd_usb_midi_endpoint_info) {
1758 .out_cables = 0x0001,
1769 USB_DEVICE_VENDOR_SPEC(0x0763, 0x2003),
1770 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1771 .vendor_name = "M-Audio",
1772 .product_name = "AudioPhile",
1774 .type = QUIRK_MIDI_MIDIMAN,
1775 .data = & (const struct snd_usb_midi_endpoint_info) {
1776 .out_cables = 0x0001,
1782 USB_DEVICE_VENDOR_SPEC(0x0763, 0x2008),
1783 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1784 .vendor_name = "M-Audio",
1785 .product_name = "Ozone",
1787 .type = QUIRK_MIDI_MIDIMAN,
1788 .data = & (const struct snd_usb_midi_endpoint_info) {
1789 .out_cables = 0x0001,
1795 USB_DEVICE_VENDOR_SPEC(0x0763, 0x200d),
1796 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1797 .vendor_name = "M-Audio",
1798 .product_name = "OmniStudio",
1799 .ifnum = QUIRK_ANY_INTERFACE,
1800 .type = QUIRK_COMPOSITE,
1801 .data = & (const struct snd_usb_audio_quirk[]) {
1804 .type = QUIRK_IGNORE_INTERFACE
1808 .type = QUIRK_IGNORE_INTERFACE
1812 .type = QUIRK_IGNORE_INTERFACE
1816 .type = QUIRK_IGNORE_INTERFACE
1820 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1824 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1828 .type = QUIRK_IGNORE_INTERFACE
1832 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1836 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1840 .type = QUIRK_MIDI_MIDIMAN,
1841 .data = & (const struct snd_usb_midi_endpoint_info) {
1842 .out_cables = 0x0001,
1853 USB_DEVICE(0x0763, 0x2019),
1854 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1855 /* .vendor_name = "M-Audio", */
1856 /* .product_name = "Ozone Academic", */
1857 .ifnum = QUIRK_ANY_INTERFACE,
1858 .type = QUIRK_COMPOSITE,
1859 .data = & (const struct snd_usb_audio_quirk[]) {
1862 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1866 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1870 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1874 .type = QUIRK_MIDI_MIDIMAN,
1875 .data = & (const struct snd_usb_midi_endpoint_info) {
1876 .out_cables = 0x0001,
1887 USB_DEVICE_VENDOR_SPEC(0x0763, 0x2030),
1888 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
1889 /* .vendor_name = "M-Audio", */
1890 /* .product_name = "Fast Track C400", */
1891 .ifnum = QUIRK_ANY_INTERFACE,
1892 .type = QUIRK_COMPOSITE,
1893 .data = &(const struct snd_usb_audio_quirk[]) {
1896 .type = QUIRK_AUDIO_STANDARD_MIXER,
1901 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
1902 .data = &(const struct audioformat) {
1903 .formats = SNDRV_PCM_FMTBIT_S24_3LE,
1908 .attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
1911 .rates = SNDRV_PCM_RATE_44100 |
1912 SNDRV_PCM_RATE_48000 |
1913 SNDRV_PCM_RATE_88200 |
1914 SNDRV_PCM_RATE_96000,
1918 .rate_table = (unsigned int[]) {
1919 44100, 48000, 88200, 96000
1927 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
1928 .data = &(const struct audioformat) {
1929 .formats = SNDRV_PCM_FMTBIT_S24_3LE,
1934 .attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
1937 .rates = SNDRV_PCM_RATE_44100 |
1938 SNDRV_PCM_RATE_48000 |
1939 SNDRV_PCM_RATE_88200 |
1940 SNDRV_PCM_RATE_96000,
1944 .rate_table = (unsigned int[]) {
1945 44100, 48000, 88200, 96000
1952 .ifnum = -1 /* Interface = 4 */
1958 USB_DEVICE_VENDOR_SPEC(0x0763, 0x2031),
1959 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
1960 /* .vendor_name = "M-Audio", */
1961 /* .product_name = "Fast Track C600", */
1962 .ifnum = QUIRK_ANY_INTERFACE,
1963 .type = QUIRK_COMPOSITE,
1964 .data = &(const struct snd_usb_audio_quirk[]) {
1967 .type = QUIRK_AUDIO_STANDARD_MIXER,
1972 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
1973 .data = &(const struct audioformat) {
1974 .formats = SNDRV_PCM_FMTBIT_S24_3LE,
1979 .attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
1982 .rates = SNDRV_PCM_RATE_44100 |
1983 SNDRV_PCM_RATE_48000 |
1984 SNDRV_PCM_RATE_88200 |
1985 SNDRV_PCM_RATE_96000,
1989 .rate_table = (unsigned int[]) {
1990 44100, 48000, 88200, 96000
1998 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
1999 .data = &(const struct audioformat) {
2000 .formats = SNDRV_PCM_FMTBIT_S24_3LE,
2005 .attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
2008 .rates = SNDRV_PCM_RATE_44100 |
2009 SNDRV_PCM_RATE_48000 |
2010 SNDRV_PCM_RATE_88200 |
2011 SNDRV_PCM_RATE_96000,
2015 .rate_table = (unsigned int[]) {
2016 44100, 48000, 88200, 96000
2023 .ifnum = -1 /* Interface = 4 */
2029 USB_DEVICE_VENDOR_SPEC(0x0763, 0x2080),
2030 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2031 /* .vendor_name = "M-Audio", */
2032 /* .product_name = "Fast Track Ultra", */
2033 .ifnum = QUIRK_ANY_INTERFACE,
2034 .type = QUIRK_COMPOSITE,
2035 .data = & (const struct snd_usb_audio_quirk[]) {
2038 .type = QUIRK_AUDIO_STANDARD_MIXER,
2042 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
2043 .data = & (const struct audioformat) {
2044 .formats = SNDRV_PCM_FMTBIT_S24_3LE,
2049 .attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
2052 .rates = SNDRV_PCM_RATE_44100 |
2053 SNDRV_PCM_RATE_48000 |
2054 SNDRV_PCM_RATE_88200 |
2055 SNDRV_PCM_RATE_96000,
2059 .rate_table = (unsigned int[]) {
2060 44100, 48000, 88200, 96000
2066 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
2067 .data = & (const struct audioformat) {
2068 .formats = SNDRV_PCM_FMTBIT_S24_3LE,
2073 .attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
2076 .rates = SNDRV_PCM_RATE_44100 |
2077 SNDRV_PCM_RATE_48000 |
2078 SNDRV_PCM_RATE_88200 |
2079 SNDRV_PCM_RATE_96000,
2083 .rate_table = (unsigned int[]) {
2084 44100, 48000, 88200, 96000
2088 /* interface 3 (MIDI) is standard compliant */
2096 USB_DEVICE_VENDOR_SPEC(0x0763, 0x2081),
2097 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2098 /* .vendor_name = "M-Audio", */
2099 /* .product_name = "Fast Track Ultra 8R", */
2100 .ifnum = QUIRK_ANY_INTERFACE,
2101 .type = QUIRK_COMPOSITE,
2102 .data = & (const struct snd_usb_audio_quirk[]) {
2105 .type = QUIRK_AUDIO_STANDARD_MIXER,
2109 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
2110 .data = & (const struct audioformat) {
2111 .formats = SNDRV_PCM_FMTBIT_S24_3LE,
2116 .attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
2119 .rates = SNDRV_PCM_RATE_44100 |
2120 SNDRV_PCM_RATE_48000 |
2121 SNDRV_PCM_RATE_88200 |
2122 SNDRV_PCM_RATE_96000,
2126 .rate_table = (unsigned int[]) {
2127 44100, 48000, 88200, 96000
2133 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
2134 .data = & (const struct audioformat) {
2135 .formats = SNDRV_PCM_FMTBIT_S24_3LE,
2140 .attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
2143 .rates = SNDRV_PCM_RATE_44100 |
2144 SNDRV_PCM_RATE_48000 |
2145 SNDRV_PCM_RATE_88200 |
2146 SNDRV_PCM_RATE_96000,
2150 .rate_table = (unsigned int[]) {
2151 44100, 48000, 88200, 96000
2155 /* interface 3 (MIDI) is standard compliant */
2165 USB_DEVICE(0x07cf, 0x6801),
2166 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2167 .vendor_name = "Casio",
2168 .product_name = "PL-40R",
2170 .type = QUIRK_MIDI_YAMAHA
2174 /* this ID is used by several devices without a product ID */
2175 USB_DEVICE(0x07cf, 0x6802),
2176 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2177 .vendor_name = "Casio",
2178 .product_name = "Keyboard",
2180 .type = QUIRK_MIDI_YAMAHA
2184 /* Mark of the Unicorn devices */
2186 /* thanks to Robert A. Lerche <ral 'at' msbit.com> */
2187 .match_flags = USB_DEVICE_ID_MATCH_VENDOR |
2188 USB_DEVICE_ID_MATCH_PRODUCT |
2189 USB_DEVICE_ID_MATCH_DEV_SUBCLASS,
2191 .idProduct = 0x0001,
2192 .bDeviceSubClass = 2,
2193 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2194 .vendor_name = "MOTU",
2195 .product_name = "Fastlane",
2196 .ifnum = QUIRK_ANY_INTERFACE,
2197 .type = QUIRK_COMPOSITE,
2198 .data = & (const struct snd_usb_audio_quirk[]) {
2201 .type = QUIRK_MIDI_RAW_BYTES
2205 .type = QUIRK_IGNORE_INTERFACE
2214 /* Emagic devices */
2216 USB_DEVICE(0x086a, 0x0001),
2217 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2218 .vendor_name = "Emagic",
2219 /* .product_name = "Unitor8", */
2221 .type = QUIRK_MIDI_EMAGIC,
2222 .data = & (const struct snd_usb_midi_endpoint_info) {
2223 .out_cables = 0x80ff,
2229 USB_DEVICE(0x086a, 0x0002),
2230 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2231 .vendor_name = "Emagic",
2232 /* .product_name = "AMT8", */
2234 .type = QUIRK_MIDI_EMAGIC,
2235 .data = & (const struct snd_usb_midi_endpoint_info) {
2236 .out_cables = 0x80ff,
2242 USB_DEVICE(0x086a, 0x0003),
2243 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2244 .vendor_name = "Emagic",
2245 /* .product_name = "MT4", */
2247 .type = QUIRK_MIDI_EMAGIC,
2248 .data = & (const struct snd_usb_midi_endpoint_info) {
2249 .out_cables = 0x800f,
2257 USB_DEVICE_VENDOR_SPEC(0x0944, 0x0200),
2258 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2259 .vendor_name = "KORG, Inc.",
2260 /* .product_name = "PANDORA PX5D", */
2262 .type = QUIRK_MIDI_STANDARD_INTERFACE,
2267 USB_DEVICE_VENDOR_SPEC(0x0944, 0x0201),
2268 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2269 .vendor_name = "KORG, Inc.",
2270 /* .product_name = "ToneLab ST", */
2272 .type = QUIRK_MIDI_STANDARD_INTERFACE,
2278 USB_DEVICE(0x09e8, 0x0062),
2279 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2280 .vendor_name = "AKAI",
2281 .product_name = "MPD16",
2283 .type = QUIRK_MIDI_AKAI,
2287 /* TerraTec devices */
2289 USB_DEVICE_VENDOR_SPEC(0x0ccd, 0x0012),
2290 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2291 .vendor_name = "TerraTec",
2292 .product_name = "PHASE 26",
2294 .type = QUIRK_MIDI_STANDARD_INTERFACE
2298 USB_DEVICE_VENDOR_SPEC(0x0ccd, 0x0013),
2299 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2300 .vendor_name = "TerraTec",
2301 .product_name = "PHASE 26",
2303 .type = QUIRK_MIDI_STANDARD_INTERFACE
2307 USB_DEVICE_VENDOR_SPEC(0x0ccd, 0x0014),
2308 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2309 .vendor_name = "TerraTec",
2310 .product_name = "PHASE 26",
2312 .type = QUIRK_MIDI_STANDARD_INTERFACE
2316 USB_DEVICE(0x0ccd, 0x0028),
2317 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2318 .vendor_name = "TerraTec",
2319 .product_name = "Aureon5.1MkII",
2320 .ifnum = QUIRK_NO_INTERFACE
2324 USB_DEVICE(0x0ccd, 0x0035),
2325 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2326 .vendor_name = "Miditech",
2327 .product_name = "Play'n Roll",
2329 .type = QUIRK_MIDI_CME
2333 /* Stanton/N2IT Final Scratch v1 device ('Scratchamp') */
2335 USB_DEVICE(0x103d, 0x0100),
2336 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2337 .vendor_name = "Stanton",
2338 .product_name = "ScratchAmp",
2339 .ifnum = QUIRK_NO_INTERFACE
2343 USB_DEVICE(0x103d, 0x0101),
2344 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2345 .vendor_name = "Stanton",
2346 .product_name = "ScratchAmp",
2347 .ifnum = QUIRK_NO_INTERFACE
2351 /* Novation EMS devices */
2353 USB_DEVICE_VENDOR_SPEC(0x1235, 0x0001),
2354 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2355 .vendor_name = "Novation",
2356 .product_name = "ReMOTE Audio/XStation",
2358 .type = QUIRK_MIDI_NOVATION
2362 USB_DEVICE_VENDOR_SPEC(0x1235, 0x0002),
2363 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2364 .vendor_name = "Novation",
2365 .product_name = "Speedio",
2367 .type = QUIRK_MIDI_NOVATION
2371 USB_DEVICE(0x1235, 0x000e),
2372 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2373 /* .vendor_name = "Novation", */
2374 /* .product_name = "Launchpad", */
2376 .type = QUIRK_MIDI_RAW_BYTES
2380 USB_DEVICE(0x1235, 0x0018),
2381 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2382 .vendor_name = "Novation",
2383 .product_name = "Twitch",
2384 .ifnum = QUIRK_ANY_INTERFACE,
2385 .type = QUIRK_COMPOSITE,
2386 .data = (const struct snd_usb_audio_quirk[]) {
2389 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
2390 .data = & (const struct audioformat) {
2391 .formats = SNDRV_PCM_FMTBIT_S24_3LE,
2396 .attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
2398 .ep_attr = USB_ENDPOINT_XFER_ISOC,
2399 .rates = SNDRV_PCM_RATE_44100 |
2400 SNDRV_PCM_RATE_48000,
2404 .rate_table = (unsigned int[]) {
2411 .type = QUIRK_MIDI_RAW_BYTES
2420 USB_DEVICE_VENDOR_SPEC(0x1235, 0x4661),
2421 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2422 .vendor_name = "Novation",
2423 .product_name = "ReMOTE25",
2425 .type = QUIRK_MIDI_NOVATION
2429 /* Access Music devices */
2431 /* VirusTI Desktop */
2432 USB_DEVICE_VENDOR_SPEC(0x133e, 0x0815),
2433 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
2434 .ifnum = QUIRK_ANY_INTERFACE,
2435 .type = QUIRK_COMPOSITE,
2436 .data = &(const struct snd_usb_audio_quirk[]) {
2439 .type = QUIRK_MIDI_FIXED_ENDPOINT,
2440 .data = &(const struct snd_usb_midi_endpoint_info) {
2441 .out_cables = 0x0003,
2447 .type = QUIRK_IGNORE_INTERFACE
2458 /* aka. Serato Scratch Live DJ Box */
2459 USB_DEVICE(0x13e5, 0x0001),
2460 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2461 .vendor_name = "Rane",
2462 .product_name = "SL-1",
2463 .ifnum = QUIRK_NO_INTERFACE
2467 /* Native Instruments MK2 series */
2469 /* Komplete Audio 6 */
2470 .match_flags = USB_DEVICE_ID_MATCH_DEVICE,
2472 .idProduct = 0x1000,
2475 /* Traktor Audio 6 */
2476 .match_flags = USB_DEVICE_ID_MATCH_DEVICE,
2478 .idProduct = 0x1010,
2481 /* Traktor Audio 10 */
2482 .match_flags = USB_DEVICE_ID_MATCH_DEVICE,
2484 .idProduct = 0x1020,
2487 /* KeithMcMillen Stringport */
2489 USB_DEVICE(0x1f38, 0x0001),
2490 .bInterfaceClass = USB_CLASS_AUDIO,
2493 /* Miditech devices */
2495 USB_DEVICE(0x4752, 0x0011),
2496 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2497 .vendor_name = "Miditech",
2498 .product_name = "Midistart-2",
2500 .type = QUIRK_MIDI_CME
2504 /* Central Music devices */
2506 /* this ID used by both Miditech MidiStudio-2 and CME UF-x */
2507 USB_DEVICE(0x7104, 0x2202),
2508 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2510 .type = QUIRK_MIDI_CME
2514 /* Hauppauge HVR-950Q and HVR-850 */
2516 USB_DEVICE_VENDOR_SPEC(0x2040, 0x7200),
2517 .match_flags = USB_DEVICE_ID_MATCH_DEVICE |
2518 USB_DEVICE_ID_MATCH_INT_CLASS |
2519 USB_DEVICE_ID_MATCH_INT_SUBCLASS,
2520 .bInterfaceClass = USB_CLASS_AUDIO,
2521 .bInterfaceSubClass = USB_SUBCLASS_AUDIOCONTROL,
2522 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
2523 .vendor_name = "Hauppauge",
2524 .product_name = "HVR-950Q",
2525 .ifnum = QUIRK_ANY_INTERFACE,
2526 .type = QUIRK_AUDIO_ALIGN_TRANSFER,
2530 USB_DEVICE_VENDOR_SPEC(0x2040, 0x7240),
2531 .match_flags = USB_DEVICE_ID_MATCH_DEVICE |
2532 USB_DEVICE_ID_MATCH_INT_CLASS |
2533 USB_DEVICE_ID_MATCH_INT_SUBCLASS,
2534 .bInterfaceClass = USB_CLASS_AUDIO,
2535 .bInterfaceSubClass = USB_SUBCLASS_AUDIOCONTROL,
2536 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
2537 .vendor_name = "Hauppauge",
2538 .product_name = "HVR-850",
2539 .ifnum = QUIRK_ANY_INTERFACE,
2540 .type = QUIRK_AUDIO_ALIGN_TRANSFER,
2544 USB_DEVICE_VENDOR_SPEC(0x2040, 0x7210),
2545 .match_flags = USB_DEVICE_ID_MATCH_DEVICE |
2546 USB_DEVICE_ID_MATCH_INT_CLASS |
2547 USB_DEVICE_ID_MATCH_INT_SUBCLASS,
2548 .bInterfaceClass = USB_CLASS_AUDIO,
2549 .bInterfaceSubClass = USB_SUBCLASS_AUDIOCONTROL,
2550 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
2551 .vendor_name = "Hauppauge",
2552 .product_name = "HVR-950Q",
2553 .ifnum = QUIRK_ANY_INTERFACE,
2554 .type = QUIRK_AUDIO_ALIGN_TRANSFER,
2558 USB_DEVICE_VENDOR_SPEC(0x2040, 0x7217),
2559 .match_flags = USB_DEVICE_ID_MATCH_DEVICE |
2560 USB_DEVICE_ID_MATCH_INT_CLASS |
2561 USB_DEVICE_ID_MATCH_INT_SUBCLASS,
2562 .bInterfaceClass = USB_CLASS_AUDIO,
2563 .bInterfaceSubClass = USB_SUBCLASS_AUDIOCONTROL,
2564 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
2565 .vendor_name = "Hauppauge",
2566 .product_name = "HVR-950Q",
2567 .ifnum = QUIRK_ANY_INTERFACE,
2568 .type = QUIRK_AUDIO_ALIGN_TRANSFER,
2572 USB_DEVICE_VENDOR_SPEC(0x2040, 0x721b),
2573 .match_flags = USB_DEVICE_ID_MATCH_DEVICE |
2574 USB_DEVICE_ID_MATCH_INT_CLASS |
2575 USB_DEVICE_ID_MATCH_INT_SUBCLASS,
2576 .bInterfaceClass = USB_CLASS_AUDIO,
2577 .bInterfaceSubClass = USB_SUBCLASS_AUDIOCONTROL,
2578 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
2579 .vendor_name = "Hauppauge",
2580 .product_name = "HVR-950Q",
2581 .ifnum = QUIRK_ANY_INTERFACE,
2582 .type = QUIRK_AUDIO_ALIGN_TRANSFER,
2586 USB_DEVICE_VENDOR_SPEC(0x2040, 0x721e),
2587 .match_flags = USB_DEVICE_ID_MATCH_DEVICE |
2588 USB_DEVICE_ID_MATCH_INT_CLASS |
2589 USB_DEVICE_ID_MATCH_INT_SUBCLASS,
2590 .bInterfaceClass = USB_CLASS_AUDIO,
2591 .bInterfaceSubClass = USB_SUBCLASS_AUDIOCONTROL,
2592 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
2593 .vendor_name = "Hauppauge",
2594 .product_name = "HVR-950Q",
2595 .ifnum = QUIRK_ANY_INTERFACE,
2596 .type = QUIRK_AUDIO_ALIGN_TRANSFER,
2600 USB_DEVICE_VENDOR_SPEC(0x2040, 0x721f),
2601 .match_flags = USB_DEVICE_ID_MATCH_DEVICE |
2602 USB_DEVICE_ID_MATCH_INT_CLASS |
2603 USB_DEVICE_ID_MATCH_INT_SUBCLASS,
2604 .bInterfaceClass = USB_CLASS_AUDIO,
2605 .bInterfaceSubClass = USB_SUBCLASS_AUDIOCONTROL,
2606 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
2607 .vendor_name = "Hauppauge",
2608 .product_name = "HVR-950Q",
2609 .ifnum = QUIRK_ANY_INTERFACE,
2610 .type = QUIRK_AUDIO_ALIGN_TRANSFER,
2614 USB_DEVICE_VENDOR_SPEC(0x2040, 0x7280),
2615 .match_flags = USB_DEVICE_ID_MATCH_DEVICE |
2616 USB_DEVICE_ID_MATCH_INT_CLASS |
2617 USB_DEVICE_ID_MATCH_INT_SUBCLASS,
2618 .bInterfaceClass = USB_CLASS_AUDIO,
2619 .bInterfaceSubClass = USB_SUBCLASS_AUDIOCONTROL,
2620 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
2621 .vendor_name = "Hauppauge",
2622 .product_name = "HVR-950Q",
2623 .ifnum = QUIRK_ANY_INTERFACE,
2624 .type = QUIRK_AUDIO_ALIGN_TRANSFER,
2628 USB_DEVICE_VENDOR_SPEC(0x0fd9, 0x0008),
2629 .match_flags = USB_DEVICE_ID_MATCH_DEVICE |
2630 USB_DEVICE_ID_MATCH_INT_CLASS |
2631 USB_DEVICE_ID_MATCH_INT_SUBCLASS,
2632 .bInterfaceClass = USB_CLASS_AUDIO,
2633 .bInterfaceSubClass = USB_SUBCLASS_AUDIOCONTROL,
2634 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
2635 .vendor_name = "Hauppauge",
2636 .product_name = "HVR-950Q",
2637 .ifnum = QUIRK_ANY_INTERFACE,
2638 .type = QUIRK_AUDIO_ALIGN_TRANSFER,
2642 /* Digidesign Mbox */
2644 /* Thanks to Clemens Ladisch <clemens@ladisch.de> */
2645 USB_DEVICE(0x0dba, 0x1000),
2646 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
2647 .vendor_name = "Digidesign",
2648 .product_name = "MBox",
2649 .ifnum = QUIRK_ANY_INTERFACE,
2650 .type = QUIRK_COMPOSITE,
2651 .data = (const struct snd_usb_audio_quirk[]){
2654 .type = QUIRK_IGNORE_INTERFACE,
2658 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
2659 .data = &(const struct audioformat) {
2660 .formats = SNDRV_PCM_FMTBIT_S24_3BE,
2665 .attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
2668 .rates = SNDRV_PCM_RATE_44100 |
2669 SNDRV_PCM_RATE_48000,
2673 .rate_table = (unsigned int[]) {
2686 /* DIGIDESIGN MBOX 2 */
2688 USB_DEVICE(0x0dba, 0x3000),
2689 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
2690 .vendor_name = "Digidesign",
2691 .product_name = "Mbox 2",
2692 .ifnum = QUIRK_ANY_INTERFACE,
2693 .type = QUIRK_COMPOSITE,
2694 .data = (const struct snd_usb_audio_quirk[]) {
2697 .type = QUIRK_IGNORE_INTERFACE
2701 .type = QUIRK_IGNORE_INTERFACE
2705 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
2706 .data = &(const struct audioformat) {
2707 .formats = SNDRV_PCM_FMTBIT_S24_3BE,
2714 .ep_attr = USB_ENDPOINT_SYNC_ASYNC,
2715 .rates = SNDRV_PCM_RATE_48000,
2719 .rate_table = (unsigned int[]) {
2726 .type = QUIRK_IGNORE_INTERFACE
2730 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
2731 .data = &(const struct audioformat) {
2732 .formats = SNDRV_PCM_FMTBIT_S24_3BE,
2737 .attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
2739 .ep_attr = USB_ENDPOINT_SYNC_SYNC,
2740 .rates = SNDRV_PCM_RATE_48000,
2744 .rate_table = (unsigned int[]) {
2751 .type = QUIRK_IGNORE_INTERFACE
2755 .type = QUIRK_MIDI_MIDIMAN,
2756 .data = &(const struct snd_usb_midi_endpoint_info) {
2758 .out_cables = 0x0001,
2760 .in_interval = 0x01,
2771 /* Tascam US122 MKII - playback-only support */
2772 .match_flags = USB_DEVICE_ID_MATCH_DEVICE,
2774 .idProduct = 0x8021,
2775 .bInterfaceClass = USB_CLASS_AUDIO,
2776 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
2777 .vendor_name = "TASCAM",
2778 .product_name = "US122 MKII",
2779 .ifnum = QUIRK_ANY_INTERFACE,
2780 .type = QUIRK_COMPOSITE,
2781 .data = (const struct snd_usb_audio_quirk[]) {
2784 .type = QUIRK_IGNORE_INTERFACE
2788 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
2789 .data = &(const struct audioformat) {
2790 .formats = SNDRV_PCM_FMTBIT_S24_3LE,
2795 .attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
2797 .ep_attr = USB_ENDPOINT_XFER_ISOC,
2798 .rates = SNDRV_PCM_RATE_44100 |
2799 SNDRV_PCM_RATE_48000 |
2800 SNDRV_PCM_RATE_88200 |
2801 SNDRV_PCM_RATE_96000,
2805 .rate_table = (unsigned int[]) {
2806 44100, 48000, 88200, 96000
2817 /* Microsoft XboxLive Headset/Xbox Communicator */
2819 USB_DEVICE(0x045e, 0x0283),
2820 .bInterfaceClass = USB_CLASS_PER_INTERFACE,
2821 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
2822 .vendor_name = "Microsoft",
2823 .product_name = "XboxLive Headset/Xbox Communicator",
2824 .ifnum = QUIRK_ANY_INTERFACE,
2825 .type = QUIRK_COMPOSITE,
2826 .data = &(const struct snd_usb_audio_quirk[]) {
2830 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
2831 .data = &(const struct audioformat) {
2832 .formats = SNDRV_PCM_FMTBIT_S16_LE,
2840 .rates = SNDRV_PCM_RATE_CONTINUOUS,
2848 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
2849 .data = &(const struct audioformat) {
2850 .formats = SNDRV_PCM_FMTBIT_S16_LE,
2858 .rates = SNDRV_PCM_RATE_CONTINUOUS,
2872 USB_DEVICE(0x200c, 0x100b),
2873 .bInterfaceClass = USB_CLASS_PER_INTERFACE,
2874 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
2875 .ifnum = QUIRK_ANY_INTERFACE,
2876 .type = QUIRK_COMPOSITE,
2877 .data = &(const struct snd_usb_audio_quirk[]) {
2880 .type = QUIRK_AUDIO_STANDARD_MIXER,
2884 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
2885 .data = &(const struct audioformat) {
2886 .formats = SNDRV_PCM_FMTBIT_S24_3LE,
2891 .attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
2893 .ep_attr = USB_ENDPOINT_SYNC_ADAPTIVE,
2894 .rates = SNDRV_PCM_RATE_44100 |
2895 SNDRV_PCM_RATE_48000,
2899 .rate_table = (unsigned int[]) {
2913 * Focusrite Scarlett 18i6
2915 * Avoid mixer creation, which otherwise fails because some of
2916 * the interface descriptor subtypes for interface 0 are
2917 * unknown. That should be fixed or worked-around but this at
2918 * least allows the device to be used successfully with a DAW
2919 * and an external mixer. See comments below about other
2920 * ignored interfaces.
2922 USB_DEVICE(0x1235, 0x8004),
2923 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2924 .vendor_name = "Focusrite",
2925 .product_name = "Scarlett 18i6",
2926 .ifnum = QUIRK_ANY_INTERFACE,
2927 .type = QUIRK_COMPOSITE,
2928 .data = & (const struct snd_usb_audio_quirk[]) {
2930 /* InterfaceSubClass 1 (Control Device) */
2932 .type = QUIRK_IGNORE_INTERFACE
2936 .type = QUIRK_AUDIO_STANDARD_INTERFACE
2940 .type = QUIRK_AUDIO_STANDARD_INTERFACE
2943 /* InterfaceSubClass 1 (Control Device) */
2945 .type = QUIRK_IGNORE_INTERFACE
2949 .type = QUIRK_MIDI_STANDARD_INTERFACE
2952 /* InterfaceSubClass 1 (Device Firmware Update) */
2954 .type = QUIRK_IGNORE_INTERFACE
2965 * Some USB MIDI devices don't have an audio control interface,
2966 * so we have to grab MIDI streaming interfaces here.
2968 .match_flags = USB_DEVICE_ID_MATCH_INT_CLASS |
2969 USB_DEVICE_ID_MATCH_INT_SUBCLASS,
2970 .bInterfaceClass = USB_CLASS_AUDIO,
2971 .bInterfaceSubClass = USB_SUBCLASS_MIDISTREAMING,
2972 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2973 .ifnum = QUIRK_ANY_INTERFACE,
2974 .type = QUIRK_MIDI_STANDARD_INTERFACE
2978 #undef USB_DEVICE_VENDOR_SPEC