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 /* Steinberg devices */
2779 USB_DEVICE_VENDOR_SPEC(0x0a4e, 0x2040),
2780 .driver_info
= (unsigned long) & (const struct snd_usb_audio_quirk
) {
2781 .ifnum
= QUIRK_ANY_INTERFACE
,
2782 .type
= QUIRK_COMPOSITE
,
2783 .data
= & (const struct snd_usb_audio_quirk
[]) {
2786 .type
= QUIRK_AUDIO_STANDARD_INTERFACE
2790 .type
= QUIRK_AUDIO_STANDARD_INTERFACE
2794 .type
= QUIRK_AUDIO_STANDARD_INTERFACE
2798 .type
= QUIRK_MIDI_FIXED_ENDPOINT
,
2799 .data
= &(const struct snd_usb_midi_endpoint_info
) {
2800 .out_cables
= 0x0001,
2812 USB_DEVICE_VENDOR_SPEC(0x0a4e, 0x4040),
2813 .driver_info
= (unsigned long) & (const struct snd_usb_audio_quirk
) {
2814 .ifnum
= QUIRK_ANY_INTERFACE
,
2815 .type
= QUIRK_COMPOSITE
,
2816 .data
= & (const struct snd_usb_audio_quirk
[]) {
2819 .type
= QUIRK_AUDIO_STANDARD_INTERFACE
2823 .type
= QUIRK_AUDIO_STANDARD_INTERFACE
2827 .type
= QUIRK_AUDIO_STANDARD_INTERFACE
2831 .type
= QUIRK_MIDI_FIXED_ENDPOINT
,
2832 .data
= &(const struct snd_usb_midi_endpoint_info
) {
2833 .out_cables
= 0x0001,
2844 /* TerraTec devices */
2846 USB_DEVICE_VENDOR_SPEC(0x0ccd, 0x0012),
2847 .driver_info
= (unsigned long) & (const struct snd_usb_audio_quirk
) {
2848 .vendor_name
= "TerraTec",
2849 .product_name
= "PHASE 26",
2851 .type
= QUIRK_MIDI_STANDARD_INTERFACE
2855 USB_DEVICE_VENDOR_SPEC(0x0ccd, 0x0013),
2856 .driver_info
= (unsigned long) & (const struct snd_usb_audio_quirk
) {
2857 .vendor_name
= "TerraTec",
2858 .product_name
= "PHASE 26",
2860 .type
= QUIRK_MIDI_STANDARD_INTERFACE
2864 USB_DEVICE_VENDOR_SPEC(0x0ccd, 0x0014),
2865 .driver_info
= (unsigned long) & (const struct snd_usb_audio_quirk
) {
2866 .vendor_name
= "TerraTec",
2867 .product_name
= "PHASE 26",
2869 .type
= QUIRK_MIDI_STANDARD_INTERFACE
2873 USB_DEVICE(0x0ccd, 0x0028),
2874 .driver_info
= (unsigned long) & (const struct snd_usb_audio_quirk
) {
2875 .vendor_name
= "TerraTec",
2876 .product_name
= "Aureon5.1MkII",
2877 .ifnum
= QUIRK_NO_INTERFACE
2881 USB_DEVICE(0x0ccd, 0x0035),
2882 .driver_info
= (unsigned long) & (const struct snd_usb_audio_quirk
) {
2883 .vendor_name
= "Miditech",
2884 .product_name
= "Play'n Roll",
2886 .type
= QUIRK_MIDI_CME
2890 /* Stanton/N2IT Final Scratch v1 device ('Scratchamp') */
2892 USB_DEVICE(0x103d, 0x0100),
2893 .driver_info
= (unsigned long) & (const struct snd_usb_audio_quirk
) {
2894 .vendor_name
= "Stanton",
2895 .product_name
= "ScratchAmp",
2896 .ifnum
= QUIRK_NO_INTERFACE
2900 USB_DEVICE(0x103d, 0x0101),
2901 .driver_info
= (unsigned long) & (const struct snd_usb_audio_quirk
) {
2902 .vendor_name
= "Stanton",
2903 .product_name
= "ScratchAmp",
2904 .ifnum
= QUIRK_NO_INTERFACE
2908 /* Novation EMS devices */
2910 USB_DEVICE_VENDOR_SPEC(0x1235, 0x0001),
2911 .driver_info
= (unsigned long) & (const struct snd_usb_audio_quirk
) {
2912 .vendor_name
= "Novation",
2913 .product_name
= "ReMOTE Audio/XStation",
2915 .type
= QUIRK_MIDI_NOVATION
2919 USB_DEVICE_VENDOR_SPEC(0x1235, 0x0002),
2920 .driver_info
= (unsigned long) & (const struct snd_usb_audio_quirk
) {
2921 .vendor_name
= "Novation",
2922 .product_name
= "Speedio",
2924 .type
= QUIRK_MIDI_NOVATION
2928 USB_DEVICE(0x1235, 0x000e),
2929 .driver_info
= (unsigned long) & (const struct snd_usb_audio_quirk
) {
2930 /* .vendor_name = "Novation", */
2931 /* .product_name = "Launchpad", */
2933 .type
= QUIRK_MIDI_RAW_BYTES
2937 USB_DEVICE(0x1235, 0x0018),
2938 .driver_info
= (unsigned long) & (const struct snd_usb_audio_quirk
) {
2939 .vendor_name
= "Novation",
2940 .product_name
= "Twitch",
2941 .ifnum
= QUIRK_ANY_INTERFACE
,
2942 .type
= QUIRK_COMPOSITE
,
2943 .data
= (const struct snd_usb_audio_quirk
[]) {
2946 .type
= QUIRK_AUDIO_FIXED_ENDPOINT
,
2947 .data
= & (const struct audioformat
) {
2948 .formats
= SNDRV_PCM_FMTBIT_S24_3LE
,
2953 .attributes
= UAC_EP_CS_ATTR_SAMPLE_RATE
,
2955 .ep_attr
= USB_ENDPOINT_XFER_ISOC
,
2956 .rates
= SNDRV_PCM_RATE_44100
|
2957 SNDRV_PCM_RATE_48000
,
2961 .rate_table
= (unsigned int[]) {
2968 .type
= QUIRK_MIDI_RAW_BYTES
2977 USB_DEVICE_VENDOR_SPEC(0x1235, 0x4661),
2978 .driver_info
= (unsigned long) & (const struct snd_usb_audio_quirk
) {
2979 .vendor_name
= "Novation",
2980 .product_name
= "ReMOTE25",
2982 .type
= QUIRK_MIDI_NOVATION
2986 /* Access Music devices */
2988 /* VirusTI Desktop */
2989 USB_DEVICE_VENDOR_SPEC(0x133e, 0x0815),
2990 .driver_info
= (unsigned long) &(const struct snd_usb_audio_quirk
) {
2991 .ifnum
= QUIRK_ANY_INTERFACE
,
2992 .type
= QUIRK_COMPOSITE
,
2993 .data
= &(const struct snd_usb_audio_quirk
[]) {
2996 .type
= QUIRK_MIDI_FIXED_ENDPOINT
,
2997 .data
= &(const struct snd_usb_midi_endpoint_info
) {
2998 .out_cables
= 0x0003,
3004 .type
= QUIRK_IGNORE_INTERFACE
3015 /* aka. Serato Scratch Live DJ Box */
3016 USB_DEVICE(0x13e5, 0x0001),
3017 .driver_info
= (unsigned long) & (const struct snd_usb_audio_quirk
) {
3018 .vendor_name
= "Rane",
3019 .product_name
= "SL-1",
3020 .ifnum
= QUIRK_NO_INTERFACE
3024 /* Native Instruments MK2 series */
3026 /* Komplete Audio 6 */
3027 .match_flags
= USB_DEVICE_ID_MATCH_DEVICE
,
3029 .idProduct
= 0x1000,
3032 /* Traktor Audio 6 */
3033 .match_flags
= USB_DEVICE_ID_MATCH_DEVICE
,
3035 .idProduct
= 0x1010,
3038 /* Traktor Audio 10 */
3039 .match_flags
= USB_DEVICE_ID_MATCH_DEVICE
,
3041 .idProduct
= 0x1020,
3044 /* QinHeng devices */
3046 USB_DEVICE(0x1a86, 0x752d),
3047 .driver_info
= (unsigned long) &(const struct snd_usb_audio_quirk
) {
3048 .vendor_name
= "QinHeng",
3049 .product_name
= "CH345",
3051 .type
= QUIRK_MIDI_CH345
3055 /* KeithMcMillen Stringport */
3057 USB_DEVICE(0x1f38, 0x0001),
3058 .bInterfaceClass
= USB_CLASS_AUDIO
,
3061 /* Miditech devices */
3063 USB_DEVICE(0x4752, 0x0011),
3064 .driver_info
= (unsigned long) & (const struct snd_usb_audio_quirk
) {
3065 .vendor_name
= "Miditech",
3066 .product_name
= "Midistart-2",
3068 .type
= QUIRK_MIDI_CME
3072 /* Central Music devices */
3074 /* this ID used by both Miditech MidiStudio-2 and CME UF-x */
3075 USB_DEVICE(0x7104, 0x2202),
3076 .driver_info
= (unsigned long) & (const struct snd_usb_audio_quirk
) {
3078 .type
= QUIRK_MIDI_CME
3082 /* Hauppauge HVR-950Q and HVR-850 */
3084 USB_DEVICE_VENDOR_SPEC(0x2040, 0x7200),
3085 .match_flags
= USB_DEVICE_ID_MATCH_DEVICE
|
3086 USB_DEVICE_ID_MATCH_INT_CLASS
|
3087 USB_DEVICE_ID_MATCH_INT_SUBCLASS
,
3088 .bInterfaceClass
= USB_CLASS_AUDIO
,
3089 .bInterfaceSubClass
= USB_SUBCLASS_AUDIOCONTROL
,
3090 .driver_info
= (unsigned long) &(const struct snd_usb_audio_quirk
) {
3091 .vendor_name
= "Hauppauge",
3092 .product_name
= "HVR-950Q",
3093 .ifnum
= QUIRK_ANY_INTERFACE
,
3094 .type
= QUIRK_AUDIO_ALIGN_TRANSFER
,
3098 USB_DEVICE_VENDOR_SPEC(0x2040, 0x7240),
3099 .match_flags
= USB_DEVICE_ID_MATCH_DEVICE
|
3100 USB_DEVICE_ID_MATCH_INT_CLASS
|
3101 USB_DEVICE_ID_MATCH_INT_SUBCLASS
,
3102 .bInterfaceClass
= USB_CLASS_AUDIO
,
3103 .bInterfaceSubClass
= USB_SUBCLASS_AUDIOCONTROL
,
3104 .driver_info
= (unsigned long) &(const struct snd_usb_audio_quirk
) {
3105 .vendor_name
= "Hauppauge",
3106 .product_name
= "HVR-850",
3107 .ifnum
= QUIRK_ANY_INTERFACE
,
3108 .type
= QUIRK_AUDIO_ALIGN_TRANSFER
,
3112 USB_DEVICE_VENDOR_SPEC(0x2040, 0x7210),
3113 .match_flags
= USB_DEVICE_ID_MATCH_DEVICE
|
3114 USB_DEVICE_ID_MATCH_INT_CLASS
|
3115 USB_DEVICE_ID_MATCH_INT_SUBCLASS
,
3116 .bInterfaceClass
= USB_CLASS_AUDIO
,
3117 .bInterfaceSubClass
= USB_SUBCLASS_AUDIOCONTROL
,
3118 .driver_info
= (unsigned long) &(const struct snd_usb_audio_quirk
) {
3119 .vendor_name
= "Hauppauge",
3120 .product_name
= "HVR-950Q",
3121 .ifnum
= QUIRK_ANY_INTERFACE
,
3122 .type
= QUIRK_AUDIO_ALIGN_TRANSFER
,
3126 USB_DEVICE_VENDOR_SPEC(0x2040, 0x7217),
3127 .match_flags
= USB_DEVICE_ID_MATCH_DEVICE
|
3128 USB_DEVICE_ID_MATCH_INT_CLASS
|
3129 USB_DEVICE_ID_MATCH_INT_SUBCLASS
,
3130 .bInterfaceClass
= USB_CLASS_AUDIO
,
3131 .bInterfaceSubClass
= USB_SUBCLASS_AUDIOCONTROL
,
3132 .driver_info
= (unsigned long) &(const struct snd_usb_audio_quirk
) {
3133 .vendor_name
= "Hauppauge",
3134 .product_name
= "HVR-950Q",
3135 .ifnum
= QUIRK_ANY_INTERFACE
,
3136 .type
= QUIRK_AUDIO_ALIGN_TRANSFER
,
3140 USB_DEVICE_VENDOR_SPEC(0x2040, 0x721b),
3141 .match_flags
= USB_DEVICE_ID_MATCH_DEVICE
|
3142 USB_DEVICE_ID_MATCH_INT_CLASS
|
3143 USB_DEVICE_ID_MATCH_INT_SUBCLASS
,
3144 .bInterfaceClass
= USB_CLASS_AUDIO
,
3145 .bInterfaceSubClass
= USB_SUBCLASS_AUDIOCONTROL
,
3146 .driver_info
= (unsigned long) &(const struct snd_usb_audio_quirk
) {
3147 .vendor_name
= "Hauppauge",
3148 .product_name
= "HVR-950Q",
3149 .ifnum
= QUIRK_ANY_INTERFACE
,
3150 .type
= QUIRK_AUDIO_ALIGN_TRANSFER
,
3154 USB_DEVICE_VENDOR_SPEC(0x2040, 0x721e),
3155 .match_flags
= USB_DEVICE_ID_MATCH_DEVICE
|
3156 USB_DEVICE_ID_MATCH_INT_CLASS
|
3157 USB_DEVICE_ID_MATCH_INT_SUBCLASS
,
3158 .bInterfaceClass
= USB_CLASS_AUDIO
,
3159 .bInterfaceSubClass
= USB_SUBCLASS_AUDIOCONTROL
,
3160 .driver_info
= (unsigned long) &(const struct snd_usb_audio_quirk
) {
3161 .vendor_name
= "Hauppauge",
3162 .product_name
= "HVR-950Q",
3163 .ifnum
= QUIRK_ANY_INTERFACE
,
3164 .type
= QUIRK_AUDIO_ALIGN_TRANSFER
,
3168 USB_DEVICE_VENDOR_SPEC(0x2040, 0x721f),
3169 .match_flags
= USB_DEVICE_ID_MATCH_DEVICE
|
3170 USB_DEVICE_ID_MATCH_INT_CLASS
|
3171 USB_DEVICE_ID_MATCH_INT_SUBCLASS
,
3172 .bInterfaceClass
= USB_CLASS_AUDIO
,
3173 .bInterfaceSubClass
= USB_SUBCLASS_AUDIOCONTROL
,
3174 .driver_info
= (unsigned long) &(const struct snd_usb_audio_quirk
) {
3175 .vendor_name
= "Hauppauge",
3176 .product_name
= "HVR-950Q",
3177 .ifnum
= QUIRK_ANY_INTERFACE
,
3178 .type
= QUIRK_AUDIO_ALIGN_TRANSFER
,
3182 USB_DEVICE_VENDOR_SPEC(0x2040, 0x7280),
3183 .match_flags
= USB_DEVICE_ID_MATCH_DEVICE
|
3184 USB_DEVICE_ID_MATCH_INT_CLASS
|
3185 USB_DEVICE_ID_MATCH_INT_SUBCLASS
,
3186 .bInterfaceClass
= USB_CLASS_AUDIO
,
3187 .bInterfaceSubClass
= USB_SUBCLASS_AUDIOCONTROL
,
3188 .driver_info
= (unsigned long) &(const struct snd_usb_audio_quirk
) {
3189 .vendor_name
= "Hauppauge",
3190 .product_name
= "HVR-950Q",
3191 .ifnum
= QUIRK_ANY_INTERFACE
,
3192 .type
= QUIRK_AUDIO_ALIGN_TRANSFER
,
3196 USB_DEVICE_VENDOR_SPEC(0x0fd9, 0x0008),
3197 .match_flags
= USB_DEVICE_ID_MATCH_DEVICE
|
3198 USB_DEVICE_ID_MATCH_INT_CLASS
|
3199 USB_DEVICE_ID_MATCH_INT_SUBCLASS
,
3200 .bInterfaceClass
= USB_CLASS_AUDIO
,
3201 .bInterfaceSubClass
= USB_SUBCLASS_AUDIOCONTROL
,
3202 .driver_info
= (unsigned long) &(const struct snd_usb_audio_quirk
) {
3203 .vendor_name
= "Hauppauge",
3204 .product_name
= "HVR-950Q",
3205 .ifnum
= QUIRK_ANY_INTERFACE
,
3206 .type
= QUIRK_AUDIO_ALIGN_TRANSFER
,
3210 /* Digidesign Mbox */
3212 /* Thanks to Clemens Ladisch <clemens@ladisch.de> */
3213 USB_DEVICE(0x0dba, 0x1000),
3214 .driver_info
= (unsigned long) &(const struct snd_usb_audio_quirk
) {
3215 .vendor_name
= "Digidesign",
3216 .product_name
= "MBox",
3217 .ifnum
= QUIRK_ANY_INTERFACE
,
3218 .type
= QUIRK_COMPOSITE
,
3219 .data
= (const struct snd_usb_audio_quirk
[]){
3222 .type
= QUIRK_IGNORE_INTERFACE
,
3226 .type
= QUIRK_AUDIO_FIXED_ENDPOINT
,
3227 .data
= &(const struct audioformat
) {
3228 .formats
= SNDRV_PCM_FMTBIT_S24_3BE
,
3233 .attributes
= UAC_EP_CS_ATTR_SAMPLE_RATE
,
3236 .rates
= SNDRV_PCM_RATE_44100
|
3237 SNDRV_PCM_RATE_48000
,
3241 .rate_table
= (unsigned int[]) {
3254 /* DIGIDESIGN MBOX 2 */
3256 USB_DEVICE(0x0dba, 0x3000),
3257 .driver_info
= (unsigned long) &(const struct snd_usb_audio_quirk
) {
3258 .vendor_name
= "Digidesign",
3259 .product_name
= "Mbox 2",
3260 .ifnum
= QUIRK_ANY_INTERFACE
,
3261 .type
= QUIRK_COMPOSITE
,
3262 .data
= (const struct snd_usb_audio_quirk
[]) {
3265 .type
= QUIRK_IGNORE_INTERFACE
3269 .type
= QUIRK_IGNORE_INTERFACE
3273 .type
= QUIRK_AUDIO_FIXED_ENDPOINT
,
3274 .data
= &(const struct audioformat
) {
3275 .formats
= SNDRV_PCM_FMTBIT_S24_3BE
,
3282 .ep_attr
= USB_ENDPOINT_SYNC_ASYNC
,
3283 .rates
= SNDRV_PCM_RATE_48000
,
3287 .rate_table
= (unsigned int[]) {
3294 .type
= QUIRK_IGNORE_INTERFACE
3298 .type
= QUIRK_AUDIO_FIXED_ENDPOINT
,
3299 .data
= &(const struct audioformat
) {
3300 .formats
= SNDRV_PCM_FMTBIT_S24_3BE
,
3305 .attributes
= UAC_EP_CS_ATTR_SAMPLE_RATE
,
3307 .ep_attr
= USB_ENDPOINT_SYNC_SYNC
,
3308 .rates
= SNDRV_PCM_RATE_48000
,
3312 .rate_table
= (unsigned int[]) {
3319 .type
= QUIRK_IGNORE_INTERFACE
3323 .type
= QUIRK_MIDI_MIDIMAN
,
3324 .data
= &(const struct snd_usb_midi_endpoint_info
) {
3326 .out_cables
= 0x0001,
3328 .in_interval
= 0x01,
3339 /* Tascam US122 MKII - playback-only support */
3340 .match_flags
= USB_DEVICE_ID_MATCH_DEVICE
,
3342 .idProduct
= 0x8021,
3343 .bInterfaceClass
= USB_CLASS_AUDIO
,
3344 .driver_info
= (unsigned long) &(const struct snd_usb_audio_quirk
) {
3345 .vendor_name
= "TASCAM",
3346 .product_name
= "US122 MKII",
3347 .ifnum
= QUIRK_ANY_INTERFACE
,
3348 .type
= QUIRK_COMPOSITE
,
3349 .data
= (const struct snd_usb_audio_quirk
[]) {
3352 .type
= QUIRK_IGNORE_INTERFACE
3356 .type
= QUIRK_AUDIO_FIXED_ENDPOINT
,
3357 .data
= &(const struct audioformat
) {
3358 .formats
= SNDRV_PCM_FMTBIT_S24_3LE
,
3363 .attributes
= UAC_EP_CS_ATTR_SAMPLE_RATE
,
3365 .ep_attr
= USB_ENDPOINT_XFER_ISOC
,
3366 .rates
= SNDRV_PCM_RATE_44100
|
3367 SNDRV_PCM_RATE_48000
|
3368 SNDRV_PCM_RATE_88200
|
3369 SNDRV_PCM_RATE_96000
,
3373 .rate_table
= (unsigned int[]) {
3374 44100, 48000, 88200, 96000
3385 /* Microsoft XboxLive Headset/Xbox Communicator */
3387 USB_DEVICE(0x045e, 0x0283),
3388 .bInterfaceClass
= USB_CLASS_PER_INTERFACE
,
3389 .driver_info
= (unsigned long) &(const struct snd_usb_audio_quirk
) {
3390 .vendor_name
= "Microsoft",
3391 .product_name
= "XboxLive Headset/Xbox Communicator",
3392 .ifnum
= QUIRK_ANY_INTERFACE
,
3393 .type
= QUIRK_COMPOSITE
,
3394 .data
= &(const struct snd_usb_audio_quirk
[]) {
3398 .type
= QUIRK_AUDIO_FIXED_ENDPOINT
,
3399 .data
= &(const struct audioformat
) {
3400 .formats
= SNDRV_PCM_FMTBIT_S16_LE
,
3408 .rates
= SNDRV_PCM_RATE_CONTINUOUS
,
3416 .type
= QUIRK_AUDIO_FIXED_ENDPOINT
,
3417 .data
= &(const struct audioformat
) {
3418 .formats
= SNDRV_PCM_FMTBIT_S16_LE
,
3426 .rates
= SNDRV_PCM_RATE_CONTINUOUS
,
3440 USB_DEVICE(0x200c, 0x100b),
3441 .bInterfaceClass
= USB_CLASS_PER_INTERFACE
,
3442 .driver_info
= (unsigned long) &(const struct snd_usb_audio_quirk
) {
3443 .ifnum
= QUIRK_ANY_INTERFACE
,
3444 .type
= QUIRK_COMPOSITE
,
3445 .data
= &(const struct snd_usb_audio_quirk
[]) {
3448 .type
= QUIRK_AUDIO_STANDARD_MIXER
,
3452 .type
= QUIRK_AUDIO_FIXED_ENDPOINT
,
3453 .data
= &(const struct audioformat
) {
3454 .formats
= SNDRV_PCM_FMTBIT_S24_3LE
,
3459 .attributes
= UAC_EP_CS_ATTR_SAMPLE_RATE
,
3461 .ep_attr
= USB_ENDPOINT_SYNC_ADAPTIVE
,
3462 .rates
= SNDRV_PCM_RATE_44100
|
3463 SNDRV_PCM_RATE_48000
,
3467 .rate_table
= (unsigned int[]) {
3481 * Focusrite Scarlett 18i6
3483 * Avoid mixer creation, which otherwise fails because some of
3484 * the interface descriptor subtypes for interface 0 are
3485 * unknown. That should be fixed or worked-around but this at
3486 * least allows the device to be used successfully with a DAW
3487 * and an external mixer. See comments below about other
3488 * ignored interfaces.
3490 USB_DEVICE(0x1235, 0x8004),
3491 .driver_info
= (unsigned long) & (const struct snd_usb_audio_quirk
) {
3492 .vendor_name
= "Focusrite",
3493 .product_name
= "Scarlett 18i6",
3494 .ifnum
= QUIRK_ANY_INTERFACE
,
3495 .type
= QUIRK_COMPOSITE
,
3496 .data
= & (const struct snd_usb_audio_quirk
[]) {
3498 /* InterfaceSubClass 1 (Control Device) */
3500 .type
= QUIRK_IGNORE_INTERFACE
3504 .type
= QUIRK_AUDIO_STANDARD_INTERFACE
3508 .type
= QUIRK_AUDIO_STANDARD_INTERFACE
3511 /* InterfaceSubClass 1 (Control Device) */
3513 .type
= QUIRK_IGNORE_INTERFACE
3517 .type
= QUIRK_MIDI_STANDARD_INTERFACE
3520 /* InterfaceSubClass 1 (Device Firmware Update) */
3522 .type
= QUIRK_IGNORE_INTERFACE
3533 * Some USB MIDI devices don't have an audio control interface,
3534 * so we have to grab MIDI streaming interfaces here.
3536 .match_flags
= USB_DEVICE_ID_MATCH_INT_CLASS
|
3537 USB_DEVICE_ID_MATCH_INT_SUBCLASS
,
3538 .bInterfaceClass
= USB_CLASS_AUDIO
,
3539 .bInterfaceSubClass
= USB_SUBCLASS_MIDISTREAMING
,
3540 .driver_info
= (unsigned long) & (const struct snd_usb_audio_quirk
) {
3541 .ifnum
= QUIRK_ANY_INTERFACE
,
3542 .type
= QUIRK_MIDI_STANDARD_INTERFACE
3546 #undef USB_DEVICE_VENDOR_SPEC