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
40 USB_DEVICE(0x0403, 0xb8d8),
41 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
42 /* .vendor_name = "STARR LABS", */
43 /* .product_name = "Starr Labs MIDI USB device", */
45 .type = QUIRK_MIDI_FTDI
51 USB_DEVICE(0x041e, 0x0005),
52 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
54 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
55 .data = &(const struct audioformat) {
56 .formats = SNDRV_PCM_FMTBIT_S16_LE,
62 .ep_attr = USB_ENDPOINT_XFER_ISOC,
64 .rates = SNDRV_PCM_RATE_CONTINUOUS,
73 .match_flags = USB_DEVICE_ID_MATCH_DEVICE,
76 .bInterfaceClass = USB_CLASS_AUDIO,
80 .match_flags = USB_DEVICE_ID_MATCH_DEVICE,
83 .bInterfaceClass = USB_CLASS_AUDIO,
86 /* E-Mu Tracker Pre */
87 .match_flags = USB_DEVICE_ID_MATCH_DEVICE,
90 .bInterfaceClass = USB_CLASS_AUDIO,
94 .match_flags = USB_DEVICE_ID_MATCH_DEVICE,
97 .bInterfaceClass = USB_CLASS_AUDIO,
102 * When not ignored, causes instability issues for some users, forcing them to
103 * skip the entire module.
106 USB_DEVICE(0x0424, 0xb832),
107 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
108 .vendor_name = "Standard Microsystems Corp.",
109 .product_name = "HP Wireless Audio",
110 .ifnum = QUIRK_ANY_INTERFACE,
111 .type = QUIRK_COMPOSITE,
112 .data = (const struct snd_usb_audio_quirk[]) {
116 .type = QUIRK_IGNORE_INTERFACE,
121 .type = QUIRK_IGNORE_INTERFACE,
126 .type = QUIRK_IGNORE_INTERFACE,
128 /* HID Device, .ifnum = 3 */
137 * Logitech QuickCam: bDeviceClass is vendor-specific, so generic interface
138 * class matches do not take effect without an explicit ID match.
140 { USB_AUDIO_DEVICE(0x046d, 0x0850) },
141 { USB_AUDIO_DEVICE(0x046d, 0x08ae) },
142 { USB_AUDIO_DEVICE(0x046d, 0x08c6) },
143 { USB_AUDIO_DEVICE(0x046d, 0x08f0) },
144 { USB_AUDIO_DEVICE(0x046d, 0x08f5) },
145 { USB_AUDIO_DEVICE(0x046d, 0x08f6) },
146 { USB_AUDIO_DEVICE(0x046d, 0x0990) },
152 #define YAMAHA_DEVICE(id, name) { \
153 USB_DEVICE(0x0499, id), \
154 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { \
155 .vendor_name = "Yamaha", \
156 .product_name = name, \
157 .ifnum = QUIRK_ANY_INTERFACE, \
158 .type = QUIRK_MIDI_YAMAHA \
161 #define YAMAHA_INTERFACE(id, intf, name) { \
162 USB_DEVICE_VENDOR_SPEC(0x0499, id), \
163 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { \
164 .vendor_name = "Yamaha", \
165 .product_name = name, \
167 .type = QUIRK_MIDI_YAMAHA \
170 YAMAHA_DEVICE(0x1000, "UX256"),
171 YAMAHA_DEVICE(0x1001, "MU1000"),
172 YAMAHA_DEVICE(0x1002, "MU2000"),
173 YAMAHA_DEVICE(0x1003, "MU500"),
174 YAMAHA_INTERFACE(0x1004, 3, "UW500"),
175 YAMAHA_DEVICE(0x1005, "MOTIF6"),
176 YAMAHA_DEVICE(0x1006, "MOTIF7"),
177 YAMAHA_DEVICE(0x1007, "MOTIF8"),
178 YAMAHA_DEVICE(0x1008, "UX96"),
179 YAMAHA_DEVICE(0x1009, "UX16"),
180 YAMAHA_INTERFACE(0x100a, 3, "EOS BX"),
181 YAMAHA_DEVICE(0x100c, "UC-MX"),
182 YAMAHA_DEVICE(0x100d, "UC-KX"),
183 YAMAHA_DEVICE(0x100e, "S08"),
184 YAMAHA_DEVICE(0x100f, "CLP-150"),
185 YAMAHA_DEVICE(0x1010, "CLP-170"),
186 YAMAHA_DEVICE(0x1011, "P-250"),
187 YAMAHA_DEVICE(0x1012, "TYROS"),
188 YAMAHA_DEVICE(0x1013, "PF-500"),
189 YAMAHA_DEVICE(0x1014, "S90"),
190 YAMAHA_DEVICE(0x1015, "MOTIF-R"),
191 YAMAHA_DEVICE(0x1016, "MDP-5"),
192 YAMAHA_DEVICE(0x1017, "CVP-204"),
193 YAMAHA_DEVICE(0x1018, "CVP-206"),
194 YAMAHA_DEVICE(0x1019, "CVP-208"),
195 YAMAHA_DEVICE(0x101a, "CVP-210"),
196 YAMAHA_DEVICE(0x101b, "PSR-1100"),
197 YAMAHA_DEVICE(0x101c, "PSR-2100"),
198 YAMAHA_DEVICE(0x101d, "CLP-175"),
199 YAMAHA_DEVICE(0x101e, "PSR-K1"),
200 YAMAHA_DEVICE(0x101f, "EZ-J24"),
201 YAMAHA_DEVICE(0x1020, "EZ-250i"),
202 YAMAHA_DEVICE(0x1021, "MOTIF ES 6"),
203 YAMAHA_DEVICE(0x1022, "MOTIF ES 7"),
204 YAMAHA_DEVICE(0x1023, "MOTIF ES 8"),
205 YAMAHA_DEVICE(0x1024, "CVP-301"),
206 YAMAHA_DEVICE(0x1025, "CVP-303"),
207 YAMAHA_DEVICE(0x1026, "CVP-305"),
208 YAMAHA_DEVICE(0x1027, "CVP-307"),
209 YAMAHA_DEVICE(0x1028, "CVP-309"),
210 YAMAHA_DEVICE(0x1029, "CVP-309GP"),
211 YAMAHA_DEVICE(0x102a, "PSR-1500"),
212 YAMAHA_DEVICE(0x102b, "PSR-3000"),
213 YAMAHA_DEVICE(0x102e, "ELS-01/01C"),
214 YAMAHA_DEVICE(0x1030, "PSR-295/293"),
215 YAMAHA_DEVICE(0x1031, "DGX-205/203"),
216 YAMAHA_DEVICE(0x1032, "DGX-305"),
217 YAMAHA_DEVICE(0x1033, "DGX-505"),
218 YAMAHA_DEVICE(0x1034, NULL),
219 YAMAHA_DEVICE(0x1035, NULL),
220 YAMAHA_DEVICE(0x1036, NULL),
221 YAMAHA_DEVICE(0x1037, NULL),
222 YAMAHA_DEVICE(0x1038, NULL),
223 YAMAHA_DEVICE(0x1039, NULL),
224 YAMAHA_DEVICE(0x103a, NULL),
225 YAMAHA_DEVICE(0x103b, NULL),
226 YAMAHA_DEVICE(0x103c, NULL),
227 YAMAHA_DEVICE(0x103d, NULL),
228 YAMAHA_DEVICE(0x103e, NULL),
229 YAMAHA_DEVICE(0x103f, NULL),
230 YAMAHA_DEVICE(0x1040, NULL),
231 YAMAHA_DEVICE(0x1041, NULL),
232 YAMAHA_DEVICE(0x1042, NULL),
233 YAMAHA_DEVICE(0x1043, NULL),
234 YAMAHA_DEVICE(0x1044, NULL),
235 YAMAHA_DEVICE(0x1045, NULL),
236 YAMAHA_INTERFACE(0x104e, 0, NULL),
237 YAMAHA_DEVICE(0x104f, NULL),
238 YAMAHA_DEVICE(0x1050, NULL),
239 YAMAHA_DEVICE(0x1051, NULL),
240 YAMAHA_DEVICE(0x1052, NULL),
241 YAMAHA_INTERFACE(0x1053, 0, NULL),
242 YAMAHA_INTERFACE(0x1054, 0, NULL),
243 YAMAHA_DEVICE(0x1055, NULL),
244 YAMAHA_DEVICE(0x1056, NULL),
245 YAMAHA_DEVICE(0x1057, NULL),
246 YAMAHA_DEVICE(0x1058, NULL),
247 YAMAHA_DEVICE(0x1059, NULL),
248 YAMAHA_DEVICE(0x105a, NULL),
249 YAMAHA_DEVICE(0x105b, NULL),
250 YAMAHA_DEVICE(0x105c, NULL),
251 YAMAHA_DEVICE(0x105d, NULL),
253 USB_DEVICE(0x0499, 0x1503),
254 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
255 /* .vendor_name = "Yamaha", */
256 /* .product_name = "MOX6/MOX8", */
257 .ifnum = QUIRK_ANY_INTERFACE,
258 .type = QUIRK_COMPOSITE,
259 .data = (const struct snd_usb_audio_quirk[]) {
262 .type = QUIRK_AUDIO_STANDARD_INTERFACE
266 .type = QUIRK_AUDIO_STANDARD_INTERFACE
270 .type = QUIRK_MIDI_YAMAHA
279 USB_DEVICE(0x0499, 0x1507),
280 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
281 /* .vendor_name = "Yamaha", */
282 /* .product_name = "THR10", */
283 .ifnum = QUIRK_ANY_INTERFACE,
284 .type = QUIRK_COMPOSITE,
285 .data = (const struct snd_usb_audio_quirk[]) {
288 .type = QUIRK_AUDIO_STANDARD_INTERFACE
292 .type = QUIRK_AUDIO_STANDARD_INTERFACE
296 .type = QUIRK_MIDI_YAMAHA
305 USB_DEVICE(0x0499, 0x1509),
306 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
307 /* .vendor_name = "Yamaha", */
308 /* .product_name = "Steinberg UR22", */
309 .ifnum = QUIRK_ANY_INTERFACE,
310 .type = QUIRK_COMPOSITE,
311 .data = (const struct snd_usb_audio_quirk[]) {
314 .type = QUIRK_AUDIO_STANDARD_INTERFACE
318 .type = QUIRK_AUDIO_STANDARD_INTERFACE
322 .type = QUIRK_MIDI_YAMAHA
326 .type = QUIRK_IGNORE_INTERFACE
335 USB_DEVICE(0x0499, 0x150a),
336 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
337 /* .vendor_name = "Yamaha", */
338 /* .product_name = "THR5A", */
339 .ifnum = QUIRK_ANY_INTERFACE,
340 .type = QUIRK_COMPOSITE,
341 .data = (const struct snd_usb_audio_quirk[]) {
344 .type = QUIRK_AUDIO_STANDARD_INTERFACE
348 .type = QUIRK_AUDIO_STANDARD_INTERFACE
352 .type = QUIRK_MIDI_YAMAHA
361 USB_DEVICE(0x0499, 0x150c),
362 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
363 /* .vendor_name = "Yamaha", */
364 /* .product_name = "THR10C", */
365 .ifnum = QUIRK_ANY_INTERFACE,
366 .type = QUIRK_COMPOSITE,
367 .data = (const struct snd_usb_audio_quirk[]) {
370 .type = QUIRK_AUDIO_STANDARD_INTERFACE
374 .type = QUIRK_AUDIO_STANDARD_INTERFACE
378 .type = QUIRK_MIDI_YAMAHA
386 YAMAHA_DEVICE(0x2000, "DGP-7"),
387 YAMAHA_DEVICE(0x2001, "DGP-5"),
388 YAMAHA_DEVICE(0x2002, NULL),
389 YAMAHA_DEVICE(0x2003, NULL),
390 YAMAHA_DEVICE(0x5000, "CS1D"),
391 YAMAHA_DEVICE(0x5001, "DSP1D"),
392 YAMAHA_DEVICE(0x5002, "DME32"),
393 YAMAHA_DEVICE(0x5003, "DM2000"),
394 YAMAHA_DEVICE(0x5004, "02R96"),
395 YAMAHA_DEVICE(0x5005, "ACU16-C"),
396 YAMAHA_DEVICE(0x5006, "NHB32-C"),
397 YAMAHA_DEVICE(0x5007, "DM1000"),
398 YAMAHA_DEVICE(0x5008, "01V96"),
399 YAMAHA_DEVICE(0x5009, "SPX2000"),
400 YAMAHA_DEVICE(0x500a, "PM5D"),
401 YAMAHA_DEVICE(0x500b, "DME64N"),
402 YAMAHA_DEVICE(0x500c, "DME24N"),
403 YAMAHA_DEVICE(0x500d, NULL),
404 YAMAHA_DEVICE(0x500e, NULL),
405 YAMAHA_DEVICE(0x500f, NULL),
406 YAMAHA_DEVICE(0x7000, "DTX"),
407 YAMAHA_DEVICE(0x7010, "UB99"),
409 #undef YAMAHA_INTERFACE
410 /* this catches most recent vendor-specific Yamaha devices */
412 .match_flags = USB_DEVICE_ID_MATCH_VENDOR |
413 USB_DEVICE_ID_MATCH_INT_CLASS,
415 .bInterfaceClass = USB_CLASS_VENDOR_SPEC,
416 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
417 .ifnum = QUIRK_ANY_INTERFACE,
418 .type = QUIRK_AUTODETECT
423 * Roland/RolandED/Edirol/BOSS devices
426 USB_DEVICE(0x0582, 0x0000),
427 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
428 .vendor_name = "Roland",
429 .product_name = "UA-100",
430 .ifnum = QUIRK_ANY_INTERFACE,
431 .type = QUIRK_COMPOSITE,
432 .data = (const struct snd_usb_audio_quirk[]) {
435 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
436 .data = & (const struct audioformat) {
437 .formats = SNDRV_PCM_FMTBIT_S16_LE,
445 .rates = SNDRV_PCM_RATE_CONTINUOUS,
452 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
453 .data = & (const struct audioformat) {
454 .formats = SNDRV_PCM_FMTBIT_S16_LE,
459 .attributes = UAC_EP_CS_ATTR_FILL_MAX,
462 .rates = SNDRV_PCM_RATE_CONTINUOUS,
469 .type = QUIRK_MIDI_FIXED_ENDPOINT,
470 .data = & (const struct snd_usb_midi_endpoint_info) {
471 .out_cables = 0x0007,
482 USB_DEVICE(0x0582, 0x0002),
483 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
484 .vendor_name = "EDIROL",
485 .product_name = "UM-4",
486 .ifnum = QUIRK_ANY_INTERFACE,
487 .type = QUIRK_COMPOSITE,
488 .data = (const struct snd_usb_audio_quirk[]) {
491 .type = QUIRK_IGNORE_INTERFACE
495 .type = QUIRK_IGNORE_INTERFACE
499 .type = QUIRK_MIDI_FIXED_ENDPOINT,
500 .data = & (const struct snd_usb_midi_endpoint_info) {
501 .out_cables = 0x000f,
512 USB_DEVICE(0x0582, 0x0003),
513 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
514 .vendor_name = "Roland",
515 .product_name = "SC-8850",
516 .ifnum = QUIRK_ANY_INTERFACE,
517 .type = QUIRK_COMPOSITE,
518 .data = (const struct snd_usb_audio_quirk[]) {
521 .type = QUIRK_IGNORE_INTERFACE
525 .type = QUIRK_IGNORE_INTERFACE
529 .type = QUIRK_MIDI_FIXED_ENDPOINT,
530 .data = & (const struct snd_usb_midi_endpoint_info) {
531 .out_cables = 0x003f,
542 USB_DEVICE(0x0582, 0x0004),
543 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
544 .vendor_name = "Roland",
545 .product_name = "U-8",
546 .ifnum = QUIRK_ANY_INTERFACE,
547 .type = QUIRK_COMPOSITE,
548 .data = (const struct snd_usb_audio_quirk[]) {
551 .type = QUIRK_IGNORE_INTERFACE
555 .type = QUIRK_IGNORE_INTERFACE
559 .type = QUIRK_MIDI_FIXED_ENDPOINT,
560 .data = & (const struct snd_usb_midi_endpoint_info) {
561 .out_cables = 0x0005,
572 /* Has ID 0x0099 when not in "Advanced Driver" mode.
573 * The UM-2EX has only one input, but we cannot detect this. */
574 USB_DEVICE(0x0582, 0x0005),
575 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
576 .vendor_name = "EDIROL",
577 .product_name = "UM-2",
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 = 0x0003,
604 USB_DEVICE(0x0582, 0x0007),
605 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
606 .vendor_name = "Roland",
607 .product_name = "SC-8820",
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 = 0x0013,
634 USB_DEVICE(0x0582, 0x0008),
635 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
636 .vendor_name = "Roland",
637 .product_name = "PC-300",
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 = 0x0001,
664 /* has ID 0x009d when not in "Advanced Driver" mode */
665 USB_DEVICE(0x0582, 0x0009),
666 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
667 .vendor_name = "EDIROL",
668 .product_name = "UM-1",
669 .ifnum = QUIRK_ANY_INTERFACE,
670 .type = QUIRK_COMPOSITE,
671 .data = (const struct snd_usb_audio_quirk[]) {
674 .type = QUIRK_IGNORE_INTERFACE
678 .type = QUIRK_IGNORE_INTERFACE
682 .type = QUIRK_MIDI_FIXED_ENDPOINT,
683 .data = & (const struct snd_usb_midi_endpoint_info) {
684 .out_cables = 0x0001,
695 USB_DEVICE(0x0582, 0x000b),
696 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
697 .vendor_name = "Roland",
698 .product_name = "SK-500",
699 .ifnum = QUIRK_ANY_INTERFACE,
700 .type = QUIRK_COMPOSITE,
701 .data = (const struct snd_usb_audio_quirk[]) {
704 .type = QUIRK_IGNORE_INTERFACE
708 .type = QUIRK_IGNORE_INTERFACE
712 .type = QUIRK_MIDI_FIXED_ENDPOINT,
713 .data = & (const struct snd_usb_midi_endpoint_info) {
714 .out_cables = 0x0013,
725 /* thanks to Emiliano Grilli <emillo@libero.it>
726 * for helping researching this data */
727 USB_DEVICE(0x0582, 0x000c),
728 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
729 .vendor_name = "Roland",
730 .product_name = "SC-D70",
731 .ifnum = QUIRK_ANY_INTERFACE,
732 .type = QUIRK_COMPOSITE,
733 .data = (const struct snd_usb_audio_quirk[]) {
736 .type = QUIRK_AUDIO_STANDARD_INTERFACE
740 .type = QUIRK_AUDIO_STANDARD_INTERFACE
744 .type = QUIRK_MIDI_FIXED_ENDPOINT,
745 .data = & (const struct snd_usb_midi_endpoint_info) {
746 .out_cables = 0x0007,
757 * This quirk is for the "Advanced Driver" mode of the Edirol UA-5.
758 * If the advanced mode switch at the back of the unit is off, the
759 * UA-5 has ID 0x0582/0x0011 and is standard compliant (no quirks),
760 * but offers only 16-bit PCM.
761 * In advanced mode, the UA-5 will output S24_3LE samples (two
762 * channels) at the rate indicated on the front switch, including
763 * the 96kHz sample rate.
765 USB_DEVICE(0x0582, 0x0010),
766 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
767 .vendor_name = "EDIROL",
768 .product_name = "UA-5",
769 .ifnum = QUIRK_ANY_INTERFACE,
770 .type = QUIRK_COMPOSITE,
771 .data = (const struct snd_usb_audio_quirk[]) {
774 .type = QUIRK_AUDIO_STANDARD_INTERFACE
778 .type = QUIRK_AUDIO_STANDARD_INTERFACE
787 /* has ID 0x0013 when not in "Advanced Driver" mode */
788 USB_DEVICE(0x0582, 0x0012),
789 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
790 .vendor_name = "Roland",
791 .product_name = "XV-5050",
793 .type = QUIRK_MIDI_FIXED_ENDPOINT,
794 .data = & (const struct snd_usb_midi_endpoint_info) {
795 .out_cables = 0x0001,
801 /* has ID 0x0015 when not in "Advanced Driver" mode */
802 USB_DEVICE(0x0582, 0x0014),
803 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
804 .vendor_name = "EDIROL",
805 .product_name = "UM-880",
807 .type = QUIRK_MIDI_FIXED_ENDPOINT,
808 .data = & (const struct snd_usb_midi_endpoint_info) {
809 .out_cables = 0x01ff,
815 /* has ID 0x0017 when not in "Advanced Driver" mode */
816 USB_DEVICE(0x0582, 0x0016),
817 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
818 .vendor_name = "EDIROL",
819 .product_name = "SD-90",
820 .ifnum = QUIRK_ANY_INTERFACE,
821 .type = QUIRK_COMPOSITE,
822 .data = (const struct snd_usb_audio_quirk[]) {
825 .type = QUIRK_AUDIO_STANDARD_INTERFACE
829 .type = QUIRK_AUDIO_STANDARD_INTERFACE
833 .type = QUIRK_MIDI_FIXED_ENDPOINT,
834 .data = & (const struct snd_usb_midi_endpoint_info) {
835 .out_cables = 0x000f,
846 /* has ID 0x001c when not in "Advanced Driver" mode */
847 USB_DEVICE(0x0582, 0x001b),
848 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
849 .vendor_name = "Roland",
850 .product_name = "MMP-2",
851 .ifnum = QUIRK_ANY_INTERFACE,
852 .type = QUIRK_COMPOSITE,
853 .data = (const struct snd_usb_audio_quirk[]) {
856 .type = QUIRK_IGNORE_INTERFACE
860 .type = QUIRK_IGNORE_INTERFACE
864 .type = QUIRK_MIDI_FIXED_ENDPOINT,
865 .data = & (const struct snd_usb_midi_endpoint_info) {
866 .out_cables = 0x0001,
877 /* has ID 0x001e when not in "Advanced Driver" mode */
878 USB_DEVICE(0x0582, 0x001d),
879 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
880 .vendor_name = "Roland",
881 .product_name = "V-SYNTH",
883 .type = QUIRK_MIDI_FIXED_ENDPOINT,
884 .data = & (const struct snd_usb_midi_endpoint_info) {
885 .out_cables = 0x0001,
891 /* has ID 0x0024 when not in "Advanced Driver" mode */
892 USB_DEVICE(0x0582, 0x0023),
893 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
894 .vendor_name = "EDIROL",
895 .product_name = "UM-550",
897 .type = QUIRK_MIDI_FIXED_ENDPOINT,
898 .data = & (const struct snd_usb_midi_endpoint_info) {
899 .out_cables = 0x003f,
906 * This quirk is for the "Advanced Driver" mode. If off, the UA-20
907 * has ID 0x0026 and is standard compliant, but has only 16-bit PCM
910 USB_DEVICE(0x0582, 0x0025),
911 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
912 .vendor_name = "EDIROL",
913 .product_name = "UA-20",
914 .ifnum = QUIRK_ANY_INTERFACE,
915 .type = QUIRK_COMPOSITE,
916 .data = (const struct snd_usb_audio_quirk[]) {
919 .type = QUIRK_IGNORE_INTERFACE
923 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
924 .data = & (const struct audioformat) {
925 .formats = SNDRV_PCM_FMTBIT_S24_3LE,
933 .rates = SNDRV_PCM_RATE_CONTINUOUS,
940 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
941 .data = & (const struct audioformat) {
942 .formats = SNDRV_PCM_FMTBIT_S24_3LE,
950 .rates = SNDRV_PCM_RATE_CONTINUOUS,
957 .type = QUIRK_MIDI_FIXED_ENDPOINT,
958 .data = & (const struct snd_usb_midi_endpoint_info) {
959 .out_cables = 0x0001,
970 /* has ID 0x0028 when not in "Advanced Driver" mode */
971 USB_DEVICE(0x0582, 0x0027),
972 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
973 .vendor_name = "EDIROL",
974 .product_name = "SD-20",
976 .type = QUIRK_MIDI_FIXED_ENDPOINT,
977 .data = & (const struct snd_usb_midi_endpoint_info) {
978 .out_cables = 0x0003,
984 /* has ID 0x002a when not in "Advanced Driver" mode */
985 USB_DEVICE(0x0582, 0x0029),
986 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
987 .vendor_name = "EDIROL",
988 .product_name = "SD-80",
990 .type = QUIRK_MIDI_FIXED_ENDPOINT,
991 .data = & (const struct snd_usb_midi_endpoint_info) {
992 .out_cables = 0x000f,
998 * This quirk is for the "Advanced" modes of the Edirol UA-700.
999 * If the sample format switch is not in an advanced setting, the
1000 * UA-700 has ID 0x0582/0x002c and is standard compliant (no quirks),
1001 * but offers only 16-bit PCM and no MIDI.
1003 USB_DEVICE_VENDOR_SPEC(0x0582, 0x002b),
1004 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1005 .vendor_name = "EDIROL",
1006 .product_name = "UA-700",
1007 .ifnum = QUIRK_ANY_INTERFACE,
1008 .type = QUIRK_COMPOSITE,
1009 .data = (const struct snd_usb_audio_quirk[]) {
1012 .type = QUIRK_AUDIO_EDIROL_UAXX
1016 .type = QUIRK_AUDIO_EDIROL_UAXX
1020 .type = QUIRK_AUDIO_EDIROL_UAXX
1029 /* has ID 0x002e when not in "Advanced Driver" mode */
1030 USB_DEVICE(0x0582, 0x002d),
1031 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1032 .vendor_name = "Roland",
1033 .product_name = "XV-2020",
1035 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1036 .data = & (const struct snd_usb_midi_endpoint_info) {
1037 .out_cables = 0x0001,
1043 /* has ID 0x0030 when not in "Advanced Driver" mode */
1044 USB_DEVICE(0x0582, 0x002f),
1045 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1046 .vendor_name = "Roland",
1047 .product_name = "VariOS",
1049 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1050 .data = & (const struct snd_usb_midi_endpoint_info) {
1051 .out_cables = 0x0007,
1057 /* has ID 0x0034 when not in "Advanced Driver" mode */
1058 USB_DEVICE(0x0582, 0x0033),
1059 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1060 .vendor_name = "EDIROL",
1061 .product_name = "PCR",
1063 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1064 .data = & (const struct snd_usb_midi_endpoint_info) {
1065 .out_cables = 0x0003,
1072 * Has ID 0x0038 when not in "Advanced Driver" mode;
1073 * later revisions use IDs 0x0054 and 0x00a2.
1075 USB_DEVICE(0x0582, 0x0037),
1076 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1077 .vendor_name = "Roland",
1078 .product_name = "Digital Piano",
1080 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1081 .data = & (const struct snd_usb_midi_endpoint_info) {
1082 .out_cables = 0x0001,
1089 * This quirk is for the "Advanced Driver" mode. If off, the GS-10
1090 * has ID 0x003c and is standard compliant, but has only 16-bit PCM
1093 USB_DEVICE_VENDOR_SPEC(0x0582, 0x003b),
1094 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1095 .vendor_name = "BOSS",
1096 .product_name = "GS-10",
1097 .ifnum = QUIRK_ANY_INTERFACE,
1098 .type = QUIRK_COMPOSITE,
1099 .data = & (const struct snd_usb_audio_quirk[]) {
1102 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1106 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1110 .type = QUIRK_MIDI_STANDARD_INTERFACE
1119 /* has ID 0x0041 when not in "Advanced Driver" mode */
1120 USB_DEVICE(0x0582, 0x0040),
1121 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1122 .vendor_name = "Roland",
1123 .product_name = "GI-20",
1125 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1126 .data = & (const struct snd_usb_midi_endpoint_info) {
1127 .out_cables = 0x0001,
1133 /* has ID 0x0043 when not in "Advanced Driver" mode */
1134 USB_DEVICE(0x0582, 0x0042),
1135 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1136 .vendor_name = "Roland",
1137 .product_name = "RS-70",
1139 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1140 .data = & (const struct snd_usb_midi_endpoint_info) {
1141 .out_cables = 0x0001,
1147 /* has ID 0x0049 when not in "Advanced Driver" mode */
1148 USB_DEVICE(0x0582, 0x0047),
1149 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1150 /* .vendor_name = "EDIROL", */
1151 /* .product_name = "UR-80", */
1152 .ifnum = QUIRK_ANY_INTERFACE,
1153 .type = QUIRK_COMPOSITE,
1154 .data = (const struct snd_usb_audio_quirk[]) {
1155 /* in the 96 kHz modes, only interface 1 is there */
1158 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1162 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1171 /* has ID 0x004a when not in "Advanced Driver" mode */
1172 USB_DEVICE(0x0582, 0x0048),
1173 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1174 /* .vendor_name = "EDIROL", */
1175 /* .product_name = "UR-80", */
1177 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1178 .data = & (const struct snd_usb_midi_endpoint_info) {
1179 .out_cables = 0x0003,
1185 /* has ID 0x004e when not in "Advanced Driver" mode */
1186 USB_DEVICE(0x0582, 0x004c),
1187 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1188 .vendor_name = "EDIROL",
1189 .product_name = "PCR-A",
1190 .ifnum = QUIRK_ANY_INTERFACE,
1191 .type = QUIRK_COMPOSITE,
1192 .data = (const struct snd_usb_audio_quirk[]) {
1195 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1199 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1208 /* has ID 0x004f when not in "Advanced Driver" mode */
1209 USB_DEVICE(0x0582, 0x004d),
1210 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1211 .vendor_name = "EDIROL",
1212 .product_name = "PCR-A",
1214 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1215 .data = & (const struct snd_usb_midi_endpoint_info) {
1216 .out_cables = 0x0003,
1223 * This quirk is for the "Advanced Driver" mode. If off, the UA-3FX
1224 * is standard compliant, but has only 16-bit PCM.
1226 USB_DEVICE(0x0582, 0x0050),
1227 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1228 .vendor_name = "EDIROL",
1229 .product_name = "UA-3FX",
1230 .ifnum = QUIRK_ANY_INTERFACE,
1231 .type = QUIRK_COMPOSITE,
1232 .data = (const struct snd_usb_audio_quirk[]) {
1235 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1239 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1248 USB_DEVICE(0x0582, 0x0052),
1249 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1250 .vendor_name = "EDIROL",
1251 .product_name = "UM-1SX",
1253 .type = QUIRK_MIDI_STANDARD_INTERFACE
1257 USB_DEVICE(0x0582, 0x0060),
1258 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1259 .vendor_name = "Roland",
1260 .product_name = "EXR Series",
1262 .type = QUIRK_MIDI_STANDARD_INTERFACE
1266 /* has ID 0x0066 when not in "Advanced Driver" mode */
1267 USB_DEVICE(0x0582, 0x0064),
1268 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1269 /* .vendor_name = "EDIROL", */
1270 /* .product_name = "PCR-1", */
1271 .ifnum = QUIRK_ANY_INTERFACE,
1272 .type = QUIRK_COMPOSITE,
1273 .data = (const struct snd_usb_audio_quirk[]) {
1276 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1280 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1289 /* has ID 0x0067 when not in "Advanced Driver" mode */
1290 USB_DEVICE(0x0582, 0x0065),
1291 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1292 /* .vendor_name = "EDIROL", */
1293 /* .product_name = "PCR-1", */
1295 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1296 .data = & (const struct snd_usb_midi_endpoint_info) {
1297 .out_cables = 0x0001,
1303 /* has ID 0x006e when not in "Advanced Driver" mode */
1304 USB_DEVICE(0x0582, 0x006d),
1305 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1306 .vendor_name = "Roland",
1307 .product_name = "FANTOM-X",
1309 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1310 .data = & (const struct snd_usb_midi_endpoint_info) {
1311 .out_cables = 0x0001,
1317 * This quirk is for the "Advanced" modes of the Edirol UA-25.
1318 * If the switch is not in an advanced setting, the UA-25 has
1319 * ID 0x0582/0x0073 and is standard compliant (no quirks), but
1320 * offers only 16-bit PCM at 44.1 kHz and no MIDI.
1322 USB_DEVICE_VENDOR_SPEC(0x0582, 0x0074),
1323 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1324 .vendor_name = "EDIROL",
1325 .product_name = "UA-25",
1326 .ifnum = QUIRK_ANY_INTERFACE,
1327 .type = QUIRK_COMPOSITE,
1328 .data = (const struct snd_usb_audio_quirk[]) {
1331 .type = QUIRK_AUDIO_EDIROL_UAXX
1335 .type = QUIRK_AUDIO_EDIROL_UAXX
1339 .type = QUIRK_AUDIO_EDIROL_UAXX
1348 /* has ID 0x0076 when not in "Advanced Driver" mode */
1349 USB_DEVICE(0x0582, 0x0075),
1350 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1351 .vendor_name = "BOSS",
1352 .product_name = "DR-880",
1354 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1355 .data = & (const struct snd_usb_midi_endpoint_info) {
1356 .out_cables = 0x0001,
1362 /* has ID 0x007b when not in "Advanced Driver" mode */
1363 USB_DEVICE_VENDOR_SPEC(0x0582, 0x007a),
1364 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1365 .vendor_name = "Roland",
1366 /* "RD" or "RD-700SX"? */
1368 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1369 .data = & (const struct snd_usb_midi_endpoint_info) {
1370 .out_cables = 0x0003,
1376 /* has ID 0x0081 when not in "Advanced Driver" mode */
1377 USB_DEVICE(0x0582, 0x0080),
1378 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1379 .vendor_name = "Roland",
1380 .product_name = "G-70",
1382 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1383 .data = & (const struct snd_usb_midi_endpoint_info) {
1384 .out_cables = 0x0001,
1390 /* has ID 0x008c when not in "Advanced Driver" mode */
1391 USB_DEVICE(0x0582, 0x008b),
1392 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1393 .vendor_name = "EDIROL",
1394 .product_name = "PC-50",
1396 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1397 .data = & (const struct snd_usb_midi_endpoint_info) {
1398 .out_cables = 0x0001,
1405 * This quirk is for the "Advanced Driver" mode. If off, the UA-4FX
1406 * is standard compliant, but has only 16-bit PCM and no MIDI.
1408 USB_DEVICE(0x0582, 0x00a3),
1409 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1410 .vendor_name = "EDIROL",
1411 .product_name = "UA-4FX",
1412 .ifnum = QUIRK_ANY_INTERFACE,
1413 .type = QUIRK_COMPOSITE,
1414 .data = (const struct snd_usb_audio_quirk[]) {
1417 .type = QUIRK_AUDIO_EDIROL_UAXX
1421 .type = QUIRK_AUDIO_EDIROL_UAXX
1425 .type = QUIRK_AUDIO_EDIROL_UAXX
1435 USB_DEVICE(0x0582, 0x00c4),
1436 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1437 .ifnum = QUIRK_ANY_INTERFACE,
1438 .type = QUIRK_COMPOSITE,
1439 .data = (const struct snd_usb_audio_quirk[]) {
1442 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1446 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1450 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1451 .data = & (const struct snd_usb_midi_endpoint_info) {
1452 .out_cables = 0x0001,
1463 /* Advanced modes of the Edirol UA-25EX.
1464 * For the standard mode, UA-25EX has ID 0582:00e7, which
1465 * offers only 16-bit PCM at 44.1 kHz and no MIDI.
1467 USB_DEVICE_VENDOR_SPEC(0x0582, 0x00e6),
1468 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1469 .vendor_name = "EDIROL",
1470 .product_name = "UA-25EX",
1471 .ifnum = QUIRK_ANY_INTERFACE,
1472 .type = QUIRK_COMPOSITE,
1473 .data = (const struct snd_usb_audio_quirk[]) {
1476 .type = QUIRK_AUDIO_EDIROL_UAXX
1480 .type = QUIRK_AUDIO_EDIROL_UAXX
1484 .type = QUIRK_AUDIO_EDIROL_UAXX
1494 USB_DEVICE_VENDOR_SPEC(0x0582, 0x0108),
1495 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1497 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1498 .data = & (const struct snd_usb_midi_endpoint_info) {
1499 .out_cables = 0x0007,
1506 USB_DEVICE(0x0582, 0x0113),
1507 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1508 .ifnum = QUIRK_ANY_INTERFACE,
1509 .type = QUIRK_COMPOSITE,
1510 .data = (const struct snd_usb_audio_quirk[]) {
1513 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1517 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1521 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1522 .data = & (const struct snd_usb_midi_endpoint_info) {
1523 .out_cables = 0x0001,
1534 /* only 44.1 kHz works at the moment */
1535 USB_DEVICE(0x0582, 0x0120),
1536 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1537 /* .vendor_name = "Roland", */
1538 /* .product_name = "OCTO-CAPTURE", */
1539 .ifnum = QUIRK_ANY_INTERFACE,
1540 .type = QUIRK_COMPOSITE,
1541 .data = (const struct snd_usb_audio_quirk[]) {
1544 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
1545 .data = & (const struct audioformat) {
1546 .formats = SNDRV_PCM_FMTBIT_S32_LE,
1553 .rates = SNDRV_PCM_RATE_44100,
1557 .rate_table = (unsigned int[]) { 44100 }
1562 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
1563 .data = & (const struct audioformat) {
1564 .formats = SNDRV_PCM_FMTBIT_S32_LE,
1571 .rates = SNDRV_PCM_RATE_44100,
1575 .rate_table = (unsigned int[]) { 44100 }
1580 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1581 .data = & (const struct snd_usb_midi_endpoint_info) {
1582 .out_cables = 0x0001,
1588 .type = QUIRK_IGNORE_INTERFACE
1592 .type = QUIRK_IGNORE_INTERFACE
1601 /* only 44.1 kHz works at the moment */
1602 USB_DEVICE(0x0582, 0x012f),
1603 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1604 /* .vendor_name = "Roland", */
1605 /* .product_name = "QUAD-CAPTURE", */
1606 .ifnum = QUIRK_ANY_INTERFACE,
1607 .type = QUIRK_COMPOSITE,
1608 .data = (const struct snd_usb_audio_quirk[]) {
1611 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
1612 .data = & (const struct audioformat) {
1613 .formats = SNDRV_PCM_FMTBIT_S32_LE,
1620 .rates = SNDRV_PCM_RATE_44100,
1624 .rate_table = (unsigned int[]) { 44100 }
1629 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
1630 .data = & (const struct audioformat) {
1631 .formats = SNDRV_PCM_FMTBIT_S32_LE,
1638 .rates = SNDRV_PCM_RATE_44100,
1642 .rate_table = (unsigned int[]) { 44100 }
1647 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1648 .data = & (const struct snd_usb_midi_endpoint_info) {
1649 .out_cables = 0x0001,
1655 .type = QUIRK_IGNORE_INTERFACE
1659 .type = QUIRK_IGNORE_INTERFACE
1668 USB_DEVICE(0x0582, 0x0159),
1669 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1670 /* .vendor_name = "Roland", */
1671 /* .product_name = "UA-22", */
1672 .ifnum = QUIRK_ANY_INTERFACE,
1673 .type = QUIRK_COMPOSITE,
1674 .data = (const struct snd_usb_audio_quirk[]) {
1677 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1681 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1685 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1686 .data = & (const struct snd_usb_midi_endpoint_info) {
1687 .out_cables = 0x0001,
1697 /* this catches most recent vendor-specific Roland devices */
1699 .match_flags = USB_DEVICE_ID_MATCH_VENDOR |
1700 USB_DEVICE_ID_MATCH_INT_CLASS,
1702 .bInterfaceClass = USB_CLASS_VENDOR_SPEC,
1703 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
1704 .ifnum = QUIRK_ANY_INTERFACE,
1705 .type = QUIRK_AUTODETECT
1709 /* Guillemot devices */
1712 * This is for the "Windows Edition" where the external MIDI ports are
1713 * the only MIDI ports; the control data is reported through HID
1714 * interfaces. The "Macintosh Edition" has ID 0xd002 and uses standard
1715 * compliant USB MIDI ports for external MIDI and controls.
1717 USB_DEVICE_VENDOR_SPEC(0x06f8, 0xb000),
1718 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1719 .vendor_name = "Hercules",
1720 .product_name = "DJ Console (WE)",
1722 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1723 .data = & (const struct snd_usb_midi_endpoint_info) {
1724 .out_cables = 0x0001,
1730 /* Midiman/M-Audio devices */
1732 USB_DEVICE_VENDOR_SPEC(0x0763, 0x1002),
1733 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1734 .vendor_name = "M-Audio",
1735 .product_name = "MidiSport 2x2",
1736 .ifnum = QUIRK_ANY_INTERFACE,
1737 .type = QUIRK_MIDI_MIDIMAN,
1738 .data = & (const struct snd_usb_midi_endpoint_info) {
1739 .out_cables = 0x0003,
1745 USB_DEVICE_VENDOR_SPEC(0x0763, 0x1011),
1746 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1747 .vendor_name = "M-Audio",
1748 .product_name = "MidiSport 1x1",
1749 .ifnum = QUIRK_ANY_INTERFACE,
1750 .type = QUIRK_MIDI_MIDIMAN,
1751 .data = & (const struct snd_usb_midi_endpoint_info) {
1752 .out_cables = 0x0001,
1758 USB_DEVICE_VENDOR_SPEC(0x0763, 0x1015),
1759 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1760 .vendor_name = "M-Audio",
1761 .product_name = "Keystation",
1762 .ifnum = QUIRK_ANY_INTERFACE,
1763 .type = QUIRK_MIDI_MIDIMAN,
1764 .data = & (const struct snd_usb_midi_endpoint_info) {
1765 .out_cables = 0x0001,
1771 USB_DEVICE_VENDOR_SPEC(0x0763, 0x1021),
1772 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1773 .vendor_name = "M-Audio",
1774 .product_name = "MidiSport 4x4",
1775 .ifnum = QUIRK_ANY_INTERFACE,
1776 .type = QUIRK_MIDI_MIDIMAN,
1777 .data = & (const struct snd_usb_midi_endpoint_info) {
1778 .out_cables = 0x000f,
1785 * For hardware revision 1.05; in the later revisions (1.10 and
1786 * 1.21), 0x1031 is the ID for the device without firmware.
1787 * Thanks to Olaf Giesbrecht <Olaf_Giesbrecht@yahoo.de>
1789 USB_DEVICE_VER(0x0763, 0x1031, 0x0100, 0x0109),
1790 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1791 .vendor_name = "M-Audio",
1792 .product_name = "MidiSport 8x8",
1793 .ifnum = QUIRK_ANY_INTERFACE,
1794 .type = QUIRK_MIDI_MIDIMAN,
1795 .data = & (const struct snd_usb_midi_endpoint_info) {
1796 .out_cables = 0x01ff,
1802 USB_DEVICE_VENDOR_SPEC(0x0763, 0x1033),
1803 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1804 .vendor_name = "M-Audio",
1805 .product_name = "MidiSport 8x8",
1806 .ifnum = QUIRK_ANY_INTERFACE,
1807 .type = QUIRK_MIDI_MIDIMAN,
1808 .data = & (const struct snd_usb_midi_endpoint_info) {
1809 .out_cables = 0x01ff,
1815 USB_DEVICE_VENDOR_SPEC(0x0763, 0x1041),
1816 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1817 .vendor_name = "M-Audio",
1818 .product_name = "MidiSport 2x4",
1819 .ifnum = QUIRK_ANY_INTERFACE,
1820 .type = QUIRK_MIDI_MIDIMAN,
1821 .data = & (const struct snd_usb_midi_endpoint_info) {
1822 .out_cables = 0x000f,
1828 USB_DEVICE_VENDOR_SPEC(0x0763, 0x2001),
1829 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1830 .vendor_name = "M-Audio",
1831 .product_name = "Quattro",
1832 .ifnum = QUIRK_ANY_INTERFACE,
1833 .type = QUIRK_COMPOSITE,
1834 .data = & (const struct snd_usb_audio_quirk[]) {
1836 * Interfaces 0-2 are "Windows-compatible", 16-bit only,
1837 * and share endpoints with the other interfaces.
1838 * Ignore them. The other interfaces can do 24 bits,
1839 * but captured samples are big-endian (see usbaudio.c).
1843 .type = QUIRK_IGNORE_INTERFACE
1847 .type = QUIRK_IGNORE_INTERFACE
1851 .type = QUIRK_IGNORE_INTERFACE
1855 .type = QUIRK_IGNORE_INTERFACE
1859 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1863 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1867 .type = QUIRK_IGNORE_INTERFACE
1871 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1875 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1879 .type = QUIRK_MIDI_MIDIMAN,
1880 .data = & (const struct snd_usb_midi_endpoint_info) {
1881 .out_cables = 0x0001,
1892 USB_DEVICE_VENDOR_SPEC(0x0763, 0x2003),
1893 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1894 .vendor_name = "M-Audio",
1895 .product_name = "AudioPhile",
1897 .type = QUIRK_MIDI_MIDIMAN,
1898 .data = & (const struct snd_usb_midi_endpoint_info) {
1899 .out_cables = 0x0001,
1905 USB_DEVICE_VENDOR_SPEC(0x0763, 0x2008),
1906 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1907 .vendor_name = "M-Audio",
1908 .product_name = "Ozone",
1910 .type = QUIRK_MIDI_MIDIMAN,
1911 .data = & (const struct snd_usb_midi_endpoint_info) {
1912 .out_cables = 0x0001,
1918 USB_DEVICE_VENDOR_SPEC(0x0763, 0x200d),
1919 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1920 .vendor_name = "M-Audio",
1921 .product_name = "OmniStudio",
1922 .ifnum = QUIRK_ANY_INTERFACE,
1923 .type = QUIRK_COMPOSITE,
1924 .data = & (const struct snd_usb_audio_quirk[]) {
1927 .type = QUIRK_IGNORE_INTERFACE
1931 .type = QUIRK_IGNORE_INTERFACE
1935 .type = QUIRK_IGNORE_INTERFACE
1939 .type = QUIRK_IGNORE_INTERFACE
1943 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1947 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1951 .type = QUIRK_IGNORE_INTERFACE
1955 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1959 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1963 .type = QUIRK_MIDI_MIDIMAN,
1964 .data = & (const struct snd_usb_midi_endpoint_info) {
1965 .out_cables = 0x0001,
1976 USB_DEVICE(0x0763, 0x2019),
1977 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1978 /* .vendor_name = "M-Audio", */
1979 /* .product_name = "Ozone Academic", */
1980 .ifnum = QUIRK_ANY_INTERFACE,
1981 .type = QUIRK_COMPOSITE,
1982 .data = & (const struct snd_usb_audio_quirk[]) {
1985 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1989 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1993 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1997 .type = QUIRK_MIDI_MIDIMAN,
1998 .data = & (const struct snd_usb_midi_endpoint_info) {
1999 .out_cables = 0x0001,
2010 USB_DEVICE_VENDOR_SPEC(0x0763, 0x2030),
2011 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
2012 /* .vendor_name = "M-Audio", */
2013 /* .product_name = "Fast Track C400", */
2014 .ifnum = QUIRK_ANY_INTERFACE,
2015 .type = QUIRK_COMPOSITE,
2016 .data = &(const struct snd_usb_audio_quirk[]) {
2019 .type = QUIRK_AUDIO_STANDARD_MIXER,
2024 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
2025 .data = &(const struct audioformat) {
2026 .formats = SNDRV_PCM_FMTBIT_S24_3LE,
2031 .attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
2034 .rates = SNDRV_PCM_RATE_44100 |
2035 SNDRV_PCM_RATE_48000 |
2036 SNDRV_PCM_RATE_88200 |
2037 SNDRV_PCM_RATE_96000,
2041 .rate_table = (unsigned int[]) {
2042 44100, 48000, 88200, 96000
2050 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
2051 .data = &(const struct audioformat) {
2052 .formats = SNDRV_PCM_FMTBIT_S24_3LE,
2057 .attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
2060 .rates = SNDRV_PCM_RATE_44100 |
2061 SNDRV_PCM_RATE_48000 |
2062 SNDRV_PCM_RATE_88200 |
2063 SNDRV_PCM_RATE_96000,
2067 .rate_table = (unsigned int[]) {
2068 44100, 48000, 88200, 96000
2075 .ifnum = -1 /* Interface = 4 */
2081 USB_DEVICE_VENDOR_SPEC(0x0763, 0x2031),
2082 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
2083 /* .vendor_name = "M-Audio", */
2084 /* .product_name = "Fast Track C600", */
2085 .ifnum = QUIRK_ANY_INTERFACE,
2086 .type = QUIRK_COMPOSITE,
2087 .data = &(const struct snd_usb_audio_quirk[]) {
2090 .type = QUIRK_AUDIO_STANDARD_MIXER,
2095 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
2096 .data = &(const struct audioformat) {
2097 .formats = SNDRV_PCM_FMTBIT_S24_3LE,
2102 .attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
2105 .rates = SNDRV_PCM_RATE_44100 |
2106 SNDRV_PCM_RATE_48000 |
2107 SNDRV_PCM_RATE_88200 |
2108 SNDRV_PCM_RATE_96000,
2112 .rate_table = (unsigned int[]) {
2113 44100, 48000, 88200, 96000
2121 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
2122 .data = &(const struct audioformat) {
2123 .formats = SNDRV_PCM_FMTBIT_S24_3LE,
2128 .attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
2131 .rates = SNDRV_PCM_RATE_44100 |
2132 SNDRV_PCM_RATE_48000 |
2133 SNDRV_PCM_RATE_88200 |
2134 SNDRV_PCM_RATE_96000,
2138 .rate_table = (unsigned int[]) {
2139 44100, 48000, 88200, 96000
2146 .ifnum = -1 /* Interface = 4 */
2152 USB_DEVICE_VENDOR_SPEC(0x0763, 0x2080),
2153 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2154 /* .vendor_name = "M-Audio", */
2155 /* .product_name = "Fast Track Ultra", */
2156 .ifnum = QUIRK_ANY_INTERFACE,
2157 .type = QUIRK_COMPOSITE,
2158 .data = & (const struct snd_usb_audio_quirk[]) {
2161 .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
2189 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
2190 .data = & (const struct audioformat) {
2191 .formats = SNDRV_PCM_FMTBIT_S24_3LE,
2196 .attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
2199 .rates = SNDRV_PCM_RATE_44100 |
2200 SNDRV_PCM_RATE_48000 |
2201 SNDRV_PCM_RATE_88200 |
2202 SNDRV_PCM_RATE_96000,
2206 .rate_table = (unsigned int[]) {
2207 44100, 48000, 88200, 96000
2211 /* interface 3 (MIDI) is standard compliant */
2219 USB_DEVICE_VENDOR_SPEC(0x0763, 0x2081),
2220 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2221 /* .vendor_name = "M-Audio", */
2222 /* .product_name = "Fast Track Ultra 8R", */
2223 .ifnum = QUIRK_ANY_INTERFACE,
2224 .type = QUIRK_COMPOSITE,
2225 .data = & (const struct snd_usb_audio_quirk[]) {
2228 .type = QUIRK_AUDIO_STANDARD_MIXER,
2232 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
2233 .data = & (const struct audioformat) {
2234 .formats = SNDRV_PCM_FMTBIT_S24_3LE,
2239 .attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
2242 .rates = SNDRV_PCM_RATE_44100 |
2243 SNDRV_PCM_RATE_48000 |
2244 SNDRV_PCM_RATE_88200 |
2245 SNDRV_PCM_RATE_96000,
2249 .rate_table = (unsigned int[]) {
2250 44100, 48000, 88200, 96000
2256 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
2257 .data = & (const struct audioformat) {
2258 .formats = SNDRV_PCM_FMTBIT_S24_3LE,
2263 .attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
2266 .rates = SNDRV_PCM_RATE_44100 |
2267 SNDRV_PCM_RATE_48000 |
2268 SNDRV_PCM_RATE_88200 |
2269 SNDRV_PCM_RATE_96000,
2273 .rate_table = (unsigned int[]) {
2274 44100, 48000, 88200, 96000
2278 /* interface 3 (MIDI) is standard compliant */
2288 USB_DEVICE(0x07cf, 0x6801),
2289 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2290 .vendor_name = "Casio",
2291 .product_name = "PL-40R",
2293 .type = QUIRK_MIDI_YAMAHA
2297 /* this ID is used by several devices without a product ID */
2298 USB_DEVICE(0x07cf, 0x6802),
2299 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2300 .vendor_name = "Casio",
2301 .product_name = "Keyboard",
2303 .type = QUIRK_MIDI_YAMAHA
2307 /* Mark of the Unicorn devices */
2309 /* thanks to Robert A. Lerche <ral 'at' msbit.com> */
2310 .match_flags = USB_DEVICE_ID_MATCH_VENDOR |
2311 USB_DEVICE_ID_MATCH_PRODUCT |
2312 USB_DEVICE_ID_MATCH_DEV_SUBCLASS,
2314 .idProduct = 0x0001,
2315 .bDeviceSubClass = 2,
2316 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2317 .vendor_name = "MOTU",
2318 .product_name = "Fastlane",
2319 .ifnum = QUIRK_ANY_INTERFACE,
2320 .type = QUIRK_COMPOSITE,
2321 .data = & (const struct snd_usb_audio_quirk[]) {
2324 .type = QUIRK_MIDI_RAW_BYTES
2328 .type = QUIRK_IGNORE_INTERFACE
2337 /* Emagic devices */
2339 USB_DEVICE(0x086a, 0x0001),
2340 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2341 .vendor_name = "Emagic",
2342 .product_name = "Unitor8",
2344 .type = QUIRK_MIDI_EMAGIC,
2345 .data = & (const struct snd_usb_midi_endpoint_info) {
2346 .out_cables = 0x80ff,
2352 USB_DEVICE(0x086a, 0x0002),
2353 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2354 .vendor_name = "Emagic",
2355 /* .product_name = "AMT8", */
2357 .type = QUIRK_MIDI_EMAGIC,
2358 .data = & (const struct snd_usb_midi_endpoint_info) {
2359 .out_cables = 0x80ff,
2365 USB_DEVICE(0x086a, 0x0003),
2366 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2367 .vendor_name = "Emagic",
2368 /* .product_name = "MT4", */
2370 .type = QUIRK_MIDI_EMAGIC,
2371 .data = & (const struct snd_usb_midi_endpoint_info) {
2372 .out_cables = 0x800f,
2380 USB_DEVICE_VENDOR_SPEC(0x0944, 0x0200),
2381 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2382 .vendor_name = "KORG, Inc.",
2383 /* .product_name = "PANDORA PX5D", */
2385 .type = QUIRK_MIDI_STANDARD_INTERFACE,
2390 USB_DEVICE_VENDOR_SPEC(0x0944, 0x0201),
2391 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2392 .vendor_name = "KORG, Inc.",
2393 /* .product_name = "ToneLab ST", */
2395 .type = QUIRK_MIDI_STANDARD_INTERFACE,
2401 USB_DEVICE(0x09e8, 0x0062),
2402 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2403 .vendor_name = "AKAI",
2404 .product_name = "MPD16",
2406 .type = QUIRK_MIDI_AKAI,
2411 /* Akai MPC Element */
2412 USB_DEVICE(0x09e8, 0x0021),
2413 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2414 .ifnum = QUIRK_ANY_INTERFACE,
2415 .type = QUIRK_COMPOSITE,
2416 .data = & (const struct snd_usb_audio_quirk[]) {
2419 .type = QUIRK_IGNORE_INTERFACE
2423 .type = QUIRK_MIDI_STANDARD_INTERFACE
2432 /* Steinberg devices */
2435 USB_DEVICE_VENDOR_SPEC(0x0a4e, 0x2040),
2436 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2437 .ifnum = QUIRK_ANY_INTERFACE,
2438 .type = QUIRK_COMPOSITE,
2439 .data = & (const struct snd_usb_audio_quirk[]) {
2442 .type = QUIRK_AUDIO_STANDARD_INTERFACE
2446 .type = QUIRK_AUDIO_STANDARD_INTERFACE
2450 .type = QUIRK_AUDIO_STANDARD_INTERFACE
2454 .type = QUIRK_MIDI_FIXED_ENDPOINT,
2455 .data = &(const struct snd_usb_midi_endpoint_info) {
2456 .out_cables = 0x0001,
2468 USB_DEVICE_VENDOR_SPEC(0x0a4e, 0x4040),
2469 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2470 .ifnum = QUIRK_ANY_INTERFACE,
2471 .type = QUIRK_COMPOSITE,
2472 .data = & (const struct snd_usb_audio_quirk[]) {
2475 .type = QUIRK_AUDIO_STANDARD_INTERFACE
2479 .type = QUIRK_AUDIO_STANDARD_INTERFACE
2483 .type = QUIRK_AUDIO_STANDARD_INTERFACE
2487 .type = QUIRK_MIDI_FIXED_ENDPOINT,
2488 .data = &(const struct snd_usb_midi_endpoint_info) {
2489 .out_cables = 0x0001,
2500 /* TerraTec devices */
2502 USB_DEVICE_VENDOR_SPEC(0x0ccd, 0x0012),
2503 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2504 .vendor_name = "TerraTec",
2505 .product_name = "PHASE 26",
2507 .type = QUIRK_MIDI_STANDARD_INTERFACE
2511 USB_DEVICE_VENDOR_SPEC(0x0ccd, 0x0013),
2512 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2513 .vendor_name = "TerraTec",
2514 .product_name = "PHASE 26",
2516 .type = QUIRK_MIDI_STANDARD_INTERFACE
2520 USB_DEVICE_VENDOR_SPEC(0x0ccd, 0x0014),
2521 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2522 .vendor_name = "TerraTec",
2523 .product_name = "PHASE 26",
2525 .type = QUIRK_MIDI_STANDARD_INTERFACE
2529 USB_DEVICE(0x0ccd, 0x0035),
2530 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2531 .vendor_name = "Miditech",
2532 .product_name = "Play'n Roll",
2534 .type = QUIRK_MIDI_CME
2538 /* Novation EMS devices */
2540 USB_DEVICE_VENDOR_SPEC(0x1235, 0x0001),
2541 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2542 .vendor_name = "Novation",
2543 .product_name = "ReMOTE Audio/XStation",
2545 .type = QUIRK_MIDI_NOVATION
2549 USB_DEVICE_VENDOR_SPEC(0x1235, 0x0002),
2550 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2551 .vendor_name = "Novation",
2552 .product_name = "Speedio",
2554 .type = QUIRK_MIDI_NOVATION
2558 USB_DEVICE(0x1235, 0x000a),
2559 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2560 /* .vendor_name = "Novation", */
2561 /* .product_name = "Nocturn", */
2563 .type = QUIRK_MIDI_RAW_BYTES
2567 USB_DEVICE(0x1235, 0x000e),
2568 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2569 /* .vendor_name = "Novation", */
2570 /* .product_name = "Launchpad", */
2572 .type = QUIRK_MIDI_RAW_BYTES
2576 USB_DEVICE(0x1235, 0x0010),
2577 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
2578 .vendor_name = "Focusrite",
2579 .product_name = "Saffire 6 USB",
2580 .ifnum = QUIRK_ANY_INTERFACE,
2581 .type = QUIRK_COMPOSITE,
2582 .data = (const struct snd_usb_audio_quirk[]) {
2585 .type = QUIRK_AUDIO_STANDARD_MIXER,
2589 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
2590 .data = &(const struct audioformat) {
2591 .formats = SNDRV_PCM_FMTBIT_S24_3LE,
2596 .attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
2598 .ep_attr = USB_ENDPOINT_XFER_ISOC,
2600 .maxpacksize = 0x024c,
2601 .rates = SNDRV_PCM_RATE_44100 |
2602 SNDRV_PCM_RATE_48000,
2606 .rate_table = (unsigned int[]) {
2613 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
2614 .data = &(const struct audioformat) {
2615 .formats = SNDRV_PCM_FMTBIT_S24_3LE,
2622 .ep_attr = USB_ENDPOINT_XFER_ISOC,
2624 .maxpacksize = 0x0126,
2625 .rates = SNDRV_PCM_RATE_44100 |
2626 SNDRV_PCM_RATE_48000,
2630 .rate_table = (unsigned int[]) {
2637 .type = QUIRK_MIDI_RAW_BYTES
2646 USB_DEVICE(0x1235, 0x0018),
2647 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2648 .vendor_name = "Novation",
2649 .product_name = "Twitch",
2650 .ifnum = QUIRK_ANY_INTERFACE,
2651 .type = QUIRK_COMPOSITE,
2652 .data = (const struct snd_usb_audio_quirk[]) {
2655 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
2656 .data = & (const struct audioformat) {
2657 .formats = SNDRV_PCM_FMTBIT_S24_3LE,
2662 .attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
2664 .ep_attr = USB_ENDPOINT_XFER_ISOC,
2665 .rates = SNDRV_PCM_RATE_44100 |
2666 SNDRV_PCM_RATE_48000,
2670 .rate_table = (unsigned int[]) {
2677 .type = QUIRK_MIDI_RAW_BYTES
2686 USB_DEVICE_VENDOR_SPEC(0x1235, 0x4661),
2687 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2688 .vendor_name = "Novation",
2689 .product_name = "ReMOTE25",
2691 .type = QUIRK_MIDI_NOVATION
2695 /* Access Music devices */
2697 /* VirusTI Desktop */
2698 USB_DEVICE_VENDOR_SPEC(0x133e, 0x0815),
2699 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
2700 .ifnum = QUIRK_ANY_INTERFACE,
2701 .type = QUIRK_COMPOSITE,
2702 .data = &(const struct snd_usb_audio_quirk[]) {
2705 .type = QUIRK_MIDI_FIXED_ENDPOINT,
2706 .data = &(const struct snd_usb_midi_endpoint_info) {
2707 .out_cables = 0x0003,
2713 .type = QUIRK_IGNORE_INTERFACE
2722 /* Native Instruments MK2 series */
2724 /* Komplete Audio 6 */
2725 .match_flags = USB_DEVICE_ID_MATCH_DEVICE,
2727 .idProduct = 0x1000,
2730 /* Traktor Audio 6 */
2731 .match_flags = USB_DEVICE_ID_MATCH_DEVICE,
2733 .idProduct = 0x1010,
2736 /* Traktor Audio 10 */
2737 .match_flags = USB_DEVICE_ID_MATCH_DEVICE,
2739 .idProduct = 0x1020,
2742 /* QinHeng devices */
2744 USB_DEVICE(0x1a86, 0x752d),
2745 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
2746 .vendor_name = "QinHeng",
2747 .product_name = "CH345",
2749 .type = QUIRK_MIDI_CH345
2753 /* KeithMcMillen Stringport */
2755 USB_DEVICE(0x1f38, 0x0001),
2756 .bInterfaceClass = USB_CLASS_AUDIO,
2759 /* Miditech devices */
2761 USB_DEVICE(0x4752, 0x0011),
2762 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2763 .vendor_name = "Miditech",
2764 .product_name = "Midistart-2",
2766 .type = QUIRK_MIDI_CME
2770 /* Central Music devices */
2772 /* this ID used by both Miditech MidiStudio-2 and CME UF-x */
2773 USB_DEVICE(0x7104, 0x2202),
2774 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2776 .type = QUIRK_MIDI_CME
2781 * Auvitek au0828 devices with audio interface.
2782 * This should be kept in sync with drivers/media/usb/au0828/au0828-cards.c
2783 * Please notice that some drivers are DVB only, and don't need to be
2784 * here. That's the case, for example, of DVICO_FUSIONHDTV7.
2787 #define AU0828_DEVICE(vid, pid, vname, pname) { \
2788 USB_AUDIO_DEVICE(vid, pid), \
2789 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) { \
2790 .vendor_name = vname, \
2791 .product_name = pname, \
2792 .ifnum = QUIRK_ANY_INTERFACE, \
2793 .type = QUIRK_AUDIO_ALIGN_TRANSFER, \
2794 .shares_media_device = 1, \
2798 AU0828_DEVICE(0x2040, 0x7200, "Hauppauge", "HVR-950Q"),
2799 AU0828_DEVICE(0x2040, 0x7240, "Hauppauge", "HVR-850"),
2800 AU0828_DEVICE(0x2040, 0x7210, "Hauppauge", "HVR-950Q"),
2801 AU0828_DEVICE(0x2040, 0x7217, "Hauppauge", "HVR-950Q"),
2802 AU0828_DEVICE(0x2040, 0x721b, "Hauppauge", "HVR-950Q"),
2803 AU0828_DEVICE(0x2040, 0x721e, "Hauppauge", "HVR-950Q"),
2804 AU0828_DEVICE(0x2040, 0x721f, "Hauppauge", "HVR-950Q"),
2805 AU0828_DEVICE(0x2040, 0x7280, "Hauppauge", "HVR-950Q"),
2806 AU0828_DEVICE(0x0fd9, 0x0008, "Hauppauge", "HVR-950Q"),
2807 AU0828_DEVICE(0x2040, 0x7201, "Hauppauge", "HVR-950Q-MXL"),
2808 AU0828_DEVICE(0x2040, 0x7211, "Hauppauge", "HVR-950Q-MXL"),
2809 AU0828_DEVICE(0x2040, 0x7281, "Hauppauge", "HVR-950Q-MXL"),
2810 AU0828_DEVICE(0x05e1, 0x0480, "Hauppauge", "Woodbury"),
2811 AU0828_DEVICE(0x2040, 0x8200, "Hauppauge", "Woodbury"),
2812 AU0828_DEVICE(0x2040, 0x7260, "Hauppauge", "HVR-950Q"),
2813 AU0828_DEVICE(0x2040, 0x7213, "Hauppauge", "HVR-950Q"),
2814 AU0828_DEVICE(0x2040, 0x7270, "Hauppauge", "HVR-950Q"),
2816 /* Syntek STK1160 */
2818 USB_AUDIO_DEVICE(0x05e1, 0x0408),
2819 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
2820 .vendor_name = "Syntek",
2821 .product_name = "STK1160",
2822 .ifnum = QUIRK_ANY_INTERFACE,
2823 .type = QUIRK_AUDIO_ALIGN_TRANSFER
2827 /* Digidesign Mbox */
2829 /* Thanks to Clemens Ladisch <clemens@ladisch.de> */
2830 USB_DEVICE(0x0dba, 0x1000),
2831 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
2832 .vendor_name = "Digidesign",
2833 .product_name = "MBox",
2834 .ifnum = QUIRK_ANY_INTERFACE,
2835 .type = QUIRK_COMPOSITE,
2836 .data = (const struct snd_usb_audio_quirk[]){
2839 .type = QUIRK_AUDIO_STANDARD_MIXER,
2843 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
2844 .data = &(const struct audioformat) {
2845 .formats = SNDRV_PCM_FMTBIT_S24_3BE,
2852 .ep_attr = USB_ENDPOINT_XFER_ISOC |
2853 USB_ENDPOINT_SYNC_SYNC,
2854 .maxpacksize = 0x130,
2855 .rates = SNDRV_PCM_RATE_48000,
2859 .rate_table = (unsigned int[]) {
2866 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
2867 .data = &(const struct audioformat) {
2868 .formats = SNDRV_PCM_FMTBIT_S24_3BE,
2875 .ep_attr = USB_ENDPOINT_XFER_ISOC |
2876 USB_ENDPOINT_SYNC_ASYNC,
2877 .maxpacksize = 0x130,
2878 .rates = SNDRV_PCM_RATE_48000,
2882 .rate_table = (unsigned int[]) {
2894 /* DIGIDESIGN MBOX 2 */
2896 USB_DEVICE(0x0dba, 0x3000),
2897 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
2898 .vendor_name = "Digidesign",
2899 .product_name = "Mbox 2",
2900 .ifnum = QUIRK_ANY_INTERFACE,
2901 .type = QUIRK_COMPOSITE,
2902 .data = (const struct snd_usb_audio_quirk[]) {
2905 .type = QUIRK_IGNORE_INTERFACE
2909 .type = QUIRK_IGNORE_INTERFACE
2913 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
2914 .data = &(const struct audioformat) {
2915 .formats = SNDRV_PCM_FMTBIT_S24_3BE,
2922 .ep_attr = USB_ENDPOINT_SYNC_ASYNC,
2923 .rates = SNDRV_PCM_RATE_48000,
2927 .rate_table = (unsigned int[]) {
2934 .type = QUIRK_IGNORE_INTERFACE
2938 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
2939 .data = &(const struct audioformat) {
2940 .formats = SNDRV_PCM_FMTBIT_S24_3BE,
2945 .attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
2947 .ep_attr = USB_ENDPOINT_SYNC_SYNC,
2948 .rates = SNDRV_PCM_RATE_48000,
2952 .rate_table = (unsigned int[]) {
2959 .type = QUIRK_IGNORE_INTERFACE
2963 .type = QUIRK_MIDI_MIDIMAN,
2964 .data = &(const struct snd_usb_midi_endpoint_info) {
2966 .out_cables = 0x0001,
2968 .in_interval = 0x01,
2979 /* Tascam US122 MKII - playback-only support */
2980 .match_flags = USB_DEVICE_ID_MATCH_DEVICE,
2982 .idProduct = 0x8021,
2983 .bInterfaceClass = USB_CLASS_AUDIO,
2984 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
2985 .vendor_name = "TASCAM",
2986 .product_name = "US122 MKII",
2987 .ifnum = QUIRK_ANY_INTERFACE,
2988 .type = QUIRK_COMPOSITE,
2989 .data = (const struct snd_usb_audio_quirk[]) {
2992 .type = QUIRK_IGNORE_INTERFACE
2996 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
2997 .data = &(const struct audioformat) {
2998 .formats = SNDRV_PCM_FMTBIT_S24_3LE,
3003 .attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
3005 .ep_attr = USB_ENDPOINT_XFER_ISOC,
3006 .rates = SNDRV_PCM_RATE_44100 |
3007 SNDRV_PCM_RATE_48000 |
3008 SNDRV_PCM_RATE_88200 |
3009 SNDRV_PCM_RATE_96000,
3013 .rate_table = (unsigned int[]) {
3014 44100, 48000, 88200, 96000
3025 /* Microsoft XboxLive Headset/Xbox Communicator */
3027 USB_DEVICE(0x045e, 0x0283),
3028 .bInterfaceClass = USB_CLASS_PER_INTERFACE,
3029 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
3030 .vendor_name = "Microsoft",
3031 .product_name = "XboxLive Headset/Xbox Communicator",
3032 .ifnum = QUIRK_ANY_INTERFACE,
3033 .type = QUIRK_COMPOSITE,
3034 .data = &(const struct snd_usb_audio_quirk[]) {
3038 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
3039 .data = &(const struct audioformat) {
3040 .formats = SNDRV_PCM_FMTBIT_S16_LE,
3048 .rates = SNDRV_PCM_RATE_CONTINUOUS,
3056 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
3057 .data = &(const struct audioformat) {
3058 .formats = SNDRV_PCM_FMTBIT_S16_LE,
3066 .rates = SNDRV_PCM_RATE_CONTINUOUS,
3080 USB_DEVICE(0x200c, 0x100b),
3081 .bInterfaceClass = USB_CLASS_PER_INTERFACE,
3082 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
3083 .ifnum = QUIRK_ANY_INTERFACE,
3084 .type = QUIRK_COMPOSITE,
3085 .data = &(const struct snd_usb_audio_quirk[]) {
3088 .type = QUIRK_AUDIO_STANDARD_MIXER,
3092 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
3093 .data = &(const struct audioformat) {
3094 .formats = SNDRV_PCM_FMTBIT_S24_3LE,
3099 .attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
3101 .ep_attr = USB_ENDPOINT_SYNC_ADAPTIVE,
3102 .rates = SNDRV_PCM_RATE_44100 |
3103 SNDRV_PCM_RATE_48000,
3107 .rate_table = (unsigned int[]) {
3121 * ZOOM R16/24 in audio interface mode.
3122 * Playback requires an extra four byte LE length indicator
3123 * at the start of each isochronous packet. This quirk is
3124 * enabled in create_standard_audio_quirk().
3126 USB_DEVICE(0x1686, 0x00dd),
3127 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
3128 .ifnum = QUIRK_ANY_INTERFACE,
3129 .type = QUIRK_COMPOSITE,
3130 .data = (const struct snd_usb_audio_quirk[]) {
3134 .type = QUIRK_AUDIO_STANDARD_INTERFACE,
3139 .type = QUIRK_AUDIO_STANDARD_INTERFACE,
3144 .type = QUIRK_MIDI_STANDARD_INTERFACE
3155 * Some USB MIDI devices don't have an audio control interface,
3156 * so we have to grab MIDI streaming interfaces here.
3158 .match_flags = USB_DEVICE_ID_MATCH_INT_CLASS |
3159 USB_DEVICE_ID_MATCH_INT_SUBCLASS,
3160 .bInterfaceClass = USB_CLASS_AUDIO,
3161 .bInterfaceSubClass = USB_SUBCLASS_MIDISTREAMING,
3162 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
3163 .ifnum = QUIRK_ANY_INTERFACE,
3164 .type = QUIRK_MIDI_STANDARD_INTERFACE
3168 /* disabled due to regression for other devices;
3169 * see https://bugzilla.kernel.org/show_bug.cgi?id=199905
3174 * Nura's first gen headphones use Cambridge Silicon Radio's vendor
3175 * ID, but it looks like the product ID actually is only for Nura.
3176 * The capture interface does not work at all (even on Windows),
3177 * and only the 48 kHz sample rate works for the playback interface.
3179 USB_DEVICE(0x0a12, 0x1243),
3180 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
3181 .ifnum = QUIRK_ANY_INTERFACE,
3182 .type = QUIRK_COMPOSITE,
3183 .data = (const struct snd_usb_audio_quirk[]) {
3186 .type = QUIRK_AUDIO_STANDARD_MIXER,
3191 .type = QUIRK_IGNORE_INTERFACE,
3196 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
3197 .data = &(const struct audioformat) {
3198 .formats = SNDRV_PCM_FMTBIT_S16_LE,
3203 .attributes = UAC_EP_CS_ATTR_FILL_MAX |
3204 UAC_EP_CS_ATTR_SAMPLE_RATE,
3206 .ep_attr = USB_ENDPOINT_XFER_ISOC,
3207 .rates = SNDRV_PCM_RATE_48000,
3211 .rate_table = (unsigned int[]) {
3222 #endif /* disabled */
3226 * Bower's & Wilkins PX headphones only support the 48 kHz sample rate
3227 * even though it advertises more. The capture interface doesn't work
3230 USB_DEVICE(0x19b5, 0x0021),
3231 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
3232 .ifnum = QUIRK_ANY_INTERFACE,
3233 .type = QUIRK_COMPOSITE,
3234 .data = (const struct snd_usb_audio_quirk[]) {
3237 .type = QUIRK_AUDIO_STANDARD_MIXER,
3242 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
3243 .data = &(const struct audioformat) {
3244 .formats = SNDRV_PCM_FMTBIT_S16_LE,
3249 .attributes = UAC_EP_CS_ATTR_FILL_MAX |
3250 UAC_EP_CS_ATTR_SAMPLE_RATE,
3252 .ep_attr = USB_ENDPOINT_XFER_ISOC,
3253 .rates = SNDRV_PCM_RATE_48000,
3257 .rate_table = (unsigned int[]) {
3268 /* Dell WD19 Dock */
3270 USB_DEVICE(0x0bda, 0x402e),
3271 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
3272 .ifnum = QUIRK_ANY_INTERFACE,
3273 .type = QUIRK_SETUP_FMT_AFTER_RESUME
3276 /* MOTU Microbook II */
3278 USB_DEVICE_VENDOR_SPEC(0x07fd, 0x0004),
3279 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
3280 .vendor_name = "MOTU",
3281 .product_name = "MicroBookII",
3282 .ifnum = QUIRK_ANY_INTERFACE,
3283 .type = QUIRK_COMPOSITE,
3284 .data = (const struct snd_usb_audio_quirk[]) {
3287 .type = QUIRK_AUDIO_STANDARD_MIXER,
3291 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
3292 .data = &(const struct audioformat) {
3293 .formats = SNDRV_PCM_FMTBIT_S24_3BE,
3300 .rates = SNDRV_PCM_RATE_96000,
3301 .ep_attr = USB_ENDPOINT_XFER_ISOC |
3302 USB_ENDPOINT_SYNC_ASYNC,
3306 .maxpacksize = 0x00d8,
3307 .rate_table = (unsigned int[]) {
3314 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
3315 .data = &(const struct audioformat) {
3316 .formats = SNDRV_PCM_FMTBIT_S24_3BE,
3323 .rates = SNDRV_PCM_RATE_96000,
3324 .ep_attr = USB_ENDPOINT_XFER_ISOC |
3325 USB_ENDPOINT_SYNC_ASYNC,
3329 .maxpacksize = 0x0120,
3330 .rate_table = (unsigned int[]) {
3343 * PIONEER DJ DDJ-SX3
3344 * PCM is 12 channels out, 10 channels in @ 44.1 fixed
3345 * interface 0, vendor class alt setting 1 for endpoints 5 and 0x86
3346 * The feedback for the output is the input.
3348 USB_DEVICE_VENDOR_SPEC(0x2b73, 0x0023),
3349 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
3350 .ifnum = QUIRK_ANY_INTERFACE,
3351 .type = QUIRK_COMPOSITE,
3352 .data = (const struct snd_usb_audio_quirk[]) {
3355 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
3356 .data = &(const struct audioformat) {
3357 .formats = SNDRV_PCM_FMTBIT_S32_LE,
3363 .ep_attr = USB_ENDPOINT_XFER_ISOC|
3364 USB_ENDPOINT_SYNC_ASYNC,
3365 .rates = SNDRV_PCM_RATE_44100,
3369 .rate_table = (unsigned int[]) { 44100 }
3374 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
3375 .data = &(const struct audioformat) {
3376 .formats = SNDRV_PCM_FMTBIT_S32_LE,
3382 .ep_attr = USB_ENDPOINT_XFER_ISOC|
3383 USB_ENDPOINT_SYNC_ASYNC|
3384 USB_ENDPOINT_USAGE_IMPLICIT_FB,
3385 .rates = SNDRV_PCM_RATE_44100,
3389 .rate_table = (unsigned int[]) { 44100 }
3400 * Pioneer DJ DJM-250MK2
3401 * PCM is 8 channels out @ 48 fixed (endpoints 0x01).
3402 * The output from computer to the mixer is usable.
3404 * The input (phono or line to computer) is not working.
3405 * It should be at endpoint 0x82 and probably also 8 channels,
3406 * but it seems that it works only with Pioneer proprietary software.
3407 * Even on officially supported OS, the Audacity was unable to record
3408 * and Mixxx to recognize the control vinyls.
3410 USB_DEVICE_VENDOR_SPEC(0x2b73, 0x0017),
3411 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
3412 .ifnum = QUIRK_ANY_INTERFACE,
3413 .type = QUIRK_COMPOSITE,
3414 .data = (const struct snd_usb_audio_quirk[]) {
3417 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
3418 .data = &(const struct audioformat) {
3419 .formats = SNDRV_PCM_FMTBIT_S24_3LE,
3420 .channels = 8, // outputs
3425 .ep_attr = USB_ENDPOINT_XFER_ISOC|
3426 USB_ENDPOINT_SYNC_ASYNC,
3427 .rates = SNDRV_PCM_RATE_48000,
3431 .rate_table = (unsigned int[]) { 48000 }
3443 * PCM is 4 channels out, 2 dummy channels in @ 44.1 fixed
3444 * The feedback for the output is the dummy input.
3446 USB_DEVICE_VENDOR_SPEC(0x2b73, 0x000e),
3447 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
3448 .ifnum = QUIRK_ANY_INTERFACE,
3449 .type = QUIRK_COMPOSITE,
3450 .data = (const struct snd_usb_audio_quirk[]) {
3453 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
3454 .data = &(const struct audioformat) {
3455 .formats = SNDRV_PCM_FMTBIT_S24_3LE,
3461 .ep_attr = USB_ENDPOINT_XFER_ISOC|
3462 USB_ENDPOINT_SYNC_ASYNC,
3463 .rates = SNDRV_PCM_RATE_44100,
3467 .rate_table = (unsigned int[]) { 44100 }
3472 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
3473 .data = &(const struct audioformat) {
3474 .formats = SNDRV_PCM_FMTBIT_S24_3LE,
3480 .ep_attr = USB_ENDPOINT_XFER_ISOC|
3481 USB_ENDPOINT_SYNC_ASYNC|
3482 USB_ENDPOINT_USAGE_IMPLICIT_FB,
3483 .rates = SNDRV_PCM_RATE_44100,
3487 .rate_table = (unsigned int[]) { 44100 }
3499 * Pioneer DJ DJM-900NXS2
3500 * 10 channels playback & 12 channels capture @ 44.1/48/96kHz S24LE
3502 USB_DEVICE_VENDOR_SPEC(0x2b73, 0x000a),
3503 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
3504 .ifnum = QUIRK_ANY_INTERFACE,
3505 .type = QUIRK_COMPOSITE,
3506 .data = (const struct snd_usb_audio_quirk[]) {
3509 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
3510 .data = &(const struct audioformat) {
3511 .formats = SNDRV_PCM_FMTBIT_S24_3LE,
3517 .ep_attr = USB_ENDPOINT_XFER_ISOC|
3518 USB_ENDPOINT_SYNC_ASYNC,
3519 .rates = SNDRV_PCM_RATE_44100|
3520 SNDRV_PCM_RATE_48000|
3521 SNDRV_PCM_RATE_96000,
3525 .rate_table = (unsigned int[]) {
3532 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
3533 .data = &(const struct audioformat) {
3534 .formats = SNDRV_PCM_FMTBIT_S24_3LE,
3540 .ep_attr = USB_ENDPOINT_XFER_ISOC|
3541 USB_ENDPOINT_SYNC_ASYNC|
3542 USB_ENDPOINT_USAGE_IMPLICIT_FB,
3543 .rates = SNDRV_PCM_RATE_44100|
3544 SNDRV_PCM_RATE_48000|
3545 SNDRV_PCM_RATE_96000,
3549 .rate_table = (unsigned int[]) {
3562 * MacroSilicon MS2109 based HDMI capture cards
3564 * These claim 96kHz 1ch in the descriptors, but are actually 48kHz 2ch.
3565 * They also need QUIRK_AUDIO_ALIGN_TRANSFER, which makes one wonder if
3566 * they pretend to be 96kHz mono as a workaround for stereo being broken
3569 * They also have an issue with initial stream alignment that causes the
3570 * channels to be swapped and out of phase, which is dealt with in quirks.c.
3573 USB_AUDIO_DEVICE(0x534d, 0x2109),
3574 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
3575 .vendor_name = "MacroSilicon",
3576 .product_name = "MS2109",
3577 .ifnum = QUIRK_ANY_INTERFACE,
3578 .type = QUIRK_COMPOSITE,
3579 .data = &(const struct snd_usb_audio_quirk[]) {
3582 .type = QUIRK_AUDIO_ALIGN_TRANSFER,
3586 .type = QUIRK_AUDIO_STANDARD_MIXER,
3590 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
3591 .data = &(const struct audioformat) {
3592 .formats = SNDRV_PCM_FMTBIT_S16_LE,
3599 .ep_attr = USB_ENDPOINT_XFER_ISOC |
3600 USB_ENDPOINT_SYNC_ASYNC,
3601 .rates = SNDRV_PCM_RATE_CONTINUOUS,
3613 #undef USB_DEVICE_VENDOR_SPEC
3614 #undef USB_AUDIO_DEVICE