1 /* SPDX-License-Identifier: GPL-2.0-or-later */
3 * ALSA USB Audio Driver
5 * Copyright (c) 2002 by Takashi Iwai <tiwai@suse.de>,
6 * Clemens Ladisch <clemens@ladisch.de>
10 * The contents of this file are part of the driver's id_table.
12 * In a perfect world, this file would be empty.
16 * Use this for devices where other interfaces are standard compliant,
17 * to prevent the quirk being applied to those interfaces. (To work with
18 * hotplugging, bDeviceClass must be set to USB_CLASS_PER_INTERFACE.)
20 #define USB_DEVICE_VENDOR_SPEC(vend, prod) \
21 .match_flags = USB_DEVICE_ID_MATCH_VENDOR | \
22 USB_DEVICE_ID_MATCH_PRODUCT | \
23 USB_DEVICE_ID_MATCH_INT_CLASS, \
26 .bInterfaceClass = USB_CLASS_VENDOR_SPEC
28 /* A standard entry matching with vid/pid and the audio class/subclass */
29 #define USB_AUDIO_DEVICE(vend, prod) \
30 .match_flags = USB_DEVICE_ID_MATCH_DEVICE | \
31 USB_DEVICE_ID_MATCH_INT_CLASS | \
32 USB_DEVICE_ID_MATCH_INT_SUBCLASS, \
35 .bInterfaceClass = USB_CLASS_AUDIO, \
36 .bInterfaceSubClass = USB_SUBCLASS_AUDIOCONTROL
38 /* HP Thunderbolt Dock Audio Headset */
40 USB_DEVICE(0x03f0, 0x0269),
41 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
43 .product_name = "Thunderbolt Dock Audio Headset",
44 .profile_name = "HP-Thunderbolt-Dock-Audio-Headset",
45 .ifnum = QUIRK_NO_INTERFACE
48 /* HP Thunderbolt Dock Audio Module */
50 USB_DEVICE(0x03f0, 0x0567),
51 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
53 .product_name = "Thunderbolt Dock Audio Module",
54 .profile_name = "HP-Thunderbolt-Dock-Audio-Module",
55 .ifnum = QUIRK_NO_INTERFACE
60 USB_DEVICE(0x0403, 0xb8d8),
61 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
62 /* .vendor_name = "STARR LABS", */
63 /* .product_name = "Starr Labs MIDI USB device", */
65 .type = QUIRK_MIDI_FTDI
71 USB_DEVICE(0x041e, 0x0005),
72 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
74 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
75 .data = &(const struct audioformat) {
76 .formats = SNDRV_PCM_FMTBIT_S16_LE,
82 .ep_attr = USB_ENDPOINT_XFER_ISOC,
84 .rates = SNDRV_PCM_RATE_CONTINUOUS,
91 /* Creative/E-Mu devices */
93 USB_DEVICE(0x041e, 0x3010),
94 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
95 .vendor_name = "Creative Labs",
96 .product_name = "Sound Blaster MP3+",
97 .ifnum = QUIRK_NO_INTERFACE
100 /* Creative/Toshiba Multimedia Center SB-0500 */
102 USB_DEVICE(0x041e, 0x3048),
103 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
104 .vendor_name = "Toshiba",
105 .product_name = "SB-0500",
106 .ifnum = QUIRK_NO_INTERFACE
111 .match_flags = USB_DEVICE_ID_MATCH_DEVICE,
114 .bInterfaceClass = USB_CLASS_AUDIO,
118 .match_flags = USB_DEVICE_ID_MATCH_DEVICE,
121 .bInterfaceClass = USB_CLASS_AUDIO,
124 /* E-Mu Tracker Pre */
125 .match_flags = USB_DEVICE_ID_MATCH_DEVICE,
128 .bInterfaceClass = USB_CLASS_AUDIO,
132 .match_flags = USB_DEVICE_ID_MATCH_DEVICE,
135 .bInterfaceClass = USB_CLASS_AUDIO,
139 * Creative Technology, Ltd Live! Cam Sync HD [VF0770]
140 * The device advertises 8 formats, but only a rate of 48kHz is honored by the
141 * hardware and 24 bits give chopped audio, so only report the one working
145 USB_DEVICE(0x041e, 0x4095),
146 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
147 .ifnum = QUIRK_ANY_INTERFACE,
148 .type = QUIRK_COMPOSITE,
149 .data = &(const struct snd_usb_audio_quirk[]) {
152 .type = QUIRK_AUDIO_STANDARD_MIXER,
156 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
157 .data = &(const struct audioformat) {
158 .formats = SNDRV_PCM_FMTBIT_S16_LE,
166 .rates = SNDRV_PCM_RATE_48000,
170 .rate_table = (unsigned int[]) { 48000 },
182 * When not ignored, causes instability issues for some users, forcing them to
183 * blacklist the entire module.
186 USB_DEVICE(0x0424, 0xb832),
187 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
188 .vendor_name = "Standard Microsystems Corp.",
189 .product_name = "HP Wireless Audio",
190 .ifnum = QUIRK_ANY_INTERFACE,
191 .type = QUIRK_COMPOSITE,
192 .data = (const struct snd_usb_audio_quirk[]) {
196 .type = QUIRK_IGNORE_INTERFACE,
201 .type = QUIRK_IGNORE_INTERFACE,
206 .type = QUIRK_IGNORE_INTERFACE,
208 /* HID Device, .ifnum = 3 */
217 * Logitech QuickCam: bDeviceClass is vendor-specific, so generic interface
218 * class matches do not take effect without an explicit ID match.
221 .match_flags = USB_DEVICE_ID_MATCH_DEVICE |
222 USB_DEVICE_ID_MATCH_INT_CLASS |
223 USB_DEVICE_ID_MATCH_INT_SUBCLASS,
226 .bInterfaceClass = USB_CLASS_AUDIO,
227 .bInterfaceSubClass = USB_SUBCLASS_AUDIOCONTROL
230 .match_flags = USB_DEVICE_ID_MATCH_DEVICE |
231 USB_DEVICE_ID_MATCH_INT_CLASS |
232 USB_DEVICE_ID_MATCH_INT_SUBCLASS,
235 .bInterfaceClass = USB_CLASS_AUDIO,
236 .bInterfaceSubClass = USB_SUBCLASS_AUDIOCONTROL
239 .match_flags = USB_DEVICE_ID_MATCH_DEVICE |
240 USB_DEVICE_ID_MATCH_INT_CLASS |
241 USB_DEVICE_ID_MATCH_INT_SUBCLASS,
244 .bInterfaceClass = USB_CLASS_AUDIO,
245 .bInterfaceSubClass = USB_SUBCLASS_AUDIOCONTROL
248 .match_flags = USB_DEVICE_ID_MATCH_DEVICE |
249 USB_DEVICE_ID_MATCH_INT_CLASS |
250 USB_DEVICE_ID_MATCH_INT_SUBCLASS,
253 .bInterfaceClass = USB_CLASS_AUDIO,
254 .bInterfaceSubClass = USB_SUBCLASS_AUDIOCONTROL
257 .match_flags = USB_DEVICE_ID_MATCH_DEVICE |
258 USB_DEVICE_ID_MATCH_INT_CLASS |
259 USB_DEVICE_ID_MATCH_INT_SUBCLASS,
262 .bInterfaceClass = USB_CLASS_AUDIO,
263 .bInterfaceSubClass = USB_SUBCLASS_AUDIOCONTROL
266 .match_flags = USB_DEVICE_ID_MATCH_DEVICE |
267 USB_DEVICE_ID_MATCH_INT_CLASS |
268 USB_DEVICE_ID_MATCH_INT_SUBCLASS,
271 .bInterfaceClass = USB_CLASS_AUDIO,
272 .bInterfaceSubClass = USB_SUBCLASS_AUDIOCONTROL
275 .match_flags = USB_DEVICE_ID_MATCH_DEVICE |
276 USB_DEVICE_ID_MATCH_INT_CLASS |
277 USB_DEVICE_ID_MATCH_INT_SUBCLASS,
280 .bInterfaceClass = USB_CLASS_AUDIO,
281 .bInterfaceSubClass = USB_SUBCLASS_AUDIOCONTROL,
282 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
283 .vendor_name = "Logitech, Inc.",
284 .product_name = "QuickCam Pro 9000",
285 .ifnum = QUIRK_NO_INTERFACE
293 #define YAMAHA_DEVICE(id, name) { \
294 USB_DEVICE(0x0499, id), \
295 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { \
296 .vendor_name = "Yamaha", \
297 .product_name = name, \
298 .ifnum = QUIRK_ANY_INTERFACE, \
299 .type = QUIRK_MIDI_YAMAHA \
302 #define YAMAHA_INTERFACE(id, intf, name) { \
303 USB_DEVICE_VENDOR_SPEC(0x0499, id), \
304 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { \
305 .vendor_name = "Yamaha", \
306 .product_name = name, \
308 .type = QUIRK_MIDI_YAMAHA \
311 YAMAHA_DEVICE(0x1000, "UX256"),
312 YAMAHA_DEVICE(0x1001, "MU1000"),
313 YAMAHA_DEVICE(0x1002, "MU2000"),
314 YAMAHA_DEVICE(0x1003, "MU500"),
315 YAMAHA_INTERFACE(0x1004, 3, "UW500"),
316 YAMAHA_DEVICE(0x1005, "MOTIF6"),
317 YAMAHA_DEVICE(0x1006, "MOTIF7"),
318 YAMAHA_DEVICE(0x1007, "MOTIF8"),
319 YAMAHA_DEVICE(0x1008, "UX96"),
320 YAMAHA_DEVICE(0x1009, "UX16"),
321 YAMAHA_INTERFACE(0x100a, 3, "EOS BX"),
322 YAMAHA_DEVICE(0x100c, "UC-MX"),
323 YAMAHA_DEVICE(0x100d, "UC-KX"),
324 YAMAHA_DEVICE(0x100e, "S08"),
325 YAMAHA_DEVICE(0x100f, "CLP-150"),
326 YAMAHA_DEVICE(0x1010, "CLP-170"),
327 YAMAHA_DEVICE(0x1011, "P-250"),
328 YAMAHA_DEVICE(0x1012, "TYROS"),
329 YAMAHA_DEVICE(0x1013, "PF-500"),
330 YAMAHA_DEVICE(0x1014, "S90"),
331 YAMAHA_DEVICE(0x1015, "MOTIF-R"),
332 YAMAHA_DEVICE(0x1016, "MDP-5"),
333 YAMAHA_DEVICE(0x1017, "CVP-204"),
334 YAMAHA_DEVICE(0x1018, "CVP-206"),
335 YAMAHA_DEVICE(0x1019, "CVP-208"),
336 YAMAHA_DEVICE(0x101a, "CVP-210"),
337 YAMAHA_DEVICE(0x101b, "PSR-1100"),
338 YAMAHA_DEVICE(0x101c, "PSR-2100"),
339 YAMAHA_DEVICE(0x101d, "CLP-175"),
340 YAMAHA_DEVICE(0x101e, "PSR-K1"),
341 YAMAHA_DEVICE(0x101f, "EZ-J24"),
342 YAMAHA_DEVICE(0x1020, "EZ-250i"),
343 YAMAHA_DEVICE(0x1021, "MOTIF ES 6"),
344 YAMAHA_DEVICE(0x1022, "MOTIF ES 7"),
345 YAMAHA_DEVICE(0x1023, "MOTIF ES 8"),
346 YAMAHA_DEVICE(0x1024, "CVP-301"),
347 YAMAHA_DEVICE(0x1025, "CVP-303"),
348 YAMAHA_DEVICE(0x1026, "CVP-305"),
349 YAMAHA_DEVICE(0x1027, "CVP-307"),
350 YAMAHA_DEVICE(0x1028, "CVP-309"),
351 YAMAHA_DEVICE(0x1029, "CVP-309GP"),
352 YAMAHA_DEVICE(0x102a, "PSR-1500"),
353 YAMAHA_DEVICE(0x102b, "PSR-3000"),
354 YAMAHA_DEVICE(0x102e, "ELS-01/01C"),
355 YAMAHA_DEVICE(0x1030, "PSR-295/293"),
356 YAMAHA_DEVICE(0x1031, "DGX-205/203"),
357 YAMAHA_DEVICE(0x1032, "DGX-305"),
358 YAMAHA_DEVICE(0x1033, "DGX-505"),
359 YAMAHA_DEVICE(0x1034, NULL),
360 YAMAHA_DEVICE(0x1035, NULL),
361 YAMAHA_DEVICE(0x1036, NULL),
362 YAMAHA_DEVICE(0x1037, NULL),
363 YAMAHA_DEVICE(0x1038, NULL),
364 YAMAHA_DEVICE(0x1039, NULL),
365 YAMAHA_DEVICE(0x103a, NULL),
366 YAMAHA_DEVICE(0x103b, NULL),
367 YAMAHA_DEVICE(0x103c, NULL),
368 YAMAHA_DEVICE(0x103d, NULL),
369 YAMAHA_DEVICE(0x103e, NULL),
370 YAMAHA_DEVICE(0x103f, NULL),
371 YAMAHA_DEVICE(0x1040, NULL),
372 YAMAHA_DEVICE(0x1041, NULL),
373 YAMAHA_DEVICE(0x1042, NULL),
374 YAMAHA_DEVICE(0x1043, NULL),
375 YAMAHA_DEVICE(0x1044, NULL),
376 YAMAHA_DEVICE(0x1045, NULL),
377 YAMAHA_INTERFACE(0x104e, 0, NULL),
378 YAMAHA_DEVICE(0x104f, NULL),
379 YAMAHA_DEVICE(0x1050, NULL),
380 YAMAHA_DEVICE(0x1051, NULL),
381 YAMAHA_DEVICE(0x1052, NULL),
382 YAMAHA_INTERFACE(0x1053, 0, NULL),
383 YAMAHA_INTERFACE(0x1054, 0, NULL),
384 YAMAHA_DEVICE(0x1055, NULL),
385 YAMAHA_DEVICE(0x1056, NULL),
386 YAMAHA_DEVICE(0x1057, NULL),
387 YAMAHA_DEVICE(0x1058, NULL),
388 YAMAHA_DEVICE(0x1059, NULL),
389 YAMAHA_DEVICE(0x105a, NULL),
390 YAMAHA_DEVICE(0x105b, NULL),
391 YAMAHA_DEVICE(0x105c, NULL),
392 YAMAHA_DEVICE(0x105d, NULL),
394 USB_DEVICE(0x0499, 0x1503),
395 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
396 /* .vendor_name = "Yamaha", */
397 /* .product_name = "MOX6/MOX8", */
398 .ifnum = QUIRK_ANY_INTERFACE,
399 .type = QUIRK_COMPOSITE,
400 .data = (const struct snd_usb_audio_quirk[]) {
403 .type = QUIRK_AUDIO_STANDARD_INTERFACE
407 .type = QUIRK_AUDIO_STANDARD_INTERFACE
411 .type = QUIRK_MIDI_YAMAHA
420 USB_DEVICE(0x0499, 0x1507),
421 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
422 /* .vendor_name = "Yamaha", */
423 /* .product_name = "THR10", */
424 .ifnum = QUIRK_ANY_INTERFACE,
425 .type = QUIRK_COMPOSITE,
426 .data = (const struct snd_usb_audio_quirk[]) {
429 .type = QUIRK_AUDIO_STANDARD_INTERFACE
433 .type = QUIRK_AUDIO_STANDARD_INTERFACE
437 .type = QUIRK_MIDI_YAMAHA
446 USB_DEVICE(0x0499, 0x1509),
447 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
448 /* .vendor_name = "Yamaha", */
449 /* .product_name = "Steinberg UR22", */
450 .ifnum = QUIRK_ANY_INTERFACE,
451 .type = QUIRK_COMPOSITE,
452 .data = (const struct snd_usb_audio_quirk[]) {
455 .type = QUIRK_AUDIO_STANDARD_INTERFACE
459 .type = QUIRK_AUDIO_STANDARD_INTERFACE
463 .type = QUIRK_MIDI_YAMAHA
467 .type = QUIRK_IGNORE_INTERFACE
476 USB_DEVICE(0x0499, 0x150a),
477 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
478 /* .vendor_name = "Yamaha", */
479 /* .product_name = "THR5A", */
480 .ifnum = QUIRK_ANY_INTERFACE,
481 .type = QUIRK_COMPOSITE,
482 .data = (const struct snd_usb_audio_quirk[]) {
485 .type = QUIRK_AUDIO_STANDARD_INTERFACE
489 .type = QUIRK_AUDIO_STANDARD_INTERFACE
493 .type = QUIRK_MIDI_YAMAHA
502 USB_DEVICE(0x0499, 0x150c),
503 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
504 /* .vendor_name = "Yamaha", */
505 /* .product_name = "THR10C", */
506 .ifnum = QUIRK_ANY_INTERFACE,
507 .type = QUIRK_COMPOSITE,
508 .data = (const struct snd_usb_audio_quirk[]) {
511 .type = QUIRK_AUDIO_STANDARD_INTERFACE
515 .type = QUIRK_AUDIO_STANDARD_INTERFACE
519 .type = QUIRK_MIDI_YAMAHA
527 YAMAHA_DEVICE(0x2000, "DGP-7"),
528 YAMAHA_DEVICE(0x2001, "DGP-5"),
529 YAMAHA_DEVICE(0x2002, NULL),
530 YAMAHA_DEVICE(0x2003, NULL),
531 YAMAHA_DEVICE(0x5000, "CS1D"),
532 YAMAHA_DEVICE(0x5001, "DSP1D"),
533 YAMAHA_DEVICE(0x5002, "DME32"),
534 YAMAHA_DEVICE(0x5003, "DM2000"),
535 YAMAHA_DEVICE(0x5004, "02R96"),
536 YAMAHA_DEVICE(0x5005, "ACU16-C"),
537 YAMAHA_DEVICE(0x5006, "NHB32-C"),
538 YAMAHA_DEVICE(0x5007, "DM1000"),
539 YAMAHA_DEVICE(0x5008, "01V96"),
540 YAMAHA_DEVICE(0x5009, "SPX2000"),
541 YAMAHA_DEVICE(0x500a, "PM5D"),
542 YAMAHA_DEVICE(0x500b, "DME64N"),
543 YAMAHA_DEVICE(0x500c, "DME24N"),
544 YAMAHA_DEVICE(0x500d, NULL),
545 YAMAHA_DEVICE(0x500e, NULL),
546 YAMAHA_DEVICE(0x500f, NULL),
547 YAMAHA_DEVICE(0x7000, "DTX"),
548 YAMAHA_DEVICE(0x7010, "UB99"),
550 #undef YAMAHA_INTERFACE
551 /* this catches most recent vendor-specific Yamaha devices */
553 .match_flags = USB_DEVICE_ID_MATCH_VENDOR |
554 USB_DEVICE_ID_MATCH_INT_CLASS,
556 .bInterfaceClass = USB_CLASS_VENDOR_SPEC,
557 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
558 .ifnum = QUIRK_ANY_INTERFACE,
559 .type = QUIRK_AUTODETECT
564 * Roland/RolandED/Edirol/BOSS devices
567 USB_DEVICE(0x0582, 0x0000),
568 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
569 .vendor_name = "Roland",
570 .product_name = "UA-100",
571 .ifnum = QUIRK_ANY_INTERFACE,
572 .type = QUIRK_COMPOSITE,
573 .data = (const struct snd_usb_audio_quirk[]) {
576 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
577 .data = & (const struct audioformat) {
578 .formats = SNDRV_PCM_FMTBIT_S16_LE,
586 .rates = SNDRV_PCM_RATE_CONTINUOUS,
593 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
594 .data = & (const struct audioformat) {
595 .formats = SNDRV_PCM_FMTBIT_S16_LE,
600 .attributes = UAC_EP_CS_ATTR_FILL_MAX,
603 .rates = SNDRV_PCM_RATE_CONTINUOUS,
610 .type = QUIRK_MIDI_FIXED_ENDPOINT,
611 .data = & (const struct snd_usb_midi_endpoint_info) {
612 .out_cables = 0x0007,
623 USB_DEVICE(0x0582, 0x0002),
624 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
625 .vendor_name = "EDIROL",
626 .product_name = "UM-4",
627 .ifnum = QUIRK_ANY_INTERFACE,
628 .type = QUIRK_COMPOSITE,
629 .data = (const struct snd_usb_audio_quirk[]) {
632 .type = QUIRK_IGNORE_INTERFACE
636 .type = QUIRK_IGNORE_INTERFACE
640 .type = QUIRK_MIDI_FIXED_ENDPOINT,
641 .data = & (const struct snd_usb_midi_endpoint_info) {
642 .out_cables = 0x000f,
653 USB_DEVICE(0x0582, 0x0003),
654 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
655 .vendor_name = "Roland",
656 .product_name = "SC-8850",
657 .ifnum = QUIRK_ANY_INTERFACE,
658 .type = QUIRK_COMPOSITE,
659 .data = (const struct snd_usb_audio_quirk[]) {
662 .type = QUIRK_IGNORE_INTERFACE
666 .type = QUIRK_IGNORE_INTERFACE
670 .type = QUIRK_MIDI_FIXED_ENDPOINT,
671 .data = & (const struct snd_usb_midi_endpoint_info) {
672 .out_cables = 0x003f,
683 USB_DEVICE(0x0582, 0x0004),
684 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
685 .vendor_name = "Roland",
686 .product_name = "U-8",
687 .ifnum = QUIRK_ANY_INTERFACE,
688 .type = QUIRK_COMPOSITE,
689 .data = (const struct snd_usb_audio_quirk[]) {
692 .type = QUIRK_IGNORE_INTERFACE
696 .type = QUIRK_IGNORE_INTERFACE
700 .type = QUIRK_MIDI_FIXED_ENDPOINT,
701 .data = & (const struct snd_usb_midi_endpoint_info) {
702 .out_cables = 0x0005,
713 /* Has ID 0x0099 when not in "Advanced Driver" mode.
714 * The UM-2EX has only one input, but we cannot detect this. */
715 USB_DEVICE(0x0582, 0x0005),
716 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
717 .vendor_name = "EDIROL",
718 .product_name = "UM-2",
719 .ifnum = QUIRK_ANY_INTERFACE,
720 .type = QUIRK_COMPOSITE,
721 .data = (const struct snd_usb_audio_quirk[]) {
724 .type = QUIRK_IGNORE_INTERFACE
728 .type = QUIRK_IGNORE_INTERFACE
732 .type = QUIRK_MIDI_FIXED_ENDPOINT,
733 .data = & (const struct snd_usb_midi_endpoint_info) {
734 .out_cables = 0x0003,
745 USB_DEVICE(0x0582, 0x0007),
746 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
747 .vendor_name = "Roland",
748 .product_name = "SC-8820",
749 .ifnum = QUIRK_ANY_INTERFACE,
750 .type = QUIRK_COMPOSITE,
751 .data = (const struct snd_usb_audio_quirk[]) {
754 .type = QUIRK_IGNORE_INTERFACE
758 .type = QUIRK_IGNORE_INTERFACE
762 .type = QUIRK_MIDI_FIXED_ENDPOINT,
763 .data = & (const struct snd_usb_midi_endpoint_info) {
764 .out_cables = 0x0013,
775 USB_DEVICE(0x0582, 0x0008),
776 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
777 .vendor_name = "Roland",
778 .product_name = "PC-300",
779 .ifnum = QUIRK_ANY_INTERFACE,
780 .type = QUIRK_COMPOSITE,
781 .data = (const struct snd_usb_audio_quirk[]) {
784 .type = QUIRK_IGNORE_INTERFACE
788 .type = QUIRK_IGNORE_INTERFACE
792 .type = QUIRK_MIDI_FIXED_ENDPOINT,
793 .data = & (const struct snd_usb_midi_endpoint_info) {
794 .out_cables = 0x0001,
805 /* has ID 0x009d when not in "Advanced Driver" mode */
806 USB_DEVICE(0x0582, 0x0009),
807 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
808 .vendor_name = "EDIROL",
809 .product_name = "UM-1",
810 .ifnum = QUIRK_ANY_INTERFACE,
811 .type = QUIRK_COMPOSITE,
812 .data = (const struct snd_usb_audio_quirk[]) {
815 .type = QUIRK_IGNORE_INTERFACE
819 .type = QUIRK_IGNORE_INTERFACE
823 .type = QUIRK_MIDI_FIXED_ENDPOINT,
824 .data = & (const struct snd_usb_midi_endpoint_info) {
825 .out_cables = 0x0001,
836 USB_DEVICE(0x0582, 0x000b),
837 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
838 .vendor_name = "Roland",
839 .product_name = "SK-500",
840 .ifnum = QUIRK_ANY_INTERFACE,
841 .type = QUIRK_COMPOSITE,
842 .data = (const struct snd_usb_audio_quirk[]) {
845 .type = QUIRK_IGNORE_INTERFACE
849 .type = QUIRK_IGNORE_INTERFACE
853 .type = QUIRK_MIDI_FIXED_ENDPOINT,
854 .data = & (const struct snd_usb_midi_endpoint_info) {
855 .out_cables = 0x0013,
866 /* thanks to Emiliano Grilli <emillo@libero.it>
867 * for helping researching this data */
868 USB_DEVICE(0x0582, 0x000c),
869 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
870 .vendor_name = "Roland",
871 .product_name = "SC-D70",
872 .ifnum = QUIRK_ANY_INTERFACE,
873 .type = QUIRK_COMPOSITE,
874 .data = (const struct snd_usb_audio_quirk[]) {
877 .type = QUIRK_AUDIO_STANDARD_INTERFACE
881 .type = QUIRK_AUDIO_STANDARD_INTERFACE
885 .type = QUIRK_MIDI_FIXED_ENDPOINT,
886 .data = & (const struct snd_usb_midi_endpoint_info) {
887 .out_cables = 0x0007,
898 * This quirk is for the "Advanced Driver" mode of the Edirol UA-5.
899 * If the advanced mode switch at the back of the unit is off, the
900 * UA-5 has ID 0x0582/0x0011 and is standard compliant (no quirks),
901 * but offers only 16-bit PCM.
902 * In advanced mode, the UA-5 will output S24_3LE samples (two
903 * channels) at the rate indicated on the front switch, including
904 * the 96kHz sample rate.
906 USB_DEVICE(0x0582, 0x0010),
907 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
908 .vendor_name = "EDIROL",
909 .product_name = "UA-5",
910 .ifnum = QUIRK_ANY_INTERFACE,
911 .type = QUIRK_COMPOSITE,
912 .data = (const struct snd_usb_audio_quirk[]) {
915 .type = QUIRK_AUDIO_STANDARD_INTERFACE
919 .type = QUIRK_AUDIO_STANDARD_INTERFACE
928 /* has ID 0x0013 when not in "Advanced Driver" mode */
929 USB_DEVICE(0x0582, 0x0012),
930 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
931 .vendor_name = "Roland",
932 .product_name = "XV-5050",
934 .type = QUIRK_MIDI_FIXED_ENDPOINT,
935 .data = & (const struct snd_usb_midi_endpoint_info) {
936 .out_cables = 0x0001,
942 /* has ID 0x0015 when not in "Advanced Driver" mode */
943 USB_DEVICE(0x0582, 0x0014),
944 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
945 .vendor_name = "EDIROL",
946 .product_name = "UM-880",
948 .type = QUIRK_MIDI_FIXED_ENDPOINT,
949 .data = & (const struct snd_usb_midi_endpoint_info) {
950 .out_cables = 0x01ff,
956 /* has ID 0x0017 when not in "Advanced Driver" mode */
957 USB_DEVICE(0x0582, 0x0016),
958 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
959 .vendor_name = "EDIROL",
960 .product_name = "SD-90",
961 .ifnum = QUIRK_ANY_INTERFACE,
962 .type = QUIRK_COMPOSITE,
963 .data = (const struct snd_usb_audio_quirk[]) {
966 .type = QUIRK_AUDIO_STANDARD_INTERFACE
970 .type = QUIRK_AUDIO_STANDARD_INTERFACE
974 .type = QUIRK_MIDI_FIXED_ENDPOINT,
975 .data = & (const struct snd_usb_midi_endpoint_info) {
976 .out_cables = 0x000f,
987 /* has ID 0x001c when not in "Advanced Driver" mode */
988 USB_DEVICE(0x0582, 0x001b),
989 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
990 .vendor_name = "Roland",
991 .product_name = "MMP-2",
992 .ifnum = QUIRK_ANY_INTERFACE,
993 .type = QUIRK_COMPOSITE,
994 .data = (const struct snd_usb_audio_quirk[]) {
997 .type = QUIRK_IGNORE_INTERFACE
1001 .type = QUIRK_IGNORE_INTERFACE
1005 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1006 .data = & (const struct snd_usb_midi_endpoint_info) {
1007 .out_cables = 0x0001,
1018 /* has ID 0x001e when not in "Advanced Driver" mode */
1019 USB_DEVICE(0x0582, 0x001d),
1020 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1021 .vendor_name = "Roland",
1022 .product_name = "V-SYNTH",
1024 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1025 .data = & (const struct snd_usb_midi_endpoint_info) {
1026 .out_cables = 0x0001,
1032 /* has ID 0x0024 when not in "Advanced Driver" mode */
1033 USB_DEVICE(0x0582, 0x0023),
1034 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1035 .vendor_name = "EDIROL",
1036 .product_name = "UM-550",
1038 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1039 .data = & (const struct snd_usb_midi_endpoint_info) {
1040 .out_cables = 0x003f,
1047 * This quirk is for the "Advanced Driver" mode. If off, the UA-20
1048 * has ID 0x0026 and is standard compliant, but has only 16-bit PCM
1051 USB_DEVICE(0x0582, 0x0025),
1052 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1053 .vendor_name = "EDIROL",
1054 .product_name = "UA-20",
1055 .ifnum = QUIRK_ANY_INTERFACE,
1056 .type = QUIRK_COMPOSITE,
1057 .data = (const struct snd_usb_audio_quirk[]) {
1060 .type = QUIRK_IGNORE_INTERFACE
1064 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
1065 .data = & (const struct audioformat) {
1066 .formats = SNDRV_PCM_FMTBIT_S24_3LE,
1074 .rates = SNDRV_PCM_RATE_CONTINUOUS,
1081 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
1082 .data = & (const struct audioformat) {
1083 .formats = SNDRV_PCM_FMTBIT_S24_3LE,
1091 .rates = SNDRV_PCM_RATE_CONTINUOUS,
1098 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1099 .data = & (const struct snd_usb_midi_endpoint_info) {
1100 .out_cables = 0x0001,
1111 /* has ID 0x0028 when not in "Advanced Driver" mode */
1112 USB_DEVICE(0x0582, 0x0027),
1113 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1114 .vendor_name = "EDIROL",
1115 .product_name = "SD-20",
1117 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1118 .data = & (const struct snd_usb_midi_endpoint_info) {
1119 .out_cables = 0x0003,
1125 /* has ID 0x002a when not in "Advanced Driver" mode */
1126 USB_DEVICE(0x0582, 0x0029),
1127 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1128 .vendor_name = "EDIROL",
1129 .product_name = "SD-80",
1131 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1132 .data = & (const struct snd_usb_midi_endpoint_info) {
1133 .out_cables = 0x000f,
1139 * This quirk is for the "Advanced" modes of the Edirol UA-700.
1140 * If the sample format switch is not in an advanced setting, the
1141 * UA-700 has ID 0x0582/0x002c and is standard compliant (no quirks),
1142 * but offers only 16-bit PCM and no MIDI.
1144 USB_DEVICE_VENDOR_SPEC(0x0582, 0x002b),
1145 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1146 .vendor_name = "EDIROL",
1147 .product_name = "UA-700",
1148 .ifnum = QUIRK_ANY_INTERFACE,
1149 .type = QUIRK_COMPOSITE,
1150 .data = (const struct snd_usb_audio_quirk[]) {
1153 .type = QUIRK_AUDIO_EDIROL_UAXX
1157 .type = QUIRK_AUDIO_EDIROL_UAXX
1161 .type = QUIRK_AUDIO_EDIROL_UAXX
1170 /* has ID 0x002e when not in "Advanced Driver" mode */
1171 USB_DEVICE(0x0582, 0x002d),
1172 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1173 .vendor_name = "Roland",
1174 .product_name = "XV-2020",
1176 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1177 .data = & (const struct snd_usb_midi_endpoint_info) {
1178 .out_cables = 0x0001,
1184 /* has ID 0x0030 when not in "Advanced Driver" mode */
1185 USB_DEVICE(0x0582, 0x002f),
1186 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1187 .vendor_name = "Roland",
1188 .product_name = "VariOS",
1190 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1191 .data = & (const struct snd_usb_midi_endpoint_info) {
1192 .out_cables = 0x0007,
1198 /* has ID 0x0034 when not in "Advanced Driver" mode */
1199 USB_DEVICE(0x0582, 0x0033),
1200 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1201 .vendor_name = "EDIROL",
1202 .product_name = "PCR",
1204 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1205 .data = & (const struct snd_usb_midi_endpoint_info) {
1206 .out_cables = 0x0003,
1213 * Has ID 0x0038 when not in "Advanced Driver" mode;
1214 * later revisions use IDs 0x0054 and 0x00a2.
1216 USB_DEVICE(0x0582, 0x0037),
1217 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1218 .vendor_name = "Roland",
1219 .product_name = "Digital Piano",
1221 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1222 .data = & (const struct snd_usb_midi_endpoint_info) {
1223 .out_cables = 0x0001,
1230 * This quirk is for the "Advanced Driver" mode. If off, the GS-10
1231 * has ID 0x003c and is standard compliant, but has only 16-bit PCM
1234 USB_DEVICE_VENDOR_SPEC(0x0582, 0x003b),
1235 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1236 .vendor_name = "BOSS",
1237 .product_name = "GS-10",
1238 .ifnum = QUIRK_ANY_INTERFACE,
1239 .type = QUIRK_COMPOSITE,
1240 .data = & (const struct snd_usb_audio_quirk[]) {
1243 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1247 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1251 .type = QUIRK_MIDI_STANDARD_INTERFACE
1260 /* has ID 0x0041 when not in "Advanced Driver" mode */
1261 USB_DEVICE(0x0582, 0x0040),
1262 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1263 .vendor_name = "Roland",
1264 .product_name = "GI-20",
1266 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1267 .data = & (const struct snd_usb_midi_endpoint_info) {
1268 .out_cables = 0x0001,
1274 /* has ID 0x0043 when not in "Advanced Driver" mode */
1275 USB_DEVICE(0x0582, 0x0042),
1276 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1277 .vendor_name = "Roland",
1278 .product_name = "RS-70",
1280 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1281 .data = & (const struct snd_usb_midi_endpoint_info) {
1282 .out_cables = 0x0001,
1288 /* has ID 0x0049 when not in "Advanced Driver" mode */
1289 USB_DEVICE(0x0582, 0x0047),
1290 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1291 /* .vendor_name = "EDIROL", */
1292 /* .product_name = "UR-80", */
1293 .ifnum = QUIRK_ANY_INTERFACE,
1294 .type = QUIRK_COMPOSITE,
1295 .data = (const struct snd_usb_audio_quirk[]) {
1296 /* in the 96 kHz modes, only interface 1 is there */
1299 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1303 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1312 /* has ID 0x004a when not in "Advanced Driver" mode */
1313 USB_DEVICE(0x0582, 0x0048),
1314 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1315 /* .vendor_name = "EDIROL", */
1316 /* .product_name = "UR-80", */
1318 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1319 .data = & (const struct snd_usb_midi_endpoint_info) {
1320 .out_cables = 0x0003,
1326 /* has ID 0x004e when not in "Advanced Driver" mode */
1327 USB_DEVICE(0x0582, 0x004c),
1328 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1329 .vendor_name = "EDIROL",
1330 .product_name = "PCR-A",
1331 .ifnum = QUIRK_ANY_INTERFACE,
1332 .type = QUIRK_COMPOSITE,
1333 .data = (const struct snd_usb_audio_quirk[]) {
1336 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1340 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1349 /* has ID 0x004f when not in "Advanced Driver" mode */
1350 USB_DEVICE(0x0582, 0x004d),
1351 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1352 .vendor_name = "EDIROL",
1353 .product_name = "PCR-A",
1355 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1356 .data = & (const struct snd_usb_midi_endpoint_info) {
1357 .out_cables = 0x0003,
1364 * This quirk is for the "Advanced Driver" mode. If off, the UA-3FX
1365 * is standard compliant, but has only 16-bit PCM.
1367 USB_DEVICE(0x0582, 0x0050),
1368 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1369 .vendor_name = "EDIROL",
1370 .product_name = "UA-3FX",
1371 .ifnum = QUIRK_ANY_INTERFACE,
1372 .type = QUIRK_COMPOSITE,
1373 .data = (const struct snd_usb_audio_quirk[]) {
1376 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1380 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1389 USB_DEVICE(0x0582, 0x0052),
1390 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1391 .vendor_name = "EDIROL",
1392 .product_name = "UM-1SX",
1394 .type = QUIRK_MIDI_STANDARD_INTERFACE
1398 USB_DEVICE(0x0582, 0x0060),
1399 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1400 .vendor_name = "Roland",
1401 .product_name = "EXR Series",
1403 .type = QUIRK_MIDI_STANDARD_INTERFACE
1407 /* has ID 0x0066 when not in "Advanced Driver" mode */
1408 USB_DEVICE(0x0582, 0x0064),
1409 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1410 /* .vendor_name = "EDIROL", */
1411 /* .product_name = "PCR-1", */
1412 .ifnum = QUIRK_ANY_INTERFACE,
1413 .type = QUIRK_COMPOSITE,
1414 .data = (const struct snd_usb_audio_quirk[]) {
1417 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1421 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1430 /* has ID 0x0067 when not in "Advanced Driver" mode */
1431 USB_DEVICE(0x0582, 0x0065),
1432 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1433 /* .vendor_name = "EDIROL", */
1434 /* .product_name = "PCR-1", */
1436 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1437 .data = & (const struct snd_usb_midi_endpoint_info) {
1438 .out_cables = 0x0001,
1444 /* has ID 0x006e when not in "Advanced Driver" mode */
1445 USB_DEVICE(0x0582, 0x006d),
1446 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1447 .vendor_name = "Roland",
1448 .product_name = "FANTOM-X",
1450 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1451 .data = & (const struct snd_usb_midi_endpoint_info) {
1452 .out_cables = 0x0001,
1458 * This quirk is for the "Advanced" modes of the Edirol UA-25.
1459 * If the switch is not in an advanced setting, the UA-25 has
1460 * ID 0x0582/0x0073 and is standard compliant (no quirks), but
1461 * offers only 16-bit PCM at 44.1 kHz and no MIDI.
1463 USB_DEVICE_VENDOR_SPEC(0x0582, 0x0074),
1464 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1465 .vendor_name = "EDIROL",
1466 .product_name = "UA-25",
1467 .ifnum = QUIRK_ANY_INTERFACE,
1468 .type = QUIRK_COMPOSITE,
1469 .data = (const struct snd_usb_audio_quirk[]) {
1472 .type = QUIRK_AUDIO_EDIROL_UAXX
1476 .type = QUIRK_AUDIO_EDIROL_UAXX
1480 .type = QUIRK_AUDIO_EDIROL_UAXX
1489 /* has ID 0x0076 when not in "Advanced Driver" mode */
1490 USB_DEVICE(0x0582, 0x0075),
1491 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1492 .vendor_name = "BOSS",
1493 .product_name = "DR-880",
1495 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1496 .data = & (const struct snd_usb_midi_endpoint_info) {
1497 .out_cables = 0x0001,
1503 /* has ID 0x007b when not in "Advanced Driver" mode */
1504 USB_DEVICE_VENDOR_SPEC(0x0582, 0x007a),
1505 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1506 .vendor_name = "Roland",
1507 /* "RD" or "RD-700SX"? */
1509 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1510 .data = & (const struct snd_usb_midi_endpoint_info) {
1511 .out_cables = 0x0003,
1517 /* has ID 0x0081 when not in "Advanced Driver" mode */
1518 USB_DEVICE(0x0582, 0x0080),
1519 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1520 .vendor_name = "Roland",
1521 .product_name = "G-70",
1523 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1524 .data = & (const struct snd_usb_midi_endpoint_info) {
1525 .out_cables = 0x0001,
1531 /* has ID 0x008c when not in "Advanced Driver" mode */
1532 USB_DEVICE(0x0582, 0x008b),
1533 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1534 .vendor_name = "EDIROL",
1535 .product_name = "PC-50",
1537 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1538 .data = & (const struct snd_usb_midi_endpoint_info) {
1539 .out_cables = 0x0001,
1546 * This quirk is for the "Advanced Driver" mode. If off, the UA-4FX
1547 * is standard compliant, but has only 16-bit PCM and no MIDI.
1549 USB_DEVICE(0x0582, 0x00a3),
1550 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1551 .vendor_name = "EDIROL",
1552 .product_name = "UA-4FX",
1553 .ifnum = QUIRK_ANY_INTERFACE,
1554 .type = QUIRK_COMPOSITE,
1555 .data = (const struct snd_usb_audio_quirk[]) {
1558 .type = QUIRK_AUDIO_EDIROL_UAXX
1562 .type = QUIRK_AUDIO_EDIROL_UAXX
1566 .type = QUIRK_AUDIO_EDIROL_UAXX
1576 USB_DEVICE(0x0582, 0x00c4),
1577 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1578 .ifnum = QUIRK_ANY_INTERFACE,
1579 .type = QUIRK_COMPOSITE,
1580 .data = (const struct snd_usb_audio_quirk[]) {
1583 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1587 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1591 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1592 .data = & (const struct snd_usb_midi_endpoint_info) {
1593 .out_cables = 0x0001,
1604 /* Advanced modes of the Edirol UA-25EX.
1605 * For the standard mode, UA-25EX has ID 0582:00e7, which
1606 * offers only 16-bit PCM at 44.1 kHz and no MIDI.
1608 USB_DEVICE_VENDOR_SPEC(0x0582, 0x00e6),
1609 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1610 .vendor_name = "EDIROL",
1611 .product_name = "UA-25EX",
1612 .ifnum = QUIRK_ANY_INTERFACE,
1613 .type = QUIRK_COMPOSITE,
1614 .data = (const struct snd_usb_audio_quirk[]) {
1617 .type = QUIRK_AUDIO_EDIROL_UAXX
1621 .type = QUIRK_AUDIO_EDIROL_UAXX
1625 .type = QUIRK_AUDIO_EDIROL_UAXX
1635 USB_DEVICE_VENDOR_SPEC(0x0582, 0x0108),
1636 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1638 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1639 .data = & (const struct snd_usb_midi_endpoint_info) {
1640 .out_cables = 0x0007,
1647 USB_DEVICE(0x0582, 0x0113),
1648 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1649 .ifnum = QUIRK_ANY_INTERFACE,
1650 .type = QUIRK_COMPOSITE,
1651 .data = (const struct snd_usb_audio_quirk[]) {
1654 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1658 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1662 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1663 .data = & (const struct snd_usb_midi_endpoint_info) {
1664 .out_cables = 0x0001,
1675 /* only 44.1 kHz works at the moment */
1676 USB_DEVICE(0x0582, 0x0120),
1677 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1678 /* .vendor_name = "Roland", */
1679 /* .product_name = "OCTO-CAPTURE", */
1680 .ifnum = QUIRK_ANY_INTERFACE,
1681 .type = QUIRK_COMPOSITE,
1682 .data = (const struct snd_usb_audio_quirk[]) {
1685 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
1686 .data = & (const struct audioformat) {
1687 .formats = SNDRV_PCM_FMTBIT_S32_LE,
1694 .rates = SNDRV_PCM_RATE_44100,
1698 .rate_table = (unsigned int[]) { 44100 }
1703 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
1704 .data = & (const struct audioformat) {
1705 .formats = SNDRV_PCM_FMTBIT_S32_LE,
1712 .rates = SNDRV_PCM_RATE_44100,
1716 .rate_table = (unsigned int[]) { 44100 }
1721 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1722 .data = & (const struct snd_usb_midi_endpoint_info) {
1723 .out_cables = 0x0001,
1729 .type = QUIRK_IGNORE_INTERFACE
1733 .type = QUIRK_IGNORE_INTERFACE
1742 /* only 44.1 kHz works at the moment */
1743 USB_DEVICE(0x0582, 0x012f),
1744 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1745 /* .vendor_name = "Roland", */
1746 /* .product_name = "QUAD-CAPTURE", */
1747 .ifnum = QUIRK_ANY_INTERFACE,
1748 .type = QUIRK_COMPOSITE,
1749 .data = (const struct snd_usb_audio_quirk[]) {
1752 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
1753 .data = & (const struct audioformat) {
1754 .formats = SNDRV_PCM_FMTBIT_S32_LE,
1761 .rates = SNDRV_PCM_RATE_44100,
1765 .rate_table = (unsigned int[]) { 44100 }
1770 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
1771 .data = & (const struct audioformat) {
1772 .formats = SNDRV_PCM_FMTBIT_S32_LE,
1779 .rates = SNDRV_PCM_RATE_44100,
1783 .rate_table = (unsigned int[]) { 44100 }
1788 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1789 .data = & (const struct snd_usb_midi_endpoint_info) {
1790 .out_cables = 0x0001,
1796 .type = QUIRK_IGNORE_INTERFACE
1800 .type = QUIRK_IGNORE_INTERFACE
1809 USB_DEVICE(0x0582, 0x0159),
1810 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1811 /* .vendor_name = "Roland", */
1812 /* .product_name = "UA-22", */
1813 .ifnum = QUIRK_ANY_INTERFACE,
1814 .type = QUIRK_COMPOSITE,
1815 .data = (const struct snd_usb_audio_quirk[]) {
1818 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1822 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1826 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1827 .data = & (const struct snd_usb_midi_endpoint_info) {
1828 .out_cables = 0x0001,
1838 /* this catches most recent vendor-specific Roland devices */
1840 .match_flags = USB_DEVICE_ID_MATCH_VENDOR |
1841 USB_DEVICE_ID_MATCH_INT_CLASS,
1843 .bInterfaceClass = USB_CLASS_VENDOR_SPEC,
1844 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
1845 .ifnum = QUIRK_ANY_INTERFACE,
1846 .type = QUIRK_AUTODETECT
1850 /* Guillemot devices */
1853 * This is for the "Windows Edition" where the external MIDI ports are
1854 * the only MIDI ports; the control data is reported through HID
1855 * interfaces. The "Macintosh Edition" has ID 0xd002 and uses standard
1856 * compliant USB MIDI ports for external MIDI and controls.
1858 USB_DEVICE_VENDOR_SPEC(0x06f8, 0xb000),
1859 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1860 .vendor_name = "Hercules",
1861 .product_name = "DJ Console (WE)",
1863 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1864 .data = & (const struct snd_usb_midi_endpoint_info) {
1865 .out_cables = 0x0001,
1871 /* Midiman/M-Audio devices */
1873 USB_DEVICE_VENDOR_SPEC(0x0763, 0x1002),
1874 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1875 .vendor_name = "M-Audio",
1876 .product_name = "MidiSport 2x2",
1877 .ifnum = QUIRK_ANY_INTERFACE,
1878 .type = QUIRK_MIDI_MIDIMAN,
1879 .data = & (const struct snd_usb_midi_endpoint_info) {
1880 .out_cables = 0x0003,
1886 USB_DEVICE_VENDOR_SPEC(0x0763, 0x1011),
1887 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1888 .vendor_name = "M-Audio",
1889 .product_name = "MidiSport 1x1",
1890 .ifnum = QUIRK_ANY_INTERFACE,
1891 .type = QUIRK_MIDI_MIDIMAN,
1892 .data = & (const struct snd_usb_midi_endpoint_info) {
1893 .out_cables = 0x0001,
1899 USB_DEVICE_VENDOR_SPEC(0x0763, 0x1015),
1900 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1901 .vendor_name = "M-Audio",
1902 .product_name = "Keystation",
1903 .ifnum = QUIRK_ANY_INTERFACE,
1904 .type = QUIRK_MIDI_MIDIMAN,
1905 .data = & (const struct snd_usb_midi_endpoint_info) {
1906 .out_cables = 0x0001,
1912 USB_DEVICE_VENDOR_SPEC(0x0763, 0x1021),
1913 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1914 .vendor_name = "M-Audio",
1915 .product_name = "MidiSport 4x4",
1916 .ifnum = QUIRK_ANY_INTERFACE,
1917 .type = QUIRK_MIDI_MIDIMAN,
1918 .data = & (const struct snd_usb_midi_endpoint_info) {
1919 .out_cables = 0x000f,
1926 * For hardware revision 1.05; in the later revisions (1.10 and
1927 * 1.21), 0x1031 is the ID for the device without firmware.
1928 * Thanks to Olaf Giesbrecht <Olaf_Giesbrecht@yahoo.de>
1930 USB_DEVICE_VER(0x0763, 0x1031, 0x0100, 0x0109),
1931 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1932 .vendor_name = "M-Audio",
1933 .product_name = "MidiSport 8x8",
1934 .ifnum = QUIRK_ANY_INTERFACE,
1935 .type = QUIRK_MIDI_MIDIMAN,
1936 .data = & (const struct snd_usb_midi_endpoint_info) {
1937 .out_cables = 0x01ff,
1943 USB_DEVICE_VENDOR_SPEC(0x0763, 0x1033),
1944 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1945 .vendor_name = "M-Audio",
1946 .product_name = "MidiSport 8x8",
1947 .ifnum = QUIRK_ANY_INTERFACE,
1948 .type = QUIRK_MIDI_MIDIMAN,
1949 .data = & (const struct snd_usb_midi_endpoint_info) {
1950 .out_cables = 0x01ff,
1956 USB_DEVICE_VENDOR_SPEC(0x0763, 0x1041),
1957 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1958 .vendor_name = "M-Audio",
1959 .product_name = "MidiSport 2x4",
1960 .ifnum = QUIRK_ANY_INTERFACE,
1961 .type = QUIRK_MIDI_MIDIMAN,
1962 .data = & (const struct snd_usb_midi_endpoint_info) {
1963 .out_cables = 0x000f,
1969 USB_DEVICE_VENDOR_SPEC(0x0763, 0x2001),
1970 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1971 .vendor_name = "M-Audio",
1972 .product_name = "Quattro",
1973 .ifnum = QUIRK_ANY_INTERFACE,
1974 .type = QUIRK_COMPOSITE,
1975 .data = & (const struct snd_usb_audio_quirk[]) {
1977 * Interfaces 0-2 are "Windows-compatible", 16-bit only,
1978 * and share endpoints with the other interfaces.
1979 * Ignore them. The other interfaces can do 24 bits,
1980 * but captured samples are big-endian (see usbaudio.c).
1984 .type = QUIRK_IGNORE_INTERFACE
1988 .type = QUIRK_IGNORE_INTERFACE
1992 .type = QUIRK_IGNORE_INTERFACE
1996 .type = QUIRK_IGNORE_INTERFACE
2000 .type = QUIRK_AUDIO_STANDARD_INTERFACE
2004 .type = QUIRK_AUDIO_STANDARD_INTERFACE
2008 .type = QUIRK_IGNORE_INTERFACE
2012 .type = QUIRK_AUDIO_STANDARD_INTERFACE
2016 .type = QUIRK_AUDIO_STANDARD_INTERFACE
2020 .type = QUIRK_MIDI_MIDIMAN,
2021 .data = & (const struct snd_usb_midi_endpoint_info) {
2022 .out_cables = 0x0001,
2033 USB_DEVICE_VENDOR_SPEC(0x0763, 0x2003),
2034 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2035 .vendor_name = "M-Audio",
2036 .product_name = "AudioPhile",
2038 .type = QUIRK_MIDI_MIDIMAN,
2039 .data = & (const struct snd_usb_midi_endpoint_info) {
2040 .out_cables = 0x0001,
2046 USB_DEVICE_VENDOR_SPEC(0x0763, 0x2008),
2047 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2048 .vendor_name = "M-Audio",
2049 .product_name = "Ozone",
2051 .type = QUIRK_MIDI_MIDIMAN,
2052 .data = & (const struct snd_usb_midi_endpoint_info) {
2053 .out_cables = 0x0001,
2059 USB_DEVICE_VENDOR_SPEC(0x0763, 0x200d),
2060 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2061 .vendor_name = "M-Audio",
2062 .product_name = "OmniStudio",
2063 .ifnum = QUIRK_ANY_INTERFACE,
2064 .type = QUIRK_COMPOSITE,
2065 .data = & (const struct snd_usb_audio_quirk[]) {
2068 .type = QUIRK_IGNORE_INTERFACE
2072 .type = QUIRK_IGNORE_INTERFACE
2076 .type = QUIRK_IGNORE_INTERFACE
2080 .type = QUIRK_IGNORE_INTERFACE
2084 .type = QUIRK_AUDIO_STANDARD_INTERFACE
2088 .type = QUIRK_AUDIO_STANDARD_INTERFACE
2092 .type = QUIRK_IGNORE_INTERFACE
2096 .type = QUIRK_AUDIO_STANDARD_INTERFACE
2100 .type = QUIRK_AUDIO_STANDARD_INTERFACE
2104 .type = QUIRK_MIDI_MIDIMAN,
2105 .data = & (const struct snd_usb_midi_endpoint_info) {
2106 .out_cables = 0x0001,
2117 USB_DEVICE(0x0763, 0x2019),
2118 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2119 /* .vendor_name = "M-Audio", */
2120 /* .product_name = "Ozone Academic", */
2121 .ifnum = QUIRK_ANY_INTERFACE,
2122 .type = QUIRK_COMPOSITE,
2123 .data = & (const struct snd_usb_audio_quirk[]) {
2126 .type = QUIRK_AUDIO_STANDARD_INTERFACE
2130 .type = QUIRK_AUDIO_STANDARD_INTERFACE
2134 .type = QUIRK_AUDIO_STANDARD_INTERFACE
2138 .type = QUIRK_MIDI_MIDIMAN,
2139 .data = & (const struct snd_usb_midi_endpoint_info) {
2140 .out_cables = 0x0001,
2152 USB_DEVICE_VENDOR_SPEC(0x0763, 0x201a),
2155 USB_DEVICE_VENDOR_SPEC(0x0763, 0x2030),
2156 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
2157 /* .vendor_name = "M-Audio", */
2158 /* .product_name = "Fast Track C400", */
2159 .ifnum = QUIRK_ANY_INTERFACE,
2160 .type = QUIRK_COMPOSITE,
2161 .data = &(const struct snd_usb_audio_quirk[]) {
2164 .type = QUIRK_AUDIO_STANDARD_MIXER,
2169 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
2170 .data = &(const struct audioformat) {
2171 .formats = SNDRV_PCM_FMTBIT_S24_3LE,
2176 .attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
2179 .rates = SNDRV_PCM_RATE_44100 |
2180 SNDRV_PCM_RATE_48000 |
2181 SNDRV_PCM_RATE_88200 |
2182 SNDRV_PCM_RATE_96000,
2186 .rate_table = (unsigned int[]) {
2187 44100, 48000, 88200, 96000
2195 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
2196 .data = &(const struct audioformat) {
2197 .formats = SNDRV_PCM_FMTBIT_S24_3LE,
2202 .attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
2205 .rates = SNDRV_PCM_RATE_44100 |
2206 SNDRV_PCM_RATE_48000 |
2207 SNDRV_PCM_RATE_88200 |
2208 SNDRV_PCM_RATE_96000,
2212 .rate_table = (unsigned int[]) {
2213 44100, 48000, 88200, 96000
2220 .ifnum = -1 /* Interface = 4 */
2226 USB_DEVICE_VENDOR_SPEC(0x0763, 0x2031),
2227 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
2228 /* .vendor_name = "M-Audio", */
2229 /* .product_name = "Fast Track C600", */
2230 .ifnum = QUIRK_ANY_INTERFACE,
2231 .type = QUIRK_COMPOSITE,
2232 .data = &(const struct snd_usb_audio_quirk[]) {
2235 .type = QUIRK_AUDIO_STANDARD_MIXER,
2240 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
2241 .data = &(const struct audioformat) {
2242 .formats = SNDRV_PCM_FMTBIT_S24_3LE,
2247 .attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
2250 .rates = SNDRV_PCM_RATE_44100 |
2251 SNDRV_PCM_RATE_48000 |
2252 SNDRV_PCM_RATE_88200 |
2253 SNDRV_PCM_RATE_96000,
2257 .rate_table = (unsigned int[]) {
2258 44100, 48000, 88200, 96000
2266 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
2267 .data = &(const struct audioformat) {
2268 .formats = SNDRV_PCM_FMTBIT_S24_3LE,
2273 .attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
2276 .rates = SNDRV_PCM_RATE_44100 |
2277 SNDRV_PCM_RATE_48000 |
2278 SNDRV_PCM_RATE_88200 |
2279 SNDRV_PCM_RATE_96000,
2283 .rate_table = (unsigned int[]) {
2284 44100, 48000, 88200, 96000
2291 .ifnum = -1 /* Interface = 4 */
2297 USB_DEVICE_VENDOR_SPEC(0x0763, 0x2080),
2298 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2299 /* .vendor_name = "M-Audio", */
2300 /* .product_name = "Fast Track Ultra", */
2301 .ifnum = QUIRK_ANY_INTERFACE,
2302 .type = QUIRK_COMPOSITE,
2303 .data = & (const struct snd_usb_audio_quirk[]) {
2306 .type = QUIRK_AUDIO_STANDARD_MIXER,
2310 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
2311 .data = & (const struct audioformat) {
2312 .formats = SNDRV_PCM_FMTBIT_S24_3LE,
2317 .attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
2320 .rates = SNDRV_PCM_RATE_44100 |
2321 SNDRV_PCM_RATE_48000 |
2322 SNDRV_PCM_RATE_88200 |
2323 SNDRV_PCM_RATE_96000,
2327 .rate_table = (unsigned int[]) {
2328 44100, 48000, 88200, 96000
2334 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
2335 .data = & (const struct audioformat) {
2336 .formats = SNDRV_PCM_FMTBIT_S24_3LE,
2341 .attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
2344 .rates = SNDRV_PCM_RATE_44100 |
2345 SNDRV_PCM_RATE_48000 |
2346 SNDRV_PCM_RATE_88200 |
2347 SNDRV_PCM_RATE_96000,
2351 .rate_table = (unsigned int[]) {
2352 44100, 48000, 88200, 96000
2356 /* interface 3 (MIDI) is standard compliant */
2364 USB_DEVICE_VENDOR_SPEC(0x0763, 0x2081),
2365 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2366 /* .vendor_name = "M-Audio", */
2367 /* .product_name = "Fast Track Ultra 8R", */
2368 .ifnum = QUIRK_ANY_INTERFACE,
2369 .type = QUIRK_COMPOSITE,
2370 .data = & (const struct snd_usb_audio_quirk[]) {
2373 .type = QUIRK_AUDIO_STANDARD_MIXER,
2377 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
2378 .data = & (const struct audioformat) {
2379 .formats = SNDRV_PCM_FMTBIT_S24_3LE,
2384 .attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
2387 .rates = SNDRV_PCM_RATE_44100 |
2388 SNDRV_PCM_RATE_48000 |
2389 SNDRV_PCM_RATE_88200 |
2390 SNDRV_PCM_RATE_96000,
2394 .rate_table = (unsigned int[]) {
2395 44100, 48000, 88200, 96000
2401 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
2402 .data = & (const struct audioformat) {
2403 .formats = SNDRV_PCM_FMTBIT_S24_3LE,
2408 .attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
2411 .rates = SNDRV_PCM_RATE_44100 |
2412 SNDRV_PCM_RATE_48000 |
2413 SNDRV_PCM_RATE_88200 |
2414 SNDRV_PCM_RATE_96000,
2418 .rate_table = (unsigned int[]) {
2419 44100, 48000, 88200, 96000
2423 /* interface 3 (MIDI) is standard compliant */
2433 USB_DEVICE(0x07cf, 0x6801),
2434 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2435 .vendor_name = "Casio",
2436 .product_name = "PL-40R",
2438 .type = QUIRK_MIDI_YAMAHA
2442 /* this ID is used by several devices without a product ID */
2443 USB_DEVICE(0x07cf, 0x6802),
2444 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2445 .vendor_name = "Casio",
2446 .product_name = "Keyboard",
2448 .type = QUIRK_MIDI_YAMAHA
2452 /* Mark of the Unicorn devices */
2454 /* thanks to Robert A. Lerche <ral 'at' msbit.com> */
2455 .match_flags = USB_DEVICE_ID_MATCH_VENDOR |
2456 USB_DEVICE_ID_MATCH_PRODUCT |
2457 USB_DEVICE_ID_MATCH_DEV_SUBCLASS,
2459 .idProduct = 0x0001,
2460 .bDeviceSubClass = 2,
2461 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2462 .vendor_name = "MOTU",
2463 .product_name = "Fastlane",
2464 .ifnum = QUIRK_ANY_INTERFACE,
2465 .type = QUIRK_COMPOSITE,
2466 .data = & (const struct snd_usb_audio_quirk[]) {
2469 .type = QUIRK_MIDI_RAW_BYTES
2473 .type = QUIRK_IGNORE_INTERFACE
2482 /* Emagic devices */
2484 USB_DEVICE(0x086a, 0x0001),
2485 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2486 .vendor_name = "Emagic",
2487 .product_name = "Unitor8",
2489 .type = QUIRK_MIDI_EMAGIC,
2490 .data = & (const struct snd_usb_midi_endpoint_info) {
2491 .out_cables = 0x80ff,
2497 USB_DEVICE(0x086a, 0x0002),
2498 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2499 .vendor_name = "Emagic",
2500 /* .product_name = "AMT8", */
2502 .type = QUIRK_MIDI_EMAGIC,
2503 .data = & (const struct snd_usb_midi_endpoint_info) {
2504 .out_cables = 0x80ff,
2510 USB_DEVICE(0x086a, 0x0003),
2511 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2512 .vendor_name = "Emagic",
2513 /* .product_name = "MT4", */
2515 .type = QUIRK_MIDI_EMAGIC,
2516 .data = & (const struct snd_usb_midi_endpoint_info) {
2517 .out_cables = 0x800f,
2525 USB_DEVICE_VENDOR_SPEC(0x0944, 0x0200),
2526 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2527 .vendor_name = "KORG, Inc.",
2528 /* .product_name = "PANDORA PX5D", */
2530 .type = QUIRK_MIDI_STANDARD_INTERFACE,
2535 USB_DEVICE_VENDOR_SPEC(0x0944, 0x0201),
2536 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2537 .vendor_name = "KORG, Inc.",
2538 /* .product_name = "ToneLab ST", */
2540 .type = QUIRK_MIDI_STANDARD_INTERFACE,
2545 USB_DEVICE_VENDOR_SPEC(0x0944, 0x0204),
2546 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2547 .vendor_name = "KORG, Inc.",
2548 /* .product_name = "ToneLab EX", */
2550 .type = QUIRK_MIDI_STANDARD_INTERFACE,
2556 USB_DEVICE(0x09e8, 0x0062),
2557 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2558 .vendor_name = "AKAI",
2559 .product_name = "MPD16",
2561 .type = QUIRK_MIDI_AKAI,
2566 /* Akai MPC Element */
2567 USB_DEVICE(0x09e8, 0x0021),
2568 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2569 .ifnum = QUIRK_ANY_INTERFACE,
2570 .type = QUIRK_COMPOSITE,
2571 .data = & (const struct snd_usb_audio_quirk[]) {
2574 .type = QUIRK_IGNORE_INTERFACE
2578 .type = QUIRK_MIDI_STANDARD_INTERFACE
2587 /* Steinberg devices */
2590 USB_DEVICE_VENDOR_SPEC(0x0a4e, 0x2040),
2591 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2592 .ifnum = QUIRK_ANY_INTERFACE,
2593 .type = QUIRK_COMPOSITE,
2594 .data = & (const struct snd_usb_audio_quirk[]) {
2597 .type = QUIRK_AUDIO_STANDARD_INTERFACE
2601 .type = QUIRK_AUDIO_STANDARD_INTERFACE
2605 .type = QUIRK_AUDIO_STANDARD_INTERFACE
2609 .type = QUIRK_MIDI_FIXED_ENDPOINT,
2610 .data = &(const struct snd_usb_midi_endpoint_info) {
2611 .out_cables = 0x0001,
2623 USB_DEVICE_VENDOR_SPEC(0x0a4e, 0x4040),
2624 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2625 .ifnum = QUIRK_ANY_INTERFACE,
2626 .type = QUIRK_COMPOSITE,
2627 .data = & (const struct snd_usb_audio_quirk[]) {
2630 .type = QUIRK_AUDIO_STANDARD_INTERFACE
2634 .type = QUIRK_AUDIO_STANDARD_INTERFACE
2638 .type = QUIRK_AUDIO_STANDARD_INTERFACE
2642 .type = QUIRK_MIDI_FIXED_ENDPOINT,
2643 .data = &(const struct snd_usb_midi_endpoint_info) {
2644 .out_cables = 0x0001,
2655 /* TerraTec devices */
2657 USB_DEVICE_VENDOR_SPEC(0x0ccd, 0x0012),
2658 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2659 .vendor_name = "TerraTec",
2660 .product_name = "PHASE 26",
2662 .type = QUIRK_MIDI_STANDARD_INTERFACE
2666 USB_DEVICE_VENDOR_SPEC(0x0ccd, 0x0013),
2667 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2668 .vendor_name = "TerraTec",
2669 .product_name = "PHASE 26",
2671 .type = QUIRK_MIDI_STANDARD_INTERFACE
2675 USB_DEVICE_VENDOR_SPEC(0x0ccd, 0x0014),
2676 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2677 .vendor_name = "TerraTec",
2678 .product_name = "PHASE 26",
2680 .type = QUIRK_MIDI_STANDARD_INTERFACE
2684 USB_DEVICE(0x0ccd, 0x0028),
2685 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2686 .vendor_name = "TerraTec",
2687 .product_name = "Aureon5.1MkII",
2688 .ifnum = QUIRK_NO_INTERFACE
2692 USB_DEVICE(0x0ccd, 0x0035),
2693 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2694 .vendor_name = "Miditech",
2695 .product_name = "Play'n Roll",
2697 .type = QUIRK_MIDI_CME
2701 /* Stanton/N2IT Final Scratch v1 device ('Scratchamp') */
2703 USB_DEVICE(0x103d, 0x0100),
2704 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2705 .vendor_name = "Stanton",
2706 .product_name = "ScratchAmp",
2707 .ifnum = QUIRK_NO_INTERFACE
2711 USB_DEVICE(0x103d, 0x0101),
2712 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2713 .vendor_name = "Stanton",
2714 .product_name = "ScratchAmp",
2715 .ifnum = QUIRK_NO_INTERFACE
2719 /* Novation EMS devices */
2721 USB_DEVICE_VENDOR_SPEC(0x1235, 0x0001),
2722 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2723 .vendor_name = "Novation",
2724 .product_name = "ReMOTE Audio/XStation",
2726 .type = QUIRK_MIDI_NOVATION
2730 USB_DEVICE_VENDOR_SPEC(0x1235, 0x0002),
2731 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2732 .vendor_name = "Novation",
2733 .product_name = "Speedio",
2735 .type = QUIRK_MIDI_NOVATION
2739 USB_DEVICE(0x1235, 0x000a),
2740 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2741 /* .vendor_name = "Novation", */
2742 /* .product_name = "Nocturn", */
2744 .type = QUIRK_MIDI_RAW_BYTES
2748 USB_DEVICE(0x1235, 0x000e),
2749 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2750 /* .vendor_name = "Novation", */
2751 /* .product_name = "Launchpad", */
2753 .type = QUIRK_MIDI_RAW_BYTES
2757 USB_DEVICE(0x1235, 0x0010),
2758 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
2759 .vendor_name = "Focusrite",
2760 .product_name = "Saffire 6 USB",
2761 .ifnum = QUIRK_ANY_INTERFACE,
2762 .type = QUIRK_COMPOSITE,
2763 .data = (const struct snd_usb_audio_quirk[]) {
2766 .type = QUIRK_AUDIO_STANDARD_MIXER,
2770 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
2771 .data = &(const struct audioformat) {
2772 .formats = SNDRV_PCM_FMTBIT_S24_3LE,
2777 .attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
2779 .ep_attr = USB_ENDPOINT_XFER_ISOC,
2781 .maxpacksize = 0x024c,
2782 .rates = SNDRV_PCM_RATE_44100 |
2783 SNDRV_PCM_RATE_48000,
2787 .rate_table = (unsigned int[]) {
2794 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
2795 .data = &(const struct audioformat) {
2796 .formats = SNDRV_PCM_FMTBIT_S24_3LE,
2803 .ep_attr = USB_ENDPOINT_XFER_ISOC,
2805 .maxpacksize = 0x0126,
2806 .rates = SNDRV_PCM_RATE_44100 |
2807 SNDRV_PCM_RATE_48000,
2811 .rate_table = (unsigned int[]) {
2818 .type = QUIRK_MIDI_RAW_BYTES
2827 USB_DEVICE(0x1235, 0x0018),
2828 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2829 .vendor_name = "Novation",
2830 .product_name = "Twitch",
2831 .ifnum = QUIRK_ANY_INTERFACE,
2832 .type = QUIRK_COMPOSITE,
2833 .data = (const struct snd_usb_audio_quirk[]) {
2836 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
2837 .data = & (const struct audioformat) {
2838 .formats = SNDRV_PCM_FMTBIT_S24_3LE,
2843 .attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
2845 .ep_attr = USB_ENDPOINT_XFER_ISOC,
2846 .rates = SNDRV_PCM_RATE_44100 |
2847 SNDRV_PCM_RATE_48000,
2851 .rate_table = (unsigned int[]) {
2858 .type = QUIRK_MIDI_RAW_BYTES
2867 USB_DEVICE_VENDOR_SPEC(0x1235, 0x4661),
2868 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2869 .vendor_name = "Novation",
2870 .product_name = "ReMOTE25",
2872 .type = QUIRK_MIDI_NOVATION
2876 /* Access Music devices */
2878 /* VirusTI Desktop */
2879 USB_DEVICE_VENDOR_SPEC(0x133e, 0x0815),
2880 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
2881 .ifnum = QUIRK_ANY_INTERFACE,
2882 .type = QUIRK_COMPOSITE,
2883 .data = &(const struct snd_usb_audio_quirk[]) {
2886 .type = QUIRK_MIDI_FIXED_ENDPOINT,
2887 .data = &(const struct snd_usb_midi_endpoint_info) {
2888 .out_cables = 0x0003,
2894 .type = QUIRK_IGNORE_INTERFACE
2905 /* aka. Serato Scratch Live DJ Box */
2906 USB_DEVICE(0x13e5, 0x0001),
2907 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2908 .vendor_name = "Rane",
2909 .product_name = "SL-1",
2910 .ifnum = QUIRK_NO_INTERFACE
2914 /* Native Instruments MK2 series */
2916 /* Komplete Audio 6 */
2917 .match_flags = USB_DEVICE_ID_MATCH_DEVICE,
2919 .idProduct = 0x1000,
2922 /* Traktor Audio 6 */
2923 .match_flags = USB_DEVICE_ID_MATCH_DEVICE,
2925 .idProduct = 0x1010,
2928 /* Traktor Audio 10 */
2929 .match_flags = USB_DEVICE_ID_MATCH_DEVICE,
2931 .idProduct = 0x1020,
2934 /* QinHeng devices */
2936 USB_DEVICE(0x1a86, 0x752d),
2937 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
2938 .vendor_name = "QinHeng",
2939 .product_name = "CH345",
2941 .type = QUIRK_MIDI_CH345
2945 /* KeithMcMillen Stringport */
2947 USB_DEVICE(0x1f38, 0x0001),
2948 .bInterfaceClass = USB_CLASS_AUDIO,
2951 /* Miditech devices */
2953 USB_DEVICE(0x4752, 0x0011),
2954 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2955 .vendor_name = "Miditech",
2956 .product_name = "Midistart-2",
2958 .type = QUIRK_MIDI_CME
2962 /* Central Music devices */
2964 /* this ID used by both Miditech MidiStudio-2 and CME UF-x */
2965 USB_DEVICE(0x7104, 0x2202),
2966 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2968 .type = QUIRK_MIDI_CME
2973 * Auvitek au0828 devices with audio interface.
2974 * This should be kept in sync with drivers/media/usb/au0828/au0828-cards.c
2975 * Please notice that some drivers are DVB only, and don't need to be
2976 * here. That's the case, for example, of DVICO_FUSIONHDTV7.
2979 #define AU0828_DEVICE(vid, pid, vname, pname) { \
2982 .match_flags = USB_DEVICE_ID_MATCH_DEVICE | \
2983 USB_DEVICE_ID_MATCH_INT_CLASS | \
2984 USB_DEVICE_ID_MATCH_INT_SUBCLASS, \
2985 .bInterfaceClass = USB_CLASS_AUDIO, \
2986 .bInterfaceSubClass = USB_SUBCLASS_AUDIOCONTROL, \
2987 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) { \
2988 .vendor_name = vname, \
2989 .product_name = pname, \
2990 .ifnum = QUIRK_ANY_INTERFACE, \
2991 .type = QUIRK_AUDIO_ALIGN_TRANSFER, \
2992 .shares_media_device = 1, \
2996 AU0828_DEVICE(0x2040, 0x7200, "Hauppauge", "HVR-950Q"),
2997 AU0828_DEVICE(0x2040, 0x7240, "Hauppauge", "HVR-850"),
2998 AU0828_DEVICE(0x2040, 0x7210, "Hauppauge", "HVR-950Q"),
2999 AU0828_DEVICE(0x2040, 0x7217, "Hauppauge", "HVR-950Q"),
3000 AU0828_DEVICE(0x2040, 0x721b, "Hauppauge", "HVR-950Q"),
3001 AU0828_DEVICE(0x2040, 0x721e, "Hauppauge", "HVR-950Q"),
3002 AU0828_DEVICE(0x2040, 0x721f, "Hauppauge", "HVR-950Q"),
3003 AU0828_DEVICE(0x2040, 0x7280, "Hauppauge", "HVR-950Q"),
3004 AU0828_DEVICE(0x0fd9, 0x0008, "Hauppauge", "HVR-950Q"),
3005 AU0828_DEVICE(0x2040, 0x7201, "Hauppauge", "HVR-950Q-MXL"),
3006 AU0828_DEVICE(0x2040, 0x7211, "Hauppauge", "HVR-950Q-MXL"),
3007 AU0828_DEVICE(0x2040, 0x7281, "Hauppauge", "HVR-950Q-MXL"),
3008 AU0828_DEVICE(0x05e1, 0x0480, "Hauppauge", "Woodbury"),
3009 AU0828_DEVICE(0x2040, 0x8200, "Hauppauge", "Woodbury"),
3010 AU0828_DEVICE(0x2040, 0x7260, "Hauppauge", "HVR-950Q"),
3011 AU0828_DEVICE(0x2040, 0x7213, "Hauppauge", "HVR-950Q"),
3012 AU0828_DEVICE(0x2040, 0x7270, "Hauppauge", "HVR-950Q"),
3014 /* Syntek STK1160 */
3016 .match_flags = USB_DEVICE_ID_MATCH_DEVICE |
3017 USB_DEVICE_ID_MATCH_INT_CLASS |
3018 USB_DEVICE_ID_MATCH_INT_SUBCLASS,
3020 .idProduct = 0x0408,
3021 .bInterfaceClass = USB_CLASS_AUDIO,
3022 .bInterfaceSubClass = USB_SUBCLASS_AUDIOCONTROL,
3023 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
3024 .vendor_name = "Syntek",
3025 .product_name = "STK1160",
3026 .ifnum = QUIRK_ANY_INTERFACE,
3027 .type = QUIRK_AUDIO_ALIGN_TRANSFER
3031 /* Digidesign Mbox */
3033 /* Thanks to Clemens Ladisch <clemens@ladisch.de> */
3034 USB_DEVICE(0x0dba, 0x1000),
3035 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
3036 .vendor_name = "Digidesign",
3037 .product_name = "MBox",
3038 .ifnum = QUIRK_ANY_INTERFACE,
3039 .type = QUIRK_COMPOSITE,
3040 .data = (const struct snd_usb_audio_quirk[]){
3043 .type = QUIRK_AUDIO_STANDARD_MIXER,
3047 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
3048 .data = &(const struct audioformat) {
3049 .formats = SNDRV_PCM_FMTBIT_S24_3BE,
3056 .ep_attr = USB_ENDPOINT_XFER_ISOC |
3057 USB_ENDPOINT_SYNC_SYNC,
3058 .maxpacksize = 0x130,
3059 .rates = SNDRV_PCM_RATE_48000,
3063 .rate_table = (unsigned int[]) {
3070 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
3071 .data = &(const struct audioformat) {
3072 .formats = SNDRV_PCM_FMTBIT_S24_3BE,
3079 .ep_attr = USB_ENDPOINT_XFER_ISOC |
3080 USB_ENDPOINT_SYNC_ASYNC,
3081 .maxpacksize = 0x130,
3082 .rates = SNDRV_PCM_RATE_48000,
3086 .rate_table = (unsigned int[]) {
3098 /* DIGIDESIGN MBOX 2 */
3100 USB_DEVICE(0x0dba, 0x3000),
3101 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
3102 .vendor_name = "Digidesign",
3103 .product_name = "Mbox 2",
3104 .ifnum = QUIRK_ANY_INTERFACE,
3105 .type = QUIRK_COMPOSITE,
3106 .data = (const struct snd_usb_audio_quirk[]) {
3109 .type = QUIRK_IGNORE_INTERFACE
3113 .type = QUIRK_IGNORE_INTERFACE
3117 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
3118 .data = &(const struct audioformat) {
3119 .formats = SNDRV_PCM_FMTBIT_S24_3BE,
3126 .ep_attr = USB_ENDPOINT_SYNC_ASYNC,
3127 .rates = SNDRV_PCM_RATE_48000,
3131 .rate_table = (unsigned int[]) {
3138 .type = QUIRK_IGNORE_INTERFACE
3142 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
3143 .data = &(const struct audioformat) {
3144 .formats = SNDRV_PCM_FMTBIT_S24_3BE,
3149 .attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
3151 .ep_attr = USB_ENDPOINT_SYNC_SYNC,
3152 .rates = SNDRV_PCM_RATE_48000,
3156 .rate_table = (unsigned int[]) {
3163 .type = QUIRK_IGNORE_INTERFACE
3167 .type = QUIRK_MIDI_MIDIMAN,
3168 .data = &(const struct snd_usb_midi_endpoint_info) {
3170 .out_cables = 0x0001,
3172 .in_interval = 0x01,
3183 /* Tascam US122 MKII - playback-only support */
3184 .match_flags = USB_DEVICE_ID_MATCH_DEVICE,
3186 .idProduct = 0x8021,
3187 .bInterfaceClass = USB_CLASS_AUDIO,
3188 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
3189 .vendor_name = "TASCAM",
3190 .product_name = "US122 MKII",
3191 .ifnum = QUIRK_ANY_INTERFACE,
3192 .type = QUIRK_COMPOSITE,
3193 .data = (const struct snd_usb_audio_quirk[]) {
3196 .type = QUIRK_IGNORE_INTERFACE
3200 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
3201 .data = &(const struct audioformat) {
3202 .formats = SNDRV_PCM_FMTBIT_S24_3LE,
3207 .attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
3209 .ep_attr = USB_ENDPOINT_XFER_ISOC,
3210 .rates = SNDRV_PCM_RATE_44100 |
3211 SNDRV_PCM_RATE_48000 |
3212 SNDRV_PCM_RATE_88200 |
3213 SNDRV_PCM_RATE_96000,
3217 .rate_table = (unsigned int[]) {
3218 44100, 48000, 88200, 96000
3229 /* Microsoft XboxLive Headset/Xbox Communicator */
3231 USB_DEVICE(0x045e, 0x0283),
3232 .bInterfaceClass = USB_CLASS_PER_INTERFACE,
3233 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
3234 .vendor_name = "Microsoft",
3235 .product_name = "XboxLive Headset/Xbox Communicator",
3236 .ifnum = QUIRK_ANY_INTERFACE,
3237 .type = QUIRK_COMPOSITE,
3238 .data = &(const struct snd_usb_audio_quirk[]) {
3242 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
3243 .data = &(const struct audioformat) {
3244 .formats = SNDRV_PCM_FMTBIT_S16_LE,
3252 .rates = SNDRV_PCM_RATE_CONTINUOUS,
3260 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
3261 .data = &(const struct audioformat) {
3262 .formats = SNDRV_PCM_FMTBIT_S16_LE,
3270 .rates = SNDRV_PCM_RATE_CONTINUOUS,
3284 USB_DEVICE(0x200c, 0x100b),
3285 .bInterfaceClass = USB_CLASS_PER_INTERFACE,
3286 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
3287 .ifnum = QUIRK_ANY_INTERFACE,
3288 .type = QUIRK_COMPOSITE,
3289 .data = &(const struct snd_usb_audio_quirk[]) {
3292 .type = QUIRK_AUDIO_STANDARD_MIXER,
3296 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
3297 .data = &(const struct audioformat) {
3298 .formats = SNDRV_PCM_FMTBIT_S24_3LE,
3303 .attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
3305 .ep_attr = USB_ENDPOINT_SYNC_ADAPTIVE,
3306 .rates = SNDRV_PCM_RATE_44100 |
3307 SNDRV_PCM_RATE_48000,
3311 .rate_table = (unsigned int[]) {
3325 * ZOOM R16/24 in audio interface mode.
3326 * Playback requires an extra four byte LE length indicator
3327 * at the start of each isochronous packet. This quirk is
3328 * enabled in create_standard_audio_quirk().
3330 USB_DEVICE(0x1686, 0x00dd),
3331 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
3332 .ifnum = QUIRK_ANY_INTERFACE,
3333 .type = QUIRK_COMPOSITE,
3334 .data = (const struct snd_usb_audio_quirk[]) {
3338 .type = QUIRK_AUDIO_STANDARD_INTERFACE,
3343 .type = QUIRK_AUDIO_STANDARD_INTERFACE,
3348 .type = QUIRK_MIDI_STANDARD_INTERFACE
3359 * Some USB MIDI devices don't have an audio control interface,
3360 * so we have to grab MIDI streaming interfaces here.
3362 .match_flags = USB_DEVICE_ID_MATCH_INT_CLASS |
3363 USB_DEVICE_ID_MATCH_INT_SUBCLASS,
3364 .bInterfaceClass = USB_CLASS_AUDIO,
3365 .bInterfaceSubClass = USB_SUBCLASS_MIDISTREAMING,
3366 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
3367 .ifnum = QUIRK_ANY_INTERFACE,
3368 .type = QUIRK_MIDI_STANDARD_INTERFACE
3374 * The original product_name is "USB Sound Device", however this name
3375 * is also used by the CM106 based cards, so make it unique.
3377 USB_DEVICE(0x0d8c, 0x0103),
3378 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
3379 .product_name = "Audio Advantage MicroII",
3380 .ifnum = QUIRK_NO_INTERFACE
3384 /* disabled due to regression for other devices;
3385 * see https://bugzilla.kernel.org/show_bug.cgi?id=199905
3390 * Nura's first gen headphones use Cambridge Silicon Radio's vendor
3391 * ID, but it looks like the product ID actually is only for Nura.
3392 * The capture interface does not work at all (even on Windows),
3393 * and only the 48 kHz sample rate works for the playback interface.
3395 USB_DEVICE(0x0a12, 0x1243),
3396 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
3397 .ifnum = QUIRK_ANY_INTERFACE,
3398 .type = QUIRK_COMPOSITE,
3399 .data = (const struct snd_usb_audio_quirk[]) {
3402 .type = QUIRK_AUDIO_STANDARD_MIXER,
3407 .type = QUIRK_IGNORE_INTERFACE,
3412 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
3413 .data = &(const struct audioformat) {
3414 .formats = SNDRV_PCM_FMTBIT_S16_LE,
3419 .attributes = UAC_EP_CS_ATTR_FILL_MAX |
3420 UAC_EP_CS_ATTR_SAMPLE_RATE,
3422 .ep_attr = USB_ENDPOINT_XFER_ISOC,
3423 .rates = SNDRV_PCM_RATE_48000,
3427 .rate_table = (unsigned int[]) {
3438 #endif /* disabled */
3442 * Bower's & Wilkins PX headphones only support the 48 kHz sample rate
3443 * even though it advertises more. The capture interface doesn't work
3446 USB_DEVICE(0x19b5, 0x0021),
3447 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
3448 .ifnum = QUIRK_ANY_INTERFACE,
3449 .type = QUIRK_COMPOSITE,
3450 .data = (const struct snd_usb_audio_quirk[]) {
3453 .type = QUIRK_AUDIO_STANDARD_MIXER,
3458 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
3459 .data = &(const struct audioformat) {
3460 .formats = SNDRV_PCM_FMTBIT_S16_LE,
3465 .attributes = UAC_EP_CS_ATTR_FILL_MAX |
3466 UAC_EP_CS_ATTR_SAMPLE_RATE,
3468 .ep_attr = USB_ENDPOINT_XFER_ISOC,
3469 .rates = SNDRV_PCM_RATE_48000,
3473 .rate_table = (unsigned int[]) {
3484 /* Dell WD15 Dock */
3486 USB_DEVICE(0x0bda, 0x4014),
3487 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
3488 .vendor_name = "Dell",
3489 .product_name = "WD15 Dock",
3490 .profile_name = "Dell-WD15-Dock",
3491 .ifnum = QUIRK_NO_INTERFACE
3494 /* Dell WD19 Dock */
3496 USB_DEVICE(0x0bda, 0x402e),
3497 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
3498 .vendor_name = "Dell",
3499 .product_name = "WD19 Dock",
3500 .profile_name = "Dell-WD15-Dock",
3501 .ifnum = QUIRK_ANY_INTERFACE,
3502 .type = QUIRK_SETUP_FMT_AFTER_RESUME
3505 /* MOTU Microbook II */
3507 USB_DEVICE_VENDOR_SPEC(0x07fd, 0x0004),
3508 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
3509 .vendor_name = "MOTU",
3510 .product_name = "MicroBookII",
3511 .ifnum = QUIRK_ANY_INTERFACE,
3512 .type = QUIRK_COMPOSITE,
3513 .data = (const struct snd_usb_audio_quirk[]) {
3516 .type = QUIRK_AUDIO_STANDARD_MIXER,
3520 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
3521 .data = &(const struct audioformat) {
3522 .formats = SNDRV_PCM_FMTBIT_S24_3BE,
3529 .rates = SNDRV_PCM_RATE_96000,
3530 .ep_attr = USB_ENDPOINT_XFER_ISOC |
3531 USB_ENDPOINT_SYNC_ASYNC,
3535 .maxpacksize = 0x00d8,
3536 .rate_table = (unsigned int[]) {
3543 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
3544 .data = &(const struct audioformat) {
3545 .formats = SNDRV_PCM_FMTBIT_S24_3BE,
3552 .rates = SNDRV_PCM_RATE_96000,
3553 .ep_attr = USB_ENDPOINT_XFER_ISOC |
3554 USB_ENDPOINT_SYNC_ASYNC,
3558 .maxpacksize = 0x0120,
3559 .rate_table = (unsigned int[]) {
3572 * PIONEER DJ DDJ-SX3
3573 * PCM is 12 channels out, 10 channels in @ 44.1 fixed
3574 * interface 0, vendor class alt setting 1 for endpoints 5 and 0x86
3575 * The feedback for the output is the input.
3577 USB_DEVICE_VENDOR_SPEC(0x2b73, 0x0023),
3578 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
3579 .ifnum = QUIRK_ANY_INTERFACE,
3580 .type = QUIRK_COMPOSITE,
3581 .data = (const struct snd_usb_audio_quirk[]) {
3584 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
3585 .data = &(const struct audioformat) {
3586 .formats = SNDRV_PCM_FMTBIT_S32_LE,
3592 .ep_attr = USB_ENDPOINT_XFER_ISOC|
3593 USB_ENDPOINT_SYNC_ASYNC,
3594 .rates = SNDRV_PCM_RATE_44100,
3598 .rate_table = (unsigned int[]) { 44100 }
3603 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
3604 .data = &(const struct audioformat) {
3605 .formats = SNDRV_PCM_FMTBIT_S32_LE,
3611 .ep_attr = USB_ENDPOINT_XFER_ISOC|
3612 USB_ENDPOINT_SYNC_ASYNC|
3613 USB_ENDPOINT_USAGE_IMPLICIT_FB,
3614 .rates = SNDRV_PCM_RATE_44100,
3618 .rate_table = (unsigned int[]) { 44100 }
3629 * Pioneer DJ DJM-250MK2
3630 * PCM is 8 channels out @ 48 fixed (endpoints 0x01).
3631 * The output from computer to the mixer is usable.
3633 * The input (phono or line to computer) is not working.
3634 * It should be at endpoint 0x82 and probably also 8 channels,
3635 * but it seems that it works only with Pioneer proprietary software.
3636 * Even on officially supported OS, the Audacity was unable to record
3637 * and Mixxx to recognize the control vinyls.
3639 USB_DEVICE_VENDOR_SPEC(0x2b73, 0x0017),
3640 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
3641 .ifnum = QUIRK_ANY_INTERFACE,
3642 .type = QUIRK_COMPOSITE,
3643 .data = (const struct snd_usb_audio_quirk[]) {
3646 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
3647 .data = &(const struct audioformat) {
3648 .formats = SNDRV_PCM_FMTBIT_S24_3LE,
3649 .channels = 8, // outputs
3654 .ep_attr = USB_ENDPOINT_XFER_ISOC|
3655 USB_ENDPOINT_SYNC_ASYNC,
3656 .rates = SNDRV_PCM_RATE_48000,
3660 .rate_table = (unsigned int[]) { 48000 }
3672 * PCM is 4 channels out, 2 dummy channels in @ 44.1 fixed
3673 * The feedback for the output is the dummy input.
3675 USB_DEVICE_VENDOR_SPEC(0x2b73, 0x000e),
3676 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
3677 .ifnum = QUIRK_ANY_INTERFACE,
3678 .type = QUIRK_COMPOSITE,
3679 .data = (const struct snd_usb_audio_quirk[]) {
3682 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
3683 .data = &(const struct audioformat) {
3684 .formats = SNDRV_PCM_FMTBIT_S24_3LE,
3690 .ep_attr = USB_ENDPOINT_XFER_ISOC|
3691 USB_ENDPOINT_SYNC_ASYNC,
3692 .rates = SNDRV_PCM_RATE_44100,
3696 .rate_table = (unsigned int[]) { 44100 }
3701 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
3702 .data = &(const struct audioformat) {
3703 .formats = SNDRV_PCM_FMTBIT_S24_3LE,
3709 .ep_attr = USB_ENDPOINT_XFER_ISOC|
3710 USB_ENDPOINT_SYNC_ASYNC|
3711 USB_ENDPOINT_USAGE_IMPLICIT_FB,
3712 .rates = SNDRV_PCM_RATE_44100,
3716 .rate_table = (unsigned int[]) { 44100 }
3726 #define ALC1220_VB_DESKTOP(vend, prod) { \
3727 USB_DEVICE(vend, prod), \
3728 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { \
3729 .vendor_name = "Realtek", \
3730 .product_name = "ALC1220-VB-DT", \
3731 .profile_name = "Realtek-ALC1220-VB-Desktop", \
3732 .ifnum = QUIRK_NO_INTERFACE \
3735 ALC1220_VB_DESKTOP(0x0414, 0xa002), /* Gigabyte TRX40 Aorus Pro WiFi */
3736 ALC1220_VB_DESKTOP(0x0db0, 0x0d64), /* MSI TRX40 Creator */
3737 ALC1220_VB_DESKTOP(0x0db0, 0x543d), /* MSI TRX40 */
3738 ALC1220_VB_DESKTOP(0x26ce, 0x0a01), /* Asrock TRX40 Creator */
3739 #undef ALC1220_VB_DESKTOP
3741 /* Two entries for Gigabyte TRX40 Aorus Master:
3742 * TRX40 Aorus Master has two USB-audio devices, one for the front headphone
3743 * with ESS SABRE9218 DAC chip, while another for the rest I/O (the rear
3744 * panel and the front mic) with Realtek ALC1220-VB.
3745 * Here we provide two distinct names for making UCM profiles easier.
3748 USB_DEVICE(0x0414, 0xa000),
3749 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
3750 .vendor_name = "Gigabyte",
3751 .product_name = "Aorus Master Front Headphone",
3752 .profile_name = "Gigabyte-Aorus-Master-Front-Headphone",
3753 .ifnum = QUIRK_NO_INTERFACE
3757 USB_DEVICE(0x0414, 0xa001),
3758 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
3759 .vendor_name = "Gigabyte",
3760 .product_name = "Aorus Master Main Audio",
3761 .profile_name = "Gigabyte-Aorus-Master-Main-Audio",
3762 .ifnum = QUIRK_NO_INTERFACE
3767 * MacroSilicon MS2100/MS2106 based AV capture cards
3769 * These claim 96kHz 1ch in the descriptors, but are actually 48kHz 2ch.
3770 * They also need QUIRK_AUDIO_ALIGN_TRANSFER, which makes one wonder if
3771 * they pretend to be 96kHz mono as a workaround for stereo being broken
3774 * They also have an issue with initial stream alignment that causes the
3775 * channels to be swapped and out of phase, which is dealt with in quirks.c.
3778 .match_flags = USB_DEVICE_ID_MATCH_DEVICE |
3779 USB_DEVICE_ID_MATCH_INT_CLASS |
3780 USB_DEVICE_ID_MATCH_INT_SUBCLASS,
3782 .idProduct = 0x0021,
3783 .bInterfaceClass = USB_CLASS_AUDIO,
3784 .bInterfaceSubClass = USB_SUBCLASS_AUDIOCONTROL,
3785 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
3786 .vendor_name = "MacroSilicon",
3787 .product_name = "MS210x",
3788 .ifnum = QUIRK_ANY_INTERFACE,
3789 .type = QUIRK_COMPOSITE,
3790 .data = &(const struct snd_usb_audio_quirk[]) {
3793 .type = QUIRK_AUDIO_ALIGN_TRANSFER,
3797 .type = QUIRK_AUDIO_STANDARD_MIXER,
3801 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
3802 .data = &(const struct audioformat) {
3803 .formats = SNDRV_PCM_FMTBIT_S16_LE,
3810 .ep_attr = USB_ENDPOINT_XFER_ISOC |
3811 USB_ENDPOINT_SYNC_ASYNC,
3812 .rates = SNDRV_PCM_RATE_CONTINUOUS,
3825 * MacroSilicon MS2109 based HDMI capture cards
3827 * These claim 96kHz 1ch in the descriptors, but are actually 48kHz 2ch.
3828 * They also need QUIRK_AUDIO_ALIGN_TRANSFER, which makes one wonder if
3829 * they pretend to be 96kHz mono as a workaround for stereo being broken
3832 * They also have an issue with initial stream alignment that causes the
3833 * channels to be swapped and out of phase, which is dealt with in quirks.c.
3836 .match_flags = USB_DEVICE_ID_MATCH_DEVICE |
3837 USB_DEVICE_ID_MATCH_INT_CLASS |
3838 USB_DEVICE_ID_MATCH_INT_SUBCLASS,
3840 .idProduct = 0x2109,
3841 .bInterfaceClass = USB_CLASS_AUDIO,
3842 .bInterfaceSubClass = USB_SUBCLASS_AUDIOCONTROL,
3843 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
3844 .vendor_name = "MacroSilicon",
3845 .product_name = "MS2109",
3846 .ifnum = QUIRK_ANY_INTERFACE,
3847 .type = QUIRK_COMPOSITE,
3848 .data = &(const struct snd_usb_audio_quirk[]) {
3851 .type = QUIRK_AUDIO_ALIGN_TRANSFER,
3855 .type = QUIRK_AUDIO_STANDARD_MIXER,
3859 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
3860 .data = &(const struct audioformat) {
3861 .formats = SNDRV_PCM_FMTBIT_S16_LE,
3868 .ep_attr = USB_ENDPOINT_XFER_ISOC |
3869 USB_ENDPOINT_SYNC_ASYNC,
3870 .rates = SNDRV_PCM_RATE_CONTINUOUS,
3884 * Change order of interfaces loaded
3886 USB_DEVICE(0x1395, 0x0300),
3887 .bInterfaceClass = USB_CLASS_PER_INTERFACE,
3888 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
3889 .ifnum = QUIRK_ANY_INTERFACE,
3890 .type = QUIRK_COMPOSITE,
3891 .data = &(const struct snd_usb_audio_quirk[]) {
3895 .type = QUIRK_AUDIO_STANDARD_INTERFACE
3900 .type = QUIRK_AUDIO_STANDARD_INTERFACE
3905 .type = QUIRK_AUDIO_STANDARD_INTERFACE
3914 /* Advanced modes of the Mythware XA001AU.
3915 * For the standard mode, Mythware XA001AU has ID ffad:a001
3917 USB_DEVICE_VENDOR_SPEC(0xffad, 0xa001),
3918 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
3919 .vendor_name = "Mythware",
3920 .product_name = "XA001AU",
3921 .ifnum = QUIRK_ANY_INTERFACE,
3922 .type = QUIRK_COMPOSITE,
3923 .data = (const struct snd_usb_audio_quirk[]) {
3926 .type = QUIRK_IGNORE_INTERFACE,
3930 .type = QUIRK_AUDIO_STANDARD_INTERFACE,
3934 .type = QUIRK_AUDIO_STANDARD_INTERFACE,
3943 #undef USB_DEVICE_VENDOR_SPEC