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
46 #define YAMAHA_DEVICE(id, name) { \
47 USB_DEVICE(0x0499, id), \
48 .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) { \
49 .vendor_name = "Yamaha", \
50 .product_name = name, \
51 .ifnum = QUIRK_ANY_INTERFACE, \
52 .type = QUIRK_MIDI_YAMAHA \
55 #define YAMAHA_INTERFACE(id, intf, name) { \
56 USB_DEVICE_VENDOR_SPEC(0x0499, id), \
57 .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) { \
58 .vendor_name = "Yamaha", \
59 .product_name = name, \
61 .type = QUIRK_MIDI_YAMAHA \
64 YAMAHA_DEVICE(0x1000, "UX256"),
65 YAMAHA_DEVICE(0x1001, "MU1000"),
66 YAMAHA_DEVICE(0x1002, "MU2000"),
67 YAMAHA_DEVICE(0x1003, "MU500"),
68 YAMAHA_INTERFACE(0x1004, 3, "UW500"),
69 YAMAHA_DEVICE(0x1005, "MOTIF6"),
70 YAMAHA_DEVICE(0x1006, "MOTIF7"),
71 YAMAHA_DEVICE(0x1007, "MOTIF8"),
72 YAMAHA_DEVICE(0x1008, "UX96"),
73 YAMAHA_DEVICE(0x1009, "UX16"),
74 YAMAHA_INTERFACE(0x100a, 3, "EOS BX"),
75 YAMAHA_DEVICE(0x100c, "UC-MX"),
76 YAMAHA_DEVICE(0x100d, "UC-KX"),
77 YAMAHA_DEVICE(0x100e, "S08"),
78 YAMAHA_DEVICE(0x100f, "CLP-150"),
79 YAMAHA_DEVICE(0x1010, "CLP-170"),
80 YAMAHA_DEVICE(0x1011, "P-250"),
81 YAMAHA_DEVICE(0x1012, "TYROS"),
82 YAMAHA_DEVICE(0x1013, "PF-500"),
83 YAMAHA_DEVICE(0x1014, "S90"),
84 YAMAHA_DEVICE(0x1015, "MOTIF-R"),
85 YAMAHA_DEVICE(0x1017, "CVP-204"),
86 YAMAHA_DEVICE(0x1018, "CVP-206"),
87 YAMAHA_DEVICE(0x1019, "CVP-208"),
88 YAMAHA_DEVICE(0x101a, "CVP-210"),
89 YAMAHA_DEVICE(0x101b, "PSR-1100"),
90 YAMAHA_DEVICE(0x101c, "PSR-2100"),
91 YAMAHA_DEVICE(0x101d, "CLP-175"),
92 YAMAHA_DEVICE(0x101e, "PSR-K1"),
93 YAMAHA_DEVICE(0x1020, "EZ-250i"),
94 YAMAHA_DEVICE(0x1021, "MOTIF ES 6"),
95 YAMAHA_DEVICE(0x1022, "MOTIF ES 7"),
96 YAMAHA_DEVICE(0x1023, "MOTIF ES 8"),
97 YAMAHA_DEVICE(0x1024, "CVP-301"),
98 YAMAHA_DEVICE(0x1025, "CVP-303"),
99 YAMAHA_DEVICE(0x1026, "CVP-305"),
100 YAMAHA_DEVICE(0x1027, "CVP-307"),
101 YAMAHA_DEVICE(0x1028, "CVP-309"),
102 YAMAHA_DEVICE(0x1029, "CVP-309GP"),
103 YAMAHA_DEVICE(0x102a, "PSR-1500"),
104 YAMAHA_DEVICE(0x102b, "PSR-3000"),
105 YAMAHA_DEVICE(0x102e, "ELS-01/01C"),
106 YAMAHA_DEVICE(0x1030, "PSR-295/293"),
107 YAMAHA_DEVICE(0x1031, "DGX-205/203"),
108 YAMAHA_DEVICE(0x1032, "DGX-305"),
109 YAMAHA_DEVICE(0x1033, "DGX-505"),
110 YAMAHA_DEVICE(0x1034, NULL),
111 YAMAHA_DEVICE(0x1035, NULL),
112 YAMAHA_DEVICE(0x1036, NULL),
113 YAMAHA_DEVICE(0x1037, NULL),
114 YAMAHA_DEVICE(0x1038, NULL),
115 YAMAHA_DEVICE(0x1039, NULL),
116 YAMAHA_DEVICE(0x103a, NULL),
117 YAMAHA_DEVICE(0x103b, NULL),
118 YAMAHA_DEVICE(0x103c, NULL),
119 YAMAHA_DEVICE(0x2000, "DGP-7"),
120 YAMAHA_DEVICE(0x2001, "DGP-5"),
121 YAMAHA_DEVICE(0x2002, NULL),
122 YAMAHA_DEVICE(0x5000, "CS1D"),
123 YAMAHA_DEVICE(0x5001, "DSP1D"),
124 YAMAHA_DEVICE(0x5002, "DME32"),
125 YAMAHA_DEVICE(0x5003, "DM2000"),
126 YAMAHA_DEVICE(0x5004, "02R96"),
127 YAMAHA_DEVICE(0x5005, "ACU16-C"),
128 YAMAHA_DEVICE(0x5006, "NHB32-C"),
129 YAMAHA_DEVICE(0x5007, "DM1000"),
130 YAMAHA_DEVICE(0x5008, "01V96"),
131 YAMAHA_DEVICE(0x5009, "SPX2000"),
132 YAMAHA_DEVICE(0x500a, "PM5D"),
133 YAMAHA_DEVICE(0x500b, "DME64N"),
134 YAMAHA_DEVICE(0x500c, "DME24N"),
135 YAMAHA_DEVICE(0x500d, NULL),
136 YAMAHA_DEVICE(0x500e, NULL),
137 YAMAHA_DEVICE(0x7000, "DTX"),
138 YAMAHA_DEVICE(0x7010, "UB99"),
140 #undef YAMAHA_INTERFACE
143 * Roland/RolandED/Edirol/BOSS devices
146 USB_DEVICE(0x0582, 0x0000),
147 .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
148 .vendor_name = "Roland",
149 .product_name = "UA-100",
150 .ifnum = QUIRK_ANY_INTERFACE,
151 .type = QUIRK_COMPOSITE,
152 .data = (const snd_usb_audio_quirk_t[]) {
155 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
156 .data = & (const struct audioformat) {
157 .format = SNDRV_PCM_FORMAT_S16_LE,
165 .rates = SNDRV_PCM_RATE_CONTINUOUS,
172 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
173 .data = & (const struct audioformat) {
174 .format = SNDRV_PCM_FORMAT_S16_LE,
179 .attributes = EP_CS_ATTR_FILL_MAX,
182 .rates = SNDRV_PCM_RATE_CONTINUOUS,
189 .type = QUIRK_MIDI_FIXED_ENDPOINT,
190 .data = & (const snd_usb_midi_endpoint_info_t) {
191 .out_cables = 0x0007,
202 USB_DEVICE(0x0582, 0x0002),
203 .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
204 .vendor_name = "EDIROL",
205 .product_name = "UM-4",
207 .type = QUIRK_MIDI_FIXED_ENDPOINT,
208 .data = & (const snd_usb_midi_endpoint_info_t) {
209 .out_cables = 0x000f,
215 USB_DEVICE(0x0582, 0x0003),
216 .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
217 .vendor_name = "Roland",
218 .product_name = "SC-8850",
220 .type = QUIRK_MIDI_FIXED_ENDPOINT,
221 .data = & (const snd_usb_midi_endpoint_info_t) {
222 .out_cables = 0x003f,
228 USB_DEVICE(0x0582, 0x0004),
229 .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
230 .vendor_name = "Roland",
231 .product_name = "U-8",
233 .type = QUIRK_MIDI_FIXED_ENDPOINT,
234 .data = & (const snd_usb_midi_endpoint_info_t) {
235 .out_cables = 0x0005,
241 USB_DEVICE(0x0582, 0x0005),
242 .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
243 .vendor_name = "EDIROL",
244 .product_name = "UM-2",
246 .type = QUIRK_MIDI_FIXED_ENDPOINT,
247 .data = & (const snd_usb_midi_endpoint_info_t) {
248 .out_cables = 0x0003,
254 USB_DEVICE(0x0582, 0x0007),
255 .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
256 .vendor_name = "Roland",
257 .product_name = "SC-8820",
259 .type = QUIRK_MIDI_FIXED_ENDPOINT,
260 .data = & (const snd_usb_midi_endpoint_info_t) {
261 .out_cables = 0x0013,
267 USB_DEVICE(0x0582, 0x0008),
268 .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
269 .vendor_name = "Roland",
270 .product_name = "PC-300",
272 .type = QUIRK_MIDI_FIXED_ENDPOINT,
273 .data = & (const snd_usb_midi_endpoint_info_t) {
274 .out_cables = 0x0001,
280 USB_DEVICE(0x0582, 0x0009),
281 .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
282 .vendor_name = "EDIROL",
283 .product_name = "UM-1",
285 .type = QUIRK_MIDI_FIXED_ENDPOINT,
286 .data = & (const snd_usb_midi_endpoint_info_t) {
287 .out_cables = 0x0001,
293 USB_DEVICE(0x0582, 0x000b),
294 .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
295 .vendor_name = "Roland",
296 .product_name = "SK-500",
298 .type = QUIRK_MIDI_FIXED_ENDPOINT,
299 .data = & (const snd_usb_midi_endpoint_info_t) {
300 .out_cables = 0x0013,
306 /* thanks to Emiliano Grilli <emillo@libero.it>
307 * for helping researching this data */
308 USB_DEVICE(0x0582, 0x000c),
309 .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
310 .vendor_name = "Roland",
311 .product_name = "SC-D70",
312 .ifnum = QUIRK_ANY_INTERFACE,
313 .type = QUIRK_COMPOSITE,
314 .data = (const snd_usb_audio_quirk_t[]) {
317 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
318 .data = & (const struct audioformat) {
319 .format = SNDRV_PCM_FORMAT_S24_3LE,
327 .rates = SNDRV_PCM_RATE_CONTINUOUS,
334 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
335 .data = & (const struct audioformat) {
336 .format = SNDRV_PCM_FORMAT_S24_3LE,
344 .rates = SNDRV_PCM_RATE_CONTINUOUS,
351 .type = QUIRK_MIDI_FIXED_ENDPOINT,
352 .data = & (const snd_usb_midi_endpoint_info_t) {
353 .out_cables = 0x0007,
364 * This quirk is for the "Advanced Driver" mode of the Edirol UA-5.
365 * If the advanced mode switch at the back of the unit is off, the
366 * UA-5 has ID 0x0582/0x0011 and is standard compliant (no quirks),
367 * but offers only 16-bit PCM.
368 * In advanced mode, the UA-5 will output S24_3LE samples (two
369 * channels) at the rate indicated on the front switch, including
370 * the 96kHz sample rate.
372 USB_DEVICE(0x0582, 0x0010),
373 .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
374 .vendor_name = "EDIROL",
375 .product_name = "UA-5",
376 .ifnum = QUIRK_ANY_INTERFACE,
377 .type = QUIRK_COMPOSITE,
378 .data = (const snd_usb_audio_quirk_t[]) {
381 .type = QUIRK_AUDIO_STANDARD_INTERFACE
385 .type = QUIRK_AUDIO_STANDARD_INTERFACE
394 USB_DEVICE(0x0582, 0x0012),
395 .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
396 .vendor_name = "Roland",
397 .product_name = "XV-5050",
399 .type = QUIRK_MIDI_FIXED_ENDPOINT,
400 .data = & (const snd_usb_midi_endpoint_info_t) {
401 .out_cables = 0x0001,
407 USB_DEVICE(0x0582, 0x0014),
408 .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
409 .vendor_name = "EDIROL",
410 .product_name = "UM-880",
412 .type = QUIRK_MIDI_FIXED_ENDPOINT,
413 .data = & (const snd_usb_midi_endpoint_info_t) {
414 .out_cables = 0x01ff,
420 USB_DEVICE(0x0582, 0x0016),
421 .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
422 .vendor_name = "EDIROL",
423 .product_name = "SD-90",
425 .type = QUIRK_MIDI_FIXED_ENDPOINT,
426 .data = & (const snd_usb_midi_endpoint_info_t) {
427 .out_cables = 0x000f,
433 USB_DEVICE(0x0582, 0x001b),
434 .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
435 .vendor_name = "Roland",
436 .product_name = "MMP-2",
438 .type = QUIRK_MIDI_FIXED_ENDPOINT,
439 .data = & (const snd_usb_midi_endpoint_info_t) {
440 .out_cables = 0x0001,
446 USB_DEVICE(0x0582, 0x001d),
447 .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
448 .vendor_name = "Roland",
449 .product_name = "V-SYNTH",
451 .type = QUIRK_MIDI_FIXED_ENDPOINT,
452 .data = & (const snd_usb_midi_endpoint_info_t) {
453 .out_cables = 0x0001,
459 USB_DEVICE(0x0582, 0x0023),
460 .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
461 .vendor_name = "EDIROL",
462 .product_name = "UM-550",
464 .type = QUIRK_MIDI_FIXED_ENDPOINT,
465 .data = & (const snd_usb_midi_endpoint_info_t) {
466 .out_cables = 0x003f,
473 * This quirk is for the "Advanced Driver" mode. If off, the UA-20
474 * has ID 0x0026 and is standard compliant, but has only 16-bit PCM
477 USB_DEVICE(0x0582, 0x0025),
478 .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
479 .vendor_name = "EDIROL",
480 .product_name = "UA-20",
481 .ifnum = QUIRK_ANY_INTERFACE,
482 .type = QUIRK_COMPOSITE,
483 .data = (const snd_usb_audio_quirk_t[]) {
486 .type = QUIRK_AUDIO_STANDARD_INTERFACE
490 .type = QUIRK_AUDIO_STANDARD_INTERFACE
494 .type = QUIRK_MIDI_STANDARD_INTERFACE
503 USB_DEVICE(0x0582, 0x0027),
504 .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
505 .vendor_name = "EDIROL",
506 .product_name = "SD-20",
508 .type = QUIRK_MIDI_FIXED_ENDPOINT,
509 .data = & (const snd_usb_midi_endpoint_info_t) {
510 .out_cables = 0x0003,
516 USB_DEVICE(0x0582, 0x0029),
517 .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
518 .vendor_name = "EDIROL",
519 .product_name = "SD-80",
521 .type = QUIRK_MIDI_FIXED_ENDPOINT,
522 .data = & (const snd_usb_midi_endpoint_info_t) {
523 .out_cables = 0x000f,
529 * This quirk is for the "Advanced" modes of the Edirol UA-700.
530 * If the sample format switch is not in an advanced setting, the
531 * UA-700 has ID 0x0582/0x002c and is standard compliant (no quirks),
532 * but offers only 16-bit PCM and no MIDI.
534 USB_DEVICE_VENDOR_SPEC(0x0582, 0x002b),
535 .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
536 .vendor_name = "EDIROL",
537 .product_name = "UA-700",
538 .ifnum = QUIRK_ANY_INTERFACE,
539 .type = QUIRK_COMPOSITE,
540 .data = (const snd_usb_audio_quirk_t[]) {
543 .type = QUIRK_AUDIO_EDIROL_UA700_UA25
547 .type = QUIRK_AUDIO_EDIROL_UA700_UA25
551 .type = QUIRK_AUDIO_EDIROL_UA700_UA25
560 USB_DEVICE(0x0582, 0x002d),
561 .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
562 .vendor_name = "Roland",
563 .product_name = "XV-2020",
565 .type = QUIRK_MIDI_FIXED_ENDPOINT,
566 .data = & (const snd_usb_midi_endpoint_info_t) {
567 .out_cables = 0x0001,
573 USB_DEVICE(0x0582, 0x002f),
574 .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
575 .vendor_name = "Roland",
576 .product_name = "VariOS",
578 .type = QUIRK_MIDI_FIXED_ENDPOINT,
579 .data = & (const snd_usb_midi_endpoint_info_t) {
580 .out_cables = 0x0007,
586 USB_DEVICE(0x0582, 0x0033),
587 .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
588 .vendor_name = "EDIROL",
589 .product_name = "PCR",
591 .type = QUIRK_MIDI_FIXED_ENDPOINT,
592 .data = & (const snd_usb_midi_endpoint_info_t) {
593 .out_cables = 0x0003,
599 USB_DEVICE(0x0582, 0x0037),
600 .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
601 .vendor_name = "Roland",
602 .product_name = "Digital Piano",
604 .type = QUIRK_MIDI_FIXED_ENDPOINT,
605 .data = & (const snd_usb_midi_endpoint_info_t) {
606 .out_cables = 0x0001,
613 * This quirk is for the "Advanced Driver" mode. If off, the GS-10
614 * has ID 0x003c and is standard compliant, but has only 16-bit PCM
617 USB_DEVICE_VENDOR_SPEC(0x0582, 0x003b),
618 .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
619 .vendor_name = "BOSS",
620 .product_name = "GS-10",
621 .ifnum = QUIRK_ANY_INTERFACE,
622 .type = QUIRK_COMPOSITE,
623 .data = & (const snd_usb_audio_quirk_t[]) {
626 .type = QUIRK_AUDIO_STANDARD_INTERFACE
630 .type = QUIRK_AUDIO_STANDARD_INTERFACE
634 .type = QUIRK_MIDI_STANDARD_INTERFACE
643 USB_DEVICE(0x0582, 0x0040),
644 .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
645 .vendor_name = "Roland",
646 .product_name = "GI-20",
648 .type = QUIRK_MIDI_FIXED_ENDPOINT,
649 .data = & (const snd_usb_midi_endpoint_info_t) {
650 .out_cables = 0x0001,
656 USB_DEVICE(0x0582, 0x0042),
657 .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
658 .vendor_name = "Roland",
659 .product_name = "RS-70",
661 .type = QUIRK_MIDI_FIXED_ENDPOINT,
662 .data = & (const snd_usb_midi_endpoint_info_t) {
663 .out_cables = 0x0001,
669 USB_DEVICE(0x0582, 0x0044),
670 .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
671 .vendor_name = "Roland",
672 .product_name = "UA-1000",
673 .ifnum = QUIRK_ANY_INTERFACE,
674 .type = QUIRK_COMPOSITE,
675 .data = (const snd_usb_audio_quirk_t[]) {
678 .type = QUIRK_AUDIO_EDIROL_UA1000
682 .type = QUIRK_AUDIO_EDIROL_UA1000
686 .type = QUIRK_MIDI_FIXED_ENDPOINT,
687 .data = & (const snd_usb_midi_endpoint_info_t) {
688 .out_cables = 0x0003,
699 USB_DEVICE(0x0582, 0x0048),
700 .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
701 .vendor_name = "EDIROL",
702 .product_name = "UR-80",
704 .type = QUIRK_MIDI_FIXED_ENDPOINT,
705 .data = & (const snd_usb_midi_endpoint_info_t) {
706 .out_cables = 0x0003,
712 USB_DEVICE(0x0582, 0x004d),
713 .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
714 .vendor_name = "EDIROL",
715 .product_name = "PCR-A",
717 .type = QUIRK_MIDI_FIXED_ENDPOINT,
718 .data = & (const snd_usb_midi_endpoint_info_t) {
719 .out_cables = 0x0003,
726 * This quirk is for the "Advanced Driver" mode. If off, the UA-3FX
727 * is standard compliant, but has only 16-bit PCM.
729 USB_DEVICE(0x0582, 0x0050),
730 .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
731 .vendor_name = "EDIROL",
732 .product_name = "UA-3FX",
733 .ifnum = QUIRK_ANY_INTERFACE,
734 .type = QUIRK_COMPOSITE,
735 .data = (const snd_usb_audio_quirk_t[]) {
738 .type = QUIRK_AUDIO_STANDARD_INTERFACE
742 .type = QUIRK_AUDIO_STANDARD_INTERFACE
751 USB_DEVICE(0x0582, 0x0052),
752 .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
753 .vendor_name = "EDIROL",
754 .product_name = "UM-1SX",
756 .type = QUIRK_MIDI_STANDARD_INTERFACE
760 USB_DEVICE(0x0582, 0x0065),
761 .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
762 .vendor_name = "EDIROL",
763 .product_name = "PCR-1",
765 .type = QUIRK_MIDI_FIXED_ENDPOINT,
766 .data = & (const snd_usb_midi_endpoint_info_t) {
767 .out_cables = 0x0001,
773 USB_DEVICE_VENDOR_SPEC(0x0582, 0x006a),
774 .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
775 .vendor_name = "Roland",
776 .product_name = "SP-606",
778 .type = QUIRK_MIDI_FIXED_ENDPOINT,
779 .data = & (const snd_usb_midi_endpoint_info_t) {
780 .out_cables = 0x0001,
786 USB_DEVICE(0x0582, 0x006d),
787 .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
788 .vendor_name = "Roland",
789 .product_name = "FANTOM-X",
791 .type = QUIRK_MIDI_FIXED_ENDPOINT,
792 .data = & (const snd_usb_midi_endpoint_info_t) {
793 .out_cables = 0x0001,
799 * This quirk is for the "Advanced" modes of the Edirol UA-25.
800 * If the switch is not in an advanced setting, the UA-25 has
801 * ID 0x0582/0x0073 and is standard compliant (no quirks), but
802 * offers only 16-bit PCM at 44.1 kHz and no MIDI.
804 USB_DEVICE_VENDOR_SPEC(0x0582, 0x0074),
805 .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
806 .vendor_name = "EDIROL",
807 .product_name = "UA-25",
808 .ifnum = QUIRK_ANY_INTERFACE,
809 .type = QUIRK_COMPOSITE,
810 .data = (const snd_usb_audio_quirk_t[]) {
813 .type = QUIRK_AUDIO_EDIROL_UA700_UA25
817 .type = QUIRK_AUDIO_EDIROL_UA700_UA25
821 .type = QUIRK_AUDIO_EDIROL_UA700_UA25
830 USB_DEVICE(0x0582, 0x0075),
831 .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
832 .vendor_name = "BOSS",
833 .product_name = "DR-880",
835 .type = QUIRK_MIDI_FIXED_ENDPOINT,
836 .data = & (const snd_usb_midi_endpoint_info_t) {
837 .out_cables = 0x0001,
843 /* Midiman/M-Audio devices */
845 USB_DEVICE_VENDOR_SPEC(0x0763, 0x1002),
846 .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
847 .vendor_name = "M-Audio",
848 .product_name = "MidiSport 2x2",
849 .ifnum = QUIRK_ANY_INTERFACE,
850 .type = QUIRK_MIDI_MIDIMAN,
851 .data = & (const snd_usb_midi_endpoint_info_t) {
852 .out_cables = 0x0003,
858 USB_DEVICE_VENDOR_SPEC(0x0763, 0x1011),
859 .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
860 .vendor_name = "M-Audio",
861 .product_name = "MidiSport 1x1",
862 .ifnum = QUIRK_ANY_INTERFACE,
863 .type = QUIRK_MIDI_MIDIMAN,
864 .data = & (const snd_usb_midi_endpoint_info_t) {
865 .out_cables = 0x0001,
871 USB_DEVICE_VENDOR_SPEC(0x0763, 0x1015),
872 .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
873 .vendor_name = "M-Audio",
874 .product_name = "Keystation",
875 .ifnum = QUIRK_ANY_INTERFACE,
876 .type = QUIRK_MIDI_MIDIMAN,
877 .data = & (const snd_usb_midi_endpoint_info_t) {
878 .out_cables = 0x0001,
884 USB_DEVICE_VENDOR_SPEC(0x0763, 0x1021),
885 .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
886 .vendor_name = "M-Audio",
887 .product_name = "MidiSport 4x4",
888 .ifnum = QUIRK_ANY_INTERFACE,
889 .type = QUIRK_MIDI_MIDIMAN,
890 .data = & (const snd_usb_midi_endpoint_info_t) {
891 .out_cables = 0x000f,
898 * For hardware revision 1.05; in the later revisions (1.10 and
899 * 1.21), 0x1031 is the ID for the device without firmware.
900 * Thanks to Olaf Giesbrecht <Olaf_Giesbrecht@yahoo.de>
902 USB_DEVICE_VER(0x0763, 0x1031, 0x0100, 0x0109),
903 .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
904 .vendor_name = "M-Audio",
905 .product_name = "MidiSport 8x8",
906 .ifnum = QUIRK_ANY_INTERFACE,
907 .type = QUIRK_MIDI_MIDIMAN,
908 .data = & (const snd_usb_midi_endpoint_info_t) {
909 .out_cables = 0x01ff,
915 USB_DEVICE_VENDOR_SPEC(0x0763, 0x1033),
916 .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
917 .vendor_name = "M-Audio",
918 .product_name = "MidiSport 8x8",
919 .ifnum = QUIRK_ANY_INTERFACE,
920 .type = QUIRK_MIDI_MIDIMAN,
921 .data = & (const snd_usb_midi_endpoint_info_t) {
922 .out_cables = 0x01ff,
928 USB_DEVICE_VENDOR_SPEC(0x0763, 0x1041),
929 .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
930 .vendor_name = "M-Audio",
931 .product_name = "MidiSport 2x4",
932 .ifnum = QUIRK_ANY_INTERFACE,
933 .type = QUIRK_MIDI_MIDIMAN,
934 .data = & (const snd_usb_midi_endpoint_info_t) {
935 .out_cables = 0x000f,
941 USB_DEVICE_VENDOR_SPEC(0x0763, 0x2001),
942 .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
943 .vendor_name = "M-Audio",
944 .product_name = "Quattro",
945 .ifnum = QUIRK_ANY_INTERFACE,
946 .type = QUIRK_COMPOSITE,
947 .data = & (const snd_usb_audio_quirk_t[]) {
949 * Interfaces 0-2 are "Windows-compatible", 16-bit only,
950 * and share endpoints with the other interfaces.
951 * Ignore them. The other interfaces can do 24 bits,
952 * but captured samples are big-endian (see usbaudio.c).
956 .type = QUIRK_IGNORE_INTERFACE
960 .type = QUIRK_IGNORE_INTERFACE
964 .type = QUIRK_IGNORE_INTERFACE
968 .type = QUIRK_IGNORE_INTERFACE
972 .type = QUIRK_AUDIO_STANDARD_INTERFACE
976 .type = QUIRK_AUDIO_STANDARD_INTERFACE
980 .type = QUIRK_IGNORE_INTERFACE
984 .type = QUIRK_AUDIO_STANDARD_INTERFACE
988 .type = QUIRK_AUDIO_STANDARD_INTERFACE
992 .type = QUIRK_MIDI_MIDIMAN,
993 .data = & (const snd_usb_midi_endpoint_info_t) {
994 .out_cables = 0x0001,
1005 USB_DEVICE_VENDOR_SPEC(0x0763, 0x2003),
1006 .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
1007 .vendor_name = "M-Audio",
1008 .product_name = "AudioPhile",
1010 .type = QUIRK_MIDI_MIDIMAN,
1011 .data = & (const snd_usb_midi_endpoint_info_t) {
1012 .out_cables = 0x0001,
1018 USB_DEVICE_VENDOR_SPEC(0x0763, 0x2008),
1019 .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
1020 .vendor_name = "M-Audio",
1021 .product_name = "Ozone",
1023 .type = QUIRK_MIDI_MIDIMAN,
1024 .data = & (const snd_usb_midi_endpoint_info_t) {
1025 .out_cables = 0x0001,
1031 USB_DEVICE_VENDOR_SPEC(0x0763, 0x200d),
1032 .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
1033 .vendor_name = "M-Audio",
1034 .product_name = "OmniStudio",
1035 .ifnum = QUIRK_ANY_INTERFACE,
1036 .type = QUIRK_COMPOSITE,
1037 .data = & (const snd_usb_audio_quirk_t[]) {
1040 .type = QUIRK_IGNORE_INTERFACE
1044 .type = QUIRK_IGNORE_INTERFACE
1048 .type = QUIRK_IGNORE_INTERFACE
1052 .type = QUIRK_IGNORE_INTERFACE
1056 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1060 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1064 .type = QUIRK_IGNORE_INTERFACE
1068 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1072 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1076 .type = QUIRK_MIDI_MIDIMAN,
1077 .data = & (const snd_usb_midi_endpoint_info_t) {
1078 .out_cables = 0x0001,
1089 /* Mark of the Unicorn devices */
1091 /* thanks to Robert A. Lerche <ral 'at' msbit.com> */
1092 USB_DEVICE(0x07fd, 0x0001),
1093 .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
1094 .vendor_name = "MOTU",
1095 .product_name = "Fastlane",
1096 .ifnum = QUIRK_ANY_INTERFACE,
1097 .type = QUIRK_COMPOSITE,
1098 .data = & (const snd_usb_audio_quirk_t[]) {
1101 .type = QUIRK_MIDI_MOTU
1105 .type = QUIRK_IGNORE_INTERFACE
1115 /* Creative Sound Blaster MP3+ */
1116 USB_DEVICE(0x041e, 0x3010),
1117 .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
1118 .vendor_name = "Creative Labs",
1119 .product_name = "Sound Blaster MP3+",
1120 .ifnum = QUIRK_NO_INTERFACE
1125 /* Emagic devices */
1127 USB_DEVICE(0x086a, 0x0001),
1128 .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
1129 .vendor_name = "Emagic",
1130 /* .product_name = "Unitor8", */
1132 .type = QUIRK_MIDI_EMAGIC,
1133 .data = & (const snd_usb_midi_endpoint_info_t) {
1134 .out_cables = 0x80ff,
1140 USB_DEVICE(0x086a, 0x0002),
1141 .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
1142 .vendor_name = "Emagic",
1143 /* .product_name = "AMT8", */
1145 .type = QUIRK_MIDI_EMAGIC,
1146 .data = & (const snd_usb_midi_endpoint_info_t) {
1147 .out_cables = 0x80ff,
1153 USB_DEVICE(0x086a, 0x0003),
1154 .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
1155 .vendor_name = "Emagic",
1156 /* .product_name = "MT4", */
1158 .type = QUIRK_MIDI_EMAGIC,
1159 .data = & (const snd_usb_midi_endpoint_info_t) {
1160 .out_cables = 0x800f,
1167 USB_DEVICE_VENDOR_SPEC(0x0ccd, 0x0013),
1168 .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
1169 .vendor_name = "Terratec",
1170 .product_name = "PHASE 26",
1172 .type = QUIRK_MIDI_STANDARD_INTERFACE
1176 /* Novation EMS devices */
1178 USB_DEVICE_VENDOR_SPEC(0x1235, 0x0001),
1179 .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
1180 .vendor_name = "Novation",
1181 .product_name = "ReMOTE Audio/XStation",
1183 .type = QUIRK_MIDI_NOVATION
1187 USB_DEVICE_VENDOR_SPEC(0x1235, 0x0002),
1188 .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
1189 .vendor_name = "Novation",
1190 .product_name = "Speedio",
1192 .type = QUIRK_MIDI_NOVATION
1196 USB_DEVICE_VENDOR_SPEC(0x1235, 0x4661),
1197 .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
1198 .vendor_name = "Novation",
1199 .product_name = "ReMOTE25",
1201 .type = QUIRK_MIDI_NOVATION
1207 * Some USB MIDI devices don't have an audio control interface,
1208 * so we have to grab MIDI streaming interfaces here.
1210 .match_flags = USB_DEVICE_ID_MATCH_INT_CLASS |
1211 USB_DEVICE_ID_MATCH_INT_SUBCLASS,
1212 .bInterfaceClass = USB_CLASS_AUDIO,
1213 .bInterfaceSubClass = USB_SUBCLASS_MIDI_STREAMING,
1214 .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
1215 .ifnum = QUIRK_ANY_INTERFACE,
1216 .type = QUIRK_MIDI_STANDARD_INTERFACE
1220 #undef USB_DEVICE_VENDOR_SPEC