2 * ALSA USB Audio Driver
4 * Copyright (c) 2002 by Takashi Iwai <tiwai@suse.de>,
5 * Clemens Ladisch <clemens@ladisch.de>
8 * This program is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License as published by
10 * the Free Software Foundation; either version 2 of the License, or
11 * (at your option) any later version.
13 * This program is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 * GNU General Public License for more details.
18 * You should have received a copy of the GNU General Public License
19 * along with this program; if not, write to the Free Software
20 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
24 * The contents of this file are part of the driver's id_table.
26 * In a perfect world, this file would be empty.
30 * Use this for devices where other interfaces are standard compliant,
31 * to prevent the quirk being applied to those interfaces. (To work with
32 * hotplugging, bDeviceClass must be set to USB_CLASS_PER_INTERFACE.)
34 #define USB_DEVICE_VENDOR_SPEC(vend, prod) \
35 .match_flags = USB_DEVICE_ID_MATCH_VENDOR | \
36 USB_DEVICE_ID_MATCH_PRODUCT | \
37 USB_DEVICE_ID_MATCH_INT_CLASS, \
40 .bInterfaceClass = USB_CLASS_VENDOR_SPEC
44 USB_DEVICE(0x0403, 0xb8d8),
45 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
46 /* .vendor_name = "STARR LABS", */
47 /* .product_name = "Starr Labs MIDI USB device", */
49 .type = QUIRK_MIDI_FTDI
55 USB_DEVICE(0x041e, 0x0005),
56 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
58 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
59 .data = &(const struct audioformat) {
60 .formats = SNDRV_PCM_FMTBIT_S16_LE,
66 .ep_attr = USB_ENDPOINT_XFER_ISOC,
68 .rates = SNDRV_PCM_RATE_CONTINUOUS,
75 /* Creative/Toshiba Multimedia Center SB-0500 */
77 USB_DEVICE(0x041e, 0x3048),
78 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
79 .vendor_name = "Toshiba",
80 .product_name = "SB-0500",
81 .ifnum = QUIRK_NO_INTERFACE
85 /* Creative/E-Mu devices */
87 USB_DEVICE(0x041e, 0x3010),
88 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
89 .vendor_name = "Creative Labs",
90 .product_name = "Sound Blaster MP3+",
91 .ifnum = QUIRK_NO_INTERFACE
96 .match_flags = USB_DEVICE_ID_MATCH_DEVICE,
99 .bInterfaceClass = USB_CLASS_AUDIO,
103 .match_flags = USB_DEVICE_ID_MATCH_DEVICE,
106 .bInterfaceClass = USB_CLASS_AUDIO,
109 /* E-Mu Tracker Pre */
110 .match_flags = USB_DEVICE_ID_MATCH_DEVICE,
113 .bInterfaceClass = USB_CLASS_AUDIO,
117 .match_flags = USB_DEVICE_ID_MATCH_DEVICE,
120 .bInterfaceClass = USB_CLASS_AUDIO,
125 * When not ignored, causes instability issues for some users, forcing them to
126 * blacklist the entire module.
129 USB_DEVICE(0x0424, 0xb832),
130 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
131 .vendor_name = "Standard Microsystems Corp.",
132 .product_name = "HP Wireless Audio",
133 .ifnum = QUIRK_ANY_INTERFACE,
134 .type = QUIRK_COMPOSITE,
135 .data = (const struct snd_usb_audio_quirk[]) {
139 .type = QUIRK_IGNORE_INTERFACE,
144 .type = QUIRK_IGNORE_INTERFACE,
149 .type = QUIRK_IGNORE_INTERFACE,
151 /* HID Device, .ifnum = 3 */
160 * Logitech QuickCam: bDeviceClass is vendor-specific, so generic interface
161 * class matches do not take effect without an explicit ID match.
164 .match_flags = USB_DEVICE_ID_MATCH_DEVICE |
165 USB_DEVICE_ID_MATCH_INT_CLASS |
166 USB_DEVICE_ID_MATCH_INT_SUBCLASS,
169 .bInterfaceClass = USB_CLASS_AUDIO,
170 .bInterfaceSubClass = USB_SUBCLASS_AUDIOCONTROL
173 .match_flags = USB_DEVICE_ID_MATCH_DEVICE |
174 USB_DEVICE_ID_MATCH_INT_CLASS |
175 USB_DEVICE_ID_MATCH_INT_SUBCLASS,
178 .bInterfaceClass = USB_CLASS_AUDIO,
179 .bInterfaceSubClass = USB_SUBCLASS_AUDIOCONTROL
182 .match_flags = USB_DEVICE_ID_MATCH_DEVICE |
183 USB_DEVICE_ID_MATCH_INT_CLASS |
184 USB_DEVICE_ID_MATCH_INT_SUBCLASS,
187 .bInterfaceClass = USB_CLASS_AUDIO,
188 .bInterfaceSubClass = USB_SUBCLASS_AUDIOCONTROL
191 .match_flags = USB_DEVICE_ID_MATCH_DEVICE |
192 USB_DEVICE_ID_MATCH_INT_CLASS |
193 USB_DEVICE_ID_MATCH_INT_SUBCLASS,
196 .bInterfaceClass = USB_CLASS_AUDIO,
197 .bInterfaceSubClass = USB_SUBCLASS_AUDIOCONTROL
200 .match_flags = USB_DEVICE_ID_MATCH_DEVICE |
201 USB_DEVICE_ID_MATCH_INT_CLASS |
202 USB_DEVICE_ID_MATCH_INT_SUBCLASS,
205 .bInterfaceClass = USB_CLASS_AUDIO,
206 .bInterfaceSubClass = USB_SUBCLASS_AUDIOCONTROL
209 .match_flags = USB_DEVICE_ID_MATCH_DEVICE |
210 USB_DEVICE_ID_MATCH_INT_CLASS |
211 USB_DEVICE_ID_MATCH_INT_SUBCLASS,
214 .bInterfaceClass = USB_CLASS_AUDIO,
215 .bInterfaceSubClass = USB_SUBCLASS_AUDIOCONTROL
218 .match_flags = USB_DEVICE_ID_MATCH_DEVICE |
219 USB_DEVICE_ID_MATCH_INT_CLASS |
220 USB_DEVICE_ID_MATCH_INT_SUBCLASS,
223 .bInterfaceClass = USB_CLASS_AUDIO,
224 .bInterfaceSubClass = USB_SUBCLASS_AUDIOCONTROL,
225 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
226 .vendor_name = "Logitech, Inc.",
227 .product_name = "QuickCam Pro 9000",
228 .ifnum = QUIRK_NO_INTERFACE
236 #define YAMAHA_DEVICE(id, name) { \
237 USB_DEVICE(0x0499, id), \
238 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { \
239 .vendor_name = "Yamaha", \
240 .product_name = name, \
241 .ifnum = QUIRK_ANY_INTERFACE, \
242 .type = QUIRK_MIDI_YAMAHA \
245 #define YAMAHA_INTERFACE(id, intf, name) { \
246 USB_DEVICE_VENDOR_SPEC(0x0499, id), \
247 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { \
248 .vendor_name = "Yamaha", \
249 .product_name = name, \
251 .type = QUIRK_MIDI_YAMAHA \
254 YAMAHA_DEVICE(0x1000, "UX256"),
255 YAMAHA_DEVICE(0x1001, "MU1000"),
256 YAMAHA_DEVICE(0x1002, "MU2000"),
257 YAMAHA_DEVICE(0x1003, "MU500"),
258 YAMAHA_INTERFACE(0x1004, 3, "UW500"),
259 YAMAHA_DEVICE(0x1005, "MOTIF6"),
260 YAMAHA_DEVICE(0x1006, "MOTIF7"),
261 YAMAHA_DEVICE(0x1007, "MOTIF8"),
262 YAMAHA_DEVICE(0x1008, "UX96"),
263 YAMAHA_DEVICE(0x1009, "UX16"),
264 YAMAHA_INTERFACE(0x100a, 3, "EOS BX"),
265 YAMAHA_DEVICE(0x100c, "UC-MX"),
266 YAMAHA_DEVICE(0x100d, "UC-KX"),
267 YAMAHA_DEVICE(0x100e, "S08"),
268 YAMAHA_DEVICE(0x100f, "CLP-150"),
269 YAMAHA_DEVICE(0x1010, "CLP-170"),
270 YAMAHA_DEVICE(0x1011, "P-250"),
271 YAMAHA_DEVICE(0x1012, "TYROS"),
272 YAMAHA_DEVICE(0x1013, "PF-500"),
273 YAMAHA_DEVICE(0x1014, "S90"),
274 YAMAHA_DEVICE(0x1015, "MOTIF-R"),
275 YAMAHA_DEVICE(0x1016, "MDP-5"),
276 YAMAHA_DEVICE(0x1017, "CVP-204"),
277 YAMAHA_DEVICE(0x1018, "CVP-206"),
278 YAMAHA_DEVICE(0x1019, "CVP-208"),
279 YAMAHA_DEVICE(0x101a, "CVP-210"),
280 YAMAHA_DEVICE(0x101b, "PSR-1100"),
281 YAMAHA_DEVICE(0x101c, "PSR-2100"),
282 YAMAHA_DEVICE(0x101d, "CLP-175"),
283 YAMAHA_DEVICE(0x101e, "PSR-K1"),
284 YAMAHA_DEVICE(0x101f, "EZ-J24"),
285 YAMAHA_DEVICE(0x1020, "EZ-250i"),
286 YAMAHA_DEVICE(0x1021, "MOTIF ES 6"),
287 YAMAHA_DEVICE(0x1022, "MOTIF ES 7"),
288 YAMAHA_DEVICE(0x1023, "MOTIF ES 8"),
289 YAMAHA_DEVICE(0x1024, "CVP-301"),
290 YAMAHA_DEVICE(0x1025, "CVP-303"),
291 YAMAHA_DEVICE(0x1026, "CVP-305"),
292 YAMAHA_DEVICE(0x1027, "CVP-307"),
293 YAMAHA_DEVICE(0x1028, "CVP-309"),
294 YAMAHA_DEVICE(0x1029, "CVP-309GP"),
295 YAMAHA_DEVICE(0x102a, "PSR-1500"),
296 YAMAHA_DEVICE(0x102b, "PSR-3000"),
297 YAMAHA_DEVICE(0x102e, "ELS-01/01C"),
298 YAMAHA_DEVICE(0x1030, "PSR-295/293"),
299 YAMAHA_DEVICE(0x1031, "DGX-205/203"),
300 YAMAHA_DEVICE(0x1032, "DGX-305"),
301 YAMAHA_DEVICE(0x1033, "DGX-505"),
302 YAMAHA_DEVICE(0x1034, NULL),
303 YAMAHA_DEVICE(0x1035, NULL),
304 YAMAHA_DEVICE(0x1036, NULL),
305 YAMAHA_DEVICE(0x1037, NULL),
306 YAMAHA_DEVICE(0x1038, NULL),
307 YAMAHA_DEVICE(0x1039, NULL),
308 YAMAHA_DEVICE(0x103a, NULL),
309 YAMAHA_DEVICE(0x103b, NULL),
310 YAMAHA_DEVICE(0x103c, NULL),
311 YAMAHA_DEVICE(0x103d, NULL),
312 YAMAHA_DEVICE(0x103e, NULL),
313 YAMAHA_DEVICE(0x103f, NULL),
314 YAMAHA_DEVICE(0x1040, NULL),
315 YAMAHA_DEVICE(0x1041, NULL),
316 YAMAHA_DEVICE(0x1042, NULL),
317 YAMAHA_DEVICE(0x1043, NULL),
318 YAMAHA_DEVICE(0x1044, NULL),
319 YAMAHA_DEVICE(0x1045, NULL),
320 YAMAHA_INTERFACE(0x104e, 0, NULL),
321 YAMAHA_DEVICE(0x104f, NULL),
322 YAMAHA_DEVICE(0x1050, NULL),
323 YAMAHA_DEVICE(0x1051, NULL),
324 YAMAHA_DEVICE(0x1052, NULL),
325 YAMAHA_INTERFACE(0x1053, 0, NULL),
326 YAMAHA_INTERFACE(0x1054, 0, NULL),
327 YAMAHA_DEVICE(0x1055, NULL),
328 YAMAHA_DEVICE(0x1056, NULL),
329 YAMAHA_DEVICE(0x1057, NULL),
330 YAMAHA_DEVICE(0x1058, NULL),
331 YAMAHA_DEVICE(0x1059, NULL),
332 YAMAHA_DEVICE(0x105a, NULL),
333 YAMAHA_DEVICE(0x105b, NULL),
334 YAMAHA_DEVICE(0x105c, NULL),
335 YAMAHA_DEVICE(0x105d, NULL),
337 USB_DEVICE(0x0499, 0x1503),
338 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
339 /* .vendor_name = "Yamaha", */
340 /* .product_name = "MOX6/MOX8", */
341 .ifnum = QUIRK_ANY_INTERFACE,
342 .type = QUIRK_COMPOSITE,
343 .data = (const struct snd_usb_audio_quirk[]) {
346 .type = QUIRK_AUDIO_STANDARD_INTERFACE
350 .type = QUIRK_AUDIO_STANDARD_INTERFACE
354 .type = QUIRK_MIDI_YAMAHA
363 USB_DEVICE(0x0499, 0x1507),
364 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
365 /* .vendor_name = "Yamaha", */
366 /* .product_name = "THR10", */
367 .ifnum = QUIRK_ANY_INTERFACE,
368 .type = QUIRK_COMPOSITE,
369 .data = (const struct snd_usb_audio_quirk[]) {
372 .type = QUIRK_AUDIO_STANDARD_INTERFACE
376 .type = QUIRK_AUDIO_STANDARD_INTERFACE
380 .type = QUIRK_MIDI_YAMAHA
389 USB_DEVICE(0x0499, 0x1509),
390 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
391 /* .vendor_name = "Yamaha", */
392 /* .product_name = "Steinberg UR22", */
393 .ifnum = QUIRK_ANY_INTERFACE,
394 .type = QUIRK_COMPOSITE,
395 .data = (const struct snd_usb_audio_quirk[]) {
398 .type = QUIRK_AUDIO_STANDARD_INTERFACE
402 .type = QUIRK_AUDIO_STANDARD_INTERFACE
406 .type = QUIRK_MIDI_YAMAHA
410 .type = QUIRK_IGNORE_INTERFACE
419 USB_DEVICE(0x0499, 0x150a),
420 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
421 /* .vendor_name = "Yamaha", */
422 /* .product_name = "THR5A", */
423 .ifnum = QUIRK_ANY_INTERFACE,
424 .type = QUIRK_COMPOSITE,
425 .data = (const struct snd_usb_audio_quirk[]) {
428 .type = QUIRK_AUDIO_STANDARD_INTERFACE
432 .type = QUIRK_AUDIO_STANDARD_INTERFACE
436 .type = QUIRK_MIDI_YAMAHA
445 USB_DEVICE(0x0499, 0x150c),
446 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
447 /* .vendor_name = "Yamaha", */
448 /* .product_name = "THR10C", */
449 .ifnum = QUIRK_ANY_INTERFACE,
450 .type = QUIRK_COMPOSITE,
451 .data = (const struct snd_usb_audio_quirk[]) {
454 .type = QUIRK_AUDIO_STANDARD_INTERFACE
458 .type = QUIRK_AUDIO_STANDARD_INTERFACE
462 .type = QUIRK_MIDI_YAMAHA
470 YAMAHA_DEVICE(0x2000, "DGP-7"),
471 YAMAHA_DEVICE(0x2001, "DGP-5"),
472 YAMAHA_DEVICE(0x2002, NULL),
473 YAMAHA_DEVICE(0x2003, NULL),
474 YAMAHA_DEVICE(0x5000, "CS1D"),
475 YAMAHA_DEVICE(0x5001, "DSP1D"),
476 YAMAHA_DEVICE(0x5002, "DME32"),
477 YAMAHA_DEVICE(0x5003, "DM2000"),
478 YAMAHA_DEVICE(0x5004, "02R96"),
479 YAMAHA_DEVICE(0x5005, "ACU16-C"),
480 YAMAHA_DEVICE(0x5006, "NHB32-C"),
481 YAMAHA_DEVICE(0x5007, "DM1000"),
482 YAMAHA_DEVICE(0x5008, "01V96"),
483 YAMAHA_DEVICE(0x5009, "SPX2000"),
484 YAMAHA_DEVICE(0x500a, "PM5D"),
485 YAMAHA_DEVICE(0x500b, "DME64N"),
486 YAMAHA_DEVICE(0x500c, "DME24N"),
487 YAMAHA_DEVICE(0x500d, NULL),
488 YAMAHA_DEVICE(0x500e, NULL),
489 YAMAHA_DEVICE(0x500f, NULL),
490 YAMAHA_DEVICE(0x7000, "DTX"),
491 YAMAHA_DEVICE(0x7010, "UB99"),
493 #undef YAMAHA_INTERFACE
496 * Roland/RolandED/Edirol/BOSS devices
499 USB_DEVICE(0x0582, 0x0000),
500 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
501 .vendor_name = "Roland",
502 .product_name = "UA-100",
503 .ifnum = QUIRK_ANY_INTERFACE,
504 .type = QUIRK_COMPOSITE,
505 .data = (const struct snd_usb_audio_quirk[]) {
508 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
509 .data = & (const struct audioformat) {
510 .formats = SNDRV_PCM_FMTBIT_S16_LE,
518 .rates = SNDRV_PCM_RATE_CONTINUOUS,
525 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
526 .data = & (const struct audioformat) {
527 .formats = SNDRV_PCM_FMTBIT_S16_LE,
532 .attributes = UAC_EP_CS_ATTR_FILL_MAX,
535 .rates = SNDRV_PCM_RATE_CONTINUOUS,
542 .type = QUIRK_MIDI_FIXED_ENDPOINT,
543 .data = & (const struct snd_usb_midi_endpoint_info) {
544 .out_cables = 0x0007,
555 USB_DEVICE(0x0582, 0x0002),
556 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
557 .vendor_name = "EDIROL",
558 .product_name = "UM-4",
559 .ifnum = QUIRK_ANY_INTERFACE,
560 .type = QUIRK_COMPOSITE,
561 .data = (const struct snd_usb_audio_quirk[]) {
564 .type = QUIRK_IGNORE_INTERFACE
568 .type = QUIRK_IGNORE_INTERFACE
572 .type = QUIRK_MIDI_FIXED_ENDPOINT,
573 .data = & (const struct snd_usb_midi_endpoint_info) {
574 .out_cables = 0x000f,
585 USB_DEVICE(0x0582, 0x0003),
586 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
587 .vendor_name = "Roland",
588 .product_name = "SC-8850",
589 .ifnum = QUIRK_ANY_INTERFACE,
590 .type = QUIRK_COMPOSITE,
591 .data = (const struct snd_usb_audio_quirk[]) {
594 .type = QUIRK_IGNORE_INTERFACE
598 .type = QUIRK_IGNORE_INTERFACE
602 .type = QUIRK_MIDI_FIXED_ENDPOINT,
603 .data = & (const struct snd_usb_midi_endpoint_info) {
604 .out_cables = 0x003f,
615 USB_DEVICE(0x0582, 0x0004),
616 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
617 .vendor_name = "Roland",
618 .product_name = "U-8",
619 .ifnum = QUIRK_ANY_INTERFACE,
620 .type = QUIRK_COMPOSITE,
621 .data = (const struct snd_usb_audio_quirk[]) {
624 .type = QUIRK_IGNORE_INTERFACE
628 .type = QUIRK_IGNORE_INTERFACE
632 .type = QUIRK_MIDI_FIXED_ENDPOINT,
633 .data = & (const struct snd_usb_midi_endpoint_info) {
634 .out_cables = 0x0005,
645 /* Has ID 0x0099 when not in "Advanced Driver" mode.
646 * The UM-2EX has only one input, but we cannot detect this. */
647 USB_DEVICE(0x0582, 0x0005),
648 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
649 .vendor_name = "EDIROL",
650 .product_name = "UM-2",
651 .ifnum = QUIRK_ANY_INTERFACE,
652 .type = QUIRK_COMPOSITE,
653 .data = (const struct snd_usb_audio_quirk[]) {
656 .type = QUIRK_IGNORE_INTERFACE
660 .type = QUIRK_IGNORE_INTERFACE
664 .type = QUIRK_MIDI_FIXED_ENDPOINT,
665 .data = & (const struct snd_usb_midi_endpoint_info) {
666 .out_cables = 0x0003,
677 USB_DEVICE(0x0582, 0x0007),
678 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
679 .vendor_name = "Roland",
680 .product_name = "SC-8820",
681 .ifnum = QUIRK_ANY_INTERFACE,
682 .type = QUIRK_COMPOSITE,
683 .data = (const struct snd_usb_audio_quirk[]) {
686 .type = QUIRK_IGNORE_INTERFACE
690 .type = QUIRK_IGNORE_INTERFACE
694 .type = QUIRK_MIDI_FIXED_ENDPOINT,
695 .data = & (const struct snd_usb_midi_endpoint_info) {
696 .out_cables = 0x0013,
707 USB_DEVICE(0x0582, 0x0008),
708 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
709 .vendor_name = "Roland",
710 .product_name = "PC-300",
711 .ifnum = QUIRK_ANY_INTERFACE,
712 .type = QUIRK_COMPOSITE,
713 .data = (const struct snd_usb_audio_quirk[]) {
716 .type = QUIRK_IGNORE_INTERFACE
720 .type = QUIRK_IGNORE_INTERFACE
724 .type = QUIRK_MIDI_FIXED_ENDPOINT,
725 .data = & (const struct snd_usb_midi_endpoint_info) {
726 .out_cables = 0x0001,
737 /* has ID 0x009d when not in "Advanced Driver" mode */
738 USB_DEVICE(0x0582, 0x0009),
739 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
740 .vendor_name = "EDIROL",
741 .product_name = "UM-1",
742 .ifnum = QUIRK_ANY_INTERFACE,
743 .type = QUIRK_COMPOSITE,
744 .data = (const struct snd_usb_audio_quirk[]) {
747 .type = QUIRK_IGNORE_INTERFACE
751 .type = QUIRK_IGNORE_INTERFACE
755 .type = QUIRK_MIDI_FIXED_ENDPOINT,
756 .data = & (const struct snd_usb_midi_endpoint_info) {
757 .out_cables = 0x0001,
768 USB_DEVICE(0x0582, 0x000b),
769 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
770 .vendor_name = "Roland",
771 .product_name = "SK-500",
772 .ifnum = QUIRK_ANY_INTERFACE,
773 .type = QUIRK_COMPOSITE,
774 .data = (const struct snd_usb_audio_quirk[]) {
777 .type = QUIRK_IGNORE_INTERFACE
781 .type = QUIRK_IGNORE_INTERFACE
785 .type = QUIRK_MIDI_FIXED_ENDPOINT,
786 .data = & (const struct snd_usb_midi_endpoint_info) {
787 .out_cables = 0x0013,
798 /* thanks to Emiliano Grilli <emillo@libero.it>
799 * for helping researching this data */
800 USB_DEVICE(0x0582, 0x000c),
801 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
802 .vendor_name = "Roland",
803 .product_name = "SC-D70",
804 .ifnum = QUIRK_ANY_INTERFACE,
805 .type = QUIRK_COMPOSITE,
806 .data = (const struct snd_usb_audio_quirk[]) {
809 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
810 .data = & (const struct audioformat) {
811 .formats = SNDRV_PCM_FMTBIT_S24_3LE,
819 .rates = SNDRV_PCM_RATE_CONTINUOUS,
826 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
827 .data = & (const struct audioformat) {
828 .formats = SNDRV_PCM_FMTBIT_S24_3LE,
836 .rates = SNDRV_PCM_RATE_CONTINUOUS,
843 .type = QUIRK_MIDI_FIXED_ENDPOINT,
844 .data = & (const struct snd_usb_midi_endpoint_info) {
845 .out_cables = 0x0007,
856 * This quirk is for the "Advanced Driver" mode of the Edirol UA-5.
857 * If the advanced mode switch at the back of the unit is off, the
858 * UA-5 has ID 0x0582/0x0011 and is standard compliant (no quirks),
859 * but offers only 16-bit PCM.
860 * In advanced mode, the UA-5 will output S24_3LE samples (two
861 * channels) at the rate indicated on the front switch, including
862 * the 96kHz sample rate.
864 USB_DEVICE(0x0582, 0x0010),
865 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
866 .vendor_name = "EDIROL",
867 .product_name = "UA-5",
868 .ifnum = QUIRK_ANY_INTERFACE,
869 .type = QUIRK_COMPOSITE,
870 .data = (const struct snd_usb_audio_quirk[]) {
873 .type = QUIRK_AUDIO_STANDARD_INTERFACE
877 .type = QUIRK_AUDIO_STANDARD_INTERFACE
886 /* has ID 0x0013 when not in "Advanced Driver" mode */
887 USB_DEVICE(0x0582, 0x0012),
888 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
889 .vendor_name = "Roland",
890 .product_name = "XV-5050",
892 .type = QUIRK_MIDI_FIXED_ENDPOINT,
893 .data = & (const struct snd_usb_midi_endpoint_info) {
894 .out_cables = 0x0001,
900 /* has ID 0x0015 when not in "Advanced Driver" mode */
901 USB_DEVICE(0x0582, 0x0014),
902 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
903 .vendor_name = "EDIROL",
904 .product_name = "UM-880",
906 .type = QUIRK_MIDI_FIXED_ENDPOINT,
907 .data = & (const struct snd_usb_midi_endpoint_info) {
908 .out_cables = 0x01ff,
914 /* has ID 0x0017 when not in "Advanced Driver" mode */
915 USB_DEVICE(0x0582, 0x0016),
916 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
917 .vendor_name = "EDIROL",
918 .product_name = "SD-90",
919 .ifnum = QUIRK_ANY_INTERFACE,
920 .type = QUIRK_COMPOSITE,
921 .data = (const struct snd_usb_audio_quirk[]) {
924 .type = QUIRK_AUDIO_STANDARD_INTERFACE
928 .type = QUIRK_AUDIO_STANDARD_INTERFACE
932 .type = QUIRK_MIDI_FIXED_ENDPOINT,
933 .data = & (const struct snd_usb_midi_endpoint_info) {
934 .out_cables = 0x000f,
945 /* has ID 0x001c when not in "Advanced Driver" mode */
946 USB_DEVICE(0x0582, 0x001b),
947 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
948 .vendor_name = "Roland",
949 .product_name = "MMP-2",
950 .ifnum = QUIRK_ANY_INTERFACE,
951 .type = QUIRK_COMPOSITE,
952 .data = (const struct snd_usb_audio_quirk[]) {
955 .type = QUIRK_IGNORE_INTERFACE
959 .type = QUIRK_IGNORE_INTERFACE
963 .type = QUIRK_MIDI_FIXED_ENDPOINT,
964 .data = & (const struct snd_usb_midi_endpoint_info) {
965 .out_cables = 0x0001,
976 /* has ID 0x001e when not in "Advanced Driver" mode */
977 USB_DEVICE(0x0582, 0x001d),
978 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
979 .vendor_name = "Roland",
980 .product_name = "V-SYNTH",
982 .type = QUIRK_MIDI_FIXED_ENDPOINT,
983 .data = & (const struct snd_usb_midi_endpoint_info) {
984 .out_cables = 0x0001,
990 /* has ID 0x0024 when not in "Advanced Driver" mode */
991 USB_DEVICE(0x0582, 0x0023),
992 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
993 .vendor_name = "EDIROL",
994 .product_name = "UM-550",
996 .type = QUIRK_MIDI_FIXED_ENDPOINT,
997 .data = & (const struct snd_usb_midi_endpoint_info) {
998 .out_cables = 0x003f,
1005 * This quirk is for the "Advanced Driver" mode. If off, the UA-20
1006 * has ID 0x0026 and is standard compliant, but has only 16-bit PCM
1009 USB_DEVICE(0x0582, 0x0025),
1010 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1011 .vendor_name = "EDIROL",
1012 .product_name = "UA-20",
1013 .ifnum = QUIRK_ANY_INTERFACE,
1014 .type = QUIRK_COMPOSITE,
1015 .data = (const struct snd_usb_audio_quirk[]) {
1018 .type = QUIRK_IGNORE_INTERFACE
1022 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
1023 .data = & (const struct audioformat) {
1024 .formats = SNDRV_PCM_FMTBIT_S24_3LE,
1032 .rates = SNDRV_PCM_RATE_CONTINUOUS,
1039 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
1040 .data = & (const struct audioformat) {
1041 .formats = SNDRV_PCM_FMTBIT_S24_3LE,
1049 .rates = SNDRV_PCM_RATE_CONTINUOUS,
1056 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1057 .data = & (const struct snd_usb_midi_endpoint_info) {
1058 .out_cables = 0x0001,
1069 /* has ID 0x0028 when not in "Advanced Driver" mode */
1070 USB_DEVICE(0x0582, 0x0027),
1071 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1072 .vendor_name = "EDIROL",
1073 .product_name = "SD-20",
1075 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1076 .data = & (const struct snd_usb_midi_endpoint_info) {
1077 .out_cables = 0x0003,
1083 /* has ID 0x002a when not in "Advanced Driver" mode */
1084 USB_DEVICE(0x0582, 0x0029),
1085 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1086 .vendor_name = "EDIROL",
1087 .product_name = "SD-80",
1089 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1090 .data = & (const struct snd_usb_midi_endpoint_info) {
1091 .out_cables = 0x000f,
1097 * This quirk is for the "Advanced" modes of the Edirol UA-700.
1098 * If the sample format switch is not in an advanced setting, the
1099 * UA-700 has ID 0x0582/0x002c and is standard compliant (no quirks),
1100 * but offers only 16-bit PCM and no MIDI.
1102 USB_DEVICE_VENDOR_SPEC(0x0582, 0x002b),
1103 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1104 .vendor_name = "EDIROL",
1105 .product_name = "UA-700",
1106 .ifnum = QUIRK_ANY_INTERFACE,
1107 .type = QUIRK_COMPOSITE,
1108 .data = (const struct snd_usb_audio_quirk[]) {
1111 .type = QUIRK_AUDIO_EDIROL_UAXX
1115 .type = QUIRK_AUDIO_EDIROL_UAXX
1119 .type = QUIRK_AUDIO_EDIROL_UAXX
1128 /* has ID 0x002e when not in "Advanced Driver" mode */
1129 USB_DEVICE(0x0582, 0x002d),
1130 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1131 .vendor_name = "Roland",
1132 .product_name = "XV-2020",
1134 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1135 .data = & (const struct snd_usb_midi_endpoint_info) {
1136 .out_cables = 0x0001,
1142 /* has ID 0x0030 when not in "Advanced Driver" mode */
1143 USB_DEVICE(0x0582, 0x002f),
1144 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1145 .vendor_name = "Roland",
1146 .product_name = "VariOS",
1148 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1149 .data = & (const struct snd_usb_midi_endpoint_info) {
1150 .out_cables = 0x0007,
1156 /* has ID 0x0034 when not in "Advanced Driver" mode */
1157 USB_DEVICE(0x0582, 0x0033),
1158 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1159 .vendor_name = "EDIROL",
1160 .product_name = "PCR",
1162 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1163 .data = & (const struct snd_usb_midi_endpoint_info) {
1164 .out_cables = 0x0003,
1169 /* TODO: add Roland M-1000 support */
1172 * Has ID 0x0038 when not in "Advanced Driver" mode;
1173 * later revisions use IDs 0x0054 and 0x00a2.
1175 USB_DEVICE(0x0582, 0x0037),
1176 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1177 .vendor_name = "Roland",
1178 .product_name = "Digital Piano",
1180 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1181 .data = & (const struct snd_usb_midi_endpoint_info) {
1182 .out_cables = 0x0001,
1189 * This quirk is for the "Advanced Driver" mode. If off, the GS-10
1190 * has ID 0x003c and is standard compliant, but has only 16-bit PCM
1193 USB_DEVICE_VENDOR_SPEC(0x0582, 0x003b),
1194 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1195 .vendor_name = "BOSS",
1196 .product_name = "GS-10",
1197 .ifnum = QUIRK_ANY_INTERFACE,
1198 .type = QUIRK_COMPOSITE,
1199 .data = & (const struct snd_usb_audio_quirk[]) {
1202 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1206 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1210 .type = QUIRK_MIDI_STANDARD_INTERFACE
1219 /* has ID 0x0041 when not in "Advanced Driver" mode */
1220 USB_DEVICE(0x0582, 0x0040),
1221 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1222 .vendor_name = "Roland",
1223 .product_name = "GI-20",
1225 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1226 .data = & (const struct snd_usb_midi_endpoint_info) {
1227 .out_cables = 0x0001,
1233 /* has ID 0x0043 when not in "Advanced Driver" mode */
1234 USB_DEVICE(0x0582, 0x0042),
1235 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1236 .vendor_name = "Roland",
1237 .product_name = "RS-70",
1239 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1240 .data = & (const struct snd_usb_midi_endpoint_info) {
1241 .out_cables = 0x0001,
1247 /* has ID 0x0049 when not in "Advanced Driver" mode */
1248 USB_DEVICE(0x0582, 0x0047),
1249 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1250 /* .vendor_name = "EDIROL", */
1251 /* .product_name = "UR-80", */
1252 .ifnum = QUIRK_ANY_INTERFACE,
1253 .type = QUIRK_COMPOSITE,
1254 .data = (const struct snd_usb_audio_quirk[]) {
1255 /* in the 96 kHz modes, only interface 1 is there */
1258 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1262 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1271 /* has ID 0x004a when not in "Advanced Driver" mode */
1272 USB_DEVICE(0x0582, 0x0048),
1273 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1274 /* .vendor_name = "EDIROL", */
1275 /* .product_name = "UR-80", */
1277 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1278 .data = & (const struct snd_usb_midi_endpoint_info) {
1279 .out_cables = 0x0003,
1284 /* TODO: add Edirol M-100FX support */
1286 /* has ID 0x004e when not in "Advanced Driver" mode */
1287 USB_DEVICE(0x0582, 0x004c),
1288 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1289 .vendor_name = "EDIROL",
1290 .product_name = "PCR-A",
1291 .ifnum = QUIRK_ANY_INTERFACE,
1292 .type = QUIRK_COMPOSITE,
1293 .data = (const struct snd_usb_audio_quirk[]) {
1296 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1300 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1309 /* has ID 0x004f when not in "Advanced Driver" mode */
1310 USB_DEVICE(0x0582, 0x004d),
1311 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1312 .vendor_name = "EDIROL",
1313 .product_name = "PCR-A",
1315 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1316 .data = & (const struct snd_usb_midi_endpoint_info) {
1317 .out_cables = 0x0003,
1324 * This quirk is for the "Advanced Driver" mode. If off, the UA-3FX
1325 * is standard compliant, but has only 16-bit PCM.
1327 USB_DEVICE(0x0582, 0x0050),
1328 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1329 .vendor_name = "EDIROL",
1330 .product_name = "UA-3FX",
1331 .ifnum = QUIRK_ANY_INTERFACE,
1332 .type = QUIRK_COMPOSITE,
1333 .data = (const struct snd_usb_audio_quirk[]) {
1336 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1340 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1349 USB_DEVICE(0x0582, 0x0052),
1350 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1351 .vendor_name = "EDIROL",
1352 .product_name = "UM-1SX",
1354 .type = QUIRK_MIDI_STANDARD_INTERFACE
1358 USB_DEVICE(0x0582, 0x0060),
1359 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1360 .vendor_name = "Roland",
1361 .product_name = "EXR Series",
1363 .type = QUIRK_MIDI_STANDARD_INTERFACE
1367 /* has ID 0x0066 when not in "Advanced Driver" mode */
1368 USB_DEVICE(0x0582, 0x0064),
1369 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1370 /* .vendor_name = "EDIROL", */
1371 /* .product_name = "PCR-1", */
1372 .ifnum = QUIRK_ANY_INTERFACE,
1373 .type = QUIRK_COMPOSITE,
1374 .data = (const struct snd_usb_audio_quirk[]) {
1377 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1381 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1390 /* has ID 0x0067 when not in "Advanced Driver" mode */
1391 USB_DEVICE(0x0582, 0x0065),
1392 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1393 /* .vendor_name = "EDIROL", */
1394 /* .product_name = "PCR-1", */
1396 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1397 .data = & (const struct snd_usb_midi_endpoint_info) {
1398 .out_cables = 0x0001,
1404 /* has ID 0x006b when not in "Advanced Driver" mode */
1405 USB_DEVICE_VENDOR_SPEC(0x0582, 0x006a),
1406 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1407 .vendor_name = "Roland",
1408 .product_name = "SP-606",
1410 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1411 .data = & (const struct snd_usb_midi_endpoint_info) {
1412 .out_cables = 0x0001,
1418 /* has ID 0x006e when not in "Advanced Driver" mode */
1419 USB_DEVICE(0x0582, 0x006d),
1420 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1421 .vendor_name = "Roland",
1422 .product_name = "FANTOM-X",
1424 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1425 .data = & (const struct snd_usb_midi_endpoint_info) {
1426 .out_cables = 0x0001,
1432 * This quirk is for the "Advanced" modes of the Edirol UA-25.
1433 * If the switch is not in an advanced setting, the UA-25 has
1434 * ID 0x0582/0x0073 and is standard compliant (no quirks), but
1435 * offers only 16-bit PCM at 44.1 kHz and no MIDI.
1437 USB_DEVICE_VENDOR_SPEC(0x0582, 0x0074),
1438 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1439 .vendor_name = "EDIROL",
1440 .product_name = "UA-25",
1441 .ifnum = QUIRK_ANY_INTERFACE,
1442 .type = QUIRK_COMPOSITE,
1443 .data = (const struct snd_usb_audio_quirk[]) {
1446 .type = QUIRK_AUDIO_EDIROL_UAXX
1450 .type = QUIRK_AUDIO_EDIROL_UAXX
1454 .type = QUIRK_AUDIO_EDIROL_UAXX
1463 /* has ID 0x0076 when not in "Advanced Driver" mode */
1464 USB_DEVICE(0x0582, 0x0075),
1465 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1466 .vendor_name = "BOSS",
1467 .product_name = "DR-880",
1469 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1470 .data = & (const struct snd_usb_midi_endpoint_info) {
1471 .out_cables = 0x0001,
1477 /* has ID 0x007b when not in "Advanced Driver" mode */
1478 USB_DEVICE_VENDOR_SPEC(0x0582, 0x007a),
1479 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1480 .vendor_name = "Roland",
1481 /* "RD" or "RD-700SX"? */
1483 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1484 .data = & (const struct snd_usb_midi_endpoint_info) {
1485 .out_cables = 0x0003,
1491 /* has ID 0x0081 when not in "Advanced Driver" mode */
1492 USB_DEVICE(0x0582, 0x0080),
1493 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1494 .vendor_name = "Roland",
1495 .product_name = "G-70",
1497 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1498 .data = & (const struct snd_usb_midi_endpoint_info) {
1499 .out_cables = 0x0001,
1504 /* TODO: add Roland V-SYNTH XT support */
1505 /* TODO: add BOSS GT-PRO support */
1507 /* has ID 0x008c when not in "Advanced Driver" mode */
1508 USB_DEVICE(0x0582, 0x008b),
1509 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1510 .vendor_name = "EDIROL",
1511 .product_name = "PC-50",
1513 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1514 .data = & (const struct snd_usb_midi_endpoint_info) {
1515 .out_cables = 0x0001,
1520 /* TODO: add Edirol PC-80 support */
1522 USB_DEVICE(0x0582, 0x0096),
1523 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1524 .vendor_name = "EDIROL",
1525 .product_name = "UA-1EX",
1526 .ifnum = QUIRK_ANY_INTERFACE,
1527 .type = QUIRK_COMPOSITE,
1528 .data = (const struct snd_usb_audio_quirk[]) {
1531 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1535 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1544 USB_DEVICE(0x0582, 0x009a),
1545 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1546 .vendor_name = "EDIROL",
1547 .product_name = "UM-3EX",
1549 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1550 .data = & (const struct snd_usb_midi_endpoint_info) {
1551 .out_cables = 0x000f,
1558 * This quirk is for the "Advanced Driver" mode. If off, the UA-4FX
1559 * is standard compliant, but has only 16-bit PCM and no MIDI.
1561 USB_DEVICE(0x0582, 0x00a3),
1562 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1563 .vendor_name = "EDIROL",
1564 .product_name = "UA-4FX",
1565 .ifnum = QUIRK_ANY_INTERFACE,
1566 .type = QUIRK_COMPOSITE,
1567 .data = (const struct snd_usb_audio_quirk[]) {
1570 .type = QUIRK_AUDIO_EDIROL_UAXX
1574 .type = QUIRK_AUDIO_EDIROL_UAXX
1578 .type = QUIRK_AUDIO_EDIROL_UAXX
1586 /* TODO: add Edirol MD-P1 support */
1588 USB_DEVICE(0x582, 0x00a6),
1589 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1590 .vendor_name = "Roland",
1591 .product_name = "Juno-G",
1593 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1594 .data = & (const struct snd_usb_midi_endpoint_info) {
1595 .out_cables = 0x0001,
1602 USB_DEVICE(0x0582, 0x00ad),
1603 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1604 .vendor_name = "Roland",
1605 .product_name = "SH-201",
1606 .ifnum = QUIRK_ANY_INTERFACE,
1607 .type = QUIRK_COMPOSITE,
1608 .data = (const struct snd_usb_audio_quirk[]) {
1611 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1615 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1619 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1620 .data = & (const struct snd_usb_midi_endpoint_info) {
1621 .out_cables = 0x0001,
1632 /* Advanced mode of the Roland VG-99, with MIDI and 24-bit PCM at 44.1
1633 * kHz. In standard mode, the device has ID 0582:00b3, and offers
1634 * 16-bit PCM at 44.1 kHz with no MIDI.
1636 USB_DEVICE(0x0582, 0x00b2),
1637 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1638 .vendor_name = "Roland",
1639 .product_name = "VG-99",
1640 .ifnum = QUIRK_ANY_INTERFACE,
1641 .type = QUIRK_COMPOSITE,
1642 .data = (const struct snd_usb_audio_quirk[]) {
1645 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1649 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1653 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1654 .data = & (const struct snd_usb_midi_endpoint_info) {
1655 .out_cables = 0x0003,
1666 /* Roland SonicCell */
1667 USB_DEVICE(0x0582, 0x00c2),
1668 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1669 .vendor_name = "Roland",
1670 .product_name = "SonicCell",
1671 .ifnum = QUIRK_ANY_INTERFACE,
1672 .type = QUIRK_COMPOSITE,
1673 .data = (const struct snd_usb_audio_quirk[]) {
1676 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1680 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1684 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1685 .data = & (const struct snd_usb_midi_endpoint_info) {
1686 .out_cables = 0x0001,
1698 /* FIXME: This quirk gives a good-working capture stream but the
1699 * playback seems problematic because of lacking of sync
1700 * with capture stream. It needs to sync with the capture
1701 * clock. As now, you'll get frequent sound distortions
1704 USB_DEVICE(0x0582, 0x00c4),
1705 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1706 .ifnum = QUIRK_ANY_INTERFACE,
1707 .type = QUIRK_COMPOSITE,
1708 .data = (const struct snd_usb_audio_quirk[]) {
1711 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1715 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1719 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1720 .data = & (const struct snd_usb_midi_endpoint_info) {
1721 .out_cables = 0x0001,
1733 USB_DEVICE(0x0582, 0x00da),
1734 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1735 .ifnum = QUIRK_ANY_INTERFACE,
1736 .type = QUIRK_COMPOSITE,
1737 .data = (const struct snd_usb_audio_quirk[]) {
1740 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1744 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1748 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1749 .data = & (const struct snd_usb_midi_endpoint_info) {
1750 .out_cables = 0x0001,
1761 /* Advanced modes of the Edirol UA-25EX.
1762 * For the standard mode, UA-25EX has ID 0582:00e7, which
1763 * offers only 16-bit PCM at 44.1 kHz and no MIDI.
1765 USB_DEVICE_VENDOR_SPEC(0x0582, 0x00e6),
1766 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1767 .vendor_name = "EDIROL",
1768 .product_name = "UA-25EX",
1769 .ifnum = QUIRK_ANY_INTERFACE,
1770 .type = QUIRK_COMPOSITE,
1771 .data = (const struct snd_usb_audio_quirk[]) {
1774 .type = QUIRK_AUDIO_EDIROL_UAXX
1778 .type = QUIRK_AUDIO_EDIROL_UAXX
1782 .type = QUIRK_AUDIO_EDIROL_UAXX
1791 /* has ID 0x00ea when not in Advanced Driver mode */
1792 USB_DEVICE_VENDOR_SPEC(0x0582, 0x00e9),
1793 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1794 /* .vendor_name = "Roland", */
1795 /* .product_name = "UA-1G", */
1796 .ifnum = QUIRK_ANY_INTERFACE,
1797 .type = QUIRK_COMPOSITE,
1798 .data = (const struct snd_usb_audio_quirk[]) {
1801 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1805 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1814 USB_DEVICE_VENDOR_SPEC(0x0582, 0x0104),
1815 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1816 /* .vendor_name = "Roland", */
1817 /* .product_name = "UM-1G", */
1819 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1820 .data = & (const struct snd_usb_midi_endpoint_info) {
1821 .out_cables = 0x0001,
1828 USB_DEVICE_VENDOR_SPEC(0x0582, 0x0108),
1829 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1831 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1832 .data = & (const struct snd_usb_midi_endpoint_info) {
1833 .out_cables = 0x0007,
1839 /* Boss JS-8 Jam Station */
1840 USB_DEVICE(0x0582, 0x0109),
1841 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1842 /* .vendor_name = "BOSS", */
1843 /* .product_name = "JS-8", */
1844 .ifnum = QUIRK_ANY_INTERFACE,
1845 .type = QUIRK_COMPOSITE,
1846 .data = (const struct snd_usb_audio_quirk[]) {
1849 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1853 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1857 .type = QUIRK_MIDI_STANDARD_INTERFACE
1866 /* has ID 0x0110 when not in Advanced Driver mode */
1867 USB_DEVICE_VENDOR_SPEC(0x0582, 0x010f),
1868 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1869 /* .vendor_name = "Roland", */
1870 /* .product_name = "A-PRO", */
1872 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1873 .data = & (const struct snd_usb_midi_endpoint_info) {
1874 .out_cables = 0x0003,
1880 /* Roland GAIA SH-01 */
1881 USB_DEVICE(0x0582, 0x0111),
1882 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
1883 .vendor_name = "Roland",
1884 .product_name = "GAIA",
1885 .ifnum = QUIRK_ANY_INTERFACE,
1886 .type = QUIRK_COMPOSITE,
1887 .data = (const struct snd_usb_audio_quirk[]) {
1890 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1894 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1898 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1899 .data = &(const struct snd_usb_midi_endpoint_info) {
1900 .out_cables = 0x0003,
1911 USB_DEVICE(0x0582, 0x0113),
1912 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1913 /* .vendor_name = "BOSS", */
1914 /* .product_name = "ME-25", */
1915 .ifnum = QUIRK_ANY_INTERFACE,
1916 .type = QUIRK_COMPOSITE,
1917 .data = (const struct snd_usb_audio_quirk[]) {
1920 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1924 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1928 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1929 .data = & (const struct snd_usb_midi_endpoint_info) {
1930 .out_cables = 0x0001,
1941 USB_DEVICE(0x0582, 0x0127),
1942 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1943 /* .vendor_name = "Roland", */
1944 /* .product_name = "GR-55", */
1945 .ifnum = QUIRK_ANY_INTERFACE,
1946 .type = QUIRK_COMPOSITE,
1947 .data = (const struct snd_usb_audio_quirk[]) {
1950 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1954 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1958 .type = QUIRK_MIDI_STANDARD_INTERFACE
1967 /* Added support for Roland UM-ONE which differs from UM-1 */
1968 USB_DEVICE(0x0582, 0x012a),
1969 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1970 /* .vendor_name = "ROLAND", */
1971 /* .product_name = "UM-ONE", */
1973 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1974 .data = & (const struct snd_usb_midi_endpoint_info) {
1975 .out_cables = 0x0001,
1981 USB_DEVICE(0x0582, 0x011e),
1982 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1983 /* .vendor_name = "BOSS", */
1984 /* .product_name = "BR-800", */
1985 .ifnum = QUIRK_ANY_INTERFACE,
1986 .type = QUIRK_COMPOSITE,
1987 .data = (const struct snd_usb_audio_quirk[]) {
1990 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1994 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1998 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1999 .data = & (const struct snd_usb_midi_endpoint_info) {
2000 .out_cables = 0x0001,
2011 USB_DEVICE(0x0582, 0x0130),
2012 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2013 /* .vendor_name = "BOSS", */
2014 /* .product_name = "MICRO BR-80", */
2015 .ifnum = QUIRK_ANY_INTERFACE,
2016 .type = QUIRK_COMPOSITE,
2017 .data = (const struct snd_usb_audio_quirk[]) {
2020 .type = QUIRK_IGNORE_INTERFACE
2024 .type = QUIRK_AUDIO_STANDARD_INTERFACE
2028 .type = QUIRK_AUDIO_STANDARD_INTERFACE
2032 .type = QUIRK_MIDI_FIXED_ENDPOINT,
2033 .data = & (const struct snd_usb_midi_endpoint_info) {
2034 .out_cables = 0x0001,
2045 USB_DEVICE(0x0582, 0x014d),
2046 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2047 /* .vendor_name = "BOSS", */
2048 /* .product_name = "GT-100", */
2049 .ifnum = QUIRK_ANY_INTERFACE,
2050 .type = QUIRK_COMPOSITE,
2051 .data = (const struct snd_usb_audio_quirk[]) {
2054 .type = QUIRK_AUDIO_STANDARD_INTERFACE
2058 .type = QUIRK_AUDIO_STANDARD_INTERFACE
2062 .type = QUIRK_MIDI_FIXED_ENDPOINT,
2063 .data = & (const struct snd_usb_midi_endpoint_info) {
2064 .out_cables = 0x0001,
2075 /* Guillemot devices */
2078 * This is for the "Windows Edition" where the external MIDI ports are
2079 * the only MIDI ports; the control data is reported through HID
2080 * interfaces. The "Macintosh Edition" has ID 0xd002 and uses standard
2081 * compliant USB MIDI ports for external MIDI and controls.
2083 USB_DEVICE_VENDOR_SPEC(0x06f8, 0xb000),
2084 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2085 .vendor_name = "Hercules",
2086 .product_name = "DJ Console (WE)",
2088 .type = QUIRK_MIDI_FIXED_ENDPOINT,
2089 .data = & (const struct snd_usb_midi_endpoint_info) {
2090 .out_cables = 0x0001,
2096 /* Midiman/M-Audio devices */
2098 USB_DEVICE_VENDOR_SPEC(0x0763, 0x1002),
2099 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2100 .vendor_name = "M-Audio",
2101 .product_name = "MidiSport 2x2",
2102 .ifnum = QUIRK_ANY_INTERFACE,
2103 .type = QUIRK_MIDI_MIDIMAN,
2104 .data = & (const struct snd_usb_midi_endpoint_info) {
2105 .out_cables = 0x0003,
2111 USB_DEVICE_VENDOR_SPEC(0x0763, 0x1011),
2112 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2113 .vendor_name = "M-Audio",
2114 .product_name = "MidiSport 1x1",
2115 .ifnum = QUIRK_ANY_INTERFACE,
2116 .type = QUIRK_MIDI_MIDIMAN,
2117 .data = & (const struct snd_usb_midi_endpoint_info) {
2118 .out_cables = 0x0001,
2124 USB_DEVICE_VENDOR_SPEC(0x0763, 0x1015),
2125 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2126 .vendor_name = "M-Audio",
2127 .product_name = "Keystation",
2128 .ifnum = QUIRK_ANY_INTERFACE,
2129 .type = QUIRK_MIDI_MIDIMAN,
2130 .data = & (const struct snd_usb_midi_endpoint_info) {
2131 .out_cables = 0x0001,
2137 USB_DEVICE_VENDOR_SPEC(0x0763, 0x1021),
2138 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2139 .vendor_name = "M-Audio",
2140 .product_name = "MidiSport 4x4",
2141 .ifnum = QUIRK_ANY_INTERFACE,
2142 .type = QUIRK_MIDI_MIDIMAN,
2143 .data = & (const struct snd_usb_midi_endpoint_info) {
2144 .out_cables = 0x000f,
2151 * For hardware revision 1.05; in the later revisions (1.10 and
2152 * 1.21), 0x1031 is the ID for the device without firmware.
2153 * Thanks to Olaf Giesbrecht <Olaf_Giesbrecht@yahoo.de>
2155 USB_DEVICE_VER(0x0763, 0x1031, 0x0100, 0x0109),
2156 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2157 .vendor_name = "M-Audio",
2158 .product_name = "MidiSport 8x8",
2159 .ifnum = QUIRK_ANY_INTERFACE,
2160 .type = QUIRK_MIDI_MIDIMAN,
2161 .data = & (const struct snd_usb_midi_endpoint_info) {
2162 .out_cables = 0x01ff,
2168 USB_DEVICE_VENDOR_SPEC(0x0763, 0x1033),
2169 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2170 .vendor_name = "M-Audio",
2171 .product_name = "MidiSport 8x8",
2172 .ifnum = QUIRK_ANY_INTERFACE,
2173 .type = QUIRK_MIDI_MIDIMAN,
2174 .data = & (const struct snd_usb_midi_endpoint_info) {
2175 .out_cables = 0x01ff,
2181 USB_DEVICE_VENDOR_SPEC(0x0763, 0x1041),
2182 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2183 .vendor_name = "M-Audio",
2184 .product_name = "MidiSport 2x4",
2185 .ifnum = QUIRK_ANY_INTERFACE,
2186 .type = QUIRK_MIDI_MIDIMAN,
2187 .data = & (const struct snd_usb_midi_endpoint_info) {
2188 .out_cables = 0x000f,
2194 USB_DEVICE_VENDOR_SPEC(0x0763, 0x2001),
2195 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2196 .vendor_name = "M-Audio",
2197 .product_name = "Quattro",
2198 .ifnum = QUIRK_ANY_INTERFACE,
2199 .type = QUIRK_COMPOSITE,
2200 .data = & (const struct snd_usb_audio_quirk[]) {
2202 * Interfaces 0-2 are "Windows-compatible", 16-bit only,
2203 * and share endpoints with the other interfaces.
2204 * Ignore them. The other interfaces can do 24 bits,
2205 * but captured samples are big-endian (see usbaudio.c).
2209 .type = QUIRK_IGNORE_INTERFACE
2213 .type = QUIRK_IGNORE_INTERFACE
2217 .type = QUIRK_IGNORE_INTERFACE
2221 .type = QUIRK_IGNORE_INTERFACE
2225 .type = QUIRK_AUDIO_STANDARD_INTERFACE
2229 .type = QUIRK_AUDIO_STANDARD_INTERFACE
2233 .type = QUIRK_IGNORE_INTERFACE
2237 .type = QUIRK_AUDIO_STANDARD_INTERFACE
2241 .type = QUIRK_AUDIO_STANDARD_INTERFACE
2245 .type = QUIRK_MIDI_MIDIMAN,
2246 .data = & (const struct snd_usb_midi_endpoint_info) {
2247 .out_cables = 0x0001,
2258 USB_DEVICE_VENDOR_SPEC(0x0763, 0x2003),
2259 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2260 .vendor_name = "M-Audio",
2261 .product_name = "AudioPhile",
2263 .type = QUIRK_MIDI_MIDIMAN,
2264 .data = & (const struct snd_usb_midi_endpoint_info) {
2265 .out_cables = 0x0001,
2271 USB_DEVICE_VENDOR_SPEC(0x0763, 0x2008),
2272 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2273 .vendor_name = "M-Audio",
2274 .product_name = "Ozone",
2276 .type = QUIRK_MIDI_MIDIMAN,
2277 .data = & (const struct snd_usb_midi_endpoint_info) {
2278 .out_cables = 0x0001,
2284 USB_DEVICE_VENDOR_SPEC(0x0763, 0x200d),
2285 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2286 .vendor_name = "M-Audio",
2287 .product_name = "OmniStudio",
2288 .ifnum = QUIRK_ANY_INTERFACE,
2289 .type = QUIRK_COMPOSITE,
2290 .data = & (const struct snd_usb_audio_quirk[]) {
2293 .type = QUIRK_IGNORE_INTERFACE
2297 .type = QUIRK_IGNORE_INTERFACE
2301 .type = QUIRK_IGNORE_INTERFACE
2305 .type = QUIRK_IGNORE_INTERFACE
2309 .type = QUIRK_AUDIO_STANDARD_INTERFACE
2313 .type = QUIRK_AUDIO_STANDARD_INTERFACE
2317 .type = QUIRK_IGNORE_INTERFACE
2321 .type = QUIRK_AUDIO_STANDARD_INTERFACE
2325 .type = QUIRK_AUDIO_STANDARD_INTERFACE
2329 .type = QUIRK_MIDI_MIDIMAN,
2330 .data = & (const struct snd_usb_midi_endpoint_info) {
2331 .out_cables = 0x0001,
2342 USB_DEVICE(0x0763, 0x2019),
2343 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2344 /* .vendor_name = "M-Audio", */
2345 /* .product_name = "Ozone Academic", */
2346 .ifnum = QUIRK_ANY_INTERFACE,
2347 .type = QUIRK_COMPOSITE,
2348 .data = & (const struct snd_usb_audio_quirk[]) {
2351 .type = QUIRK_AUDIO_STANDARD_INTERFACE
2355 .type = QUIRK_AUDIO_STANDARD_INTERFACE
2359 .type = QUIRK_AUDIO_STANDARD_INTERFACE
2363 .type = QUIRK_MIDI_MIDIMAN,
2364 .data = & (const struct snd_usb_midi_endpoint_info) {
2365 .out_cables = 0x0001,
2376 USB_DEVICE_VENDOR_SPEC(0x0763, 0x2030),
2377 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
2378 /* .vendor_name = "M-Audio", */
2379 /* .product_name = "Fast Track C400", */
2380 .ifnum = QUIRK_ANY_INTERFACE,
2381 .type = QUIRK_COMPOSITE,
2382 .data = &(const struct snd_usb_audio_quirk[]) {
2385 .type = QUIRK_AUDIO_STANDARD_MIXER,
2390 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
2391 .data = &(const struct audioformat) {
2392 .formats = SNDRV_PCM_FMTBIT_S24_3LE,
2397 .attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
2400 .rates = SNDRV_PCM_RATE_44100 |
2401 SNDRV_PCM_RATE_48000 |
2402 SNDRV_PCM_RATE_88200 |
2403 SNDRV_PCM_RATE_96000,
2407 .rate_table = (unsigned int[]) {
2408 44100, 48000, 88200, 96000
2416 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
2417 .data = &(const struct audioformat) {
2418 .formats = SNDRV_PCM_FMTBIT_S24_3LE,
2423 .attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
2426 .rates = SNDRV_PCM_RATE_44100 |
2427 SNDRV_PCM_RATE_48000 |
2428 SNDRV_PCM_RATE_88200 |
2429 SNDRV_PCM_RATE_96000,
2433 .rate_table = (unsigned int[]) {
2434 44100, 48000, 88200, 96000
2441 .ifnum = -1 /* Interface = 4 */
2447 USB_DEVICE_VENDOR_SPEC(0x0763, 0x2031),
2448 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
2449 /* .vendor_name = "M-Audio", */
2450 /* .product_name = "Fast Track C600", */
2451 .ifnum = QUIRK_ANY_INTERFACE,
2452 .type = QUIRK_COMPOSITE,
2453 .data = &(const struct snd_usb_audio_quirk[]) {
2456 .type = QUIRK_AUDIO_STANDARD_MIXER,
2461 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
2462 .data = &(const struct audioformat) {
2463 .formats = SNDRV_PCM_FMTBIT_S24_3LE,
2468 .attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
2471 .rates = SNDRV_PCM_RATE_44100 |
2472 SNDRV_PCM_RATE_48000 |
2473 SNDRV_PCM_RATE_88200 |
2474 SNDRV_PCM_RATE_96000,
2478 .rate_table = (unsigned int[]) {
2479 44100, 48000, 88200, 96000
2487 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
2488 .data = &(const struct audioformat) {
2489 .formats = SNDRV_PCM_FMTBIT_S24_3LE,
2494 .attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
2497 .rates = SNDRV_PCM_RATE_44100 |
2498 SNDRV_PCM_RATE_48000 |
2499 SNDRV_PCM_RATE_88200 |
2500 SNDRV_PCM_RATE_96000,
2504 .rate_table = (unsigned int[]) {
2505 44100, 48000, 88200, 96000
2512 .ifnum = -1 /* Interface = 4 */
2518 USB_DEVICE_VENDOR_SPEC(0x0763, 0x2080),
2519 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2520 /* .vendor_name = "M-Audio", */
2521 /* .product_name = "Fast Track Ultra", */
2522 .ifnum = QUIRK_ANY_INTERFACE,
2523 .type = QUIRK_COMPOSITE,
2524 .data = & (const struct snd_usb_audio_quirk[]) {
2527 .type = QUIRK_AUDIO_STANDARD_MIXER,
2531 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
2532 .data = & (const struct audioformat) {
2533 .formats = SNDRV_PCM_FMTBIT_S24_3LE,
2538 .attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
2541 .rates = SNDRV_PCM_RATE_44100 |
2542 SNDRV_PCM_RATE_48000 |
2543 SNDRV_PCM_RATE_88200 |
2544 SNDRV_PCM_RATE_96000,
2548 .rate_table = (unsigned int[]) {
2549 44100, 48000, 88200, 96000
2555 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
2556 .data = & (const struct audioformat) {
2557 .formats = SNDRV_PCM_FMTBIT_S24_3LE,
2562 .attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
2565 .rates = SNDRV_PCM_RATE_44100 |
2566 SNDRV_PCM_RATE_48000 |
2567 SNDRV_PCM_RATE_88200 |
2568 SNDRV_PCM_RATE_96000,
2572 .rate_table = (unsigned int[]) {
2573 44100, 48000, 88200, 96000
2577 /* interface 3 (MIDI) is standard compliant */
2585 USB_DEVICE_VENDOR_SPEC(0x0763, 0x2081),
2586 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2587 /* .vendor_name = "M-Audio", */
2588 /* .product_name = "Fast Track Ultra 8R", */
2589 .ifnum = QUIRK_ANY_INTERFACE,
2590 .type = QUIRK_COMPOSITE,
2591 .data = & (const struct snd_usb_audio_quirk[]) {
2594 .type = QUIRK_AUDIO_STANDARD_MIXER,
2598 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
2599 .data = & (const struct audioformat) {
2600 .formats = SNDRV_PCM_FMTBIT_S24_3LE,
2605 .attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
2608 .rates = SNDRV_PCM_RATE_44100 |
2609 SNDRV_PCM_RATE_48000 |
2610 SNDRV_PCM_RATE_88200 |
2611 SNDRV_PCM_RATE_96000,
2615 .rate_table = (unsigned int[]) {
2616 44100, 48000, 88200, 96000
2622 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
2623 .data = & (const struct audioformat) {
2624 .formats = SNDRV_PCM_FMTBIT_S24_3LE,
2629 .attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
2632 .rates = SNDRV_PCM_RATE_44100 |
2633 SNDRV_PCM_RATE_48000 |
2634 SNDRV_PCM_RATE_88200 |
2635 SNDRV_PCM_RATE_96000,
2639 .rate_table = (unsigned int[]) {
2640 44100, 48000, 88200, 96000
2644 /* interface 3 (MIDI) is standard compliant */
2654 USB_DEVICE(0x07cf, 0x6801),
2655 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2656 .vendor_name = "Casio",
2657 .product_name = "PL-40R",
2659 .type = QUIRK_MIDI_YAMAHA
2663 /* this ID is used by several devices without a product ID */
2664 USB_DEVICE(0x07cf, 0x6802),
2665 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2666 .vendor_name = "Casio",
2667 .product_name = "Keyboard",
2669 .type = QUIRK_MIDI_YAMAHA
2673 /* Mark of the Unicorn devices */
2675 /* thanks to Robert A. Lerche <ral 'at' msbit.com> */
2676 .match_flags = USB_DEVICE_ID_MATCH_VENDOR |
2677 USB_DEVICE_ID_MATCH_PRODUCT |
2678 USB_DEVICE_ID_MATCH_DEV_SUBCLASS,
2680 .idProduct = 0x0001,
2681 .bDeviceSubClass = 2,
2682 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2683 .vendor_name = "MOTU",
2684 .product_name = "Fastlane",
2685 .ifnum = QUIRK_ANY_INTERFACE,
2686 .type = QUIRK_COMPOSITE,
2687 .data = & (const struct snd_usb_audio_quirk[]) {
2690 .type = QUIRK_MIDI_RAW_BYTES
2694 .type = QUIRK_IGNORE_INTERFACE
2703 /* Emagic devices */
2705 USB_DEVICE(0x086a, 0x0001),
2706 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2707 .vendor_name = "Emagic",
2708 /* .product_name = "Unitor8", */
2710 .type = QUIRK_MIDI_EMAGIC,
2711 .data = & (const struct snd_usb_midi_endpoint_info) {
2712 .out_cables = 0x80ff,
2718 USB_DEVICE(0x086a, 0x0002),
2719 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2720 .vendor_name = "Emagic",
2721 /* .product_name = "AMT8", */
2723 .type = QUIRK_MIDI_EMAGIC,
2724 .data = & (const struct snd_usb_midi_endpoint_info) {
2725 .out_cables = 0x80ff,
2731 USB_DEVICE(0x086a, 0x0003),
2732 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2733 .vendor_name = "Emagic",
2734 /* .product_name = "MT4", */
2736 .type = QUIRK_MIDI_EMAGIC,
2737 .data = & (const struct snd_usb_midi_endpoint_info) {
2738 .out_cables = 0x800f,
2746 USB_DEVICE_VENDOR_SPEC(0x0944, 0x0200),
2747 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2748 .vendor_name = "KORG, Inc.",
2749 /* .product_name = "PANDORA PX5D", */
2751 .type = QUIRK_MIDI_STANDARD_INTERFACE,
2756 USB_DEVICE_VENDOR_SPEC(0x0944, 0x0201),
2757 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2758 .vendor_name = "KORG, Inc.",
2759 /* .product_name = "ToneLab ST", */
2761 .type = QUIRK_MIDI_STANDARD_INTERFACE,
2767 USB_DEVICE(0x09e8, 0x0062),
2768 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2769 .vendor_name = "AKAI",
2770 .product_name = "MPD16",
2772 .type = QUIRK_MIDI_AKAI,
2776 /* TerraTec devices */
2778 USB_DEVICE_VENDOR_SPEC(0x0ccd, 0x0012),
2779 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2780 .vendor_name = "TerraTec",
2781 .product_name = "PHASE 26",
2783 .type = QUIRK_MIDI_STANDARD_INTERFACE
2787 USB_DEVICE_VENDOR_SPEC(0x0ccd, 0x0013),
2788 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2789 .vendor_name = "TerraTec",
2790 .product_name = "PHASE 26",
2792 .type = QUIRK_MIDI_STANDARD_INTERFACE
2796 USB_DEVICE_VENDOR_SPEC(0x0ccd, 0x0014),
2797 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2798 .vendor_name = "TerraTec",
2799 .product_name = "PHASE 26",
2801 .type = QUIRK_MIDI_STANDARD_INTERFACE
2805 USB_DEVICE(0x0ccd, 0x0028),
2806 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2807 .vendor_name = "TerraTec",
2808 .product_name = "Aureon5.1MkII",
2809 .ifnum = QUIRK_NO_INTERFACE
2813 USB_DEVICE(0x0ccd, 0x0035),
2814 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2815 .vendor_name = "Miditech",
2816 .product_name = "Play'n Roll",
2818 .type = QUIRK_MIDI_CME
2822 /* Stanton/N2IT Final Scratch v1 device ('Scratchamp') */
2824 USB_DEVICE(0x103d, 0x0100),
2825 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2826 .vendor_name = "Stanton",
2827 .product_name = "ScratchAmp",
2828 .ifnum = QUIRK_NO_INTERFACE
2832 USB_DEVICE(0x103d, 0x0101),
2833 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2834 .vendor_name = "Stanton",
2835 .product_name = "ScratchAmp",
2836 .ifnum = QUIRK_NO_INTERFACE
2840 /* Novation EMS devices */
2842 USB_DEVICE_VENDOR_SPEC(0x1235, 0x0001),
2843 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2844 .vendor_name = "Novation",
2845 .product_name = "ReMOTE Audio/XStation",
2847 .type = QUIRK_MIDI_NOVATION
2851 USB_DEVICE_VENDOR_SPEC(0x1235, 0x0002),
2852 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2853 .vendor_name = "Novation",
2854 .product_name = "Speedio",
2856 .type = QUIRK_MIDI_NOVATION
2860 USB_DEVICE(0x1235, 0x000e),
2861 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2862 /* .vendor_name = "Novation", */
2863 /* .product_name = "Launchpad", */
2865 .type = QUIRK_MIDI_RAW_BYTES
2869 USB_DEVICE(0x1235, 0x0018),
2870 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2871 .vendor_name = "Novation",
2872 .product_name = "Twitch",
2873 .ifnum = QUIRK_ANY_INTERFACE,
2874 .type = QUIRK_COMPOSITE,
2875 .data = (const struct snd_usb_audio_quirk[]) {
2878 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
2879 .data = & (const struct audioformat) {
2880 .formats = SNDRV_PCM_FMTBIT_S24_3LE,
2885 .attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
2887 .ep_attr = USB_ENDPOINT_XFER_ISOC,
2888 .rates = SNDRV_PCM_RATE_44100 |
2889 SNDRV_PCM_RATE_48000,
2893 .rate_table = (unsigned int[]) {
2900 .type = QUIRK_MIDI_RAW_BYTES
2909 USB_DEVICE_VENDOR_SPEC(0x1235, 0x4661),
2910 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2911 .vendor_name = "Novation",
2912 .product_name = "ReMOTE25",
2914 .type = QUIRK_MIDI_NOVATION
2918 /* Access Music devices */
2920 /* VirusTI Desktop */
2921 USB_DEVICE_VENDOR_SPEC(0x133e, 0x0815),
2922 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
2923 .ifnum = QUIRK_ANY_INTERFACE,
2924 .type = QUIRK_COMPOSITE,
2925 .data = &(const struct snd_usb_audio_quirk[]) {
2928 .type = QUIRK_MIDI_FIXED_ENDPOINT,
2929 .data = &(const struct snd_usb_midi_endpoint_info) {
2930 .out_cables = 0x0003,
2936 .type = QUIRK_IGNORE_INTERFACE
2947 /* aka. Serato Scratch Live DJ Box */
2948 USB_DEVICE(0x13e5, 0x0001),
2949 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2950 .vendor_name = "Rane",
2951 .product_name = "SL-1",
2952 .ifnum = QUIRK_NO_INTERFACE
2956 /* Native Instruments MK2 series */
2958 /* Komplete Audio 6 */
2959 .match_flags = USB_DEVICE_ID_MATCH_DEVICE,
2961 .idProduct = 0x1000,
2964 /* Traktor Audio 6 */
2965 .match_flags = USB_DEVICE_ID_MATCH_DEVICE,
2967 .idProduct = 0x1010,
2970 /* Traktor Audio 10 */
2971 .match_flags = USB_DEVICE_ID_MATCH_DEVICE,
2973 .idProduct = 0x1020,
2976 /* KeithMcMillen Stringport */
2978 USB_DEVICE(0x1f38, 0x0001),
2979 .bInterfaceClass = USB_CLASS_AUDIO,
2982 /* Miditech devices */
2984 USB_DEVICE(0x4752, 0x0011),
2985 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2986 .vendor_name = "Miditech",
2987 .product_name = "Midistart-2",
2989 .type = QUIRK_MIDI_CME
2993 /* Central Music devices */
2995 /* this ID used by both Miditech MidiStudio-2 and CME UF-x */
2996 USB_DEVICE(0x7104, 0x2202),
2997 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2999 .type = QUIRK_MIDI_CME
3003 /* Hauppauge HVR-950Q and HVR-850 */
3005 USB_DEVICE_VENDOR_SPEC(0x2040, 0x7200),
3006 .match_flags = USB_DEVICE_ID_MATCH_DEVICE |
3007 USB_DEVICE_ID_MATCH_INT_CLASS |
3008 USB_DEVICE_ID_MATCH_INT_SUBCLASS,
3009 .bInterfaceClass = USB_CLASS_AUDIO,
3010 .bInterfaceSubClass = USB_SUBCLASS_AUDIOCONTROL,
3011 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
3012 .vendor_name = "Hauppauge",
3013 .product_name = "HVR-950Q",
3014 .ifnum = QUIRK_ANY_INTERFACE,
3015 .type = QUIRK_AUDIO_ALIGN_TRANSFER,
3019 USB_DEVICE_VENDOR_SPEC(0x2040, 0x7240),
3020 .match_flags = USB_DEVICE_ID_MATCH_DEVICE |
3021 USB_DEVICE_ID_MATCH_INT_CLASS |
3022 USB_DEVICE_ID_MATCH_INT_SUBCLASS,
3023 .bInterfaceClass = USB_CLASS_AUDIO,
3024 .bInterfaceSubClass = USB_SUBCLASS_AUDIOCONTROL,
3025 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
3026 .vendor_name = "Hauppauge",
3027 .product_name = "HVR-850",
3028 .ifnum = QUIRK_ANY_INTERFACE,
3029 .type = QUIRK_AUDIO_ALIGN_TRANSFER,
3033 USB_DEVICE_VENDOR_SPEC(0x2040, 0x7210),
3034 .match_flags = USB_DEVICE_ID_MATCH_DEVICE |
3035 USB_DEVICE_ID_MATCH_INT_CLASS |
3036 USB_DEVICE_ID_MATCH_INT_SUBCLASS,
3037 .bInterfaceClass = USB_CLASS_AUDIO,
3038 .bInterfaceSubClass = USB_SUBCLASS_AUDIOCONTROL,
3039 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
3040 .vendor_name = "Hauppauge",
3041 .product_name = "HVR-950Q",
3042 .ifnum = QUIRK_ANY_INTERFACE,
3043 .type = QUIRK_AUDIO_ALIGN_TRANSFER,
3047 USB_DEVICE_VENDOR_SPEC(0x2040, 0x7217),
3048 .match_flags = USB_DEVICE_ID_MATCH_DEVICE |
3049 USB_DEVICE_ID_MATCH_INT_CLASS |
3050 USB_DEVICE_ID_MATCH_INT_SUBCLASS,
3051 .bInterfaceClass = USB_CLASS_AUDIO,
3052 .bInterfaceSubClass = USB_SUBCLASS_AUDIOCONTROL,
3053 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
3054 .vendor_name = "Hauppauge",
3055 .product_name = "HVR-950Q",
3056 .ifnum = QUIRK_ANY_INTERFACE,
3057 .type = QUIRK_AUDIO_ALIGN_TRANSFER,
3061 USB_DEVICE_VENDOR_SPEC(0x2040, 0x721b),
3062 .match_flags = USB_DEVICE_ID_MATCH_DEVICE |
3063 USB_DEVICE_ID_MATCH_INT_CLASS |
3064 USB_DEVICE_ID_MATCH_INT_SUBCLASS,
3065 .bInterfaceClass = USB_CLASS_AUDIO,
3066 .bInterfaceSubClass = USB_SUBCLASS_AUDIOCONTROL,
3067 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
3068 .vendor_name = "Hauppauge",
3069 .product_name = "HVR-950Q",
3070 .ifnum = QUIRK_ANY_INTERFACE,
3071 .type = QUIRK_AUDIO_ALIGN_TRANSFER,
3075 USB_DEVICE_VENDOR_SPEC(0x2040, 0x721e),
3076 .match_flags = USB_DEVICE_ID_MATCH_DEVICE |
3077 USB_DEVICE_ID_MATCH_INT_CLASS |
3078 USB_DEVICE_ID_MATCH_INT_SUBCLASS,
3079 .bInterfaceClass = USB_CLASS_AUDIO,
3080 .bInterfaceSubClass = USB_SUBCLASS_AUDIOCONTROL,
3081 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
3082 .vendor_name = "Hauppauge",
3083 .product_name = "HVR-950Q",
3084 .ifnum = QUIRK_ANY_INTERFACE,
3085 .type = QUIRK_AUDIO_ALIGN_TRANSFER,
3089 USB_DEVICE_VENDOR_SPEC(0x2040, 0x721f),
3090 .match_flags = USB_DEVICE_ID_MATCH_DEVICE |
3091 USB_DEVICE_ID_MATCH_INT_CLASS |
3092 USB_DEVICE_ID_MATCH_INT_SUBCLASS,
3093 .bInterfaceClass = USB_CLASS_AUDIO,
3094 .bInterfaceSubClass = USB_SUBCLASS_AUDIOCONTROL,
3095 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
3096 .vendor_name = "Hauppauge",
3097 .product_name = "HVR-950Q",
3098 .ifnum = QUIRK_ANY_INTERFACE,
3099 .type = QUIRK_AUDIO_ALIGN_TRANSFER,
3103 USB_DEVICE_VENDOR_SPEC(0x2040, 0x7280),
3104 .match_flags = USB_DEVICE_ID_MATCH_DEVICE |
3105 USB_DEVICE_ID_MATCH_INT_CLASS |
3106 USB_DEVICE_ID_MATCH_INT_SUBCLASS,
3107 .bInterfaceClass = USB_CLASS_AUDIO,
3108 .bInterfaceSubClass = USB_SUBCLASS_AUDIOCONTROL,
3109 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
3110 .vendor_name = "Hauppauge",
3111 .product_name = "HVR-950Q",
3112 .ifnum = QUIRK_ANY_INTERFACE,
3113 .type = QUIRK_AUDIO_ALIGN_TRANSFER,
3117 USB_DEVICE_VENDOR_SPEC(0x0fd9, 0x0008),
3118 .match_flags = USB_DEVICE_ID_MATCH_DEVICE |
3119 USB_DEVICE_ID_MATCH_INT_CLASS |
3120 USB_DEVICE_ID_MATCH_INT_SUBCLASS,
3121 .bInterfaceClass = USB_CLASS_AUDIO,
3122 .bInterfaceSubClass = USB_SUBCLASS_AUDIOCONTROL,
3123 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
3124 .vendor_name = "Hauppauge",
3125 .product_name = "HVR-950Q",
3126 .ifnum = QUIRK_ANY_INTERFACE,
3127 .type = QUIRK_AUDIO_ALIGN_TRANSFER,
3131 /* Digidesign Mbox */
3133 /* Thanks to Clemens Ladisch <clemens@ladisch.de> */
3134 USB_DEVICE(0x0dba, 0x1000),
3135 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
3136 .vendor_name = "Digidesign",
3137 .product_name = "MBox",
3138 .ifnum = QUIRK_ANY_INTERFACE,
3139 .type = QUIRK_COMPOSITE,
3140 .data = (const struct snd_usb_audio_quirk[]){
3143 .type = QUIRK_IGNORE_INTERFACE,
3147 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
3148 .data = &(const struct audioformat) {
3149 .formats = SNDRV_PCM_FMTBIT_S24_3BE,
3154 .attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
3157 .rates = SNDRV_PCM_RATE_44100 |
3158 SNDRV_PCM_RATE_48000,
3162 .rate_table = (unsigned int[]) {
3175 /* DIGIDESIGN MBOX 2 */
3177 USB_DEVICE(0x0dba, 0x3000),
3178 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
3179 .vendor_name = "Digidesign",
3180 .product_name = "Mbox 2",
3181 .ifnum = QUIRK_ANY_INTERFACE,
3182 .type = QUIRK_COMPOSITE,
3183 .data = (const struct snd_usb_audio_quirk[]) {
3186 .type = QUIRK_IGNORE_INTERFACE
3190 .type = QUIRK_IGNORE_INTERFACE
3194 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
3195 .data = &(const struct audioformat) {
3196 .formats = SNDRV_PCM_FMTBIT_S24_3BE,
3203 .ep_attr = USB_ENDPOINT_SYNC_ASYNC,
3204 .rates = SNDRV_PCM_RATE_48000,
3208 .rate_table = (unsigned int[]) {
3215 .type = QUIRK_IGNORE_INTERFACE
3219 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
3220 .data = &(const struct audioformat) {
3221 .formats = SNDRV_PCM_FMTBIT_S24_3BE,
3226 .attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
3228 .ep_attr = USB_ENDPOINT_SYNC_SYNC,
3229 .rates = SNDRV_PCM_RATE_48000,
3233 .rate_table = (unsigned int[]) {
3240 .type = QUIRK_IGNORE_INTERFACE
3244 .type = QUIRK_MIDI_MIDIMAN,
3245 .data = &(const struct snd_usb_midi_endpoint_info) {
3247 .out_cables = 0x0001,
3249 .in_interval = 0x01,
3260 /* Tascam US122 MKII - playback-only support */
3261 .match_flags = USB_DEVICE_ID_MATCH_DEVICE,
3263 .idProduct = 0x8021,
3264 .bInterfaceClass = USB_CLASS_AUDIO,
3265 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
3266 .vendor_name = "TASCAM",
3267 .product_name = "US122 MKII",
3268 .ifnum = QUIRK_ANY_INTERFACE,
3269 .type = QUIRK_COMPOSITE,
3270 .data = (const struct snd_usb_audio_quirk[]) {
3273 .type = QUIRK_IGNORE_INTERFACE
3277 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
3278 .data = &(const struct audioformat) {
3279 .formats = SNDRV_PCM_FMTBIT_S24_3LE,
3284 .attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
3286 .ep_attr = USB_ENDPOINT_XFER_ISOC,
3287 .rates = SNDRV_PCM_RATE_44100 |
3288 SNDRV_PCM_RATE_48000 |
3289 SNDRV_PCM_RATE_88200 |
3290 SNDRV_PCM_RATE_96000,
3294 .rate_table = (unsigned int[]) {
3295 44100, 48000, 88200, 96000
3306 /* Microsoft XboxLive Headset/Xbox Communicator */
3308 USB_DEVICE(0x045e, 0x0283),
3309 .bInterfaceClass = USB_CLASS_PER_INTERFACE,
3310 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
3311 .vendor_name = "Microsoft",
3312 .product_name = "XboxLive Headset/Xbox Communicator",
3313 .ifnum = QUIRK_ANY_INTERFACE,
3314 .type = QUIRK_COMPOSITE,
3315 .data = &(const struct snd_usb_audio_quirk[]) {
3319 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
3320 .data = &(const struct audioformat) {
3321 .formats = SNDRV_PCM_FMTBIT_S16_LE,
3329 .rates = SNDRV_PCM_RATE_CONTINUOUS,
3337 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
3338 .data = &(const struct audioformat) {
3339 .formats = SNDRV_PCM_FMTBIT_S16_LE,
3347 .rates = SNDRV_PCM_RATE_CONTINUOUS,
3361 USB_DEVICE(0x200c, 0x100b),
3362 .bInterfaceClass = USB_CLASS_PER_INTERFACE,
3363 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
3364 .ifnum = QUIRK_ANY_INTERFACE,
3365 .type = QUIRK_COMPOSITE,
3366 .data = &(const struct snd_usb_audio_quirk[]) {
3369 .type = QUIRK_AUDIO_STANDARD_MIXER,
3373 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
3374 .data = &(const struct audioformat) {
3375 .formats = SNDRV_PCM_FMTBIT_S24_3LE,
3380 .attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
3382 .ep_attr = USB_ENDPOINT_SYNC_ADAPTIVE,
3383 .rates = SNDRV_PCM_RATE_44100 |
3384 SNDRV_PCM_RATE_48000,
3388 .rate_table = (unsigned int[]) {
3402 * Focusrite Scarlett 18i6
3404 * Avoid mixer creation, which otherwise fails because some of
3405 * the interface descriptor subtypes for interface 0 are
3406 * unknown. That should be fixed or worked-around but this at
3407 * least allows the device to be used successfully with a DAW
3408 * and an external mixer. See comments below about other
3409 * ignored interfaces.
3411 USB_DEVICE(0x1235, 0x8004),
3412 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
3413 .vendor_name = "Focusrite",
3414 .product_name = "Scarlett 18i6",
3415 .ifnum = QUIRK_ANY_INTERFACE,
3416 .type = QUIRK_COMPOSITE,
3417 .data = & (const struct snd_usb_audio_quirk[]) {
3419 /* InterfaceSubClass 1 (Control Device) */
3421 .type = QUIRK_IGNORE_INTERFACE
3425 .type = QUIRK_AUDIO_STANDARD_INTERFACE
3429 .type = QUIRK_AUDIO_STANDARD_INTERFACE
3432 /* InterfaceSubClass 1 (Control Device) */
3434 .type = QUIRK_IGNORE_INTERFACE
3438 .type = QUIRK_MIDI_STANDARD_INTERFACE
3441 /* InterfaceSubClass 1 (Device Firmware Update) */
3443 .type = QUIRK_IGNORE_INTERFACE
3454 * Some USB MIDI devices don't have an audio control interface,
3455 * so we have to grab MIDI streaming interfaces here.
3457 .match_flags = USB_DEVICE_ID_MATCH_INT_CLASS |
3458 USB_DEVICE_ID_MATCH_INT_SUBCLASS,
3459 .bInterfaceClass = USB_CLASS_AUDIO,
3460 .bInterfaceSubClass = USB_SUBCLASS_MIDISTREAMING,
3461 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
3462 .ifnum = QUIRK_ANY_INTERFACE,
3463 .type = QUIRK_MIDI_STANDARD_INTERFACE
3467 #undef USB_DEVICE_VENDOR_SPEC