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
42 /* Creative/Toshiba Multimedia Center SB-0500 */
44 USB_DEVICE(0x041e, 0x3048),
45 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
46 .vendor_name = "Toshiba",
47 .product_name = "SB-0500",
48 .ifnum = QUIRK_NO_INTERFACE
52 /* Creative/E-Mu devices */
54 USB_DEVICE(0x041e, 0x3010),
55 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
56 .vendor_name = "Creative Labs",
57 .product_name = "Sound Blaster MP3+",
58 .ifnum = QUIRK_NO_INTERFACE
63 .match_flags = USB_DEVICE_ID_MATCH_DEVICE,
66 .bInterfaceClass = USB_CLASS_AUDIO,
70 .match_flags = USB_DEVICE_ID_MATCH_DEVICE,
73 .bInterfaceClass = USB_CLASS_AUDIO,
76 /* E-Mu Tracker Pre */
77 .match_flags = USB_DEVICE_ID_MATCH_DEVICE,
80 .bInterfaceClass = USB_CLASS_AUDIO,
84 * Logitech QuickCam: bDeviceClass is vendor-specific, so generic interface
85 * class matches do not take effect without an explicit ID match.
88 .match_flags = USB_DEVICE_ID_MATCH_DEVICE |
89 USB_DEVICE_ID_MATCH_INT_CLASS |
90 USB_DEVICE_ID_MATCH_INT_SUBCLASS,
93 .bInterfaceClass = USB_CLASS_AUDIO,
94 .bInterfaceSubClass = USB_SUBCLASS_AUDIO_CONTROL
97 .match_flags = USB_DEVICE_ID_MATCH_DEVICE |
98 USB_DEVICE_ID_MATCH_INT_CLASS |
99 USB_DEVICE_ID_MATCH_INT_SUBCLASS,
102 .bInterfaceClass = USB_CLASS_AUDIO,
103 .bInterfaceSubClass = USB_SUBCLASS_AUDIO_CONTROL
106 .match_flags = USB_DEVICE_ID_MATCH_DEVICE |
107 USB_DEVICE_ID_MATCH_INT_CLASS |
108 USB_DEVICE_ID_MATCH_INT_SUBCLASS,
111 .bInterfaceClass = USB_CLASS_AUDIO,
112 .bInterfaceSubClass = USB_SUBCLASS_AUDIO_CONTROL
115 .match_flags = USB_DEVICE_ID_MATCH_DEVICE |
116 USB_DEVICE_ID_MATCH_INT_CLASS |
117 USB_DEVICE_ID_MATCH_INT_SUBCLASS,
120 .bInterfaceClass = USB_CLASS_AUDIO,
121 .bInterfaceSubClass = USB_SUBCLASS_AUDIO_CONTROL
124 .match_flags = USB_DEVICE_ID_MATCH_DEVICE |
125 USB_DEVICE_ID_MATCH_INT_CLASS |
126 USB_DEVICE_ID_MATCH_INT_SUBCLASS,
129 .bInterfaceClass = USB_CLASS_AUDIO,
130 .bInterfaceSubClass = USB_SUBCLASS_AUDIO_CONTROL
133 .match_flags = USB_DEVICE_ID_MATCH_DEVICE |
134 USB_DEVICE_ID_MATCH_INT_CLASS |
135 USB_DEVICE_ID_MATCH_INT_SUBCLASS,
138 .bInterfaceClass = USB_CLASS_AUDIO,
139 .bInterfaceSubClass = USB_SUBCLASS_AUDIO_CONTROL
146 #define YAMAHA_DEVICE(id, name) { \
147 USB_DEVICE(0x0499, id), \
148 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { \
149 .vendor_name = "Yamaha", \
150 .product_name = name, \
151 .ifnum = QUIRK_ANY_INTERFACE, \
152 .type = QUIRK_MIDI_YAMAHA \
155 #define YAMAHA_INTERFACE(id, intf, name) { \
156 USB_DEVICE_VENDOR_SPEC(0x0499, id), \
157 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { \
158 .vendor_name = "Yamaha", \
159 .product_name = name, \
161 .type = QUIRK_MIDI_YAMAHA \
164 YAMAHA_DEVICE(0x1000, "UX256"),
165 YAMAHA_DEVICE(0x1001, "MU1000"),
166 YAMAHA_DEVICE(0x1002, "MU2000"),
167 YAMAHA_DEVICE(0x1003, "MU500"),
168 YAMAHA_INTERFACE(0x1004, 3, "UW500"),
169 YAMAHA_DEVICE(0x1005, "MOTIF6"),
170 YAMAHA_DEVICE(0x1006, "MOTIF7"),
171 YAMAHA_DEVICE(0x1007, "MOTIF8"),
172 YAMAHA_DEVICE(0x1008, "UX96"),
173 YAMAHA_DEVICE(0x1009, "UX16"),
174 YAMAHA_INTERFACE(0x100a, 3, "EOS BX"),
175 YAMAHA_DEVICE(0x100c, "UC-MX"),
176 YAMAHA_DEVICE(0x100d, "UC-KX"),
177 YAMAHA_DEVICE(0x100e, "S08"),
178 YAMAHA_DEVICE(0x100f, "CLP-150"),
179 YAMAHA_DEVICE(0x1010, "CLP-170"),
180 YAMAHA_DEVICE(0x1011, "P-250"),
181 YAMAHA_DEVICE(0x1012, "TYROS"),
182 YAMAHA_DEVICE(0x1013, "PF-500"),
183 YAMAHA_DEVICE(0x1014, "S90"),
184 YAMAHA_DEVICE(0x1015, "MOTIF-R"),
185 YAMAHA_DEVICE(0x1016, "MDP-5"),
186 YAMAHA_DEVICE(0x1017, "CVP-204"),
187 YAMAHA_DEVICE(0x1018, "CVP-206"),
188 YAMAHA_DEVICE(0x1019, "CVP-208"),
189 YAMAHA_DEVICE(0x101a, "CVP-210"),
190 YAMAHA_DEVICE(0x101b, "PSR-1100"),
191 YAMAHA_DEVICE(0x101c, "PSR-2100"),
192 YAMAHA_DEVICE(0x101d, "CLP-175"),
193 YAMAHA_DEVICE(0x101e, "PSR-K1"),
194 YAMAHA_DEVICE(0x101f, "EZ-J24"),
195 YAMAHA_DEVICE(0x1020, "EZ-250i"),
196 YAMAHA_DEVICE(0x1021, "MOTIF ES 6"),
197 YAMAHA_DEVICE(0x1022, "MOTIF ES 7"),
198 YAMAHA_DEVICE(0x1023, "MOTIF ES 8"),
199 YAMAHA_DEVICE(0x1024, "CVP-301"),
200 YAMAHA_DEVICE(0x1025, "CVP-303"),
201 YAMAHA_DEVICE(0x1026, "CVP-305"),
202 YAMAHA_DEVICE(0x1027, "CVP-307"),
203 YAMAHA_DEVICE(0x1028, "CVP-309"),
204 YAMAHA_DEVICE(0x1029, "CVP-309GP"),
205 YAMAHA_DEVICE(0x102a, "PSR-1500"),
206 YAMAHA_DEVICE(0x102b, "PSR-3000"),
207 YAMAHA_DEVICE(0x102e, "ELS-01/01C"),
208 YAMAHA_DEVICE(0x1030, "PSR-295/293"),
209 YAMAHA_DEVICE(0x1031, "DGX-205/203"),
210 YAMAHA_DEVICE(0x1032, "DGX-305"),
211 YAMAHA_DEVICE(0x1033, "DGX-505"),
212 YAMAHA_DEVICE(0x1034, NULL),
213 YAMAHA_DEVICE(0x1035, NULL),
214 YAMAHA_DEVICE(0x1036, NULL),
215 YAMAHA_DEVICE(0x1037, NULL),
216 YAMAHA_DEVICE(0x1038, NULL),
217 YAMAHA_DEVICE(0x1039, NULL),
218 YAMAHA_DEVICE(0x103a, NULL),
219 YAMAHA_DEVICE(0x103b, NULL),
220 YAMAHA_DEVICE(0x103c, NULL),
221 YAMAHA_DEVICE(0x103d, NULL),
222 YAMAHA_DEVICE(0x103e, NULL),
223 YAMAHA_DEVICE(0x103f, NULL),
224 YAMAHA_DEVICE(0x1040, NULL),
225 YAMAHA_DEVICE(0x1041, NULL),
226 YAMAHA_DEVICE(0x1042, NULL),
227 YAMAHA_DEVICE(0x1043, NULL),
228 YAMAHA_DEVICE(0x1044, NULL),
229 YAMAHA_DEVICE(0x1045, NULL),
230 YAMAHA_INTERFACE(0x104e, 0, NULL),
231 YAMAHA_DEVICE(0x104f, NULL),
232 YAMAHA_DEVICE(0x1050, NULL),
233 YAMAHA_DEVICE(0x1051, NULL),
234 YAMAHA_DEVICE(0x1052, NULL),
235 YAMAHA_DEVICE(0x2000, "DGP-7"),
236 YAMAHA_DEVICE(0x2001, "DGP-5"),
237 YAMAHA_DEVICE(0x2002, NULL),
238 YAMAHA_DEVICE(0x5000, "CS1D"),
239 YAMAHA_DEVICE(0x5001, "DSP1D"),
240 YAMAHA_DEVICE(0x5002, "DME32"),
241 YAMAHA_DEVICE(0x5003, "DM2000"),
242 YAMAHA_DEVICE(0x5004, "02R96"),
243 YAMAHA_DEVICE(0x5005, "ACU16-C"),
244 YAMAHA_DEVICE(0x5006, "NHB32-C"),
245 YAMAHA_DEVICE(0x5007, "DM1000"),
246 YAMAHA_DEVICE(0x5008, "01V96"),
247 YAMAHA_DEVICE(0x5009, "SPX2000"),
248 YAMAHA_DEVICE(0x500a, "PM5D"),
249 YAMAHA_DEVICE(0x500b, "DME64N"),
250 YAMAHA_DEVICE(0x500c, "DME24N"),
251 YAMAHA_DEVICE(0x500d, NULL),
252 YAMAHA_DEVICE(0x500e, NULL),
253 YAMAHA_DEVICE(0x500f, NULL),
254 YAMAHA_DEVICE(0x7000, "DTX"),
255 YAMAHA_DEVICE(0x7010, "UB99"),
257 #undef YAMAHA_INTERFACE
260 * Roland/RolandED/Edirol/BOSS devices
263 USB_DEVICE(0x0582, 0x0000),
264 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
265 .vendor_name = "Roland",
266 .product_name = "UA-100",
267 .ifnum = QUIRK_ANY_INTERFACE,
268 .type = QUIRK_COMPOSITE,
269 .data = (const struct snd_usb_audio_quirk[]) {
272 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
273 .data = & (const struct audioformat) {
274 .format = SNDRV_PCM_FORMAT_S16_LE,
282 .rates = SNDRV_PCM_RATE_CONTINUOUS,
289 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
290 .data = & (const struct audioformat) {
291 .format = SNDRV_PCM_FORMAT_S16_LE,
296 .attributes = EP_CS_ATTR_FILL_MAX,
299 .rates = SNDRV_PCM_RATE_CONTINUOUS,
306 .type = QUIRK_MIDI_FIXED_ENDPOINT,
307 .data = & (const struct snd_usb_midi_endpoint_info) {
308 .out_cables = 0x0007,
319 USB_DEVICE(0x0582, 0x0002),
320 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
321 .vendor_name = "EDIROL",
322 .product_name = "UM-4",
323 .ifnum = QUIRK_ANY_INTERFACE,
324 .type = QUIRK_COMPOSITE,
325 .data = (const struct snd_usb_audio_quirk[]) {
328 .type = QUIRK_IGNORE_INTERFACE
332 .type = QUIRK_IGNORE_INTERFACE
336 .type = QUIRK_MIDI_FIXED_ENDPOINT,
337 .data = & (const struct snd_usb_midi_endpoint_info) {
338 .out_cables = 0x000f,
349 USB_DEVICE(0x0582, 0x0003),
350 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
351 .vendor_name = "Roland",
352 .product_name = "SC-8850",
353 .ifnum = QUIRK_ANY_INTERFACE,
354 .type = QUIRK_COMPOSITE,
355 .data = (const struct snd_usb_audio_quirk[]) {
358 .type = QUIRK_IGNORE_INTERFACE
362 .type = QUIRK_IGNORE_INTERFACE
366 .type = QUIRK_MIDI_FIXED_ENDPOINT,
367 .data = & (const struct snd_usb_midi_endpoint_info) {
368 .out_cables = 0x003f,
379 USB_DEVICE(0x0582, 0x0004),
380 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
381 .vendor_name = "Roland",
382 .product_name = "U-8",
383 .ifnum = QUIRK_ANY_INTERFACE,
384 .type = QUIRK_COMPOSITE,
385 .data = (const struct snd_usb_audio_quirk[]) {
388 .type = QUIRK_IGNORE_INTERFACE
392 .type = QUIRK_IGNORE_INTERFACE
396 .type = QUIRK_MIDI_FIXED_ENDPOINT,
397 .data = & (const struct snd_usb_midi_endpoint_info) {
398 .out_cables = 0x0005,
409 /* Has ID 0x0099 when not in "Advanced Driver" mode.
410 * The UM-2EX has only one input, but we cannot detect this. */
411 USB_DEVICE(0x0582, 0x0005),
412 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
413 .vendor_name = "EDIROL",
414 .product_name = "UM-2",
415 .ifnum = QUIRK_ANY_INTERFACE,
416 .type = QUIRK_COMPOSITE,
417 .data = (const struct snd_usb_audio_quirk[]) {
420 .type = QUIRK_IGNORE_INTERFACE
424 .type = QUIRK_IGNORE_INTERFACE
428 .type = QUIRK_MIDI_FIXED_ENDPOINT,
429 .data = & (const struct snd_usb_midi_endpoint_info) {
430 .out_cables = 0x0003,
441 USB_DEVICE(0x0582, 0x0007),
442 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
443 .vendor_name = "Roland",
444 .product_name = "SC-8820",
445 .ifnum = QUIRK_ANY_INTERFACE,
446 .type = QUIRK_COMPOSITE,
447 .data = (const struct snd_usb_audio_quirk[]) {
450 .type = QUIRK_IGNORE_INTERFACE
454 .type = QUIRK_IGNORE_INTERFACE
458 .type = QUIRK_MIDI_FIXED_ENDPOINT,
459 .data = & (const struct snd_usb_midi_endpoint_info) {
460 .out_cables = 0x0013,
471 USB_DEVICE(0x0582, 0x0008),
472 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
473 .vendor_name = "Roland",
474 .product_name = "PC-300",
475 .ifnum = QUIRK_ANY_INTERFACE,
476 .type = QUIRK_COMPOSITE,
477 .data = (const struct snd_usb_audio_quirk[]) {
480 .type = QUIRK_IGNORE_INTERFACE
484 .type = QUIRK_IGNORE_INTERFACE
488 .type = QUIRK_MIDI_FIXED_ENDPOINT,
489 .data = & (const struct snd_usb_midi_endpoint_info) {
490 .out_cables = 0x0001,
501 /* has ID 0x009d when not in "Advanced Driver" mode */
502 USB_DEVICE(0x0582, 0x0009),
503 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
504 .vendor_name = "EDIROL",
505 .product_name = "UM-1",
506 .ifnum = QUIRK_ANY_INTERFACE,
507 .type = QUIRK_COMPOSITE,
508 .data = (const struct snd_usb_audio_quirk[]) {
511 .type = QUIRK_IGNORE_INTERFACE
515 .type = QUIRK_IGNORE_INTERFACE
519 .type = QUIRK_MIDI_FIXED_ENDPOINT,
520 .data = & (const struct snd_usb_midi_endpoint_info) {
521 .out_cables = 0x0001,
532 USB_DEVICE(0x0582, 0x000b),
533 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
534 .vendor_name = "Roland",
535 .product_name = "SK-500",
536 .ifnum = QUIRK_ANY_INTERFACE,
537 .type = QUIRK_COMPOSITE,
538 .data = (const struct snd_usb_audio_quirk[]) {
541 .type = QUIRK_IGNORE_INTERFACE
545 .type = QUIRK_IGNORE_INTERFACE
549 .type = QUIRK_MIDI_FIXED_ENDPOINT,
550 .data = & (const struct snd_usb_midi_endpoint_info) {
551 .out_cables = 0x0013,
562 /* thanks to Emiliano Grilli <emillo@libero.it>
563 * for helping researching this data */
564 USB_DEVICE(0x0582, 0x000c),
565 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
566 .vendor_name = "Roland",
567 .product_name = "SC-D70",
568 .ifnum = QUIRK_ANY_INTERFACE,
569 .type = QUIRK_COMPOSITE,
570 .data = (const struct snd_usb_audio_quirk[]) {
573 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
574 .data = & (const struct audioformat) {
575 .format = SNDRV_PCM_FORMAT_S24_3LE,
583 .rates = SNDRV_PCM_RATE_CONTINUOUS,
590 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
591 .data = & (const struct audioformat) {
592 .format = SNDRV_PCM_FORMAT_S24_3LE,
600 .rates = SNDRV_PCM_RATE_CONTINUOUS,
607 .type = QUIRK_MIDI_FIXED_ENDPOINT,
608 .data = & (const struct snd_usb_midi_endpoint_info) {
609 .out_cables = 0x0007,
620 * This quirk is for the "Advanced Driver" mode of the Edirol UA-5.
621 * If the advanced mode switch at the back of the unit is off, the
622 * UA-5 has ID 0x0582/0x0011 and is standard compliant (no quirks),
623 * but offers only 16-bit PCM.
624 * In advanced mode, the UA-5 will output S24_3LE samples (two
625 * channels) at the rate indicated on the front switch, including
626 * the 96kHz sample rate.
628 USB_DEVICE(0x0582, 0x0010),
629 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
630 .vendor_name = "EDIROL",
631 .product_name = "UA-5",
632 .ifnum = QUIRK_ANY_INTERFACE,
633 .type = QUIRK_COMPOSITE,
634 .data = (const struct snd_usb_audio_quirk[]) {
637 .type = QUIRK_AUDIO_STANDARD_INTERFACE
641 .type = QUIRK_AUDIO_STANDARD_INTERFACE
650 /* has ID 0x0013 when not in "Advanced Driver" mode */
651 USB_DEVICE(0x0582, 0x0012),
652 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
653 .vendor_name = "Roland",
654 .product_name = "XV-5050",
656 .type = QUIRK_MIDI_FIXED_ENDPOINT,
657 .data = & (const struct snd_usb_midi_endpoint_info) {
658 .out_cables = 0x0001,
664 /* has ID 0x0015 when not in "Advanced Driver" mode */
665 USB_DEVICE(0x0582, 0x0014),
666 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
667 .vendor_name = "EDIROL",
668 .product_name = "UM-880",
670 .type = QUIRK_MIDI_FIXED_ENDPOINT,
671 .data = & (const struct snd_usb_midi_endpoint_info) {
672 .out_cables = 0x01ff,
678 /* has ID 0x0017 when not in "Advanced Driver" mode */
679 USB_DEVICE(0x0582, 0x0016),
680 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
681 .vendor_name = "EDIROL",
682 .product_name = "SD-90",
683 .ifnum = QUIRK_ANY_INTERFACE,
684 .type = QUIRK_COMPOSITE,
685 .data = (const struct snd_usb_audio_quirk[]) {
688 .type = QUIRK_IGNORE_INTERFACE
692 .type = QUIRK_IGNORE_INTERFACE
696 .type = QUIRK_MIDI_FIXED_ENDPOINT,
697 .data = & (const struct snd_usb_midi_endpoint_info) {
698 .out_cables = 0x000f,
709 /* has ID 0x001c when not in "Advanced Driver" mode */
710 USB_DEVICE(0x0582, 0x001b),
711 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
712 .vendor_name = "Roland",
713 .product_name = "MMP-2",
714 .ifnum = QUIRK_ANY_INTERFACE,
715 .type = QUIRK_COMPOSITE,
716 .data = (const struct snd_usb_audio_quirk[]) {
719 .type = QUIRK_IGNORE_INTERFACE
723 .type = QUIRK_IGNORE_INTERFACE
727 .type = QUIRK_MIDI_FIXED_ENDPOINT,
728 .data = & (const struct snd_usb_midi_endpoint_info) {
729 .out_cables = 0x0001,
740 /* has ID 0x001e when not in "Advanced Driver" mode */
741 USB_DEVICE(0x0582, 0x001d),
742 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
743 .vendor_name = "Roland",
744 .product_name = "V-SYNTH",
746 .type = QUIRK_MIDI_FIXED_ENDPOINT,
747 .data = & (const struct snd_usb_midi_endpoint_info) {
748 .out_cables = 0x0001,
754 /* has ID 0x0024 when not in "Advanced Driver" mode */
755 USB_DEVICE(0x0582, 0x0023),
756 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
757 .vendor_name = "EDIROL",
758 .product_name = "UM-550",
760 .type = QUIRK_MIDI_FIXED_ENDPOINT,
761 .data = & (const struct snd_usb_midi_endpoint_info) {
762 .out_cables = 0x003f,
769 * This quirk is for the "Advanced Driver" mode. If off, the UA-20
770 * has ID 0x0026 and is standard compliant, but has only 16-bit PCM
773 USB_DEVICE(0x0582, 0x0025),
774 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
775 .vendor_name = "EDIROL",
776 .product_name = "UA-20",
777 .ifnum = QUIRK_ANY_INTERFACE,
778 .type = QUIRK_COMPOSITE,
779 .data = (const struct snd_usb_audio_quirk[]) {
782 .type = QUIRK_IGNORE_INTERFACE
786 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
787 .data = & (const struct audioformat) {
788 .format = SNDRV_PCM_FORMAT_S24_3LE,
796 .rates = SNDRV_PCM_RATE_CONTINUOUS,
803 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
804 .data = & (const struct audioformat) {
805 .format = SNDRV_PCM_FORMAT_S24_3LE,
813 .rates = SNDRV_PCM_RATE_CONTINUOUS,
820 .type = QUIRK_MIDI_FIXED_ENDPOINT,
821 .data = & (const struct snd_usb_midi_endpoint_info) {
822 .out_cables = 0x0001,
833 /* has ID 0x0028 when not in "Advanced Driver" mode */
834 USB_DEVICE(0x0582, 0x0027),
835 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
836 .vendor_name = "EDIROL",
837 .product_name = "SD-20",
839 .type = QUIRK_MIDI_FIXED_ENDPOINT,
840 .data = & (const struct snd_usb_midi_endpoint_info) {
841 .out_cables = 0x0003,
847 /* has ID 0x002a when not in "Advanced Driver" mode */
848 USB_DEVICE(0x0582, 0x0029),
849 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
850 .vendor_name = "EDIROL",
851 .product_name = "SD-80",
853 .type = QUIRK_MIDI_FIXED_ENDPOINT,
854 .data = & (const struct snd_usb_midi_endpoint_info) {
855 .out_cables = 0x000f,
861 * This quirk is for the "Advanced" modes of the Edirol UA-700.
862 * If the sample format switch is not in an advanced setting, the
863 * UA-700 has ID 0x0582/0x002c and is standard compliant (no quirks),
864 * but offers only 16-bit PCM and no MIDI.
866 USB_DEVICE_VENDOR_SPEC(0x0582, 0x002b),
867 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
868 .vendor_name = "EDIROL",
869 .product_name = "UA-700",
870 .ifnum = QUIRK_ANY_INTERFACE,
871 .type = QUIRK_COMPOSITE,
872 .data = (const struct snd_usb_audio_quirk[]) {
875 .type = QUIRK_AUDIO_EDIROL_UAXX
879 .type = QUIRK_AUDIO_EDIROL_UAXX
883 .type = QUIRK_AUDIO_EDIROL_UAXX
892 /* has ID 0x002e when not in "Advanced Driver" mode */
893 USB_DEVICE(0x0582, 0x002d),
894 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
895 .vendor_name = "Roland",
896 .product_name = "XV-2020",
898 .type = QUIRK_MIDI_FIXED_ENDPOINT,
899 .data = & (const struct snd_usb_midi_endpoint_info) {
900 .out_cables = 0x0001,
906 /* has ID 0x0030 when not in "Advanced Driver" mode */
907 USB_DEVICE(0x0582, 0x002f),
908 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
909 .vendor_name = "Roland",
910 .product_name = "VariOS",
912 .type = QUIRK_MIDI_FIXED_ENDPOINT,
913 .data = & (const struct snd_usb_midi_endpoint_info) {
914 .out_cables = 0x0007,
920 /* has ID 0x0034 when not in "Advanced Driver" mode */
921 USB_DEVICE(0x0582, 0x0033),
922 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
923 .vendor_name = "EDIROL",
924 .product_name = "PCR",
926 .type = QUIRK_MIDI_FIXED_ENDPOINT,
927 .data = & (const struct snd_usb_midi_endpoint_info) {
928 .out_cables = 0x0003,
933 /* TODO: add Roland M-1000 support */
936 * Has ID 0x0038 when not in "Advanced Driver" mode;
937 * later revisions use IDs 0x0054 and 0x00a2.
939 USB_DEVICE(0x0582, 0x0037),
940 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
941 .vendor_name = "Roland",
942 .product_name = "Digital Piano",
944 .type = QUIRK_MIDI_FIXED_ENDPOINT,
945 .data = & (const struct snd_usb_midi_endpoint_info) {
946 .out_cables = 0x0001,
953 * This quirk is for the "Advanced Driver" mode. If off, the GS-10
954 * has ID 0x003c and is standard compliant, but has only 16-bit PCM
957 USB_DEVICE_VENDOR_SPEC(0x0582, 0x003b),
958 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
959 .vendor_name = "BOSS",
960 .product_name = "GS-10",
961 .ifnum = QUIRK_ANY_INTERFACE,
962 .type = QUIRK_COMPOSITE,
963 .data = & (const struct snd_usb_audio_quirk[]) {
966 .type = QUIRK_AUDIO_STANDARD_INTERFACE
970 .type = QUIRK_AUDIO_STANDARD_INTERFACE
974 .type = QUIRK_MIDI_STANDARD_INTERFACE
983 /* has ID 0x0041 when not in "Advanced Driver" mode */
984 USB_DEVICE(0x0582, 0x0040),
985 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
986 .vendor_name = "Roland",
987 .product_name = "GI-20",
989 .type = QUIRK_MIDI_FIXED_ENDPOINT,
990 .data = & (const struct snd_usb_midi_endpoint_info) {
991 .out_cables = 0x0001,
997 /* has ID 0x0043 when not in "Advanced Driver" mode */
998 USB_DEVICE(0x0582, 0x0042),
999 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1000 .vendor_name = "Roland",
1001 .product_name = "RS-70",
1003 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1004 .data = & (const struct snd_usb_midi_endpoint_info) {
1005 .out_cables = 0x0001,
1011 USB_DEVICE(0x0582, 0x0044),
1012 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1013 .vendor_name = "Roland",
1014 .product_name = "UA-1000",
1015 .ifnum = QUIRK_ANY_INTERFACE,
1016 .type = QUIRK_COMPOSITE,
1017 .data = (const struct snd_usb_audio_quirk[]) {
1020 .type = QUIRK_AUDIO_EDIROL_UA1000
1024 .type = QUIRK_AUDIO_EDIROL_UA1000
1028 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1029 .data = & (const struct snd_usb_midi_endpoint_info) {
1030 .out_cables = 0x0003,
1041 /* has ID 0x0049 when not in "Advanced Driver" mode */
1042 USB_DEVICE(0x0582, 0x0047),
1043 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1044 /* .vendor_name = "EDIROL", */
1045 /* .product_name = "UR-80", */
1046 .ifnum = QUIRK_ANY_INTERFACE,
1047 .type = QUIRK_COMPOSITE,
1048 .data = (const struct snd_usb_audio_quirk[]) {
1049 /* in the 96 kHz modes, only interface 1 is there */
1052 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1056 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1065 /* has ID 0x004a when not in "Advanced Driver" mode */
1066 USB_DEVICE(0x0582, 0x0048),
1067 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1068 /* .vendor_name = "EDIROL", */
1069 /* .product_name = "UR-80", */
1071 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1072 .data = & (const struct snd_usb_midi_endpoint_info) {
1073 .out_cables = 0x0003,
1078 /* TODO: add Edirol M-100FX support */
1080 /* has ID 0x004e when not in "Advanced Driver" mode */
1081 USB_DEVICE(0x0582, 0x004c),
1082 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1083 .vendor_name = "EDIROL",
1084 .product_name = "PCR-A",
1085 .ifnum = QUIRK_ANY_INTERFACE,
1086 .type = QUIRK_COMPOSITE,
1087 .data = (const struct snd_usb_audio_quirk[]) {
1090 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1094 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1103 /* has ID 0x004f when not in "Advanced Driver" mode */
1104 USB_DEVICE(0x0582, 0x004d),
1105 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1106 .vendor_name = "EDIROL",
1107 .product_name = "PCR-A",
1109 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1110 .data = & (const struct snd_usb_midi_endpoint_info) {
1111 .out_cables = 0x0003,
1118 * This quirk is for the "Advanced Driver" mode. If off, the UA-3FX
1119 * is standard compliant, but has only 16-bit PCM.
1121 USB_DEVICE(0x0582, 0x0050),
1122 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1123 .vendor_name = "EDIROL",
1124 .product_name = "UA-3FX",
1125 .ifnum = QUIRK_ANY_INTERFACE,
1126 .type = QUIRK_COMPOSITE,
1127 .data = (const struct snd_usb_audio_quirk[]) {
1130 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1134 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1143 USB_DEVICE(0x0582, 0x0052),
1144 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1145 .vendor_name = "EDIROL",
1146 .product_name = "UM-1SX",
1148 .type = QUIRK_MIDI_STANDARD_INTERFACE
1152 USB_DEVICE(0x0582, 0x0060),
1153 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1154 .vendor_name = "Roland",
1155 .product_name = "EXR Series",
1157 .type = QUIRK_MIDI_STANDARD_INTERFACE
1161 /* has ID 0x0067 when not in "Advanced Driver" mode */
1162 USB_DEVICE(0x0582, 0x0065),
1163 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1164 .vendor_name = "EDIROL",
1165 .product_name = "PCR-1",
1167 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1168 .data = & (const struct snd_usb_midi_endpoint_info) {
1169 .out_cables = 0x0001,
1175 /* has ID 0x006b when not in "Advanced Driver" mode */
1176 USB_DEVICE_VENDOR_SPEC(0x0582, 0x006a),
1177 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1178 .vendor_name = "Roland",
1179 .product_name = "SP-606",
1181 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1182 .data = & (const struct snd_usb_midi_endpoint_info) {
1183 .out_cables = 0x0001,
1189 /* has ID 0x006e when not in "Advanced Driver" mode */
1190 USB_DEVICE(0x0582, 0x006d),
1191 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1192 .vendor_name = "Roland",
1193 .product_name = "FANTOM-X",
1195 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1196 .data = & (const struct snd_usb_midi_endpoint_info) {
1197 .out_cables = 0x0001,
1203 * This quirk is for the "Advanced" modes of the Edirol UA-25.
1204 * If the switch is not in an advanced setting, the UA-25 has
1205 * ID 0x0582/0x0073 and is standard compliant (no quirks), but
1206 * offers only 16-bit PCM at 44.1 kHz and no MIDI.
1208 USB_DEVICE_VENDOR_SPEC(0x0582, 0x0074),
1209 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1210 .vendor_name = "EDIROL",
1211 .product_name = "UA-25",
1212 .ifnum = QUIRK_ANY_INTERFACE,
1213 .type = QUIRK_COMPOSITE,
1214 .data = (const struct snd_usb_audio_quirk[]) {
1217 .type = QUIRK_AUDIO_EDIROL_UAXX
1221 .type = QUIRK_AUDIO_EDIROL_UAXX
1225 .type = QUIRK_AUDIO_EDIROL_UAXX
1234 /* has ID 0x0076 when not in "Advanced Driver" mode */
1235 USB_DEVICE(0x0582, 0x0075),
1236 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1237 .vendor_name = "BOSS",
1238 .product_name = "DR-880",
1240 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1241 .data = & (const struct snd_usb_midi_endpoint_info) {
1242 .out_cables = 0x0001,
1248 /* has ID 0x007b when not in "Advanced Driver" mode */
1249 USB_DEVICE_VENDOR_SPEC(0x0582, 0x007a),
1250 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1251 .vendor_name = "Roland",
1252 /* "RD" or "RD-700SX"? */
1254 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1255 .data = & (const struct snd_usb_midi_endpoint_info) {
1256 .out_cables = 0x0003,
1261 /* Roland UA-101 in High-Speed Mode only */
1263 USB_DEVICE(0x0582, 0x007d),
1264 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1265 .vendor_name = "Roland",
1266 .product_name = "UA-101",
1267 .ifnum = QUIRK_ANY_INTERFACE,
1268 .type = QUIRK_COMPOSITE,
1269 .data = (const struct snd_usb_audio_quirk[]) {
1272 .type = QUIRK_AUDIO_EDIROL_UA101
1276 .type = QUIRK_AUDIO_EDIROL_UA101
1280 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1281 .data = & (const struct snd_usb_midi_endpoint_info) {
1282 .out_cables = 0x0001,
1293 /* has ID 0x0081 when not in "Advanced Driver" mode */
1294 USB_DEVICE(0x0582, 0x0080),
1295 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1296 .vendor_name = "Roland",
1297 .product_name = "G-70",
1299 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1300 .data = & (const struct snd_usb_midi_endpoint_info) {
1301 .out_cables = 0x0001,
1306 /* TODO: add Roland V-SYNTH XT support */
1307 /* TODO: add BOSS GT-PRO support */
1309 /* has ID 0x008c when not in "Advanced Driver" mode */
1310 USB_DEVICE(0x0582, 0x008b),
1311 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1312 .vendor_name = "EDIROL",
1313 .product_name = "PC-50",
1315 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1316 .data = & (const struct snd_usb_midi_endpoint_info) {
1317 .out_cables = 0x0001,
1322 /* TODO: add Edirol PC-80 support */
1324 USB_DEVICE(0x0582, 0x0096),
1325 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1326 .vendor_name = "EDIROL",
1327 .product_name = "UA-1EX",
1328 .ifnum = QUIRK_ANY_INTERFACE,
1329 .type = QUIRK_COMPOSITE,
1330 .data = (const struct snd_usb_audio_quirk[]) {
1333 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1337 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1346 USB_DEVICE(0x0582, 0x009a),
1347 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1348 .vendor_name = "EDIROL",
1349 .product_name = "UM-3EX",
1351 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1352 .data = & (const struct snd_usb_midi_endpoint_info) {
1353 .out_cables = 0x000f,
1360 * This quirk is for the "Advanced Driver" mode. If off, the UA-4FX
1361 * is standard compliant, but has only 16-bit PCM and no MIDI.
1363 USB_DEVICE(0x0582, 0x00a3),
1364 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1365 .vendor_name = "EDIROL",
1366 .product_name = "UA-4FX",
1367 .ifnum = QUIRK_ANY_INTERFACE,
1368 .type = QUIRK_COMPOSITE,
1369 .data = (const struct snd_usb_audio_quirk[]) {
1372 .type = QUIRK_AUDIO_EDIROL_UAXX
1376 .type = QUIRK_AUDIO_EDIROL_UAXX
1380 .type = QUIRK_AUDIO_EDIROL_UAXX
1388 /* TODO: add Edirol MD-P1 support */
1390 USB_DEVICE(0x582, 0x00a6),
1391 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1392 .vendor_name = "Roland",
1393 .product_name = "Juno-G",
1395 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1396 .data = & (const struct snd_usb_midi_endpoint_info) {
1397 .out_cables = 0x0001,
1404 USB_DEVICE(0x0582, 0x00ad),
1405 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1406 .vendor_name = "Roland",
1407 .product_name = "SH-201",
1408 .ifnum = QUIRK_ANY_INTERFACE,
1409 .type = QUIRK_COMPOSITE,
1410 .data = (const struct snd_usb_audio_quirk[]) {
1413 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1417 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1421 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1422 .data = & (const struct snd_usb_midi_endpoint_info) {
1423 .out_cables = 0x0001,
1434 /* Roland SonicCell */
1435 USB_DEVICE(0x0582, 0x00c2),
1436 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1437 .vendor_name = "Roland",
1438 .product_name = "SonicCell",
1439 .ifnum = QUIRK_ANY_INTERFACE,
1440 .type = QUIRK_COMPOSITE,
1441 .data = (const struct snd_usb_audio_quirk[]) {
1444 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1448 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1452 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1453 .data = & (const struct snd_usb_midi_endpoint_info) {
1454 .out_cables = 0x0001,
1466 USB_DEVICE(0x0582, 0x00da),
1467 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1468 .ifnum = QUIRK_ANY_INTERFACE,
1469 .type = QUIRK_COMPOSITE,
1470 .data = (const struct snd_usb_audio_quirk[]) {
1473 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1477 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1481 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1482 .data = & (const struct snd_usb_midi_endpoint_info) {
1483 .out_cables = 0x0001,
1494 /* Advanced modes of the Edirol UA-25EX.
1495 * For the standard mode, UA-25EX has ID 0582:00e7, which
1496 * offers only 16-bit PCM at 44.1 kHz and no MIDI.
1498 USB_DEVICE_VENDOR_SPEC(0x0582, 0x00e6),
1499 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1500 .vendor_name = "EDIROL",
1501 .product_name = "UA-25EX",
1502 .ifnum = QUIRK_ANY_INTERFACE,
1503 .type = QUIRK_COMPOSITE,
1504 .data = (const struct snd_usb_audio_quirk[]) {
1507 .type = QUIRK_AUDIO_EDIROL_UAXX
1511 .type = QUIRK_AUDIO_EDIROL_UAXX
1515 .type = QUIRK_AUDIO_EDIROL_UAXX
1524 /* Guillemot devices */
1527 * This is for the "Windows Edition" where the external MIDI ports are
1528 * the only MIDI ports; the control data is reported through HID
1529 * interfaces. The "Macintosh Edition" has ID 0xd002 and uses standard
1530 * compliant USB MIDI ports for external MIDI and controls.
1532 USB_DEVICE_VENDOR_SPEC(0x06f8, 0xb000),
1533 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1534 .vendor_name = "Hercules",
1535 .product_name = "DJ Console (WE)",
1537 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1538 .data = & (const struct snd_usb_midi_endpoint_info) {
1539 .out_cables = 0x0001,
1545 /* Midiman/M-Audio devices */
1547 USB_DEVICE_VENDOR_SPEC(0x0763, 0x1002),
1548 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1549 .vendor_name = "M-Audio",
1550 .product_name = "MidiSport 2x2",
1551 .ifnum = QUIRK_ANY_INTERFACE,
1552 .type = QUIRK_MIDI_MIDIMAN,
1553 .data = & (const struct snd_usb_midi_endpoint_info) {
1554 .out_cables = 0x0003,
1560 USB_DEVICE_VENDOR_SPEC(0x0763, 0x1011),
1561 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1562 .vendor_name = "M-Audio",
1563 .product_name = "MidiSport 1x1",
1564 .ifnum = QUIRK_ANY_INTERFACE,
1565 .type = QUIRK_MIDI_MIDIMAN,
1566 .data = & (const struct snd_usb_midi_endpoint_info) {
1567 .out_cables = 0x0001,
1573 USB_DEVICE_VENDOR_SPEC(0x0763, 0x1015),
1574 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1575 .vendor_name = "M-Audio",
1576 .product_name = "Keystation",
1577 .ifnum = QUIRK_ANY_INTERFACE,
1578 .type = QUIRK_MIDI_MIDIMAN,
1579 .data = & (const struct snd_usb_midi_endpoint_info) {
1580 .out_cables = 0x0001,
1586 USB_DEVICE_VENDOR_SPEC(0x0763, 0x1021),
1587 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1588 .vendor_name = "M-Audio",
1589 .product_name = "MidiSport 4x4",
1590 .ifnum = QUIRK_ANY_INTERFACE,
1591 .type = QUIRK_MIDI_MIDIMAN,
1592 .data = & (const struct snd_usb_midi_endpoint_info) {
1593 .out_cables = 0x000f,
1600 * For hardware revision 1.05; in the later revisions (1.10 and
1601 * 1.21), 0x1031 is the ID for the device without firmware.
1602 * Thanks to Olaf Giesbrecht <Olaf_Giesbrecht@yahoo.de>
1604 USB_DEVICE_VER(0x0763, 0x1031, 0x0100, 0x0109),
1605 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1606 .vendor_name = "M-Audio",
1607 .product_name = "MidiSport 8x8",
1608 .ifnum = QUIRK_ANY_INTERFACE,
1609 .type = QUIRK_MIDI_MIDIMAN,
1610 .data = & (const struct snd_usb_midi_endpoint_info) {
1611 .out_cables = 0x01ff,
1617 USB_DEVICE_VENDOR_SPEC(0x0763, 0x1033),
1618 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1619 .vendor_name = "M-Audio",
1620 .product_name = "MidiSport 8x8",
1621 .ifnum = QUIRK_ANY_INTERFACE,
1622 .type = QUIRK_MIDI_MIDIMAN,
1623 .data = & (const struct snd_usb_midi_endpoint_info) {
1624 .out_cables = 0x01ff,
1630 USB_DEVICE_VENDOR_SPEC(0x0763, 0x1041),
1631 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1632 .vendor_name = "M-Audio",
1633 .product_name = "MidiSport 2x4",
1634 .ifnum = QUIRK_ANY_INTERFACE,
1635 .type = QUIRK_MIDI_MIDIMAN,
1636 .data = & (const struct snd_usb_midi_endpoint_info) {
1637 .out_cables = 0x000f,
1643 USB_DEVICE_VENDOR_SPEC(0x0763, 0x2001),
1644 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1645 .vendor_name = "M-Audio",
1646 .product_name = "Quattro",
1647 .ifnum = QUIRK_ANY_INTERFACE,
1648 .type = QUIRK_COMPOSITE,
1649 .data = & (const struct snd_usb_audio_quirk[]) {
1651 * Interfaces 0-2 are "Windows-compatible", 16-bit only,
1652 * and share endpoints with the other interfaces.
1653 * Ignore them. The other interfaces can do 24 bits,
1654 * but captured samples are big-endian (see usbaudio.c).
1658 .type = QUIRK_IGNORE_INTERFACE
1662 .type = QUIRK_IGNORE_INTERFACE
1666 .type = QUIRK_IGNORE_INTERFACE
1670 .type = QUIRK_IGNORE_INTERFACE
1674 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1678 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1682 .type = QUIRK_IGNORE_INTERFACE
1686 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1690 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1694 .type = QUIRK_MIDI_MIDIMAN,
1695 .data = & (const struct snd_usb_midi_endpoint_info) {
1696 .out_cables = 0x0001,
1707 USB_DEVICE_VENDOR_SPEC(0x0763, 0x2003),
1708 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1709 .vendor_name = "M-Audio",
1710 .product_name = "AudioPhile",
1712 .type = QUIRK_MIDI_MIDIMAN,
1713 .data = & (const struct snd_usb_midi_endpoint_info) {
1714 .out_cables = 0x0001,
1720 USB_DEVICE_VENDOR_SPEC(0x0763, 0x2008),
1721 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1722 .vendor_name = "M-Audio",
1723 .product_name = "Ozone",
1725 .type = QUIRK_MIDI_MIDIMAN,
1726 .data = & (const struct snd_usb_midi_endpoint_info) {
1727 .out_cables = 0x0001,
1733 USB_DEVICE_VENDOR_SPEC(0x0763, 0x200d),
1734 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1735 .vendor_name = "M-Audio",
1736 .product_name = "OmniStudio",
1737 .ifnum = QUIRK_ANY_INTERFACE,
1738 .type = QUIRK_COMPOSITE,
1739 .data = & (const struct snd_usb_audio_quirk[]) {
1742 .type = QUIRK_IGNORE_INTERFACE
1746 .type = QUIRK_IGNORE_INTERFACE
1750 .type = QUIRK_IGNORE_INTERFACE
1754 .type = QUIRK_IGNORE_INTERFACE
1758 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1762 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1766 .type = QUIRK_IGNORE_INTERFACE
1770 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1774 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1778 .type = QUIRK_MIDI_MIDIMAN,
1779 .data = & (const struct snd_usb_midi_endpoint_info) {
1780 .out_cables = 0x0001,
1791 USB_DEVICE(0x0763, 0x2019),
1792 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1793 /* .vendor_name = "M-Audio", */
1794 /* .product_name = "Ozone Academic", */
1795 .ifnum = QUIRK_ANY_INTERFACE,
1796 .type = QUIRK_COMPOSITE,
1797 .data = & (const struct snd_usb_audio_quirk[]) {
1800 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1804 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1808 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1812 .type = QUIRK_MIDI_MIDIMAN,
1813 .data = & (const struct snd_usb_midi_endpoint_info) {
1814 .out_cables = 0x0001,
1827 USB_DEVICE(0x07cf, 0x6801),
1828 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1829 .vendor_name = "Casio",
1830 .product_name = "PL-40R",
1832 .type = QUIRK_MIDI_YAMAHA
1836 /* this ID is used by several devices without a product ID */
1837 USB_DEVICE(0x07cf, 0x6802),
1838 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1839 .vendor_name = "Casio",
1840 .product_name = "Keyboard",
1842 .type = QUIRK_MIDI_YAMAHA
1846 /* Mark of the Unicorn devices */
1848 /* thanks to Robert A. Lerche <ral 'at' msbit.com> */
1849 .match_flags = USB_DEVICE_ID_MATCH_VENDOR |
1850 USB_DEVICE_ID_MATCH_PRODUCT |
1851 USB_DEVICE_ID_MATCH_DEV_SUBCLASS,
1853 .idProduct = 0x0001,
1854 .bDeviceSubClass = 2,
1855 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1856 .vendor_name = "MOTU",
1857 .product_name = "Fastlane",
1858 .ifnum = QUIRK_ANY_INTERFACE,
1859 .type = QUIRK_COMPOSITE,
1860 .data = & (const struct snd_usb_audio_quirk[]) {
1863 .type = QUIRK_MIDI_RAW
1867 .type = QUIRK_IGNORE_INTERFACE
1876 /* Emagic devices */
1878 USB_DEVICE(0x086a, 0x0001),
1879 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1880 .vendor_name = "Emagic",
1881 /* .product_name = "Unitor8", */
1883 .type = QUIRK_MIDI_EMAGIC,
1884 .data = & (const struct snd_usb_midi_endpoint_info) {
1885 .out_cables = 0x80ff,
1891 USB_DEVICE(0x086a, 0x0002),
1892 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1893 .vendor_name = "Emagic",
1894 /* .product_name = "AMT8", */
1896 .type = QUIRK_MIDI_EMAGIC,
1897 .data = & (const struct snd_usb_midi_endpoint_info) {
1898 .out_cables = 0x80ff,
1904 USB_DEVICE(0x086a, 0x0003),
1905 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1906 .vendor_name = "Emagic",
1907 /* .product_name = "MT4", */
1909 .type = QUIRK_MIDI_EMAGIC,
1910 .data = & (const struct snd_usb_midi_endpoint_info) {
1911 .out_cables = 0x800f,
1917 /* TerraTec devices */
1919 USB_DEVICE_VENDOR_SPEC(0x0ccd, 0x0012),
1920 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1921 .vendor_name = "TerraTec",
1922 .product_name = "PHASE 26",
1924 .type = QUIRK_MIDI_STANDARD_INTERFACE
1928 USB_DEVICE_VENDOR_SPEC(0x0ccd, 0x0013),
1929 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1930 .vendor_name = "TerraTec",
1931 .product_name = "PHASE 26",
1933 .type = QUIRK_MIDI_STANDARD_INTERFACE
1937 USB_DEVICE_VENDOR_SPEC(0x0ccd, 0x0014),
1938 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1939 .vendor_name = "TerraTec",
1940 .product_name = "PHASE 26",
1942 .type = QUIRK_MIDI_STANDARD_INTERFACE
1946 USB_DEVICE(0x0ccd, 0x0035),
1947 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1948 .vendor_name = "Miditech",
1949 .product_name = "Play'n Roll",
1951 .type = QUIRK_MIDI_CME
1955 /* Stanton/N2IT Final Scratch v1 device ('Scratchamp') */
1957 USB_DEVICE(0x103d, 0x0100),
1958 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1959 .vendor_name = "Stanton",
1960 .product_name = "ScratchAmp",
1961 .ifnum = QUIRK_NO_INTERFACE
1965 USB_DEVICE(0x103d, 0x0101),
1966 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1967 .vendor_name = "Stanton",
1968 .product_name = "ScratchAmp",
1969 .ifnum = QUIRK_NO_INTERFACE
1973 /* Novation EMS devices */
1975 USB_DEVICE_VENDOR_SPEC(0x1235, 0x0001),
1976 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1977 .vendor_name = "Novation",
1978 .product_name = "ReMOTE Audio/XStation",
1980 .type = QUIRK_MIDI_NOVATION
1984 USB_DEVICE_VENDOR_SPEC(0x1235, 0x0002),
1985 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1986 .vendor_name = "Novation",
1987 .product_name = "Speedio",
1989 .type = QUIRK_MIDI_NOVATION
1993 USB_DEVICE_VENDOR_SPEC(0x1235, 0x4661),
1994 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1995 .vendor_name = "Novation",
1996 .product_name = "ReMOTE25",
1998 .type = QUIRK_MIDI_NOVATION
2004 /* aka. Serato Scratch Live DJ Box */
2005 USB_DEVICE(0x13e5, 0x0001),
2006 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2007 .vendor_name = "Rane",
2008 .product_name = "SL-1",
2009 .ifnum = QUIRK_NO_INTERFACE
2013 /* Miditech devices */
2015 USB_DEVICE(0x4752, 0x0011),
2016 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2017 .vendor_name = "Miditech",
2018 .product_name = "Midistart-2",
2020 .type = QUIRK_MIDI_CME
2024 /* Central Music devices */
2026 /* this ID used by both Miditech MidiStudio-2 and CME UF-x */
2027 USB_DEVICE(0x7104, 0x2202),
2028 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2030 .type = QUIRK_MIDI_CME
2036 * Some USB MIDI devices don't have an audio control interface,
2037 * so we have to grab MIDI streaming interfaces here.
2039 .match_flags = USB_DEVICE_ID_MATCH_INT_CLASS |
2040 USB_DEVICE_ID_MATCH_INT_SUBCLASS,
2041 .bInterfaceClass = USB_CLASS_AUDIO,
2042 .bInterfaceSubClass = USB_SUBCLASS_MIDI_STREAMING,
2043 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2044 .ifnum = QUIRK_ANY_INTERFACE,
2045 .type = QUIRK_MIDI_STANDARD_INTERFACE
2049 #undef USB_DEVICE_VENDOR_SPEC