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,
2151 USB_DEVICE_VENDOR_SPEC(0x0763, 0x2030),
2152 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
2153 /* .vendor_name = "M-Audio", */
2154 /* .product_name = "Fast Track C400", */
2155 .ifnum = QUIRK_ANY_INTERFACE,
2156 .type = QUIRK_COMPOSITE,
2157 .data = &(const struct snd_usb_audio_quirk[]) {
2160 .type = QUIRK_AUDIO_STANDARD_MIXER,
2165 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
2166 .data = &(const struct audioformat) {
2167 .formats = SNDRV_PCM_FMTBIT_S24_3LE,
2172 .attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
2175 .rates = SNDRV_PCM_RATE_44100 |
2176 SNDRV_PCM_RATE_48000 |
2177 SNDRV_PCM_RATE_88200 |
2178 SNDRV_PCM_RATE_96000,
2182 .rate_table = (unsigned int[]) {
2183 44100, 48000, 88200, 96000
2191 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
2192 .data = &(const struct audioformat) {
2193 .formats = SNDRV_PCM_FMTBIT_S24_3LE,
2198 .attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
2201 .rates = SNDRV_PCM_RATE_44100 |
2202 SNDRV_PCM_RATE_48000 |
2203 SNDRV_PCM_RATE_88200 |
2204 SNDRV_PCM_RATE_96000,
2208 .rate_table = (unsigned int[]) {
2209 44100, 48000, 88200, 96000
2216 .ifnum = -1 /* Interface = 4 */
2222 USB_DEVICE_VENDOR_SPEC(0x0763, 0x2031),
2223 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
2224 /* .vendor_name = "M-Audio", */
2225 /* .product_name = "Fast Track C600", */
2226 .ifnum = QUIRK_ANY_INTERFACE,
2227 .type = QUIRK_COMPOSITE,
2228 .data = &(const struct snd_usb_audio_quirk[]) {
2231 .type = QUIRK_AUDIO_STANDARD_MIXER,
2236 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
2237 .data = &(const struct audioformat) {
2238 .formats = SNDRV_PCM_FMTBIT_S24_3LE,
2243 .attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
2246 .rates = SNDRV_PCM_RATE_44100 |
2247 SNDRV_PCM_RATE_48000 |
2248 SNDRV_PCM_RATE_88200 |
2249 SNDRV_PCM_RATE_96000,
2253 .rate_table = (unsigned int[]) {
2254 44100, 48000, 88200, 96000
2262 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
2263 .data = &(const struct audioformat) {
2264 .formats = SNDRV_PCM_FMTBIT_S24_3LE,
2269 .attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
2272 .rates = SNDRV_PCM_RATE_44100 |
2273 SNDRV_PCM_RATE_48000 |
2274 SNDRV_PCM_RATE_88200 |
2275 SNDRV_PCM_RATE_96000,
2279 .rate_table = (unsigned int[]) {
2280 44100, 48000, 88200, 96000
2287 .ifnum = -1 /* Interface = 4 */
2293 USB_DEVICE_VENDOR_SPEC(0x0763, 0x2080),
2294 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2295 /* .vendor_name = "M-Audio", */
2296 /* .product_name = "Fast Track Ultra", */
2297 .ifnum = QUIRK_ANY_INTERFACE,
2298 .type = QUIRK_COMPOSITE,
2299 .data = & (const struct snd_usb_audio_quirk[]) {
2302 .type = QUIRK_AUDIO_STANDARD_MIXER,
2306 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
2307 .data = & (const struct audioformat) {
2308 .formats = SNDRV_PCM_FMTBIT_S24_3LE,
2313 .attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
2316 .rates = SNDRV_PCM_RATE_44100 |
2317 SNDRV_PCM_RATE_48000 |
2318 SNDRV_PCM_RATE_88200 |
2319 SNDRV_PCM_RATE_96000,
2323 .rate_table = (unsigned int[]) {
2324 44100, 48000, 88200, 96000
2330 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
2331 .data = & (const struct audioformat) {
2332 .formats = SNDRV_PCM_FMTBIT_S24_3LE,
2337 .attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
2340 .rates = SNDRV_PCM_RATE_44100 |
2341 SNDRV_PCM_RATE_48000 |
2342 SNDRV_PCM_RATE_88200 |
2343 SNDRV_PCM_RATE_96000,
2347 .rate_table = (unsigned int[]) {
2348 44100, 48000, 88200, 96000
2352 /* interface 3 (MIDI) is standard compliant */
2360 USB_DEVICE_VENDOR_SPEC(0x0763, 0x2081),
2361 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2362 /* .vendor_name = "M-Audio", */
2363 /* .product_name = "Fast Track Ultra 8R", */
2364 .ifnum = QUIRK_ANY_INTERFACE,
2365 .type = QUIRK_COMPOSITE,
2366 .data = & (const struct snd_usb_audio_quirk[]) {
2369 .type = QUIRK_AUDIO_STANDARD_MIXER,
2373 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
2374 .data = & (const struct audioformat) {
2375 .formats = SNDRV_PCM_FMTBIT_S24_3LE,
2380 .attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
2383 .rates = SNDRV_PCM_RATE_44100 |
2384 SNDRV_PCM_RATE_48000 |
2385 SNDRV_PCM_RATE_88200 |
2386 SNDRV_PCM_RATE_96000,
2390 .rate_table = (unsigned int[]) {
2391 44100, 48000, 88200, 96000
2397 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
2398 .data = & (const struct audioformat) {
2399 .formats = SNDRV_PCM_FMTBIT_S24_3LE,
2404 .attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
2407 .rates = SNDRV_PCM_RATE_44100 |
2408 SNDRV_PCM_RATE_48000 |
2409 SNDRV_PCM_RATE_88200 |
2410 SNDRV_PCM_RATE_96000,
2414 .rate_table = (unsigned int[]) {
2415 44100, 48000, 88200, 96000
2419 /* interface 3 (MIDI) is standard compliant */
2429 USB_DEVICE(0x07cf, 0x6801),
2430 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2431 .vendor_name = "Casio",
2432 .product_name = "PL-40R",
2434 .type = QUIRK_MIDI_YAMAHA
2438 /* this ID is used by several devices without a product ID */
2439 USB_DEVICE(0x07cf, 0x6802),
2440 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2441 .vendor_name = "Casio",
2442 .product_name = "Keyboard",
2444 .type = QUIRK_MIDI_YAMAHA
2448 /* Mark of the Unicorn devices */
2450 /* thanks to Robert A. Lerche <ral 'at' msbit.com> */
2451 .match_flags = USB_DEVICE_ID_MATCH_VENDOR |
2452 USB_DEVICE_ID_MATCH_PRODUCT |
2453 USB_DEVICE_ID_MATCH_DEV_SUBCLASS,
2455 .idProduct = 0x0001,
2456 .bDeviceSubClass = 2,
2457 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2458 .vendor_name = "MOTU",
2459 .product_name = "Fastlane",
2460 .ifnum = QUIRK_ANY_INTERFACE,
2461 .type = QUIRK_COMPOSITE,
2462 .data = & (const struct snd_usb_audio_quirk[]) {
2465 .type = QUIRK_MIDI_RAW_BYTES
2469 .type = QUIRK_IGNORE_INTERFACE
2478 /* Emagic devices */
2480 USB_DEVICE(0x086a, 0x0001),
2481 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2482 .vendor_name = "Emagic",
2483 .product_name = "Unitor8",
2485 .type = QUIRK_MIDI_EMAGIC,
2486 .data = & (const struct snd_usb_midi_endpoint_info) {
2487 .out_cables = 0x80ff,
2493 USB_DEVICE(0x086a, 0x0002),
2494 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2495 .vendor_name = "Emagic",
2496 /* .product_name = "AMT8", */
2498 .type = QUIRK_MIDI_EMAGIC,
2499 .data = & (const struct snd_usb_midi_endpoint_info) {
2500 .out_cables = 0x80ff,
2506 USB_DEVICE(0x086a, 0x0003),
2507 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2508 .vendor_name = "Emagic",
2509 /* .product_name = "MT4", */
2511 .type = QUIRK_MIDI_EMAGIC,
2512 .data = & (const struct snd_usb_midi_endpoint_info) {
2513 .out_cables = 0x800f,
2521 USB_DEVICE_VENDOR_SPEC(0x0944, 0x0200),
2522 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2523 .vendor_name = "KORG, Inc.",
2524 /* .product_name = "PANDORA PX5D", */
2526 .type = QUIRK_MIDI_STANDARD_INTERFACE,
2531 USB_DEVICE_VENDOR_SPEC(0x0944, 0x0201),
2532 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2533 .vendor_name = "KORG, Inc.",
2534 /* .product_name = "ToneLab ST", */
2536 .type = QUIRK_MIDI_STANDARD_INTERFACE,
2541 USB_DEVICE_VENDOR_SPEC(0x0944, 0x0204),
2542 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2543 .vendor_name = "KORG, Inc.",
2544 /* .product_name = "ToneLab EX", */
2546 .type = QUIRK_MIDI_STANDARD_INTERFACE,
2552 USB_DEVICE(0x09e8, 0x0062),
2553 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2554 .vendor_name = "AKAI",
2555 .product_name = "MPD16",
2557 .type = QUIRK_MIDI_AKAI,
2562 /* Akai MPC Element */
2563 USB_DEVICE(0x09e8, 0x0021),
2564 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2565 .ifnum = QUIRK_ANY_INTERFACE,
2566 .type = QUIRK_COMPOSITE,
2567 .data = & (const struct snd_usb_audio_quirk[]) {
2570 .type = QUIRK_IGNORE_INTERFACE
2574 .type = QUIRK_MIDI_STANDARD_INTERFACE
2583 /* Steinberg devices */
2586 USB_DEVICE_VENDOR_SPEC(0x0a4e, 0x2040),
2587 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2588 .ifnum = QUIRK_ANY_INTERFACE,
2589 .type = QUIRK_COMPOSITE,
2590 .data = & (const struct snd_usb_audio_quirk[]) {
2593 .type = QUIRK_AUDIO_STANDARD_INTERFACE
2597 .type = QUIRK_AUDIO_STANDARD_INTERFACE
2601 .type = QUIRK_AUDIO_STANDARD_INTERFACE
2605 .type = QUIRK_MIDI_FIXED_ENDPOINT,
2606 .data = &(const struct snd_usb_midi_endpoint_info) {
2607 .out_cables = 0x0001,
2619 USB_DEVICE_VENDOR_SPEC(0x0a4e, 0x4040),
2620 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2621 .ifnum = QUIRK_ANY_INTERFACE,
2622 .type = QUIRK_COMPOSITE,
2623 .data = & (const struct snd_usb_audio_quirk[]) {
2626 .type = QUIRK_AUDIO_STANDARD_INTERFACE
2630 .type = QUIRK_AUDIO_STANDARD_INTERFACE
2634 .type = QUIRK_AUDIO_STANDARD_INTERFACE
2638 .type = QUIRK_MIDI_FIXED_ENDPOINT,
2639 .data = &(const struct snd_usb_midi_endpoint_info) {
2640 .out_cables = 0x0001,
2651 /* TerraTec devices */
2653 USB_DEVICE_VENDOR_SPEC(0x0ccd, 0x0012),
2654 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2655 .vendor_name = "TerraTec",
2656 .product_name = "PHASE 26",
2658 .type = QUIRK_MIDI_STANDARD_INTERFACE
2662 USB_DEVICE_VENDOR_SPEC(0x0ccd, 0x0013),
2663 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2664 .vendor_name = "TerraTec",
2665 .product_name = "PHASE 26",
2667 .type = QUIRK_MIDI_STANDARD_INTERFACE
2671 USB_DEVICE_VENDOR_SPEC(0x0ccd, 0x0014),
2672 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2673 .vendor_name = "TerraTec",
2674 .product_name = "PHASE 26",
2676 .type = QUIRK_MIDI_STANDARD_INTERFACE
2680 USB_DEVICE(0x0ccd, 0x0028),
2681 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2682 .vendor_name = "TerraTec",
2683 .product_name = "Aureon5.1MkII",
2684 .ifnum = QUIRK_NO_INTERFACE
2688 USB_DEVICE(0x0ccd, 0x0035),
2689 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2690 .vendor_name = "Miditech",
2691 .product_name = "Play'n Roll",
2693 .type = QUIRK_MIDI_CME
2697 /* Stanton/N2IT Final Scratch v1 device ('Scratchamp') */
2699 USB_DEVICE(0x103d, 0x0100),
2700 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2701 .vendor_name = "Stanton",
2702 .product_name = "ScratchAmp",
2703 .ifnum = QUIRK_NO_INTERFACE
2707 USB_DEVICE(0x103d, 0x0101),
2708 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2709 .vendor_name = "Stanton",
2710 .product_name = "ScratchAmp",
2711 .ifnum = QUIRK_NO_INTERFACE
2715 /* Novation EMS devices */
2717 USB_DEVICE_VENDOR_SPEC(0x1235, 0x0001),
2718 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2719 .vendor_name = "Novation",
2720 .product_name = "ReMOTE Audio/XStation",
2722 .type = QUIRK_MIDI_NOVATION
2726 USB_DEVICE_VENDOR_SPEC(0x1235, 0x0002),
2727 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2728 .vendor_name = "Novation",
2729 .product_name = "Speedio",
2731 .type = QUIRK_MIDI_NOVATION
2735 USB_DEVICE(0x1235, 0x000a),
2736 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2737 /* .vendor_name = "Novation", */
2738 /* .product_name = "Nocturn", */
2740 .type = QUIRK_MIDI_RAW_BYTES
2744 USB_DEVICE(0x1235, 0x000e),
2745 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2746 /* .vendor_name = "Novation", */
2747 /* .product_name = "Launchpad", */
2749 .type = QUIRK_MIDI_RAW_BYTES
2753 USB_DEVICE(0x1235, 0x0010),
2754 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
2755 .vendor_name = "Focusrite",
2756 .product_name = "Saffire 6 USB",
2757 .ifnum = QUIRK_ANY_INTERFACE,
2758 .type = QUIRK_COMPOSITE,
2759 .data = (const struct snd_usb_audio_quirk[]) {
2762 .type = QUIRK_AUDIO_STANDARD_MIXER,
2766 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
2767 .data = &(const struct audioformat) {
2768 .formats = SNDRV_PCM_FMTBIT_S24_3LE,
2773 .attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
2775 .ep_attr = USB_ENDPOINT_XFER_ISOC,
2777 .maxpacksize = 0x024c,
2778 .rates = SNDRV_PCM_RATE_44100 |
2779 SNDRV_PCM_RATE_48000,
2783 .rate_table = (unsigned int[]) {
2790 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
2791 .data = &(const struct audioformat) {
2792 .formats = SNDRV_PCM_FMTBIT_S24_3LE,
2799 .ep_attr = USB_ENDPOINT_XFER_ISOC,
2801 .maxpacksize = 0x0126,
2802 .rates = SNDRV_PCM_RATE_44100 |
2803 SNDRV_PCM_RATE_48000,
2807 .rate_table = (unsigned int[]) {
2814 .type = QUIRK_MIDI_RAW_BYTES
2823 USB_DEVICE(0x1235, 0x0018),
2824 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2825 .vendor_name = "Novation",
2826 .product_name = "Twitch",
2827 .ifnum = QUIRK_ANY_INTERFACE,
2828 .type = QUIRK_COMPOSITE,
2829 .data = (const struct snd_usb_audio_quirk[]) {
2832 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
2833 .data = & (const struct audioformat) {
2834 .formats = SNDRV_PCM_FMTBIT_S24_3LE,
2839 .attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
2841 .ep_attr = USB_ENDPOINT_XFER_ISOC,
2842 .rates = SNDRV_PCM_RATE_44100 |
2843 SNDRV_PCM_RATE_48000,
2847 .rate_table = (unsigned int[]) {
2854 .type = QUIRK_MIDI_RAW_BYTES
2863 USB_DEVICE_VENDOR_SPEC(0x1235, 0x4661),
2864 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2865 .vendor_name = "Novation",
2866 .product_name = "ReMOTE25",
2868 .type = QUIRK_MIDI_NOVATION
2872 /* Access Music devices */
2874 /* VirusTI Desktop */
2875 USB_DEVICE_VENDOR_SPEC(0x133e, 0x0815),
2876 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
2877 .ifnum = QUIRK_ANY_INTERFACE,
2878 .type = QUIRK_COMPOSITE,
2879 .data = &(const struct snd_usb_audio_quirk[]) {
2882 .type = QUIRK_MIDI_FIXED_ENDPOINT,
2883 .data = &(const struct snd_usb_midi_endpoint_info) {
2884 .out_cables = 0x0003,
2890 .type = QUIRK_IGNORE_INTERFACE
2901 /* aka. Serato Scratch Live DJ Box */
2902 USB_DEVICE(0x13e5, 0x0001),
2903 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2904 .vendor_name = "Rane",
2905 .product_name = "SL-1",
2906 .ifnum = QUIRK_NO_INTERFACE
2910 /* Native Instruments MK2 series */
2912 /* Komplete Audio 6 */
2913 .match_flags = USB_DEVICE_ID_MATCH_DEVICE,
2915 .idProduct = 0x1000,
2918 /* Traktor Audio 6 */
2919 .match_flags = USB_DEVICE_ID_MATCH_DEVICE,
2921 .idProduct = 0x1010,
2924 /* Traktor Audio 10 */
2925 .match_flags = USB_DEVICE_ID_MATCH_DEVICE,
2927 .idProduct = 0x1020,
2930 /* QinHeng devices */
2932 USB_DEVICE(0x1a86, 0x752d),
2933 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
2934 .vendor_name = "QinHeng",
2935 .product_name = "CH345",
2937 .type = QUIRK_MIDI_CH345
2941 /* KeithMcMillen Stringport */
2943 USB_DEVICE(0x1f38, 0x0001),
2944 .bInterfaceClass = USB_CLASS_AUDIO,
2947 /* Miditech devices */
2949 USB_DEVICE(0x4752, 0x0011),
2950 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2951 .vendor_name = "Miditech",
2952 .product_name = "Midistart-2",
2954 .type = QUIRK_MIDI_CME
2958 /* Central Music devices */
2960 /* this ID used by both Miditech MidiStudio-2 and CME UF-x */
2961 USB_DEVICE(0x7104, 0x2202),
2962 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2964 .type = QUIRK_MIDI_CME
2969 * Auvitek au0828 devices with audio interface.
2970 * This should be kept in sync with drivers/media/usb/au0828/au0828-cards.c
2971 * Please notice that some drivers are DVB only, and don't need to be
2972 * here. That's the case, for example, of DVICO_FUSIONHDTV7.
2975 #define AU0828_DEVICE(vid, pid, vname, pname) { \
2978 .match_flags = USB_DEVICE_ID_MATCH_DEVICE | \
2979 USB_DEVICE_ID_MATCH_INT_CLASS | \
2980 USB_DEVICE_ID_MATCH_INT_SUBCLASS, \
2981 .bInterfaceClass = USB_CLASS_AUDIO, \
2982 .bInterfaceSubClass = USB_SUBCLASS_AUDIOCONTROL, \
2983 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) { \
2984 .vendor_name = vname, \
2985 .product_name = pname, \
2986 .ifnum = QUIRK_ANY_INTERFACE, \
2987 .type = QUIRK_AUDIO_ALIGN_TRANSFER, \
2988 .shares_media_device = 1, \
2992 AU0828_DEVICE(0x2040, 0x7200, "Hauppauge", "HVR-950Q"),
2993 AU0828_DEVICE(0x2040, 0x7240, "Hauppauge", "HVR-850"),
2994 AU0828_DEVICE(0x2040, 0x7210, "Hauppauge", "HVR-950Q"),
2995 AU0828_DEVICE(0x2040, 0x7217, "Hauppauge", "HVR-950Q"),
2996 AU0828_DEVICE(0x2040, 0x721b, "Hauppauge", "HVR-950Q"),
2997 AU0828_DEVICE(0x2040, 0x721e, "Hauppauge", "HVR-950Q"),
2998 AU0828_DEVICE(0x2040, 0x721f, "Hauppauge", "HVR-950Q"),
2999 AU0828_DEVICE(0x2040, 0x7280, "Hauppauge", "HVR-950Q"),
3000 AU0828_DEVICE(0x0fd9, 0x0008, "Hauppauge", "HVR-950Q"),
3001 AU0828_DEVICE(0x2040, 0x7201, "Hauppauge", "HVR-950Q-MXL"),
3002 AU0828_DEVICE(0x2040, 0x7211, "Hauppauge", "HVR-950Q-MXL"),
3003 AU0828_DEVICE(0x2040, 0x7281, "Hauppauge", "HVR-950Q-MXL"),
3004 AU0828_DEVICE(0x05e1, 0x0480, "Hauppauge", "Woodbury"),
3005 AU0828_DEVICE(0x2040, 0x8200, "Hauppauge", "Woodbury"),
3006 AU0828_DEVICE(0x2040, 0x7260, "Hauppauge", "HVR-950Q"),
3007 AU0828_DEVICE(0x2040, 0x7213, "Hauppauge", "HVR-950Q"),
3008 AU0828_DEVICE(0x2040, 0x7270, "Hauppauge", "HVR-950Q"),
3010 /* Syntek STK1160 */
3012 .match_flags = USB_DEVICE_ID_MATCH_DEVICE |
3013 USB_DEVICE_ID_MATCH_INT_CLASS |
3014 USB_DEVICE_ID_MATCH_INT_SUBCLASS,
3016 .idProduct = 0x0408,
3017 .bInterfaceClass = USB_CLASS_AUDIO,
3018 .bInterfaceSubClass = USB_SUBCLASS_AUDIOCONTROL,
3019 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
3020 .vendor_name = "Syntek",
3021 .product_name = "STK1160",
3022 .ifnum = QUIRK_ANY_INTERFACE,
3023 .type = QUIRK_AUDIO_ALIGN_TRANSFER
3027 /* Digidesign Mbox */
3029 /* Thanks to Clemens Ladisch <clemens@ladisch.de> */
3030 USB_DEVICE(0x0dba, 0x1000),
3031 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
3032 .vendor_name = "Digidesign",
3033 .product_name = "MBox",
3034 .ifnum = QUIRK_ANY_INTERFACE,
3035 .type = QUIRK_COMPOSITE,
3036 .data = (const struct snd_usb_audio_quirk[]){
3039 .type = QUIRK_AUDIO_STANDARD_MIXER,
3043 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
3044 .data = &(const struct audioformat) {
3045 .formats = SNDRV_PCM_FMTBIT_S24_3BE,
3052 .ep_attr = USB_ENDPOINT_XFER_ISOC |
3053 USB_ENDPOINT_SYNC_SYNC,
3054 .maxpacksize = 0x130,
3055 .rates = SNDRV_PCM_RATE_48000,
3059 .rate_table = (unsigned int[]) {
3066 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
3067 .data = &(const struct audioformat) {
3068 .formats = SNDRV_PCM_FMTBIT_S24_3BE,
3075 .ep_attr = USB_ENDPOINT_XFER_ISOC |
3076 USB_ENDPOINT_SYNC_ASYNC,
3077 .maxpacksize = 0x130,
3078 .rates = SNDRV_PCM_RATE_48000,
3082 .rate_table = (unsigned int[]) {
3094 /* DIGIDESIGN MBOX 2 */
3096 USB_DEVICE(0x0dba, 0x3000),
3097 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
3098 .vendor_name = "Digidesign",
3099 .product_name = "Mbox 2",
3100 .ifnum = QUIRK_ANY_INTERFACE,
3101 .type = QUIRK_COMPOSITE,
3102 .data = (const struct snd_usb_audio_quirk[]) {
3105 .type = QUIRK_IGNORE_INTERFACE
3109 .type = QUIRK_IGNORE_INTERFACE
3113 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
3114 .data = &(const struct audioformat) {
3115 .formats = SNDRV_PCM_FMTBIT_S24_3BE,
3122 .ep_attr = USB_ENDPOINT_SYNC_ASYNC,
3123 .rates = SNDRV_PCM_RATE_48000,
3127 .rate_table = (unsigned int[]) {
3134 .type = QUIRK_IGNORE_INTERFACE
3138 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
3139 .data = &(const struct audioformat) {
3140 .formats = SNDRV_PCM_FMTBIT_S24_3BE,
3145 .attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
3147 .ep_attr = USB_ENDPOINT_SYNC_SYNC,
3148 .rates = SNDRV_PCM_RATE_48000,
3152 .rate_table = (unsigned int[]) {
3159 .type = QUIRK_IGNORE_INTERFACE
3163 .type = QUIRK_MIDI_MIDIMAN,
3164 .data = &(const struct snd_usb_midi_endpoint_info) {
3166 .out_cables = 0x0001,
3168 .in_interval = 0x01,
3179 /* Tascam US122 MKII - playback-only support */
3180 .match_flags = USB_DEVICE_ID_MATCH_DEVICE,
3182 .idProduct = 0x8021,
3183 .bInterfaceClass = USB_CLASS_AUDIO,
3184 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
3185 .vendor_name = "TASCAM",
3186 .product_name = "US122 MKII",
3187 .ifnum = QUIRK_ANY_INTERFACE,
3188 .type = QUIRK_COMPOSITE,
3189 .data = (const struct snd_usb_audio_quirk[]) {
3192 .type = QUIRK_IGNORE_INTERFACE
3196 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
3197 .data = &(const struct audioformat) {
3198 .formats = SNDRV_PCM_FMTBIT_S24_3LE,
3203 .attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
3205 .ep_attr = USB_ENDPOINT_XFER_ISOC,
3206 .rates = SNDRV_PCM_RATE_44100 |
3207 SNDRV_PCM_RATE_48000 |
3208 SNDRV_PCM_RATE_88200 |
3209 SNDRV_PCM_RATE_96000,
3213 .rate_table = (unsigned int[]) {
3214 44100, 48000, 88200, 96000
3225 /* Microsoft XboxLive Headset/Xbox Communicator */
3227 USB_DEVICE(0x045e, 0x0283),
3228 .bInterfaceClass = USB_CLASS_PER_INTERFACE,
3229 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
3230 .vendor_name = "Microsoft",
3231 .product_name = "XboxLive Headset/Xbox Communicator",
3232 .ifnum = QUIRK_ANY_INTERFACE,
3233 .type = QUIRK_COMPOSITE,
3234 .data = &(const struct snd_usb_audio_quirk[]) {
3238 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
3239 .data = &(const struct audioformat) {
3240 .formats = SNDRV_PCM_FMTBIT_S16_LE,
3248 .rates = SNDRV_PCM_RATE_CONTINUOUS,
3256 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
3257 .data = &(const struct audioformat) {
3258 .formats = SNDRV_PCM_FMTBIT_S16_LE,
3266 .rates = SNDRV_PCM_RATE_CONTINUOUS,
3280 USB_DEVICE(0x200c, 0x100b),
3281 .bInterfaceClass = USB_CLASS_PER_INTERFACE,
3282 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
3283 .ifnum = QUIRK_ANY_INTERFACE,
3284 .type = QUIRK_COMPOSITE,
3285 .data = &(const struct snd_usb_audio_quirk[]) {
3288 .type = QUIRK_AUDIO_STANDARD_MIXER,
3292 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
3293 .data = &(const struct audioformat) {
3294 .formats = SNDRV_PCM_FMTBIT_S24_3LE,
3299 .attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
3301 .ep_attr = USB_ENDPOINT_SYNC_ADAPTIVE,
3302 .rates = SNDRV_PCM_RATE_44100 |
3303 SNDRV_PCM_RATE_48000,
3307 .rate_table = (unsigned int[]) {
3321 * ZOOM R16/24 in audio interface mode.
3322 * Playback requires an extra four byte LE length indicator
3323 * at the start of each isochronous packet. This quirk is
3324 * enabled in create_standard_audio_quirk().
3326 USB_DEVICE(0x1686, 0x00dd),
3327 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
3328 .ifnum = QUIRK_ANY_INTERFACE,
3329 .type = QUIRK_COMPOSITE,
3330 .data = (const struct snd_usb_audio_quirk[]) {
3334 .type = QUIRK_AUDIO_STANDARD_INTERFACE,
3339 .type = QUIRK_AUDIO_STANDARD_INTERFACE,
3344 .type = QUIRK_MIDI_STANDARD_INTERFACE
3355 * Some USB MIDI devices don't have an audio control interface,
3356 * so we have to grab MIDI streaming interfaces here.
3358 .match_flags = USB_DEVICE_ID_MATCH_INT_CLASS |
3359 USB_DEVICE_ID_MATCH_INT_SUBCLASS,
3360 .bInterfaceClass = USB_CLASS_AUDIO,
3361 .bInterfaceSubClass = USB_SUBCLASS_MIDISTREAMING,
3362 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
3363 .ifnum = QUIRK_ANY_INTERFACE,
3364 .type = QUIRK_MIDI_STANDARD_INTERFACE
3370 * The original product_name is "USB Sound Device", however this name
3371 * is also used by the CM106 based cards, so make it unique.
3373 USB_DEVICE(0x0d8c, 0x0103),
3374 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
3375 .product_name = "Audio Advantage MicroII",
3376 .ifnum = QUIRK_NO_INTERFACE
3380 /* disabled due to regression for other devices;
3381 * see https://bugzilla.kernel.org/show_bug.cgi?id=199905
3386 * Nura's first gen headphones use Cambridge Silicon Radio's vendor
3387 * ID, but it looks like the product ID actually is only for Nura.
3388 * The capture interface does not work at all (even on Windows),
3389 * and only the 48 kHz sample rate works for the playback interface.
3391 USB_DEVICE(0x0a12, 0x1243),
3392 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
3393 .ifnum = QUIRK_ANY_INTERFACE,
3394 .type = QUIRK_COMPOSITE,
3395 .data = (const struct snd_usb_audio_quirk[]) {
3398 .type = QUIRK_AUDIO_STANDARD_MIXER,
3403 .type = QUIRK_IGNORE_INTERFACE,
3408 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
3409 .data = &(const struct audioformat) {
3410 .formats = SNDRV_PCM_FMTBIT_S16_LE,
3415 .attributes = UAC_EP_CS_ATTR_FILL_MAX |
3416 UAC_EP_CS_ATTR_SAMPLE_RATE,
3418 .ep_attr = USB_ENDPOINT_XFER_ISOC,
3419 .rates = SNDRV_PCM_RATE_48000,
3423 .rate_table = (unsigned int[]) {
3434 #endif /* disabled */
3438 * Bower's & Wilkins PX headphones only support the 48 kHz sample rate
3439 * even though it advertises more. The capture interface doesn't work
3442 USB_DEVICE(0x19b5, 0x0021),
3443 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
3444 .ifnum = QUIRK_ANY_INTERFACE,
3445 .type = QUIRK_COMPOSITE,
3446 .data = (const struct snd_usb_audio_quirk[]) {
3449 .type = QUIRK_AUDIO_STANDARD_MIXER,
3454 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
3455 .data = &(const struct audioformat) {
3456 .formats = SNDRV_PCM_FMTBIT_S16_LE,
3461 .attributes = UAC_EP_CS_ATTR_FILL_MAX |
3462 UAC_EP_CS_ATTR_SAMPLE_RATE,
3464 .ep_attr = USB_ENDPOINT_XFER_ISOC,
3465 .rates = SNDRV_PCM_RATE_48000,
3469 .rate_table = (unsigned int[]) {
3480 /* Dell WD15 Dock */
3482 USB_DEVICE(0x0bda, 0x4014),
3483 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
3484 .vendor_name = "Dell",
3485 .product_name = "WD15 Dock",
3486 .profile_name = "Dell-WD15-Dock",
3487 .ifnum = QUIRK_NO_INTERFACE
3490 /* Dell WD19 Dock */
3492 USB_DEVICE(0x0bda, 0x402e),
3493 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
3494 .vendor_name = "Dell",
3495 .product_name = "WD19 Dock",
3496 .profile_name = "Dell-WD15-Dock",
3497 .ifnum = QUIRK_ANY_INTERFACE,
3498 .type = QUIRK_SETUP_FMT_AFTER_RESUME
3501 /* MOTU Microbook II */
3503 USB_DEVICE_VENDOR_SPEC(0x07fd, 0x0004),
3504 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
3505 .vendor_name = "MOTU",
3506 .product_name = "MicroBookII",
3507 .ifnum = QUIRK_ANY_INTERFACE,
3508 .type = QUIRK_COMPOSITE,
3509 .data = (const struct snd_usb_audio_quirk[]) {
3512 .type = QUIRK_AUDIO_STANDARD_MIXER,
3516 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
3517 .data = &(const struct audioformat) {
3518 .formats = SNDRV_PCM_FMTBIT_S24_3BE,
3525 .rates = SNDRV_PCM_RATE_96000,
3526 .ep_attr = USB_ENDPOINT_XFER_ISOC |
3527 USB_ENDPOINT_SYNC_ASYNC,
3531 .maxpacksize = 0x00d8,
3532 .rate_table = (unsigned int[]) {
3539 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
3540 .data = &(const struct audioformat) {
3541 .formats = SNDRV_PCM_FMTBIT_S24_3BE,
3548 .rates = SNDRV_PCM_RATE_96000,
3549 .ep_attr = USB_ENDPOINT_XFER_ISOC |
3550 USB_ENDPOINT_SYNC_ASYNC,
3554 .maxpacksize = 0x0120,
3555 .rate_table = (unsigned int[]) {
3568 * PIONEER DJ DDJ-SX3
3569 * PCM is 12 channels out, 10 channels in @ 44.1 fixed
3570 * interface 0, vendor class alt setting 1 for endpoints 5 and 0x86
3571 * The feedback for the output is the input.
3573 USB_DEVICE_VENDOR_SPEC(0x2b73, 0x0023),
3574 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
3575 .ifnum = QUIRK_ANY_INTERFACE,
3576 .type = QUIRK_COMPOSITE,
3577 .data = (const struct snd_usb_audio_quirk[]) {
3580 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
3581 .data = &(const struct audioformat) {
3582 .formats = SNDRV_PCM_FMTBIT_S32_LE,
3588 .ep_attr = USB_ENDPOINT_XFER_ISOC|
3589 USB_ENDPOINT_SYNC_ASYNC,
3590 .rates = SNDRV_PCM_RATE_44100,
3594 .rate_table = (unsigned int[]) { 44100 }
3599 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
3600 .data = &(const struct audioformat) {
3601 .formats = SNDRV_PCM_FMTBIT_S32_LE,
3607 .ep_attr = USB_ENDPOINT_XFER_ISOC|
3608 USB_ENDPOINT_SYNC_ASYNC|
3609 USB_ENDPOINT_USAGE_IMPLICIT_FB,
3610 .rates = SNDRV_PCM_RATE_44100,
3614 .rate_table = (unsigned int[]) { 44100 }
3625 * Pioneer DJ DJM-250MK2
3626 * PCM is 8 channels out @ 48 fixed (endpoints 0x01).
3627 * The output from computer to the mixer is usable.
3629 * The input (phono or line to computer) is not working.
3630 * It should be at endpoint 0x82 and probably also 8 channels,
3631 * but it seems that it works only with Pioneer proprietary software.
3632 * Even on officially supported OS, the Audacity was unable to record
3633 * and Mixxx to recognize the control vinyls.
3635 USB_DEVICE_VENDOR_SPEC(0x2b73, 0x0017),
3636 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
3637 .ifnum = QUIRK_ANY_INTERFACE,
3638 .type = QUIRK_COMPOSITE,
3639 .data = (const struct snd_usb_audio_quirk[]) {
3642 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
3643 .data = &(const struct audioformat) {
3644 .formats = SNDRV_PCM_FMTBIT_S24_3LE,
3645 .channels = 8, // outputs
3650 .ep_attr = USB_ENDPOINT_XFER_ISOC|
3651 USB_ENDPOINT_SYNC_ASYNC,
3652 .rates = SNDRV_PCM_RATE_48000,
3656 .rate_table = (unsigned int[]) { 48000 }
3668 * PCM is 4 channels out, 2 dummy channels in @ 44.1 fixed
3669 * The feedback for the output is the dummy input.
3671 USB_DEVICE_VENDOR_SPEC(0x2b73, 0x000e),
3672 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
3673 .ifnum = QUIRK_ANY_INTERFACE,
3674 .type = QUIRK_COMPOSITE,
3675 .data = (const struct snd_usb_audio_quirk[]) {
3678 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
3679 .data = &(const struct audioformat) {
3680 .formats = SNDRV_PCM_FMTBIT_S24_3LE,
3686 .ep_attr = USB_ENDPOINT_XFER_ISOC|
3687 USB_ENDPOINT_SYNC_ASYNC,
3688 .rates = SNDRV_PCM_RATE_44100,
3692 .rate_table = (unsigned int[]) { 44100 }
3697 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
3698 .data = &(const struct audioformat) {
3699 .formats = SNDRV_PCM_FMTBIT_S24_3LE,
3705 .ep_attr = USB_ENDPOINT_XFER_ISOC|
3706 USB_ENDPOINT_SYNC_ASYNC|
3707 USB_ENDPOINT_USAGE_IMPLICIT_FB,
3708 .rates = SNDRV_PCM_RATE_44100,
3712 .rate_table = (unsigned int[]) { 44100 }
3722 #define ALC1220_VB_DESKTOP(vend, prod) { \
3723 USB_DEVICE(vend, prod), \
3724 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { \
3725 .vendor_name = "Realtek", \
3726 .product_name = "ALC1220-VB-DT", \
3727 .profile_name = "Realtek-ALC1220-VB-Desktop", \
3728 .ifnum = QUIRK_NO_INTERFACE \
3731 ALC1220_VB_DESKTOP(0x0414, 0xa002), /* Gigabyte TRX40 Aorus Pro WiFi */
3732 ALC1220_VB_DESKTOP(0x0db0, 0x0d64), /* MSI TRX40 Creator */
3733 ALC1220_VB_DESKTOP(0x0db0, 0x543d), /* MSI TRX40 */
3734 ALC1220_VB_DESKTOP(0x26ce, 0x0a01), /* Asrock TRX40 Creator */
3735 #undef ALC1220_VB_DESKTOP
3737 /* Two entries for Gigabyte TRX40 Aorus Master:
3738 * TRX40 Aorus Master has two USB-audio devices, one for the front headphone
3739 * with ESS SABRE9218 DAC chip, while another for the rest I/O (the rear
3740 * panel and the front mic) with Realtek ALC1220-VB.
3741 * Here we provide two distinct names for making UCM profiles easier.
3744 USB_DEVICE(0x0414, 0xa000),
3745 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
3746 .vendor_name = "Gigabyte",
3747 .product_name = "Aorus Master Front Headphone",
3748 .profile_name = "Gigabyte-Aorus-Master-Front-Headphone",
3749 .ifnum = QUIRK_NO_INTERFACE
3753 USB_DEVICE(0x0414, 0xa001),
3754 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
3755 .vendor_name = "Gigabyte",
3756 .product_name = "Aorus Master Main Audio",
3757 .profile_name = "Gigabyte-Aorus-Master-Main-Audio",
3758 .ifnum = QUIRK_NO_INTERFACE
3763 * MacroSilicon MS2109 based HDMI capture cards
3765 * These claim 96kHz 1ch in the descriptors, but are actually 48kHz 2ch.
3766 * They also need QUIRK_AUDIO_ALIGN_TRANSFER, which makes one wonder if
3767 * they pretend to be 96kHz mono as a workaround for stereo being broken
3770 * They also have an issue with initial stream alignment that causes the
3771 * channels to be swapped and out of phase, which is dealt with in quirks.c.
3774 .match_flags = USB_DEVICE_ID_MATCH_DEVICE |
3775 USB_DEVICE_ID_MATCH_INT_CLASS |
3776 USB_DEVICE_ID_MATCH_INT_SUBCLASS,
3778 .idProduct = 0x2109,
3779 .bInterfaceClass = USB_CLASS_AUDIO,
3780 .bInterfaceSubClass = USB_SUBCLASS_AUDIOCONTROL,
3781 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
3782 .vendor_name = "MacroSilicon",
3783 .product_name = "MS2109",
3784 .ifnum = QUIRK_ANY_INTERFACE,
3785 .type = QUIRK_COMPOSITE,
3786 .data = &(const struct snd_usb_audio_quirk[]) {
3789 .type = QUIRK_AUDIO_ALIGN_TRANSFER,
3793 .type = QUIRK_AUDIO_STANDARD_MIXER,
3797 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
3798 .data = &(const struct audioformat) {
3799 .formats = SNDRV_PCM_FMTBIT_S16_LE,
3806 .ep_attr = USB_ENDPOINT_XFER_ISOC |
3807 USB_ENDPOINT_SYNC_ASYNC,
3808 .rates = SNDRV_PCM_RATE_CONTINUOUS,
3822 * Change order of interfaces loaded
3824 USB_DEVICE(0x1395, 0x0300),
3825 .bInterfaceClass = USB_CLASS_PER_INTERFACE,
3826 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
3827 .ifnum = QUIRK_ANY_INTERFACE,
3828 .type = QUIRK_COMPOSITE,
3829 .data = &(const struct snd_usb_audio_quirk[]) {
3833 .type = QUIRK_AUDIO_STANDARD_INTERFACE
3838 .type = QUIRK_AUDIO_STANDARD_INTERFACE
3843 .type = QUIRK_AUDIO_STANDARD_INTERFACE
3852 #undef USB_DEVICE_VENDOR_SPEC