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 #define QUIRK_RENAME_DEVICE(_vendor, _device) \
29 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { \
30 .vendor_name = _vendor, \
31 .product_name = _device, \
32 .ifnum = QUIRK_NO_INTERFACE \
35 #define QUIRK_DEVICE_PROFILE(_vendor, _device, _profile) \
36 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { \
37 .vendor_name = _vendor, \
38 .product_name = _device, \
39 .profile_name = _profile, \
40 .ifnum = QUIRK_NO_INTERFACE \
43 /* HP Thunderbolt Dock Audio Headset */
45 USB_DEVICE(0x03f0, 0x0269),
46 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
48 .product_name = "Thunderbolt Dock Audio Headset",
49 .profile_name = "HP-Thunderbolt-Dock-Audio-Headset",
50 .ifnum = QUIRK_NO_INTERFACE
53 /* HP Thunderbolt Dock Audio Module */
55 USB_DEVICE(0x03f0, 0x0567),
56 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
58 .product_name = "Thunderbolt Dock Audio Module",
59 .profile_name = "HP-Thunderbolt-Dock-Audio-Module",
60 .ifnum = QUIRK_NO_INTERFACE
65 USB_DEVICE(0x0403, 0xb8d8),
66 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
67 /* .vendor_name = "STARR LABS", */
68 /* .product_name = "Starr Labs MIDI USB device", */
70 .type = QUIRK_MIDI_FTDI
76 USB_DEVICE(0x041e, 0x0005),
77 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
79 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
80 .data = &(const struct audioformat) {
81 .formats = SNDRV_PCM_FMTBIT_S16_LE,
87 .ep_attr = USB_ENDPOINT_XFER_ISOC,
89 .rates = SNDRV_PCM_RATE_CONTINUOUS,
96 /* Creative/E-Mu devices */
98 USB_DEVICE(0x041e, 0x3010),
99 QUIRK_RENAME_DEVICE("Creative Labs", "Sound Blaster MP3+")
101 /* Creative/Toshiba Multimedia Center SB-0500 */
103 USB_DEVICE(0x041e, 0x3048),
104 QUIRK_RENAME_DEVICE("Toshiba", "SB-0500")
108 .match_flags = USB_DEVICE_ID_MATCH_DEVICE,
111 .bInterfaceClass = USB_CLASS_AUDIO,
115 .match_flags = USB_DEVICE_ID_MATCH_DEVICE,
118 .bInterfaceClass = USB_CLASS_AUDIO,
121 /* E-Mu Tracker Pre */
122 .match_flags = USB_DEVICE_ID_MATCH_DEVICE,
125 .bInterfaceClass = USB_CLASS_AUDIO,
129 .match_flags = USB_DEVICE_ID_MATCH_DEVICE,
132 .bInterfaceClass = USB_CLASS_AUDIO,
137 * When not ignored, causes instability issues for some users, forcing them to
138 * blacklist the entire module.
141 USB_DEVICE(0x0424, 0xb832),
142 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
143 .vendor_name = "Standard Microsystems Corp.",
144 .product_name = "HP Wireless Audio",
145 .ifnum = QUIRK_ANY_INTERFACE,
146 .type = QUIRK_COMPOSITE,
147 .data = (const struct snd_usb_audio_quirk[]) {
151 .type = QUIRK_IGNORE_INTERFACE,
156 .type = QUIRK_IGNORE_INTERFACE,
161 .type = QUIRK_IGNORE_INTERFACE,
163 /* HID Device, .ifnum = 3 */
172 * Logitech QuickCam: bDeviceClass is vendor-specific, so generic interface
173 * class matches do not take effect without an explicit ID match.
176 .match_flags = USB_DEVICE_ID_MATCH_DEVICE |
177 USB_DEVICE_ID_MATCH_INT_CLASS |
178 USB_DEVICE_ID_MATCH_INT_SUBCLASS,
181 .bInterfaceClass = USB_CLASS_AUDIO,
182 .bInterfaceSubClass = USB_SUBCLASS_AUDIOCONTROL
185 .match_flags = USB_DEVICE_ID_MATCH_DEVICE |
186 USB_DEVICE_ID_MATCH_INT_CLASS |
187 USB_DEVICE_ID_MATCH_INT_SUBCLASS,
190 .bInterfaceClass = USB_CLASS_AUDIO,
191 .bInterfaceSubClass = USB_SUBCLASS_AUDIOCONTROL
194 .match_flags = USB_DEVICE_ID_MATCH_DEVICE |
195 USB_DEVICE_ID_MATCH_INT_CLASS |
196 USB_DEVICE_ID_MATCH_INT_SUBCLASS,
199 .bInterfaceClass = USB_CLASS_AUDIO,
200 .bInterfaceSubClass = USB_SUBCLASS_AUDIOCONTROL
203 .match_flags = USB_DEVICE_ID_MATCH_DEVICE |
204 USB_DEVICE_ID_MATCH_INT_CLASS |
205 USB_DEVICE_ID_MATCH_INT_SUBCLASS,
208 .bInterfaceClass = USB_CLASS_AUDIO,
209 .bInterfaceSubClass = USB_SUBCLASS_AUDIOCONTROL
212 .match_flags = USB_DEVICE_ID_MATCH_DEVICE |
213 USB_DEVICE_ID_MATCH_INT_CLASS |
214 USB_DEVICE_ID_MATCH_INT_SUBCLASS,
217 .bInterfaceClass = USB_CLASS_AUDIO,
218 .bInterfaceSubClass = USB_SUBCLASS_AUDIOCONTROL
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,
237 QUIRK_RENAME_DEVICE("Logitech, Inc.", "QuickCam Pro 9000")
244 #define YAMAHA_DEVICE(id, name) { \
245 USB_DEVICE(0x0499, id), \
246 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { \
247 .vendor_name = "Yamaha", \
248 .product_name = name, \
249 .ifnum = QUIRK_ANY_INTERFACE, \
250 .type = QUIRK_MIDI_YAMAHA \
253 #define YAMAHA_INTERFACE(id, intf, name) { \
254 USB_DEVICE_VENDOR_SPEC(0x0499, id), \
255 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { \
256 .vendor_name = "Yamaha", \
257 .product_name = name, \
259 .type = QUIRK_MIDI_YAMAHA \
262 YAMAHA_DEVICE(0x1000, "UX256"),
263 YAMAHA_DEVICE(0x1001, "MU1000"),
264 YAMAHA_DEVICE(0x1002, "MU2000"),
265 YAMAHA_DEVICE(0x1003, "MU500"),
266 YAMAHA_INTERFACE(0x1004, 3, "UW500"),
267 YAMAHA_DEVICE(0x1005, "MOTIF6"),
268 YAMAHA_DEVICE(0x1006, "MOTIF7"),
269 YAMAHA_DEVICE(0x1007, "MOTIF8"),
270 YAMAHA_DEVICE(0x1008, "UX96"),
271 YAMAHA_DEVICE(0x1009, "UX16"),
272 YAMAHA_INTERFACE(0x100a, 3, "EOS BX"),
273 YAMAHA_DEVICE(0x100c, "UC-MX"),
274 YAMAHA_DEVICE(0x100d, "UC-KX"),
275 YAMAHA_DEVICE(0x100e, "S08"),
276 YAMAHA_DEVICE(0x100f, "CLP-150"),
277 YAMAHA_DEVICE(0x1010, "CLP-170"),
278 YAMAHA_DEVICE(0x1011, "P-250"),
279 YAMAHA_DEVICE(0x1012, "TYROS"),
280 YAMAHA_DEVICE(0x1013, "PF-500"),
281 YAMAHA_DEVICE(0x1014, "S90"),
282 YAMAHA_DEVICE(0x1015, "MOTIF-R"),
283 YAMAHA_DEVICE(0x1016, "MDP-5"),
284 YAMAHA_DEVICE(0x1017, "CVP-204"),
285 YAMAHA_DEVICE(0x1018, "CVP-206"),
286 YAMAHA_DEVICE(0x1019, "CVP-208"),
287 YAMAHA_DEVICE(0x101a, "CVP-210"),
288 YAMAHA_DEVICE(0x101b, "PSR-1100"),
289 YAMAHA_DEVICE(0x101c, "PSR-2100"),
290 YAMAHA_DEVICE(0x101d, "CLP-175"),
291 YAMAHA_DEVICE(0x101e, "PSR-K1"),
292 YAMAHA_DEVICE(0x101f, "EZ-J24"),
293 YAMAHA_DEVICE(0x1020, "EZ-250i"),
294 YAMAHA_DEVICE(0x1021, "MOTIF ES 6"),
295 YAMAHA_DEVICE(0x1022, "MOTIF ES 7"),
296 YAMAHA_DEVICE(0x1023, "MOTIF ES 8"),
297 YAMAHA_DEVICE(0x1024, "CVP-301"),
298 YAMAHA_DEVICE(0x1025, "CVP-303"),
299 YAMAHA_DEVICE(0x1026, "CVP-305"),
300 YAMAHA_DEVICE(0x1027, "CVP-307"),
301 YAMAHA_DEVICE(0x1028, "CVP-309"),
302 YAMAHA_DEVICE(0x1029, "CVP-309GP"),
303 YAMAHA_DEVICE(0x102a, "PSR-1500"),
304 YAMAHA_DEVICE(0x102b, "PSR-3000"),
305 YAMAHA_DEVICE(0x102e, "ELS-01/01C"),
306 YAMAHA_DEVICE(0x1030, "PSR-295/293"),
307 YAMAHA_DEVICE(0x1031, "DGX-205/203"),
308 YAMAHA_DEVICE(0x1032, "DGX-305"),
309 YAMAHA_DEVICE(0x1033, "DGX-505"),
310 YAMAHA_DEVICE(0x1034, NULL),
311 YAMAHA_DEVICE(0x1035, NULL),
312 YAMAHA_DEVICE(0x1036, NULL),
313 YAMAHA_DEVICE(0x1037, NULL),
314 YAMAHA_DEVICE(0x1038, NULL),
315 YAMAHA_DEVICE(0x1039, NULL),
316 YAMAHA_DEVICE(0x103a, NULL),
317 YAMAHA_DEVICE(0x103b, NULL),
318 YAMAHA_DEVICE(0x103c, NULL),
319 YAMAHA_DEVICE(0x103d, NULL),
320 YAMAHA_DEVICE(0x103e, NULL),
321 YAMAHA_DEVICE(0x103f, NULL),
322 YAMAHA_DEVICE(0x1040, NULL),
323 YAMAHA_DEVICE(0x1041, NULL),
324 YAMAHA_DEVICE(0x1042, NULL),
325 YAMAHA_DEVICE(0x1043, NULL),
326 YAMAHA_DEVICE(0x1044, NULL),
327 YAMAHA_DEVICE(0x1045, NULL),
328 YAMAHA_INTERFACE(0x104e, 0, NULL),
329 YAMAHA_DEVICE(0x104f, NULL),
330 YAMAHA_DEVICE(0x1050, NULL),
331 YAMAHA_DEVICE(0x1051, NULL),
332 YAMAHA_DEVICE(0x1052, NULL),
333 YAMAHA_INTERFACE(0x1053, 0, NULL),
334 YAMAHA_INTERFACE(0x1054, 0, NULL),
335 YAMAHA_DEVICE(0x1055, NULL),
336 YAMAHA_DEVICE(0x1056, NULL),
337 YAMAHA_DEVICE(0x1057, NULL),
338 YAMAHA_DEVICE(0x1058, NULL),
339 YAMAHA_DEVICE(0x1059, NULL),
340 YAMAHA_DEVICE(0x105a, NULL),
341 YAMAHA_DEVICE(0x105b, NULL),
342 YAMAHA_DEVICE(0x105c, NULL),
343 YAMAHA_DEVICE(0x105d, NULL),
345 USB_DEVICE(0x0499, 0x1503),
346 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
347 /* .vendor_name = "Yamaha", */
348 /* .product_name = "MOX6/MOX8", */
349 .ifnum = QUIRK_ANY_INTERFACE,
350 .type = QUIRK_COMPOSITE,
351 .data = (const struct snd_usb_audio_quirk[]) {
354 .type = QUIRK_AUDIO_STANDARD_INTERFACE
358 .type = QUIRK_AUDIO_STANDARD_INTERFACE
362 .type = QUIRK_MIDI_YAMAHA
371 USB_DEVICE(0x0499, 0x1507),
372 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
373 /* .vendor_name = "Yamaha", */
374 /* .product_name = "THR10", */
375 .ifnum = QUIRK_ANY_INTERFACE,
376 .type = QUIRK_COMPOSITE,
377 .data = (const struct snd_usb_audio_quirk[]) {
380 .type = QUIRK_AUDIO_STANDARD_INTERFACE
384 .type = QUIRK_AUDIO_STANDARD_INTERFACE
388 .type = QUIRK_MIDI_YAMAHA
397 USB_DEVICE(0x0499, 0x1509),
398 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
399 /* .vendor_name = "Yamaha", */
400 /* .product_name = "Steinberg UR22", */
401 .ifnum = QUIRK_ANY_INTERFACE,
402 .type = QUIRK_COMPOSITE,
403 .data = (const struct snd_usb_audio_quirk[]) {
406 .type = QUIRK_AUDIO_STANDARD_INTERFACE
410 .type = QUIRK_AUDIO_STANDARD_INTERFACE
414 .type = QUIRK_MIDI_YAMAHA
418 .type = QUIRK_IGNORE_INTERFACE
427 USB_DEVICE(0x0499, 0x150a),
428 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
429 /* .vendor_name = "Yamaha", */
430 /* .product_name = "THR5A", */
431 .ifnum = QUIRK_ANY_INTERFACE,
432 .type = QUIRK_COMPOSITE,
433 .data = (const struct snd_usb_audio_quirk[]) {
436 .type = QUIRK_AUDIO_STANDARD_INTERFACE
440 .type = QUIRK_AUDIO_STANDARD_INTERFACE
444 .type = QUIRK_MIDI_YAMAHA
453 USB_DEVICE(0x0499, 0x150c),
454 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
455 /* .vendor_name = "Yamaha", */
456 /* .product_name = "THR10C", */
457 .ifnum = QUIRK_ANY_INTERFACE,
458 .type = QUIRK_COMPOSITE,
459 .data = (const struct snd_usb_audio_quirk[]) {
462 .type = QUIRK_AUDIO_STANDARD_INTERFACE
466 .type = QUIRK_AUDIO_STANDARD_INTERFACE
470 .type = QUIRK_MIDI_YAMAHA
478 YAMAHA_DEVICE(0x2000, "DGP-7"),
479 YAMAHA_DEVICE(0x2001, "DGP-5"),
480 YAMAHA_DEVICE(0x2002, NULL),
481 YAMAHA_DEVICE(0x2003, NULL),
482 YAMAHA_DEVICE(0x5000, "CS1D"),
483 YAMAHA_DEVICE(0x5001, "DSP1D"),
484 YAMAHA_DEVICE(0x5002, "DME32"),
485 YAMAHA_DEVICE(0x5003, "DM2000"),
486 YAMAHA_DEVICE(0x5004, "02R96"),
487 YAMAHA_DEVICE(0x5005, "ACU16-C"),
488 YAMAHA_DEVICE(0x5006, "NHB32-C"),
489 YAMAHA_DEVICE(0x5007, "DM1000"),
490 YAMAHA_DEVICE(0x5008, "01V96"),
491 YAMAHA_DEVICE(0x5009, "SPX2000"),
492 YAMAHA_DEVICE(0x500a, "PM5D"),
493 YAMAHA_DEVICE(0x500b, "DME64N"),
494 YAMAHA_DEVICE(0x500c, "DME24N"),
495 YAMAHA_DEVICE(0x500d, NULL),
496 YAMAHA_DEVICE(0x500e, NULL),
497 YAMAHA_DEVICE(0x500f, NULL),
498 YAMAHA_DEVICE(0x7000, "DTX"),
499 YAMAHA_DEVICE(0x7010, "UB99"),
501 #undef YAMAHA_INTERFACE
502 /* this catches most recent vendor-specific Yamaha devices */
504 .match_flags = USB_DEVICE_ID_MATCH_VENDOR |
505 USB_DEVICE_ID_MATCH_INT_CLASS,
507 .bInterfaceClass = USB_CLASS_VENDOR_SPEC,
508 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
509 .ifnum = QUIRK_ANY_INTERFACE,
510 .type = QUIRK_AUTODETECT
515 * Roland/RolandED/Edirol/BOSS devices
518 USB_DEVICE(0x0582, 0x0000),
519 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
520 .vendor_name = "Roland",
521 .product_name = "UA-100",
522 .ifnum = QUIRK_ANY_INTERFACE,
523 .type = QUIRK_COMPOSITE,
524 .data = (const struct snd_usb_audio_quirk[]) {
527 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
528 .data = & (const struct audioformat) {
529 .formats = SNDRV_PCM_FMTBIT_S16_LE,
537 .rates = SNDRV_PCM_RATE_CONTINUOUS,
544 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
545 .data = & (const struct audioformat) {
546 .formats = SNDRV_PCM_FMTBIT_S16_LE,
551 .attributes = UAC_EP_CS_ATTR_FILL_MAX,
554 .rates = SNDRV_PCM_RATE_CONTINUOUS,
561 .type = QUIRK_MIDI_FIXED_ENDPOINT,
562 .data = & (const struct snd_usb_midi_endpoint_info) {
563 .out_cables = 0x0007,
574 USB_DEVICE(0x0582, 0x0002),
575 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
576 .vendor_name = "EDIROL",
577 .product_name = "UM-4",
578 .ifnum = QUIRK_ANY_INTERFACE,
579 .type = QUIRK_COMPOSITE,
580 .data = (const struct snd_usb_audio_quirk[]) {
583 .type = QUIRK_IGNORE_INTERFACE
587 .type = QUIRK_IGNORE_INTERFACE
591 .type = QUIRK_MIDI_FIXED_ENDPOINT,
592 .data = & (const struct snd_usb_midi_endpoint_info) {
593 .out_cables = 0x000f,
604 USB_DEVICE(0x0582, 0x0003),
605 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
606 .vendor_name = "Roland",
607 .product_name = "SC-8850",
608 .ifnum = QUIRK_ANY_INTERFACE,
609 .type = QUIRK_COMPOSITE,
610 .data = (const struct snd_usb_audio_quirk[]) {
613 .type = QUIRK_IGNORE_INTERFACE
617 .type = QUIRK_IGNORE_INTERFACE
621 .type = QUIRK_MIDI_FIXED_ENDPOINT,
622 .data = & (const struct snd_usb_midi_endpoint_info) {
623 .out_cables = 0x003f,
634 USB_DEVICE(0x0582, 0x0004),
635 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
636 .vendor_name = "Roland",
637 .product_name = "U-8",
638 .ifnum = QUIRK_ANY_INTERFACE,
639 .type = QUIRK_COMPOSITE,
640 .data = (const struct snd_usb_audio_quirk[]) {
643 .type = QUIRK_IGNORE_INTERFACE
647 .type = QUIRK_IGNORE_INTERFACE
651 .type = QUIRK_MIDI_FIXED_ENDPOINT,
652 .data = & (const struct snd_usb_midi_endpoint_info) {
653 .out_cables = 0x0005,
664 /* Has ID 0x0099 when not in "Advanced Driver" mode.
665 * The UM-2EX has only one input, but we cannot detect this. */
666 USB_DEVICE(0x0582, 0x0005),
667 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
668 .vendor_name = "EDIROL",
669 .product_name = "UM-2",
670 .ifnum = QUIRK_ANY_INTERFACE,
671 .type = QUIRK_COMPOSITE,
672 .data = (const struct snd_usb_audio_quirk[]) {
675 .type = QUIRK_IGNORE_INTERFACE
679 .type = QUIRK_IGNORE_INTERFACE
683 .type = QUIRK_MIDI_FIXED_ENDPOINT,
684 .data = & (const struct snd_usb_midi_endpoint_info) {
685 .out_cables = 0x0003,
696 USB_DEVICE(0x0582, 0x0007),
697 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
698 .vendor_name = "Roland",
699 .product_name = "SC-8820",
700 .ifnum = QUIRK_ANY_INTERFACE,
701 .type = QUIRK_COMPOSITE,
702 .data = (const struct snd_usb_audio_quirk[]) {
705 .type = QUIRK_IGNORE_INTERFACE
709 .type = QUIRK_IGNORE_INTERFACE
713 .type = QUIRK_MIDI_FIXED_ENDPOINT,
714 .data = & (const struct snd_usb_midi_endpoint_info) {
715 .out_cables = 0x0013,
726 USB_DEVICE(0x0582, 0x0008),
727 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
728 .vendor_name = "Roland",
729 .product_name = "PC-300",
730 .ifnum = QUIRK_ANY_INTERFACE,
731 .type = QUIRK_COMPOSITE,
732 .data = (const struct snd_usb_audio_quirk[]) {
735 .type = QUIRK_IGNORE_INTERFACE
739 .type = QUIRK_IGNORE_INTERFACE
743 .type = QUIRK_MIDI_FIXED_ENDPOINT,
744 .data = & (const struct snd_usb_midi_endpoint_info) {
745 .out_cables = 0x0001,
756 /* has ID 0x009d when not in "Advanced Driver" mode */
757 USB_DEVICE(0x0582, 0x0009),
758 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
759 .vendor_name = "EDIROL",
760 .product_name = "UM-1",
761 .ifnum = QUIRK_ANY_INTERFACE,
762 .type = QUIRK_COMPOSITE,
763 .data = (const struct snd_usb_audio_quirk[]) {
766 .type = QUIRK_IGNORE_INTERFACE
770 .type = QUIRK_IGNORE_INTERFACE
774 .type = QUIRK_MIDI_FIXED_ENDPOINT,
775 .data = & (const struct snd_usb_midi_endpoint_info) {
776 .out_cables = 0x0001,
787 USB_DEVICE(0x0582, 0x000b),
788 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
789 .vendor_name = "Roland",
790 .product_name = "SK-500",
791 .ifnum = QUIRK_ANY_INTERFACE,
792 .type = QUIRK_COMPOSITE,
793 .data = (const struct snd_usb_audio_quirk[]) {
796 .type = QUIRK_IGNORE_INTERFACE
800 .type = QUIRK_IGNORE_INTERFACE
804 .type = QUIRK_MIDI_FIXED_ENDPOINT,
805 .data = & (const struct snd_usb_midi_endpoint_info) {
806 .out_cables = 0x0013,
817 /* thanks to Emiliano Grilli <emillo@libero.it>
818 * for helping researching this data */
819 USB_DEVICE(0x0582, 0x000c),
820 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
821 .vendor_name = "Roland",
822 .product_name = "SC-D70",
823 .ifnum = QUIRK_ANY_INTERFACE,
824 .type = QUIRK_COMPOSITE,
825 .data = (const struct snd_usb_audio_quirk[]) {
828 .type = QUIRK_AUDIO_STANDARD_INTERFACE
832 .type = QUIRK_AUDIO_STANDARD_INTERFACE
836 .type = QUIRK_MIDI_FIXED_ENDPOINT,
837 .data = & (const struct snd_usb_midi_endpoint_info) {
838 .out_cables = 0x0007,
849 * This quirk is for the "Advanced Driver" mode of the Edirol UA-5.
850 * If the advanced mode switch at the back of the unit is off, the
851 * UA-5 has ID 0x0582/0x0011 and is standard compliant (no quirks),
852 * but offers only 16-bit PCM.
853 * In advanced mode, the UA-5 will output S24_3LE samples (two
854 * channels) at the rate indicated on the front switch, including
855 * the 96kHz sample rate.
857 USB_DEVICE(0x0582, 0x0010),
858 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
859 .vendor_name = "EDIROL",
860 .product_name = "UA-5",
861 .ifnum = QUIRK_ANY_INTERFACE,
862 .type = QUIRK_COMPOSITE,
863 .data = (const struct snd_usb_audio_quirk[]) {
866 .type = QUIRK_AUDIO_STANDARD_INTERFACE
870 .type = QUIRK_AUDIO_STANDARD_INTERFACE
879 /* has ID 0x0013 when not in "Advanced Driver" mode */
880 USB_DEVICE(0x0582, 0x0012),
881 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
882 .vendor_name = "Roland",
883 .product_name = "XV-5050",
885 .type = QUIRK_MIDI_FIXED_ENDPOINT,
886 .data = & (const struct snd_usb_midi_endpoint_info) {
887 .out_cables = 0x0001,
893 /* has ID 0x0015 when not in "Advanced Driver" mode */
894 USB_DEVICE(0x0582, 0x0014),
895 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
896 .vendor_name = "EDIROL",
897 .product_name = "UM-880",
899 .type = QUIRK_MIDI_FIXED_ENDPOINT,
900 .data = & (const struct snd_usb_midi_endpoint_info) {
901 .out_cables = 0x01ff,
907 /* has ID 0x0017 when not in "Advanced Driver" mode */
908 USB_DEVICE(0x0582, 0x0016),
909 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
910 .vendor_name = "EDIROL",
911 .product_name = "SD-90",
912 .ifnum = QUIRK_ANY_INTERFACE,
913 .type = QUIRK_COMPOSITE,
914 .data = (const struct snd_usb_audio_quirk[]) {
917 .type = QUIRK_AUDIO_STANDARD_INTERFACE
921 .type = QUIRK_AUDIO_STANDARD_INTERFACE
925 .type = QUIRK_MIDI_FIXED_ENDPOINT,
926 .data = & (const struct snd_usb_midi_endpoint_info) {
927 .out_cables = 0x000f,
938 /* has ID 0x001c when not in "Advanced Driver" mode */
939 USB_DEVICE(0x0582, 0x001b),
940 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
941 .vendor_name = "Roland",
942 .product_name = "MMP-2",
943 .ifnum = QUIRK_ANY_INTERFACE,
944 .type = QUIRK_COMPOSITE,
945 .data = (const struct snd_usb_audio_quirk[]) {
948 .type = QUIRK_IGNORE_INTERFACE
952 .type = QUIRK_IGNORE_INTERFACE
956 .type = QUIRK_MIDI_FIXED_ENDPOINT,
957 .data = & (const struct snd_usb_midi_endpoint_info) {
958 .out_cables = 0x0001,
969 /* has ID 0x001e when not in "Advanced Driver" mode */
970 USB_DEVICE(0x0582, 0x001d),
971 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
972 .vendor_name = "Roland",
973 .product_name = "V-SYNTH",
975 .type = QUIRK_MIDI_FIXED_ENDPOINT,
976 .data = & (const struct snd_usb_midi_endpoint_info) {
977 .out_cables = 0x0001,
983 /* has ID 0x0024 when not in "Advanced Driver" mode */
984 USB_DEVICE(0x0582, 0x0023),
985 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
986 .vendor_name = "EDIROL",
987 .product_name = "UM-550",
989 .type = QUIRK_MIDI_FIXED_ENDPOINT,
990 .data = & (const struct snd_usb_midi_endpoint_info) {
991 .out_cables = 0x003f,
998 * This quirk is for the "Advanced Driver" mode. If off, the UA-20
999 * has ID 0x0026 and is standard compliant, but has only 16-bit PCM
1002 USB_DEVICE(0x0582, 0x0025),
1003 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1004 .vendor_name = "EDIROL",
1005 .product_name = "UA-20",
1006 .ifnum = QUIRK_ANY_INTERFACE,
1007 .type = QUIRK_COMPOSITE,
1008 .data = (const struct snd_usb_audio_quirk[]) {
1011 .type = QUIRK_IGNORE_INTERFACE
1015 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
1016 .data = & (const struct audioformat) {
1017 .formats = SNDRV_PCM_FMTBIT_S24_3LE,
1025 .rates = SNDRV_PCM_RATE_CONTINUOUS,
1032 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
1033 .data = & (const struct audioformat) {
1034 .formats = SNDRV_PCM_FMTBIT_S24_3LE,
1042 .rates = SNDRV_PCM_RATE_CONTINUOUS,
1049 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1050 .data = & (const struct snd_usb_midi_endpoint_info) {
1051 .out_cables = 0x0001,
1062 /* has ID 0x0028 when not in "Advanced Driver" mode */
1063 USB_DEVICE(0x0582, 0x0027),
1064 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1065 .vendor_name = "EDIROL",
1066 .product_name = "SD-20",
1068 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1069 .data = & (const struct snd_usb_midi_endpoint_info) {
1070 .out_cables = 0x0003,
1076 /* has ID 0x002a when not in "Advanced Driver" mode */
1077 USB_DEVICE(0x0582, 0x0029),
1078 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1079 .vendor_name = "EDIROL",
1080 .product_name = "SD-80",
1082 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1083 .data = & (const struct snd_usb_midi_endpoint_info) {
1084 .out_cables = 0x000f,
1090 * This quirk is for the "Advanced" modes of the Edirol UA-700.
1091 * If the sample format switch is not in an advanced setting, the
1092 * UA-700 has ID 0x0582/0x002c and is standard compliant (no quirks),
1093 * but offers only 16-bit PCM and no MIDI.
1095 USB_DEVICE_VENDOR_SPEC(0x0582, 0x002b),
1096 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1097 .vendor_name = "EDIROL",
1098 .product_name = "UA-700",
1099 .ifnum = QUIRK_ANY_INTERFACE,
1100 .type = QUIRK_COMPOSITE,
1101 .data = (const struct snd_usb_audio_quirk[]) {
1104 .type = QUIRK_AUDIO_EDIROL_UAXX
1108 .type = QUIRK_AUDIO_EDIROL_UAXX
1112 .type = QUIRK_AUDIO_EDIROL_UAXX
1121 /* has ID 0x002e when not in "Advanced Driver" mode */
1122 USB_DEVICE(0x0582, 0x002d),
1123 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1124 .vendor_name = "Roland",
1125 .product_name = "XV-2020",
1127 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1128 .data = & (const struct snd_usb_midi_endpoint_info) {
1129 .out_cables = 0x0001,
1135 /* has ID 0x0030 when not in "Advanced Driver" mode */
1136 USB_DEVICE(0x0582, 0x002f),
1137 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1138 .vendor_name = "Roland",
1139 .product_name = "VariOS",
1141 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1142 .data = & (const struct snd_usb_midi_endpoint_info) {
1143 .out_cables = 0x0007,
1149 /* has ID 0x0034 when not in "Advanced Driver" mode */
1150 USB_DEVICE(0x0582, 0x0033),
1151 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1152 .vendor_name = "EDIROL",
1153 .product_name = "PCR",
1155 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1156 .data = & (const struct snd_usb_midi_endpoint_info) {
1157 .out_cables = 0x0003,
1164 * Has ID 0x0038 when not in "Advanced Driver" mode;
1165 * later revisions use IDs 0x0054 and 0x00a2.
1167 USB_DEVICE(0x0582, 0x0037),
1168 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1169 .vendor_name = "Roland",
1170 .product_name = "Digital Piano",
1172 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1173 .data = & (const struct snd_usb_midi_endpoint_info) {
1174 .out_cables = 0x0001,
1181 * This quirk is for the "Advanced Driver" mode. If off, the GS-10
1182 * has ID 0x003c and is standard compliant, but has only 16-bit PCM
1185 USB_DEVICE_VENDOR_SPEC(0x0582, 0x003b),
1186 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1187 .vendor_name = "BOSS",
1188 .product_name = "GS-10",
1189 .ifnum = QUIRK_ANY_INTERFACE,
1190 .type = QUIRK_COMPOSITE,
1191 .data = & (const struct snd_usb_audio_quirk[]) {
1194 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1198 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1202 .type = QUIRK_MIDI_STANDARD_INTERFACE
1211 /* has ID 0x0041 when not in "Advanced Driver" mode */
1212 USB_DEVICE(0x0582, 0x0040),
1213 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1214 .vendor_name = "Roland",
1215 .product_name = "GI-20",
1217 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1218 .data = & (const struct snd_usb_midi_endpoint_info) {
1219 .out_cables = 0x0001,
1225 /* has ID 0x0043 when not in "Advanced Driver" mode */
1226 USB_DEVICE(0x0582, 0x0042),
1227 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1228 .vendor_name = "Roland",
1229 .product_name = "RS-70",
1231 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1232 .data = & (const struct snd_usb_midi_endpoint_info) {
1233 .out_cables = 0x0001,
1239 /* has ID 0x0049 when not in "Advanced Driver" mode */
1240 USB_DEVICE(0x0582, 0x0047),
1241 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1242 /* .vendor_name = "EDIROL", */
1243 /* .product_name = "UR-80", */
1244 .ifnum = QUIRK_ANY_INTERFACE,
1245 .type = QUIRK_COMPOSITE,
1246 .data = (const struct snd_usb_audio_quirk[]) {
1247 /* in the 96 kHz modes, only interface 1 is there */
1250 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1254 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1263 /* has ID 0x004a when not in "Advanced Driver" mode */
1264 USB_DEVICE(0x0582, 0x0048),
1265 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1266 /* .vendor_name = "EDIROL", */
1267 /* .product_name = "UR-80", */
1269 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1270 .data = & (const struct snd_usb_midi_endpoint_info) {
1271 .out_cables = 0x0003,
1277 /* has ID 0x004e when not in "Advanced Driver" mode */
1278 USB_DEVICE(0x0582, 0x004c),
1279 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1280 .vendor_name = "EDIROL",
1281 .product_name = "PCR-A",
1282 .ifnum = QUIRK_ANY_INTERFACE,
1283 .type = QUIRK_COMPOSITE,
1284 .data = (const struct snd_usb_audio_quirk[]) {
1287 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1291 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1300 /* has ID 0x004f when not in "Advanced Driver" mode */
1301 USB_DEVICE(0x0582, 0x004d),
1302 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1303 .vendor_name = "EDIROL",
1304 .product_name = "PCR-A",
1306 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1307 .data = & (const struct snd_usb_midi_endpoint_info) {
1308 .out_cables = 0x0003,
1315 * This quirk is for the "Advanced Driver" mode. If off, the UA-3FX
1316 * is standard compliant, but has only 16-bit PCM.
1318 USB_DEVICE(0x0582, 0x0050),
1319 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1320 .vendor_name = "EDIROL",
1321 .product_name = "UA-3FX",
1322 .ifnum = QUIRK_ANY_INTERFACE,
1323 .type = QUIRK_COMPOSITE,
1324 .data = (const struct snd_usb_audio_quirk[]) {
1327 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1331 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1340 USB_DEVICE(0x0582, 0x0052),
1341 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1342 .vendor_name = "EDIROL",
1343 .product_name = "UM-1SX",
1345 .type = QUIRK_MIDI_STANDARD_INTERFACE
1349 USB_DEVICE(0x0582, 0x0060),
1350 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1351 .vendor_name = "Roland",
1352 .product_name = "EXR Series",
1354 .type = QUIRK_MIDI_STANDARD_INTERFACE
1358 /* has ID 0x0066 when not in "Advanced Driver" mode */
1359 USB_DEVICE(0x0582, 0x0064),
1360 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1361 /* .vendor_name = "EDIROL", */
1362 /* .product_name = "PCR-1", */
1363 .ifnum = QUIRK_ANY_INTERFACE,
1364 .type = QUIRK_COMPOSITE,
1365 .data = (const struct snd_usb_audio_quirk[]) {
1368 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1372 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1381 /* has ID 0x0067 when not in "Advanced Driver" mode */
1382 USB_DEVICE(0x0582, 0x0065),
1383 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1384 /* .vendor_name = "EDIROL", */
1385 /* .product_name = "PCR-1", */
1387 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1388 .data = & (const struct snd_usb_midi_endpoint_info) {
1389 .out_cables = 0x0001,
1395 /* has ID 0x006e when not in "Advanced Driver" mode */
1396 USB_DEVICE(0x0582, 0x006d),
1397 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1398 .vendor_name = "Roland",
1399 .product_name = "FANTOM-X",
1401 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1402 .data = & (const struct snd_usb_midi_endpoint_info) {
1403 .out_cables = 0x0001,
1409 * This quirk is for the "Advanced" modes of the Edirol UA-25.
1410 * If the switch is not in an advanced setting, the UA-25 has
1411 * ID 0x0582/0x0073 and is standard compliant (no quirks), but
1412 * offers only 16-bit PCM at 44.1 kHz and no MIDI.
1414 USB_DEVICE_VENDOR_SPEC(0x0582, 0x0074),
1415 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1416 .vendor_name = "EDIROL",
1417 .product_name = "UA-25",
1418 .ifnum = QUIRK_ANY_INTERFACE,
1419 .type = QUIRK_COMPOSITE,
1420 .data = (const struct snd_usb_audio_quirk[]) {
1423 .type = QUIRK_AUDIO_EDIROL_UAXX
1427 .type = QUIRK_AUDIO_EDIROL_UAXX
1431 .type = QUIRK_AUDIO_EDIROL_UAXX
1440 /* has ID 0x0076 when not in "Advanced Driver" mode */
1441 USB_DEVICE(0x0582, 0x0075),
1442 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1443 .vendor_name = "BOSS",
1444 .product_name = "DR-880",
1446 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1447 .data = & (const struct snd_usb_midi_endpoint_info) {
1448 .out_cables = 0x0001,
1454 /* has ID 0x007b when not in "Advanced Driver" mode */
1455 USB_DEVICE_VENDOR_SPEC(0x0582, 0x007a),
1456 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1457 .vendor_name = "Roland",
1458 /* "RD" or "RD-700SX"? */
1460 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1461 .data = & (const struct snd_usb_midi_endpoint_info) {
1462 .out_cables = 0x0003,
1468 /* has ID 0x0081 when not in "Advanced Driver" mode */
1469 USB_DEVICE(0x0582, 0x0080),
1470 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1471 .vendor_name = "Roland",
1472 .product_name = "G-70",
1474 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1475 .data = & (const struct snd_usb_midi_endpoint_info) {
1476 .out_cables = 0x0001,
1482 /* has ID 0x008c when not in "Advanced Driver" mode */
1483 USB_DEVICE(0x0582, 0x008b),
1484 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1485 .vendor_name = "EDIROL",
1486 .product_name = "PC-50",
1488 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1489 .data = & (const struct snd_usb_midi_endpoint_info) {
1490 .out_cables = 0x0001,
1497 * This quirk is for the "Advanced Driver" mode. If off, the UA-4FX
1498 * is standard compliant, but has only 16-bit PCM and no MIDI.
1500 USB_DEVICE(0x0582, 0x00a3),
1501 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1502 .vendor_name = "EDIROL",
1503 .product_name = "UA-4FX",
1504 .ifnum = QUIRK_ANY_INTERFACE,
1505 .type = QUIRK_COMPOSITE,
1506 .data = (const struct snd_usb_audio_quirk[]) {
1509 .type = QUIRK_AUDIO_EDIROL_UAXX
1513 .type = QUIRK_AUDIO_EDIROL_UAXX
1517 .type = QUIRK_AUDIO_EDIROL_UAXX
1527 USB_DEVICE(0x0582, 0x00c4),
1528 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1529 .ifnum = QUIRK_ANY_INTERFACE,
1530 .type = QUIRK_COMPOSITE,
1531 .data = (const struct snd_usb_audio_quirk[]) {
1534 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1538 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1542 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1543 .data = & (const struct snd_usb_midi_endpoint_info) {
1544 .out_cables = 0x0001,
1555 /* Advanced modes of the Edirol UA-25EX.
1556 * For the standard mode, UA-25EX has ID 0582:00e7, which
1557 * offers only 16-bit PCM at 44.1 kHz and no MIDI.
1559 USB_DEVICE_VENDOR_SPEC(0x0582, 0x00e6),
1560 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1561 .vendor_name = "EDIROL",
1562 .product_name = "UA-25EX",
1563 .ifnum = QUIRK_ANY_INTERFACE,
1564 .type = QUIRK_COMPOSITE,
1565 .data = (const struct snd_usb_audio_quirk[]) {
1568 .type = QUIRK_AUDIO_EDIROL_UAXX
1572 .type = QUIRK_AUDIO_EDIROL_UAXX
1576 .type = QUIRK_AUDIO_EDIROL_UAXX
1586 USB_DEVICE_VENDOR_SPEC(0x0582, 0x0108),
1587 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1589 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1590 .data = & (const struct snd_usb_midi_endpoint_info) {
1591 .out_cables = 0x0007,
1598 USB_DEVICE(0x0582, 0x0113),
1599 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1600 .ifnum = QUIRK_ANY_INTERFACE,
1601 .type = QUIRK_COMPOSITE,
1602 .data = (const struct snd_usb_audio_quirk[]) {
1605 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1609 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1613 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1614 .data = & (const struct snd_usb_midi_endpoint_info) {
1615 .out_cables = 0x0001,
1626 /* only 44.1 kHz works at the moment */
1627 USB_DEVICE(0x0582, 0x0120),
1628 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1629 /* .vendor_name = "Roland", */
1630 /* .product_name = "OCTO-CAPTURE", */
1631 .ifnum = QUIRK_ANY_INTERFACE,
1632 .type = QUIRK_COMPOSITE,
1633 .data = (const struct snd_usb_audio_quirk[]) {
1636 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
1637 .data = & (const struct audioformat) {
1638 .formats = SNDRV_PCM_FMTBIT_S32_LE,
1645 .rates = SNDRV_PCM_RATE_44100,
1649 .rate_table = (unsigned int[]) { 44100 }
1654 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
1655 .data = & (const struct audioformat) {
1656 .formats = SNDRV_PCM_FMTBIT_S32_LE,
1663 .rates = SNDRV_PCM_RATE_44100,
1667 .rate_table = (unsigned int[]) { 44100 }
1672 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1673 .data = & (const struct snd_usb_midi_endpoint_info) {
1674 .out_cables = 0x0001,
1680 .type = QUIRK_IGNORE_INTERFACE
1684 .type = QUIRK_IGNORE_INTERFACE
1693 /* only 44.1 kHz works at the moment */
1694 USB_DEVICE(0x0582, 0x012f),
1695 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1696 /* .vendor_name = "Roland", */
1697 /* .product_name = "QUAD-CAPTURE", */
1698 .ifnum = QUIRK_ANY_INTERFACE,
1699 .type = QUIRK_COMPOSITE,
1700 .data = (const struct snd_usb_audio_quirk[]) {
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_AUDIO_FIXED_ENDPOINT,
1722 .data = & (const struct audioformat) {
1723 .formats = SNDRV_PCM_FMTBIT_S32_LE,
1730 .rates = SNDRV_PCM_RATE_44100,
1734 .rate_table = (unsigned int[]) { 44100 }
1739 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1740 .data = & (const struct snd_usb_midi_endpoint_info) {
1741 .out_cables = 0x0001,
1747 .type = QUIRK_IGNORE_INTERFACE
1751 .type = QUIRK_IGNORE_INTERFACE
1760 USB_DEVICE(0x0582, 0x0159),
1761 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1762 /* .vendor_name = "Roland", */
1763 /* .product_name = "UA-22", */
1764 .ifnum = QUIRK_ANY_INTERFACE,
1765 .type = QUIRK_COMPOSITE,
1766 .data = (const struct snd_usb_audio_quirk[]) {
1769 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1773 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1777 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1778 .data = & (const struct snd_usb_midi_endpoint_info) {
1779 .out_cables = 0x0001,
1789 /* this catches most recent vendor-specific Roland devices */
1791 .match_flags = USB_DEVICE_ID_MATCH_VENDOR |
1792 USB_DEVICE_ID_MATCH_INT_CLASS,
1794 .bInterfaceClass = USB_CLASS_VENDOR_SPEC,
1795 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
1796 .ifnum = QUIRK_ANY_INTERFACE,
1797 .type = QUIRK_AUTODETECT
1801 /* Guillemot devices */
1804 * This is for the "Windows Edition" where the external MIDI ports are
1805 * the only MIDI ports; the control data is reported through HID
1806 * interfaces. The "Macintosh Edition" has ID 0xd002 and uses standard
1807 * compliant USB MIDI ports for external MIDI and controls.
1809 USB_DEVICE_VENDOR_SPEC(0x06f8, 0xb000),
1810 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1811 .vendor_name = "Hercules",
1812 .product_name = "DJ Console (WE)",
1814 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1815 .data = & (const struct snd_usb_midi_endpoint_info) {
1816 .out_cables = 0x0001,
1822 /* Midiman/M-Audio devices */
1824 USB_DEVICE_VENDOR_SPEC(0x0763, 0x1002),
1825 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1826 .vendor_name = "M-Audio",
1827 .product_name = "MidiSport 2x2",
1828 .ifnum = QUIRK_ANY_INTERFACE,
1829 .type = QUIRK_MIDI_MIDIMAN,
1830 .data = & (const struct snd_usb_midi_endpoint_info) {
1831 .out_cables = 0x0003,
1837 USB_DEVICE_VENDOR_SPEC(0x0763, 0x1011),
1838 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1839 .vendor_name = "M-Audio",
1840 .product_name = "MidiSport 1x1",
1841 .ifnum = QUIRK_ANY_INTERFACE,
1842 .type = QUIRK_MIDI_MIDIMAN,
1843 .data = & (const struct snd_usb_midi_endpoint_info) {
1844 .out_cables = 0x0001,
1850 USB_DEVICE_VENDOR_SPEC(0x0763, 0x1015),
1851 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1852 .vendor_name = "M-Audio",
1853 .product_name = "Keystation",
1854 .ifnum = QUIRK_ANY_INTERFACE,
1855 .type = QUIRK_MIDI_MIDIMAN,
1856 .data = & (const struct snd_usb_midi_endpoint_info) {
1857 .out_cables = 0x0001,
1863 USB_DEVICE_VENDOR_SPEC(0x0763, 0x1021),
1864 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1865 .vendor_name = "M-Audio",
1866 .product_name = "MidiSport 4x4",
1867 .ifnum = QUIRK_ANY_INTERFACE,
1868 .type = QUIRK_MIDI_MIDIMAN,
1869 .data = & (const struct snd_usb_midi_endpoint_info) {
1870 .out_cables = 0x000f,
1877 * For hardware revision 1.05; in the later revisions (1.10 and
1878 * 1.21), 0x1031 is the ID for the device without firmware.
1879 * Thanks to Olaf Giesbrecht <Olaf_Giesbrecht@yahoo.de>
1881 USB_DEVICE_VER(0x0763, 0x1031, 0x0100, 0x0109),
1882 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1883 .vendor_name = "M-Audio",
1884 .product_name = "MidiSport 8x8",
1885 .ifnum = QUIRK_ANY_INTERFACE,
1886 .type = QUIRK_MIDI_MIDIMAN,
1887 .data = & (const struct snd_usb_midi_endpoint_info) {
1888 .out_cables = 0x01ff,
1894 USB_DEVICE_VENDOR_SPEC(0x0763, 0x1033),
1895 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1896 .vendor_name = "M-Audio",
1897 .product_name = "MidiSport 8x8",
1898 .ifnum = QUIRK_ANY_INTERFACE,
1899 .type = QUIRK_MIDI_MIDIMAN,
1900 .data = & (const struct snd_usb_midi_endpoint_info) {
1901 .out_cables = 0x01ff,
1907 USB_DEVICE_VENDOR_SPEC(0x0763, 0x1041),
1908 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1909 .vendor_name = "M-Audio",
1910 .product_name = "MidiSport 2x4",
1911 .ifnum = QUIRK_ANY_INTERFACE,
1912 .type = QUIRK_MIDI_MIDIMAN,
1913 .data = & (const struct snd_usb_midi_endpoint_info) {
1914 .out_cables = 0x000f,
1920 USB_DEVICE_VENDOR_SPEC(0x0763, 0x2001),
1921 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1922 .vendor_name = "M-Audio",
1923 .product_name = "Quattro",
1924 .ifnum = QUIRK_ANY_INTERFACE,
1925 .type = QUIRK_COMPOSITE,
1926 .data = & (const struct snd_usb_audio_quirk[]) {
1928 * Interfaces 0-2 are "Windows-compatible", 16-bit only,
1929 * and share endpoints with the other interfaces.
1930 * Ignore them. The other interfaces can do 24 bits,
1931 * but captured samples are big-endian (see usbaudio.c).
1935 .type = QUIRK_IGNORE_INTERFACE
1939 .type = QUIRK_IGNORE_INTERFACE
1943 .type = QUIRK_IGNORE_INTERFACE
1947 .type = QUIRK_IGNORE_INTERFACE
1951 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1955 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1959 .type = QUIRK_IGNORE_INTERFACE
1963 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1967 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1971 .type = QUIRK_MIDI_MIDIMAN,
1972 .data = & (const struct snd_usb_midi_endpoint_info) {
1973 .out_cables = 0x0001,
1984 USB_DEVICE_VENDOR_SPEC(0x0763, 0x2003),
1985 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1986 .vendor_name = "M-Audio",
1987 .product_name = "AudioPhile",
1989 .type = QUIRK_MIDI_MIDIMAN,
1990 .data = & (const struct snd_usb_midi_endpoint_info) {
1991 .out_cables = 0x0001,
1997 USB_DEVICE_VENDOR_SPEC(0x0763, 0x2008),
1998 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1999 .vendor_name = "M-Audio",
2000 .product_name = "Ozone",
2002 .type = QUIRK_MIDI_MIDIMAN,
2003 .data = & (const struct snd_usb_midi_endpoint_info) {
2004 .out_cables = 0x0001,
2010 USB_DEVICE_VENDOR_SPEC(0x0763, 0x200d),
2011 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2012 .vendor_name = "M-Audio",
2013 .product_name = "OmniStudio",
2014 .ifnum = QUIRK_ANY_INTERFACE,
2015 .type = QUIRK_COMPOSITE,
2016 .data = & (const struct snd_usb_audio_quirk[]) {
2019 .type = QUIRK_IGNORE_INTERFACE
2023 .type = QUIRK_IGNORE_INTERFACE
2027 .type = QUIRK_IGNORE_INTERFACE
2031 .type = QUIRK_IGNORE_INTERFACE
2035 .type = QUIRK_AUDIO_STANDARD_INTERFACE
2039 .type = QUIRK_AUDIO_STANDARD_INTERFACE
2043 .type = QUIRK_IGNORE_INTERFACE
2047 .type = QUIRK_AUDIO_STANDARD_INTERFACE
2051 .type = QUIRK_AUDIO_STANDARD_INTERFACE
2055 .type = QUIRK_MIDI_MIDIMAN,
2056 .data = & (const struct snd_usb_midi_endpoint_info) {
2057 .out_cables = 0x0001,
2068 USB_DEVICE(0x0763, 0x2019),
2069 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2070 /* .vendor_name = "M-Audio", */
2071 /* .product_name = "Ozone Academic", */
2072 .ifnum = QUIRK_ANY_INTERFACE,
2073 .type = QUIRK_COMPOSITE,
2074 .data = & (const struct snd_usb_audio_quirk[]) {
2077 .type = QUIRK_AUDIO_STANDARD_INTERFACE
2081 .type = QUIRK_AUDIO_STANDARD_INTERFACE
2085 .type = QUIRK_AUDIO_STANDARD_INTERFACE
2089 .type = QUIRK_MIDI_MIDIMAN,
2090 .data = & (const struct snd_usb_midi_endpoint_info) {
2091 .out_cables = 0x0001,
2102 USB_DEVICE_VENDOR_SPEC(0x0763, 0x2030),
2103 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
2104 /* .vendor_name = "M-Audio", */
2105 /* .product_name = "Fast Track C400", */
2106 .ifnum = QUIRK_ANY_INTERFACE,
2107 .type = QUIRK_COMPOSITE,
2108 .data = &(const struct snd_usb_audio_quirk[]) {
2111 .type = QUIRK_AUDIO_STANDARD_MIXER,
2116 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
2117 .data = &(const struct audioformat) {
2118 .formats = SNDRV_PCM_FMTBIT_S24_3LE,
2123 .attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
2126 .rates = SNDRV_PCM_RATE_44100 |
2127 SNDRV_PCM_RATE_48000 |
2128 SNDRV_PCM_RATE_88200 |
2129 SNDRV_PCM_RATE_96000,
2133 .rate_table = (unsigned int[]) {
2134 44100, 48000, 88200, 96000
2142 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
2143 .data = &(const struct audioformat) {
2144 .formats = SNDRV_PCM_FMTBIT_S24_3LE,
2149 .attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
2152 .rates = SNDRV_PCM_RATE_44100 |
2153 SNDRV_PCM_RATE_48000 |
2154 SNDRV_PCM_RATE_88200 |
2155 SNDRV_PCM_RATE_96000,
2159 .rate_table = (unsigned int[]) {
2160 44100, 48000, 88200, 96000
2167 .ifnum = -1 /* Interface = 4 */
2173 USB_DEVICE_VENDOR_SPEC(0x0763, 0x2031),
2174 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
2175 /* .vendor_name = "M-Audio", */
2176 /* .product_name = "Fast Track C600", */
2177 .ifnum = QUIRK_ANY_INTERFACE,
2178 .type = QUIRK_COMPOSITE,
2179 .data = &(const struct snd_usb_audio_quirk[]) {
2182 .type = QUIRK_AUDIO_STANDARD_MIXER,
2187 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
2188 .data = &(const struct audioformat) {
2189 .formats = SNDRV_PCM_FMTBIT_S24_3LE,
2194 .attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
2197 .rates = SNDRV_PCM_RATE_44100 |
2198 SNDRV_PCM_RATE_48000 |
2199 SNDRV_PCM_RATE_88200 |
2200 SNDRV_PCM_RATE_96000,
2204 .rate_table = (unsigned int[]) {
2205 44100, 48000, 88200, 96000
2213 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
2214 .data = &(const struct audioformat) {
2215 .formats = SNDRV_PCM_FMTBIT_S24_3LE,
2220 .attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
2223 .rates = SNDRV_PCM_RATE_44100 |
2224 SNDRV_PCM_RATE_48000 |
2225 SNDRV_PCM_RATE_88200 |
2226 SNDRV_PCM_RATE_96000,
2230 .rate_table = (unsigned int[]) {
2231 44100, 48000, 88200, 96000
2238 .ifnum = -1 /* Interface = 4 */
2244 USB_DEVICE_VENDOR_SPEC(0x0763, 0x2080),
2245 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2246 /* .vendor_name = "M-Audio", */
2247 /* .product_name = "Fast Track Ultra", */
2248 .ifnum = QUIRK_ANY_INTERFACE,
2249 .type = QUIRK_COMPOSITE,
2250 .data = & (const struct snd_usb_audio_quirk[]) {
2253 .type = QUIRK_AUDIO_STANDARD_MIXER,
2257 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
2258 .data = & (const struct audioformat) {
2259 .formats = SNDRV_PCM_FMTBIT_S24_3LE,
2264 .attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
2267 .rates = SNDRV_PCM_RATE_44100 |
2268 SNDRV_PCM_RATE_48000 |
2269 SNDRV_PCM_RATE_88200 |
2270 SNDRV_PCM_RATE_96000,
2274 .rate_table = (unsigned int[]) {
2275 44100, 48000, 88200, 96000
2281 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
2282 .data = & (const struct audioformat) {
2283 .formats = SNDRV_PCM_FMTBIT_S24_3LE,
2288 .attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
2291 .rates = SNDRV_PCM_RATE_44100 |
2292 SNDRV_PCM_RATE_48000 |
2293 SNDRV_PCM_RATE_88200 |
2294 SNDRV_PCM_RATE_96000,
2298 .rate_table = (unsigned int[]) {
2299 44100, 48000, 88200, 96000
2303 /* interface 3 (MIDI) is standard compliant */
2311 USB_DEVICE_VENDOR_SPEC(0x0763, 0x2081),
2312 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2313 /* .vendor_name = "M-Audio", */
2314 /* .product_name = "Fast Track Ultra 8R", */
2315 .ifnum = QUIRK_ANY_INTERFACE,
2316 .type = QUIRK_COMPOSITE,
2317 .data = & (const struct snd_usb_audio_quirk[]) {
2320 .type = QUIRK_AUDIO_STANDARD_MIXER,
2324 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
2325 .data = & (const struct audioformat) {
2326 .formats = SNDRV_PCM_FMTBIT_S24_3LE,
2331 .attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
2334 .rates = SNDRV_PCM_RATE_44100 |
2335 SNDRV_PCM_RATE_48000 |
2336 SNDRV_PCM_RATE_88200 |
2337 SNDRV_PCM_RATE_96000,
2341 .rate_table = (unsigned int[]) {
2342 44100, 48000, 88200, 96000
2348 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
2349 .data = & (const struct audioformat) {
2350 .formats = SNDRV_PCM_FMTBIT_S24_3LE,
2355 .attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
2358 .rates = SNDRV_PCM_RATE_44100 |
2359 SNDRV_PCM_RATE_48000 |
2360 SNDRV_PCM_RATE_88200 |
2361 SNDRV_PCM_RATE_96000,
2365 .rate_table = (unsigned int[]) {
2366 44100, 48000, 88200, 96000
2370 /* interface 3 (MIDI) is standard compliant */
2380 USB_DEVICE(0x07cf, 0x6801),
2381 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2382 .vendor_name = "Casio",
2383 .product_name = "PL-40R",
2385 .type = QUIRK_MIDI_YAMAHA
2389 /* this ID is used by several devices without a product ID */
2390 USB_DEVICE(0x07cf, 0x6802),
2391 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2392 .vendor_name = "Casio",
2393 .product_name = "Keyboard",
2395 .type = QUIRK_MIDI_YAMAHA
2399 /* Mark of the Unicorn devices */
2401 /* thanks to Robert A. Lerche <ral 'at' msbit.com> */
2402 .match_flags = USB_DEVICE_ID_MATCH_VENDOR |
2403 USB_DEVICE_ID_MATCH_PRODUCT |
2404 USB_DEVICE_ID_MATCH_DEV_SUBCLASS,
2406 .idProduct = 0x0001,
2407 .bDeviceSubClass = 2,
2408 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2409 .vendor_name = "MOTU",
2410 .product_name = "Fastlane",
2411 .ifnum = QUIRK_ANY_INTERFACE,
2412 .type = QUIRK_COMPOSITE,
2413 .data = & (const struct snd_usb_audio_quirk[]) {
2416 .type = QUIRK_MIDI_RAW_BYTES
2420 .type = QUIRK_IGNORE_INTERFACE
2429 /* Emagic devices */
2431 USB_DEVICE(0x086a, 0x0001),
2432 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2433 .vendor_name = "Emagic",
2434 .product_name = "Unitor8",
2436 .type = QUIRK_MIDI_EMAGIC,
2437 .data = & (const struct snd_usb_midi_endpoint_info) {
2438 .out_cables = 0x80ff,
2444 USB_DEVICE(0x086a, 0x0002),
2445 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2446 .vendor_name = "Emagic",
2447 /* .product_name = "AMT8", */
2449 .type = QUIRK_MIDI_EMAGIC,
2450 .data = & (const struct snd_usb_midi_endpoint_info) {
2451 .out_cables = 0x80ff,
2457 USB_DEVICE(0x086a, 0x0003),
2458 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2459 .vendor_name = "Emagic",
2460 /* .product_name = "MT4", */
2462 .type = QUIRK_MIDI_EMAGIC,
2463 .data = & (const struct snd_usb_midi_endpoint_info) {
2464 .out_cables = 0x800f,
2472 USB_DEVICE_VENDOR_SPEC(0x0944, 0x0200),
2473 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2474 .vendor_name = "KORG, Inc.",
2475 /* .product_name = "PANDORA PX5D", */
2477 .type = QUIRK_MIDI_STANDARD_INTERFACE,
2482 USB_DEVICE_VENDOR_SPEC(0x0944, 0x0201),
2483 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2484 .vendor_name = "KORG, Inc.",
2485 /* .product_name = "ToneLab ST", */
2487 .type = QUIRK_MIDI_STANDARD_INTERFACE,
2493 USB_DEVICE(0x09e8, 0x0062),
2494 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2495 .vendor_name = "AKAI",
2496 .product_name = "MPD16",
2498 .type = QUIRK_MIDI_AKAI,
2503 /* Akai MPC Element */
2504 USB_DEVICE(0x09e8, 0x0021),
2505 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2506 .ifnum = QUIRK_ANY_INTERFACE,
2507 .type = QUIRK_COMPOSITE,
2508 .data = & (const struct snd_usb_audio_quirk[]) {
2511 .type = QUIRK_IGNORE_INTERFACE
2515 .type = QUIRK_MIDI_STANDARD_INTERFACE
2524 /* Steinberg devices */
2527 USB_DEVICE_VENDOR_SPEC(0x0a4e, 0x2040),
2528 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2529 .ifnum = QUIRK_ANY_INTERFACE,
2530 .type = QUIRK_COMPOSITE,
2531 .data = & (const struct snd_usb_audio_quirk[]) {
2534 .type = QUIRK_AUDIO_STANDARD_INTERFACE
2538 .type = QUIRK_AUDIO_STANDARD_INTERFACE
2542 .type = QUIRK_AUDIO_STANDARD_INTERFACE
2546 .type = QUIRK_MIDI_FIXED_ENDPOINT,
2547 .data = &(const struct snd_usb_midi_endpoint_info) {
2548 .out_cables = 0x0001,
2560 USB_DEVICE_VENDOR_SPEC(0x0a4e, 0x4040),
2561 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2562 .ifnum = QUIRK_ANY_INTERFACE,
2563 .type = QUIRK_COMPOSITE,
2564 .data = & (const struct snd_usb_audio_quirk[]) {
2567 .type = QUIRK_AUDIO_STANDARD_INTERFACE
2571 .type = QUIRK_AUDIO_STANDARD_INTERFACE
2575 .type = QUIRK_AUDIO_STANDARD_INTERFACE
2579 .type = QUIRK_MIDI_FIXED_ENDPOINT,
2580 .data = &(const struct snd_usb_midi_endpoint_info) {
2581 .out_cables = 0x0001,
2592 /* TerraTec devices */
2594 USB_DEVICE_VENDOR_SPEC(0x0ccd, 0x0012),
2595 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2596 .vendor_name = "TerraTec",
2597 .product_name = "PHASE 26",
2599 .type = QUIRK_MIDI_STANDARD_INTERFACE
2603 USB_DEVICE_VENDOR_SPEC(0x0ccd, 0x0013),
2604 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2605 .vendor_name = "TerraTec",
2606 .product_name = "PHASE 26",
2608 .type = QUIRK_MIDI_STANDARD_INTERFACE
2612 USB_DEVICE_VENDOR_SPEC(0x0ccd, 0x0014),
2613 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2614 .vendor_name = "TerraTec",
2615 .product_name = "PHASE 26",
2617 .type = QUIRK_MIDI_STANDARD_INTERFACE
2621 USB_DEVICE(0x0ccd, 0x0028),
2622 QUIRK_RENAME_DEVICE("TerraTec", "Aureon5.1MkII")
2625 USB_DEVICE(0x0ccd, 0x0035),
2626 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2627 .vendor_name = "Miditech",
2628 .product_name = "Play'n Roll",
2630 .type = QUIRK_MIDI_CME
2634 /* Stanton/N2IT Final Scratch v1 device ('Scratchamp') */
2636 USB_DEVICE(0x103d, 0x0100),
2637 QUIRK_RENAME_DEVICE("Stanton", "ScratchAmp")
2640 USB_DEVICE(0x103d, 0x0101),
2641 QUIRK_RENAME_DEVICE("Stanton", "ScratchAmp")
2644 /* Novation EMS devices */
2646 USB_DEVICE_VENDOR_SPEC(0x1235, 0x0001),
2647 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2648 .vendor_name = "Novation",
2649 .product_name = "ReMOTE Audio/XStation",
2651 .type = QUIRK_MIDI_NOVATION
2655 USB_DEVICE_VENDOR_SPEC(0x1235, 0x0002),
2656 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2657 .vendor_name = "Novation",
2658 .product_name = "Speedio",
2660 .type = QUIRK_MIDI_NOVATION
2664 USB_DEVICE(0x1235, 0x000a),
2665 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2666 /* .vendor_name = "Novation", */
2667 /* .product_name = "Nocturn", */
2669 .type = QUIRK_MIDI_RAW_BYTES
2673 USB_DEVICE(0x1235, 0x000e),
2674 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2675 /* .vendor_name = "Novation", */
2676 /* .product_name = "Launchpad", */
2678 .type = QUIRK_MIDI_RAW_BYTES
2682 USB_DEVICE(0x1235, 0x0010),
2683 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
2684 .vendor_name = "Focusrite",
2685 .product_name = "Saffire 6 USB",
2686 .ifnum = QUIRK_ANY_INTERFACE,
2687 .type = QUIRK_COMPOSITE,
2688 .data = (const struct snd_usb_audio_quirk[]) {
2691 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
2692 .data = &(const struct audioformat) {
2693 .formats = SNDRV_PCM_FMTBIT_S24_3LE,
2698 .attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
2700 .ep_attr = USB_ENDPOINT_XFER_ISOC,
2701 .rates = SNDRV_PCM_RATE_44100 |
2702 SNDRV_PCM_RATE_48000,
2706 .rate_table = (unsigned int[]) {
2713 .type = QUIRK_MIDI_RAW_BYTES
2722 USB_DEVICE(0x1235, 0x0018),
2723 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2724 .vendor_name = "Novation",
2725 .product_name = "Twitch",
2726 .ifnum = QUIRK_ANY_INTERFACE,
2727 .type = QUIRK_COMPOSITE,
2728 .data = (const struct snd_usb_audio_quirk[]) {
2731 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
2732 .data = & (const struct audioformat) {
2733 .formats = SNDRV_PCM_FMTBIT_S24_3LE,
2738 .attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
2740 .ep_attr = USB_ENDPOINT_XFER_ISOC,
2741 .rates = SNDRV_PCM_RATE_44100 |
2742 SNDRV_PCM_RATE_48000,
2746 .rate_table = (unsigned int[]) {
2753 .type = QUIRK_MIDI_RAW_BYTES
2762 USB_DEVICE_VENDOR_SPEC(0x1235, 0x4661),
2763 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2764 .vendor_name = "Novation",
2765 .product_name = "ReMOTE25",
2767 .type = QUIRK_MIDI_NOVATION
2771 /* Access Music devices */
2773 /* VirusTI Desktop */
2774 USB_DEVICE_VENDOR_SPEC(0x133e, 0x0815),
2775 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
2776 .ifnum = QUIRK_ANY_INTERFACE,
2777 .type = QUIRK_COMPOSITE,
2778 .data = &(const struct snd_usb_audio_quirk[]) {
2781 .type = QUIRK_MIDI_FIXED_ENDPOINT,
2782 .data = &(const struct snd_usb_midi_endpoint_info) {
2783 .out_cables = 0x0003,
2789 .type = QUIRK_IGNORE_INTERFACE
2800 /* aka. Serato Scratch Live DJ Box */
2801 USB_DEVICE(0x13e5, 0x0001),
2802 QUIRK_RENAME_DEVICE("Rane", "SL-1")
2805 /* Native Instruments MK2 series */
2807 /* Komplete Audio 6 */
2808 .match_flags = USB_DEVICE_ID_MATCH_DEVICE,
2810 .idProduct = 0x1000,
2813 /* Traktor Audio 6 */
2814 .match_flags = USB_DEVICE_ID_MATCH_DEVICE,
2816 .idProduct = 0x1010,
2819 /* Traktor Audio 10 */
2820 .match_flags = USB_DEVICE_ID_MATCH_DEVICE,
2822 .idProduct = 0x1020,
2825 /* QinHeng devices */
2827 USB_DEVICE(0x1a86, 0x752d),
2828 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
2829 .vendor_name = "QinHeng",
2830 .product_name = "CH345",
2832 .type = QUIRK_MIDI_CH345
2836 /* KeithMcMillen Stringport */
2838 USB_DEVICE(0x1f38, 0x0001),
2839 .bInterfaceClass = USB_CLASS_AUDIO,
2842 /* Miditech devices */
2844 USB_DEVICE(0x4752, 0x0011),
2845 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2846 .vendor_name = "Miditech",
2847 .product_name = "Midistart-2",
2849 .type = QUIRK_MIDI_CME
2853 /* Central Music devices */
2855 /* this ID used by both Miditech MidiStudio-2 and CME UF-x */
2856 USB_DEVICE(0x7104, 0x2202),
2857 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2859 .type = QUIRK_MIDI_CME
2864 * Auvitek au0828 devices with audio interface.
2865 * This should be kept in sync with drivers/media/usb/au0828/au0828-cards.c
2866 * Please notice that some drivers are DVB only, and don't need to be
2867 * here. That's the case, for example, of DVICO_FUSIONHDTV7.
2870 #define AU0828_DEVICE(vid, pid, vname, pname) { \
2873 .match_flags = USB_DEVICE_ID_MATCH_DEVICE | \
2874 USB_DEVICE_ID_MATCH_INT_CLASS | \
2875 USB_DEVICE_ID_MATCH_INT_SUBCLASS, \
2876 .bInterfaceClass = USB_CLASS_AUDIO, \
2877 .bInterfaceSubClass = USB_SUBCLASS_AUDIOCONTROL, \
2878 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) { \
2879 .vendor_name = vname, \
2880 .product_name = pname, \
2881 .ifnum = QUIRK_ANY_INTERFACE, \
2882 .type = QUIRK_AUDIO_ALIGN_TRANSFER, \
2883 .shares_media_device = 1, \
2887 AU0828_DEVICE(0x2040, 0x7200, "Hauppauge", "HVR-950Q"),
2888 AU0828_DEVICE(0x2040, 0x7240, "Hauppauge", "HVR-850"),
2889 AU0828_DEVICE(0x2040, 0x7210, "Hauppauge", "HVR-950Q"),
2890 AU0828_DEVICE(0x2040, 0x7217, "Hauppauge", "HVR-950Q"),
2891 AU0828_DEVICE(0x2040, 0x721b, "Hauppauge", "HVR-950Q"),
2892 AU0828_DEVICE(0x2040, 0x721e, "Hauppauge", "HVR-950Q"),
2893 AU0828_DEVICE(0x2040, 0x721f, "Hauppauge", "HVR-950Q"),
2894 AU0828_DEVICE(0x2040, 0x7280, "Hauppauge", "HVR-950Q"),
2895 AU0828_DEVICE(0x0fd9, 0x0008, "Hauppauge", "HVR-950Q"),
2896 AU0828_DEVICE(0x2040, 0x7201, "Hauppauge", "HVR-950Q-MXL"),
2897 AU0828_DEVICE(0x2040, 0x7211, "Hauppauge", "HVR-950Q-MXL"),
2898 AU0828_DEVICE(0x2040, 0x7281, "Hauppauge", "HVR-950Q-MXL"),
2899 AU0828_DEVICE(0x05e1, 0x0480, "Hauppauge", "Woodbury"),
2900 AU0828_DEVICE(0x2040, 0x8200, "Hauppauge", "Woodbury"),
2901 AU0828_DEVICE(0x2040, 0x7260, "Hauppauge", "HVR-950Q"),
2902 AU0828_DEVICE(0x2040, 0x7213, "Hauppauge", "HVR-950Q"),
2903 AU0828_DEVICE(0x2040, 0x7270, "Hauppauge", "HVR-950Q"),
2905 /* Syntek STK1160 */
2907 .match_flags = USB_DEVICE_ID_MATCH_DEVICE |
2908 USB_DEVICE_ID_MATCH_INT_CLASS |
2909 USB_DEVICE_ID_MATCH_INT_SUBCLASS,
2911 .idProduct = 0x0408,
2912 .bInterfaceClass = USB_CLASS_AUDIO,
2913 .bInterfaceSubClass = USB_SUBCLASS_AUDIOCONTROL,
2914 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
2915 .vendor_name = "Syntek",
2916 .product_name = "STK1160",
2917 .ifnum = QUIRK_ANY_INTERFACE,
2918 .type = QUIRK_AUDIO_ALIGN_TRANSFER
2922 /* Digidesign Mbox */
2924 /* Thanks to Clemens Ladisch <clemens@ladisch.de> */
2925 USB_DEVICE(0x0dba, 0x1000),
2926 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
2927 .vendor_name = "Digidesign",
2928 .product_name = "MBox",
2929 .ifnum = QUIRK_ANY_INTERFACE,
2930 .type = QUIRK_COMPOSITE,
2931 .data = (const struct snd_usb_audio_quirk[]){
2934 .type = QUIRK_AUDIO_STANDARD_MIXER,
2938 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
2939 .data = &(const struct audioformat) {
2940 .formats = SNDRV_PCM_FMTBIT_S24_3BE,
2947 .ep_attr = USB_ENDPOINT_XFER_ISOC |
2948 USB_ENDPOINT_SYNC_SYNC,
2949 .maxpacksize = 0x130,
2950 .rates = SNDRV_PCM_RATE_48000,
2954 .rate_table = (unsigned int[]) {
2961 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
2962 .data = &(const struct audioformat) {
2963 .formats = SNDRV_PCM_FMTBIT_S24_3BE,
2970 .ep_attr = USB_ENDPOINT_XFER_ISOC |
2971 USB_ENDPOINT_SYNC_ASYNC,
2972 .maxpacksize = 0x130,
2973 .rates = SNDRV_PCM_RATE_48000,
2977 .rate_table = (unsigned int[]) {
2989 /* DIGIDESIGN MBOX 2 */
2991 USB_DEVICE(0x0dba, 0x3000),
2992 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
2993 .vendor_name = "Digidesign",
2994 .product_name = "Mbox 2",
2995 .ifnum = QUIRK_ANY_INTERFACE,
2996 .type = QUIRK_COMPOSITE,
2997 .data = (const struct snd_usb_audio_quirk[]) {
3000 .type = QUIRK_IGNORE_INTERFACE
3004 .type = QUIRK_IGNORE_INTERFACE
3008 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
3009 .data = &(const struct audioformat) {
3010 .formats = SNDRV_PCM_FMTBIT_S24_3BE,
3017 .ep_attr = USB_ENDPOINT_SYNC_ASYNC,
3018 .rates = SNDRV_PCM_RATE_48000,
3022 .rate_table = (unsigned int[]) {
3029 .type = QUIRK_IGNORE_INTERFACE
3033 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
3034 .data = &(const struct audioformat) {
3035 .formats = SNDRV_PCM_FMTBIT_S24_3BE,
3040 .attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
3042 .ep_attr = USB_ENDPOINT_SYNC_SYNC,
3043 .rates = SNDRV_PCM_RATE_48000,
3047 .rate_table = (unsigned int[]) {
3054 .type = QUIRK_IGNORE_INTERFACE
3058 .type = QUIRK_MIDI_MIDIMAN,
3059 .data = &(const struct snd_usb_midi_endpoint_info) {
3061 .out_cables = 0x0001,
3063 .in_interval = 0x01,
3074 /* Tascam US122 MKII - playback-only support */
3075 .match_flags = USB_DEVICE_ID_MATCH_DEVICE,
3077 .idProduct = 0x8021,
3078 .bInterfaceClass = USB_CLASS_AUDIO,
3079 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
3080 .vendor_name = "TASCAM",
3081 .product_name = "US122 MKII",
3082 .ifnum = QUIRK_ANY_INTERFACE,
3083 .type = QUIRK_COMPOSITE,
3084 .data = (const struct snd_usb_audio_quirk[]) {
3087 .type = QUIRK_IGNORE_INTERFACE
3091 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
3092 .data = &(const struct audioformat) {
3093 .formats = SNDRV_PCM_FMTBIT_S24_3LE,
3098 .attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
3100 .ep_attr = USB_ENDPOINT_XFER_ISOC,
3101 .rates = SNDRV_PCM_RATE_44100 |
3102 SNDRV_PCM_RATE_48000 |
3103 SNDRV_PCM_RATE_88200 |
3104 SNDRV_PCM_RATE_96000,
3108 .rate_table = (unsigned int[]) {
3109 44100, 48000, 88200, 96000
3120 /* Microsoft XboxLive Headset/Xbox Communicator */
3122 USB_DEVICE(0x045e, 0x0283),
3123 .bInterfaceClass = USB_CLASS_PER_INTERFACE,
3124 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
3125 .vendor_name = "Microsoft",
3126 .product_name = "XboxLive Headset/Xbox Communicator",
3127 .ifnum = QUIRK_ANY_INTERFACE,
3128 .type = QUIRK_COMPOSITE,
3129 .data = &(const struct snd_usb_audio_quirk[]) {
3133 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
3134 .data = &(const struct audioformat) {
3135 .formats = SNDRV_PCM_FMTBIT_S16_LE,
3143 .rates = SNDRV_PCM_RATE_CONTINUOUS,
3151 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
3152 .data = &(const struct audioformat) {
3153 .formats = SNDRV_PCM_FMTBIT_S16_LE,
3161 .rates = SNDRV_PCM_RATE_CONTINUOUS,
3175 USB_DEVICE(0x200c, 0x100b),
3176 .bInterfaceClass = USB_CLASS_PER_INTERFACE,
3177 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
3178 .ifnum = QUIRK_ANY_INTERFACE,
3179 .type = QUIRK_COMPOSITE,
3180 .data = &(const struct snd_usb_audio_quirk[]) {
3183 .type = QUIRK_AUDIO_STANDARD_MIXER,
3187 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
3188 .data = &(const struct audioformat) {
3189 .formats = SNDRV_PCM_FMTBIT_S24_3LE,
3194 .attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
3196 .ep_attr = USB_ENDPOINT_SYNC_ADAPTIVE,
3197 .rates = SNDRV_PCM_RATE_44100 |
3198 SNDRV_PCM_RATE_48000,
3202 .rate_table = (unsigned int[]) {
3216 * ZOOM R16/24 in audio interface mode.
3217 * Playback requires an extra four byte LE length indicator
3218 * at the start of each isochronous packet. This quirk is
3219 * enabled in create_standard_audio_quirk().
3221 USB_DEVICE(0x1686, 0x00dd),
3222 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
3223 .ifnum = QUIRK_ANY_INTERFACE,
3224 .type = QUIRK_COMPOSITE,
3225 .data = (const struct snd_usb_audio_quirk[]) {
3229 .type = QUIRK_AUDIO_STANDARD_INTERFACE,
3234 .type = QUIRK_AUDIO_STANDARD_INTERFACE,
3239 .type = QUIRK_MIDI_STANDARD_INTERFACE
3250 * Some USB MIDI devices don't have an audio control interface,
3251 * so we have to grab MIDI streaming interfaces here.
3253 .match_flags = USB_DEVICE_ID_MATCH_INT_CLASS |
3254 USB_DEVICE_ID_MATCH_INT_SUBCLASS,
3255 .bInterfaceClass = USB_CLASS_AUDIO,
3256 .bInterfaceSubClass = USB_SUBCLASS_MIDISTREAMING,
3257 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
3258 .ifnum = QUIRK_ANY_INTERFACE,
3259 .type = QUIRK_MIDI_STANDARD_INTERFACE
3265 * The original product_name is "USB Sound Device", however this name
3266 * is also used by the CM106 based cards, so make it unique.
3268 USB_DEVICE(0x0d8c, 0x0103),
3269 QUIRK_RENAME_DEVICE(NULL, "Audio Advantage MicroII")
3272 /* disabled due to regression for other devices;
3273 * see https://bugzilla.kernel.org/show_bug.cgi?id=199905
3278 * Nura's first gen headphones use Cambridge Silicon Radio's vendor
3279 * ID, but it looks like the product ID actually is only for Nura.
3280 * The capture interface does not work at all (even on Windows),
3281 * and only the 48 kHz sample rate works for the playback interface.
3283 USB_DEVICE(0x0a12, 0x1243),
3284 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
3285 .ifnum = QUIRK_ANY_INTERFACE,
3286 .type = QUIRK_COMPOSITE,
3287 .data = (const struct snd_usb_audio_quirk[]) {
3290 .type = QUIRK_AUDIO_STANDARD_MIXER,
3295 .type = QUIRK_IGNORE_INTERFACE,
3300 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
3301 .data = &(const struct audioformat) {
3302 .formats = SNDRV_PCM_FMTBIT_S16_LE,
3307 .attributes = UAC_EP_CS_ATTR_FILL_MAX |
3308 UAC_EP_CS_ATTR_SAMPLE_RATE,
3310 .ep_attr = USB_ENDPOINT_XFER_ISOC,
3311 .rates = SNDRV_PCM_RATE_48000,
3315 .rate_table = (unsigned int[]) {
3326 #endif /* disabled */
3330 * Bower's & Wilkins PX headphones only support the 48 kHz sample rate
3331 * even though it advertises more. The capture interface doesn't work
3334 USB_DEVICE(0x19b5, 0x0021),
3335 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
3336 .ifnum = QUIRK_ANY_INTERFACE,
3337 .type = QUIRK_COMPOSITE,
3338 .data = (const struct snd_usb_audio_quirk[]) {
3341 .type = QUIRK_AUDIO_STANDARD_MIXER,
3346 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
3347 .data = &(const struct audioformat) {
3348 .formats = SNDRV_PCM_FMTBIT_S16_LE,
3353 .attributes = UAC_EP_CS_ATTR_FILL_MAX |
3354 UAC_EP_CS_ATTR_SAMPLE_RATE,
3356 .ep_attr = USB_ENDPOINT_XFER_ISOC,
3357 .rates = SNDRV_PCM_RATE_48000,
3361 .rate_table = (unsigned int[]) {
3372 /* Dell WD15 Dock */
3374 USB_DEVICE(0x0bda, 0x4014),
3375 QUIRK_DEVICE_PROFILE("Dell", "WD15 Dock", "Dell-WD15-Dock")
3377 /* Dell WD19 Dock */
3379 USB_DEVICE(0x0bda, 0x402e),
3380 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
3381 .vendor_name = "Dell",
3382 .product_name = "WD19 Dock",
3383 .profile_name = "Dell-WD15-Dock",
3384 .ifnum = QUIRK_ANY_INTERFACE,
3385 .type = QUIRK_SETUP_FMT_AFTER_RESUME
3388 /* MOTU Microbook II */
3390 USB_DEVICE_VENDOR_SPEC(0x07fd, 0x0004),
3391 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
3392 .vendor_name = "MOTU",
3393 .product_name = "MicroBookII",
3394 .ifnum = QUIRK_ANY_INTERFACE,
3395 .type = QUIRK_COMPOSITE,
3396 .data = (const struct snd_usb_audio_quirk[]) {
3399 .type = QUIRK_AUDIO_STANDARD_MIXER,
3403 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
3404 .data = &(const struct audioformat) {
3405 .formats = SNDRV_PCM_FMTBIT_S24_3BE,
3412 .rates = SNDRV_PCM_RATE_96000,
3413 .ep_attr = USB_ENDPOINT_XFER_ISOC |
3414 USB_ENDPOINT_SYNC_ASYNC,
3418 .maxpacksize = 0x00d8,
3419 .rate_table = (unsigned int[]) {
3426 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
3427 .data = &(const struct audioformat) {
3428 .formats = SNDRV_PCM_FMTBIT_S24_3BE,
3435 .rates = SNDRV_PCM_RATE_96000,
3436 .ep_attr = USB_ENDPOINT_XFER_ISOC |
3437 USB_ENDPOINT_SYNC_ASYNC,
3441 .maxpacksize = 0x0120,
3442 .rate_table = (unsigned int[]) {
3455 * PIONEER DJ DDJ-SX3
3456 * PCM is 12 channels out, 10 channels in @ 44.1 fixed
3457 * interface 0, vendor class alt setting 1 for endpoints 5 and 0x86
3458 * The feedback for the output is the input.
3460 USB_DEVICE_VENDOR_SPEC(0x2b73, 0x0023),
3461 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
3462 .ifnum = QUIRK_ANY_INTERFACE,
3463 .type = QUIRK_COMPOSITE,
3464 .data = (const struct snd_usb_audio_quirk[]) {
3467 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
3468 .data = &(const struct audioformat) {
3469 .formats = SNDRV_PCM_FMTBIT_S32_LE,
3475 .ep_attr = USB_ENDPOINT_XFER_ISOC|
3476 USB_ENDPOINT_SYNC_ASYNC,
3477 .rates = SNDRV_PCM_RATE_44100,
3481 .rate_table = (unsigned int[]) { 44100 }
3486 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
3487 .data = &(const struct audioformat) {
3488 .formats = SNDRV_PCM_FMTBIT_S32_LE,
3494 .ep_attr = USB_ENDPOINT_XFER_ISOC|
3495 USB_ENDPOINT_SYNC_ASYNC|
3496 USB_ENDPOINT_USAGE_IMPLICIT_FB,
3497 .rates = SNDRV_PCM_RATE_44100,
3501 .rate_table = (unsigned int[]) { 44100 }
3512 * Pioneer DJ DJM-250MK2
3513 * PCM is 8 channels out @ 48 fixed (endpoints 0x01).
3514 * The output from computer to the mixer is usable.
3516 * The input (phono or line to computer) is not working.
3517 * It should be at endpoint 0x82 and probably also 8 channels,
3518 * but it seems that it works only with Pioneer proprietary software.
3519 * Even on officially supported OS, the Audacity was unable to record
3520 * and Mixxx to recognize the control vinyls.
3522 USB_DEVICE_VENDOR_SPEC(0x2b73, 0x0017),
3523 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
3524 .ifnum = QUIRK_ANY_INTERFACE,
3525 .type = QUIRK_COMPOSITE,
3526 .data = (const struct snd_usb_audio_quirk[]) {
3529 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
3530 .data = &(const struct audioformat) {
3531 .formats = SNDRV_PCM_FMTBIT_S24_3LE,
3532 .channels = 8, // outputs
3537 .ep_attr = USB_ENDPOINT_XFER_ISOC|
3538 USB_ENDPOINT_SYNC_ASYNC,
3539 .rates = SNDRV_PCM_RATE_48000,
3543 .rate_table = (unsigned int[]) { 48000 }
3553 #define ALC1220_VB_DESKTOP(vend, prod) { \
3554 USB_DEVICE(vend, prod), \
3555 QUIRK_DEVICE_PROFILE("Realtek", "ALC1220-VB-DT", \
3556 "Realtek-ALC1220-VB-Desktop") \
3558 ALC1220_VB_DESKTOP(0x0414, 0xa002), /* Gigabyte TRX40 Aorus Pro WiFi */
3559 ALC1220_VB_DESKTOP(0x0db0, 0x0d64), /* MSI TRX40 Creator */
3560 ALC1220_VB_DESKTOP(0x0db0, 0x543d), /* MSI TRX40 */
3561 ALC1220_VB_DESKTOP(0x26ce, 0x0a01), /* Asrock TRX40 Creator */
3562 #undef ALC1220_VB_DESKTOP
3564 /* Two entries for Gigabyte TRX40 Aorus Master:
3565 * TRX40 Aorus Master has two USB-audio devices, one for the front headphone
3566 * with ESS SABRE9218 DAC chip, while another for the rest I/O (the rear
3567 * panel and the front mic) with Realtek ALC1220-VB.
3568 * Here we provide two distinct names for making UCM profiles easier.
3571 USB_DEVICE(0x0414, 0xa000),
3572 QUIRK_DEVICE_PROFILE("Gigabyte", "Aorus Master Front Headphone",
3573 "Gigabyte-Aorus-Master-Front-Headphone")
3576 USB_DEVICE(0x0414, 0xa001),
3577 QUIRK_DEVICE_PROFILE("Gigabyte", "Aorus Master Main Audio",
3578 "Gigabyte-Aorus-Master-Main-Audio")
3582 * Pioneer DJ DJM-900NXS2
3583 * 10 channels playback & 12 channels capture @ 44.1/48/96kHz S24LE
3585 USB_DEVICE_VENDOR_SPEC(0x2b73, 0x000a),
3586 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
3587 .ifnum = QUIRK_ANY_INTERFACE,
3588 .type = QUIRK_COMPOSITE,
3589 .data = (const struct snd_usb_audio_quirk[]) {
3592 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
3593 .data = &(const struct audioformat) {
3594 .formats = SNDRV_PCM_FMTBIT_S24_3LE,
3600 .ep_attr = USB_ENDPOINT_XFER_ISOC|
3601 USB_ENDPOINT_SYNC_ASYNC,
3602 .rates = SNDRV_PCM_RATE_44100|
3603 SNDRV_PCM_RATE_48000|
3604 SNDRV_PCM_RATE_96000,
3608 .rate_table = (unsigned int[]) {
3615 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
3616 .data = &(const struct audioformat) {
3617 .formats = SNDRV_PCM_FMTBIT_S24_3LE,
3623 .ep_attr = USB_ENDPOINT_XFER_ISOC|
3624 USB_ENDPOINT_SYNC_ASYNC|
3625 USB_ENDPOINT_USAGE_IMPLICIT_FB,
3626 .rates = SNDRV_PCM_RATE_44100|
3627 SNDRV_PCM_RATE_48000|
3628 SNDRV_PCM_RATE_96000,
3632 .rate_table = (unsigned int[]) {
3644 #undef USB_DEVICE_VENDOR_SPEC