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 .match_flags = USB_DEVICE_ID_MATCH_DEVICE,
87 .bInterfaceClass = USB_CLASS_AUDIO,
91 * Logitech QuickCam: bDeviceClass is vendor-specific, so generic interface
92 * class matches do not take effect without an explicit ID match.
95 .match_flags = USB_DEVICE_ID_MATCH_DEVICE |
96 USB_DEVICE_ID_MATCH_INT_CLASS |
97 USB_DEVICE_ID_MATCH_INT_SUBCLASS,
100 .bInterfaceClass = USB_CLASS_AUDIO,
101 .bInterfaceSubClass = USB_SUBCLASS_AUDIOCONTROL
104 .match_flags = USB_DEVICE_ID_MATCH_DEVICE |
105 USB_DEVICE_ID_MATCH_INT_CLASS |
106 USB_DEVICE_ID_MATCH_INT_SUBCLASS,
109 .bInterfaceClass = USB_CLASS_AUDIO,
110 .bInterfaceSubClass = USB_SUBCLASS_AUDIOCONTROL
113 .match_flags = USB_DEVICE_ID_MATCH_DEVICE |
114 USB_DEVICE_ID_MATCH_INT_CLASS |
115 USB_DEVICE_ID_MATCH_INT_SUBCLASS,
118 .bInterfaceClass = USB_CLASS_AUDIO,
119 .bInterfaceSubClass = USB_SUBCLASS_AUDIOCONTROL
122 .match_flags = USB_DEVICE_ID_MATCH_DEVICE |
123 USB_DEVICE_ID_MATCH_INT_CLASS |
124 USB_DEVICE_ID_MATCH_INT_SUBCLASS,
127 .bInterfaceClass = USB_CLASS_AUDIO,
128 .bInterfaceSubClass = USB_SUBCLASS_AUDIOCONTROL
131 .match_flags = USB_DEVICE_ID_MATCH_DEVICE |
132 USB_DEVICE_ID_MATCH_INT_CLASS |
133 USB_DEVICE_ID_MATCH_INT_SUBCLASS,
136 .bInterfaceClass = USB_CLASS_AUDIO,
137 .bInterfaceSubClass = USB_SUBCLASS_AUDIOCONTROL
140 .match_flags = USB_DEVICE_ID_MATCH_DEVICE |
141 USB_DEVICE_ID_MATCH_INT_CLASS |
142 USB_DEVICE_ID_MATCH_INT_SUBCLASS,
145 .bInterfaceClass = USB_CLASS_AUDIO,
146 .bInterfaceSubClass = USB_SUBCLASS_AUDIOCONTROL
149 .match_flags = USB_DEVICE_ID_MATCH_DEVICE |
150 USB_DEVICE_ID_MATCH_INT_CLASS |
151 USB_DEVICE_ID_MATCH_INT_SUBCLASS,
154 .bInterfaceClass = USB_CLASS_AUDIO,
155 .bInterfaceSubClass = USB_SUBCLASS_AUDIOCONTROL,
156 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
157 .vendor_name = "Logitech, Inc.",
158 .product_name = "QuickCam Pro 9000",
159 .ifnum = QUIRK_NO_INTERFACE
167 #define YAMAHA_DEVICE(id, name) { \
168 USB_DEVICE(0x0499, id), \
169 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { \
170 .vendor_name = "Yamaha", \
171 .product_name = name, \
172 .ifnum = QUIRK_ANY_INTERFACE, \
173 .type = QUIRK_MIDI_YAMAHA \
176 #define YAMAHA_INTERFACE(id, intf, name) { \
177 USB_DEVICE_VENDOR_SPEC(0x0499, id), \
178 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { \
179 .vendor_name = "Yamaha", \
180 .product_name = name, \
182 .type = QUIRK_MIDI_YAMAHA \
185 YAMAHA_DEVICE(0x1000, "UX256"),
186 YAMAHA_DEVICE(0x1001, "MU1000"),
187 YAMAHA_DEVICE(0x1002, "MU2000"),
188 YAMAHA_DEVICE(0x1003, "MU500"),
189 YAMAHA_INTERFACE(0x1004, 3, "UW500"),
190 YAMAHA_DEVICE(0x1005, "MOTIF6"),
191 YAMAHA_DEVICE(0x1006, "MOTIF7"),
192 YAMAHA_DEVICE(0x1007, "MOTIF8"),
193 YAMAHA_DEVICE(0x1008, "UX96"),
194 YAMAHA_DEVICE(0x1009, "UX16"),
195 YAMAHA_INTERFACE(0x100a, 3, "EOS BX"),
196 YAMAHA_DEVICE(0x100c, "UC-MX"),
197 YAMAHA_DEVICE(0x100d, "UC-KX"),
198 YAMAHA_DEVICE(0x100e, "S08"),
199 YAMAHA_DEVICE(0x100f, "CLP-150"),
200 YAMAHA_DEVICE(0x1010, "CLP-170"),
201 YAMAHA_DEVICE(0x1011, "P-250"),
202 YAMAHA_DEVICE(0x1012, "TYROS"),
203 YAMAHA_DEVICE(0x1013, "PF-500"),
204 YAMAHA_DEVICE(0x1014, "S90"),
205 YAMAHA_DEVICE(0x1015, "MOTIF-R"),
206 YAMAHA_DEVICE(0x1016, "MDP-5"),
207 YAMAHA_DEVICE(0x1017, "CVP-204"),
208 YAMAHA_DEVICE(0x1018, "CVP-206"),
209 YAMAHA_DEVICE(0x1019, "CVP-208"),
210 YAMAHA_DEVICE(0x101a, "CVP-210"),
211 YAMAHA_DEVICE(0x101b, "PSR-1100"),
212 YAMAHA_DEVICE(0x101c, "PSR-2100"),
213 YAMAHA_DEVICE(0x101d, "CLP-175"),
214 YAMAHA_DEVICE(0x101e, "PSR-K1"),
215 YAMAHA_DEVICE(0x101f, "EZ-J24"),
216 YAMAHA_DEVICE(0x1020, "EZ-250i"),
217 YAMAHA_DEVICE(0x1021, "MOTIF ES 6"),
218 YAMAHA_DEVICE(0x1022, "MOTIF ES 7"),
219 YAMAHA_DEVICE(0x1023, "MOTIF ES 8"),
220 YAMAHA_DEVICE(0x1024, "CVP-301"),
221 YAMAHA_DEVICE(0x1025, "CVP-303"),
222 YAMAHA_DEVICE(0x1026, "CVP-305"),
223 YAMAHA_DEVICE(0x1027, "CVP-307"),
224 YAMAHA_DEVICE(0x1028, "CVP-309"),
225 YAMAHA_DEVICE(0x1029, "CVP-309GP"),
226 YAMAHA_DEVICE(0x102a, "PSR-1500"),
227 YAMAHA_DEVICE(0x102b, "PSR-3000"),
228 YAMAHA_DEVICE(0x102e, "ELS-01/01C"),
229 YAMAHA_DEVICE(0x1030, "PSR-295/293"),
230 YAMAHA_DEVICE(0x1031, "DGX-205/203"),
231 YAMAHA_DEVICE(0x1032, "DGX-305"),
232 YAMAHA_DEVICE(0x1033, "DGX-505"),
233 YAMAHA_DEVICE(0x1034, NULL),
234 YAMAHA_DEVICE(0x1035, NULL),
235 YAMAHA_DEVICE(0x1036, NULL),
236 YAMAHA_DEVICE(0x1037, NULL),
237 YAMAHA_DEVICE(0x1038, NULL),
238 YAMAHA_DEVICE(0x1039, NULL),
239 YAMAHA_DEVICE(0x103a, NULL),
240 YAMAHA_DEVICE(0x103b, NULL),
241 YAMAHA_DEVICE(0x103c, NULL),
242 YAMAHA_DEVICE(0x103d, NULL),
243 YAMAHA_DEVICE(0x103e, NULL),
244 YAMAHA_DEVICE(0x103f, NULL),
245 YAMAHA_DEVICE(0x1040, NULL),
246 YAMAHA_DEVICE(0x1041, NULL),
247 YAMAHA_DEVICE(0x1042, NULL),
248 YAMAHA_DEVICE(0x1043, NULL),
249 YAMAHA_DEVICE(0x1044, NULL),
250 YAMAHA_DEVICE(0x1045, NULL),
251 YAMAHA_INTERFACE(0x104e, 0, NULL),
252 YAMAHA_DEVICE(0x104f, NULL),
253 YAMAHA_DEVICE(0x1050, NULL),
254 YAMAHA_DEVICE(0x1051, NULL),
255 YAMAHA_DEVICE(0x1052, NULL),
256 YAMAHA_INTERFACE(0x1053, 0, NULL),
257 YAMAHA_INTERFACE(0x1054, 0, NULL),
258 YAMAHA_DEVICE(0x1055, NULL),
259 YAMAHA_DEVICE(0x1056, NULL),
260 YAMAHA_DEVICE(0x1057, NULL),
261 YAMAHA_DEVICE(0x1058, NULL),
262 YAMAHA_DEVICE(0x1059, NULL),
263 YAMAHA_DEVICE(0x105a, NULL),
264 YAMAHA_DEVICE(0x105b, NULL),
265 YAMAHA_DEVICE(0x105c, NULL),
266 YAMAHA_DEVICE(0x105d, NULL),
267 YAMAHA_DEVICE(0x2000, "DGP-7"),
268 YAMAHA_DEVICE(0x2001, "DGP-5"),
269 YAMAHA_DEVICE(0x2002, NULL),
270 YAMAHA_DEVICE(0x2003, NULL),
271 YAMAHA_DEVICE(0x5000, "CS1D"),
272 YAMAHA_DEVICE(0x5001, "DSP1D"),
273 YAMAHA_DEVICE(0x5002, "DME32"),
274 YAMAHA_DEVICE(0x5003, "DM2000"),
275 YAMAHA_DEVICE(0x5004, "02R96"),
276 YAMAHA_DEVICE(0x5005, "ACU16-C"),
277 YAMAHA_DEVICE(0x5006, "NHB32-C"),
278 YAMAHA_DEVICE(0x5007, "DM1000"),
279 YAMAHA_DEVICE(0x5008, "01V96"),
280 YAMAHA_DEVICE(0x5009, "SPX2000"),
281 YAMAHA_DEVICE(0x500a, "PM5D"),
282 YAMAHA_DEVICE(0x500b, "DME64N"),
283 YAMAHA_DEVICE(0x500c, "DME24N"),
284 YAMAHA_DEVICE(0x500d, NULL),
285 YAMAHA_DEVICE(0x500e, NULL),
286 YAMAHA_DEVICE(0x500f, NULL),
287 YAMAHA_DEVICE(0x7000, "DTX"),
288 YAMAHA_DEVICE(0x7010, "UB99"),
290 #undef YAMAHA_INTERFACE
293 * Roland/RolandED/Edirol/BOSS devices
296 USB_DEVICE(0x0582, 0x0000),
297 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
298 .vendor_name = "Roland",
299 .product_name = "UA-100",
300 .ifnum = QUIRK_ANY_INTERFACE,
301 .type = QUIRK_COMPOSITE,
302 .data = (const struct snd_usb_audio_quirk[]) {
305 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
306 .data = & (const struct audioformat) {
307 .formats = SNDRV_PCM_FMTBIT_S16_LE,
315 .rates = SNDRV_PCM_RATE_CONTINUOUS,
322 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
323 .data = & (const struct audioformat) {
324 .formats = SNDRV_PCM_FMTBIT_S16_LE,
329 .attributes = UAC_EP_CS_ATTR_FILL_MAX,
332 .rates = SNDRV_PCM_RATE_CONTINUOUS,
339 .type = QUIRK_MIDI_FIXED_ENDPOINT,
340 .data = & (const struct snd_usb_midi_endpoint_info) {
341 .out_cables = 0x0007,
352 USB_DEVICE(0x0582, 0x0002),
353 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
354 .vendor_name = "EDIROL",
355 .product_name = "UM-4",
356 .ifnum = QUIRK_ANY_INTERFACE,
357 .type = QUIRK_COMPOSITE,
358 .data = (const struct snd_usb_audio_quirk[]) {
361 .type = QUIRK_IGNORE_INTERFACE
365 .type = QUIRK_IGNORE_INTERFACE
369 .type = QUIRK_MIDI_FIXED_ENDPOINT,
370 .data = & (const struct snd_usb_midi_endpoint_info) {
371 .out_cables = 0x000f,
382 USB_DEVICE(0x0582, 0x0003),
383 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
384 .vendor_name = "Roland",
385 .product_name = "SC-8850",
386 .ifnum = QUIRK_ANY_INTERFACE,
387 .type = QUIRK_COMPOSITE,
388 .data = (const struct snd_usb_audio_quirk[]) {
391 .type = QUIRK_IGNORE_INTERFACE
395 .type = QUIRK_IGNORE_INTERFACE
399 .type = QUIRK_MIDI_FIXED_ENDPOINT,
400 .data = & (const struct snd_usb_midi_endpoint_info) {
401 .out_cables = 0x003f,
412 USB_DEVICE(0x0582, 0x0004),
413 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
414 .vendor_name = "Roland",
415 .product_name = "U-8",
416 .ifnum = QUIRK_ANY_INTERFACE,
417 .type = QUIRK_COMPOSITE,
418 .data = (const struct snd_usb_audio_quirk[]) {
421 .type = QUIRK_IGNORE_INTERFACE
425 .type = QUIRK_IGNORE_INTERFACE
429 .type = QUIRK_MIDI_FIXED_ENDPOINT,
430 .data = & (const struct snd_usb_midi_endpoint_info) {
431 .out_cables = 0x0005,
442 /* Has ID 0x0099 when not in "Advanced Driver" mode.
443 * The UM-2EX has only one input, but we cannot detect this. */
444 USB_DEVICE(0x0582, 0x0005),
445 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
446 .vendor_name = "EDIROL",
447 .product_name = "UM-2",
448 .ifnum = QUIRK_ANY_INTERFACE,
449 .type = QUIRK_COMPOSITE,
450 .data = (const struct snd_usb_audio_quirk[]) {
453 .type = QUIRK_IGNORE_INTERFACE
457 .type = QUIRK_IGNORE_INTERFACE
461 .type = QUIRK_MIDI_FIXED_ENDPOINT,
462 .data = & (const struct snd_usb_midi_endpoint_info) {
463 .out_cables = 0x0003,
474 USB_DEVICE(0x0582, 0x0007),
475 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
476 .vendor_name = "Roland",
477 .product_name = "SC-8820",
478 .ifnum = QUIRK_ANY_INTERFACE,
479 .type = QUIRK_COMPOSITE,
480 .data = (const struct snd_usb_audio_quirk[]) {
483 .type = QUIRK_IGNORE_INTERFACE
487 .type = QUIRK_IGNORE_INTERFACE
491 .type = QUIRK_MIDI_FIXED_ENDPOINT,
492 .data = & (const struct snd_usb_midi_endpoint_info) {
493 .out_cables = 0x0013,
504 USB_DEVICE(0x0582, 0x0008),
505 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
506 .vendor_name = "Roland",
507 .product_name = "PC-300",
508 .ifnum = QUIRK_ANY_INTERFACE,
509 .type = QUIRK_COMPOSITE,
510 .data = (const struct snd_usb_audio_quirk[]) {
513 .type = QUIRK_IGNORE_INTERFACE
517 .type = QUIRK_IGNORE_INTERFACE
521 .type = QUIRK_MIDI_FIXED_ENDPOINT,
522 .data = & (const struct snd_usb_midi_endpoint_info) {
523 .out_cables = 0x0001,
534 /* has ID 0x009d when not in "Advanced Driver" mode */
535 USB_DEVICE(0x0582, 0x0009),
536 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
537 .vendor_name = "EDIROL",
538 .product_name = "UM-1",
539 .ifnum = QUIRK_ANY_INTERFACE,
540 .type = QUIRK_COMPOSITE,
541 .data = (const struct snd_usb_audio_quirk[]) {
544 .type = QUIRK_IGNORE_INTERFACE
548 .type = QUIRK_IGNORE_INTERFACE
552 .type = QUIRK_MIDI_FIXED_ENDPOINT,
553 .data = & (const struct snd_usb_midi_endpoint_info) {
554 .out_cables = 0x0001,
565 USB_DEVICE(0x0582, 0x000b),
566 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
567 .vendor_name = "Roland",
568 .product_name = "SK-500",
569 .ifnum = QUIRK_ANY_INTERFACE,
570 .type = QUIRK_COMPOSITE,
571 .data = (const struct snd_usb_audio_quirk[]) {
574 .type = QUIRK_IGNORE_INTERFACE
578 .type = QUIRK_IGNORE_INTERFACE
582 .type = QUIRK_MIDI_FIXED_ENDPOINT,
583 .data = & (const struct snd_usb_midi_endpoint_info) {
584 .out_cables = 0x0013,
595 /* thanks to Emiliano Grilli <emillo@libero.it>
596 * for helping researching this data */
597 USB_DEVICE(0x0582, 0x000c),
598 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
599 .vendor_name = "Roland",
600 .product_name = "SC-D70",
601 .ifnum = QUIRK_ANY_INTERFACE,
602 .type = QUIRK_COMPOSITE,
603 .data = (const struct snd_usb_audio_quirk[]) {
606 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
607 .data = & (const struct audioformat) {
608 .formats = SNDRV_PCM_FMTBIT_S24_3LE,
616 .rates = SNDRV_PCM_RATE_CONTINUOUS,
623 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
624 .data = & (const struct audioformat) {
625 .formats = SNDRV_PCM_FMTBIT_S24_3LE,
633 .rates = SNDRV_PCM_RATE_CONTINUOUS,
640 .type = QUIRK_MIDI_FIXED_ENDPOINT,
641 .data = & (const struct snd_usb_midi_endpoint_info) {
642 .out_cables = 0x0007,
653 * This quirk is for the "Advanced Driver" mode of the Edirol UA-5.
654 * If the advanced mode switch at the back of the unit is off, the
655 * UA-5 has ID 0x0582/0x0011 and is standard compliant (no quirks),
656 * but offers only 16-bit PCM.
657 * In advanced mode, the UA-5 will output S24_3LE samples (two
658 * channels) at the rate indicated on the front switch, including
659 * the 96kHz sample rate.
661 USB_DEVICE(0x0582, 0x0010),
662 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
663 .vendor_name = "EDIROL",
664 .product_name = "UA-5",
665 .ifnum = QUIRK_ANY_INTERFACE,
666 .type = QUIRK_COMPOSITE,
667 .data = (const struct snd_usb_audio_quirk[]) {
670 .type = QUIRK_AUDIO_STANDARD_INTERFACE
674 .type = QUIRK_AUDIO_STANDARD_INTERFACE
683 /* has ID 0x0013 when not in "Advanced Driver" mode */
684 USB_DEVICE(0x0582, 0x0012),
685 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
686 .vendor_name = "Roland",
687 .product_name = "XV-5050",
689 .type = QUIRK_MIDI_FIXED_ENDPOINT,
690 .data = & (const struct snd_usb_midi_endpoint_info) {
691 .out_cables = 0x0001,
697 /* has ID 0x0015 when not in "Advanced Driver" mode */
698 USB_DEVICE(0x0582, 0x0014),
699 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
700 .vendor_name = "EDIROL",
701 .product_name = "UM-880",
703 .type = QUIRK_MIDI_FIXED_ENDPOINT,
704 .data = & (const struct snd_usb_midi_endpoint_info) {
705 .out_cables = 0x01ff,
711 /* has ID 0x0017 when not in "Advanced Driver" mode */
712 USB_DEVICE(0x0582, 0x0016),
713 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
714 .vendor_name = "EDIROL",
715 .product_name = "SD-90",
716 .ifnum = QUIRK_ANY_INTERFACE,
717 .type = QUIRK_COMPOSITE,
718 .data = (const struct snd_usb_audio_quirk[]) {
721 .type = QUIRK_AUDIO_STANDARD_INTERFACE
725 .type = QUIRK_AUDIO_STANDARD_INTERFACE
729 .type = QUIRK_MIDI_FIXED_ENDPOINT,
730 .data = & (const struct snd_usb_midi_endpoint_info) {
731 .out_cables = 0x000f,
742 /* has ID 0x001c when not in "Advanced Driver" mode */
743 USB_DEVICE(0x0582, 0x001b),
744 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
745 .vendor_name = "Roland",
746 .product_name = "MMP-2",
747 .ifnum = QUIRK_ANY_INTERFACE,
748 .type = QUIRK_COMPOSITE,
749 .data = (const struct snd_usb_audio_quirk[]) {
752 .type = QUIRK_IGNORE_INTERFACE
756 .type = QUIRK_IGNORE_INTERFACE
760 .type = QUIRK_MIDI_FIXED_ENDPOINT,
761 .data = & (const struct snd_usb_midi_endpoint_info) {
762 .out_cables = 0x0001,
773 /* has ID 0x001e when not in "Advanced Driver" mode */
774 USB_DEVICE(0x0582, 0x001d),
775 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
776 .vendor_name = "Roland",
777 .product_name = "V-SYNTH",
779 .type = QUIRK_MIDI_FIXED_ENDPOINT,
780 .data = & (const struct snd_usb_midi_endpoint_info) {
781 .out_cables = 0x0001,
787 /* has ID 0x0024 when not in "Advanced Driver" mode */
788 USB_DEVICE(0x0582, 0x0023),
789 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
790 .vendor_name = "EDIROL",
791 .product_name = "UM-550",
793 .type = QUIRK_MIDI_FIXED_ENDPOINT,
794 .data = & (const struct snd_usb_midi_endpoint_info) {
795 .out_cables = 0x003f,
802 * This quirk is for the "Advanced Driver" mode. If off, the UA-20
803 * has ID 0x0026 and is standard compliant, but has only 16-bit PCM
806 USB_DEVICE(0x0582, 0x0025),
807 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
808 .vendor_name = "EDIROL",
809 .product_name = "UA-20",
810 .ifnum = QUIRK_ANY_INTERFACE,
811 .type = QUIRK_COMPOSITE,
812 .data = (const struct snd_usb_audio_quirk[]) {
815 .type = QUIRK_IGNORE_INTERFACE
819 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
820 .data = & (const struct audioformat) {
821 .formats = SNDRV_PCM_FMTBIT_S24_3LE,
829 .rates = SNDRV_PCM_RATE_CONTINUOUS,
836 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
837 .data = & (const struct audioformat) {
838 .formats = SNDRV_PCM_FMTBIT_S24_3LE,
846 .rates = SNDRV_PCM_RATE_CONTINUOUS,
853 .type = QUIRK_MIDI_FIXED_ENDPOINT,
854 .data = & (const struct snd_usb_midi_endpoint_info) {
855 .out_cables = 0x0001,
866 /* has ID 0x0028 when not in "Advanced Driver" mode */
867 USB_DEVICE(0x0582, 0x0027),
868 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
869 .vendor_name = "EDIROL",
870 .product_name = "SD-20",
872 .type = QUIRK_MIDI_FIXED_ENDPOINT,
873 .data = & (const struct snd_usb_midi_endpoint_info) {
874 .out_cables = 0x0003,
880 /* has ID 0x002a when not in "Advanced Driver" mode */
881 USB_DEVICE(0x0582, 0x0029),
882 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
883 .vendor_name = "EDIROL",
884 .product_name = "SD-80",
886 .type = QUIRK_MIDI_FIXED_ENDPOINT,
887 .data = & (const struct snd_usb_midi_endpoint_info) {
888 .out_cables = 0x000f,
894 * This quirk is for the "Advanced" modes of the Edirol UA-700.
895 * If the sample format switch is not in an advanced setting, the
896 * UA-700 has ID 0x0582/0x002c and is standard compliant (no quirks),
897 * but offers only 16-bit PCM and no MIDI.
899 USB_DEVICE_VENDOR_SPEC(0x0582, 0x002b),
900 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
901 .vendor_name = "EDIROL",
902 .product_name = "UA-700",
903 .ifnum = QUIRK_ANY_INTERFACE,
904 .type = QUIRK_COMPOSITE,
905 .data = (const struct snd_usb_audio_quirk[]) {
908 .type = QUIRK_AUDIO_EDIROL_UAXX
912 .type = QUIRK_AUDIO_EDIROL_UAXX
916 .type = QUIRK_AUDIO_EDIROL_UAXX
925 /* has ID 0x002e when not in "Advanced Driver" mode */
926 USB_DEVICE(0x0582, 0x002d),
927 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
928 .vendor_name = "Roland",
929 .product_name = "XV-2020",
931 .type = QUIRK_MIDI_FIXED_ENDPOINT,
932 .data = & (const struct snd_usb_midi_endpoint_info) {
933 .out_cables = 0x0001,
939 /* has ID 0x0030 when not in "Advanced Driver" mode */
940 USB_DEVICE(0x0582, 0x002f),
941 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
942 .vendor_name = "Roland",
943 .product_name = "VariOS",
945 .type = QUIRK_MIDI_FIXED_ENDPOINT,
946 .data = & (const struct snd_usb_midi_endpoint_info) {
947 .out_cables = 0x0007,
953 /* has ID 0x0034 when not in "Advanced Driver" mode */
954 USB_DEVICE(0x0582, 0x0033),
955 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
956 .vendor_name = "EDIROL",
957 .product_name = "PCR",
959 .type = QUIRK_MIDI_FIXED_ENDPOINT,
960 .data = & (const struct snd_usb_midi_endpoint_info) {
961 .out_cables = 0x0003,
966 /* TODO: add Roland M-1000 support */
969 * Has ID 0x0038 when not in "Advanced Driver" mode;
970 * later revisions use IDs 0x0054 and 0x00a2.
972 USB_DEVICE(0x0582, 0x0037),
973 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
974 .vendor_name = "Roland",
975 .product_name = "Digital Piano",
977 .type = QUIRK_MIDI_FIXED_ENDPOINT,
978 .data = & (const struct snd_usb_midi_endpoint_info) {
979 .out_cables = 0x0001,
986 * This quirk is for the "Advanced Driver" mode. If off, the GS-10
987 * has ID 0x003c and is standard compliant, but has only 16-bit PCM
990 USB_DEVICE_VENDOR_SPEC(0x0582, 0x003b),
991 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
992 .vendor_name = "BOSS",
993 .product_name = "GS-10",
994 .ifnum = QUIRK_ANY_INTERFACE,
995 .type = QUIRK_COMPOSITE,
996 .data = & (const struct snd_usb_audio_quirk[]) {
999 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1003 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1007 .type = QUIRK_MIDI_STANDARD_INTERFACE
1016 /* has ID 0x0041 when not in "Advanced Driver" mode */
1017 USB_DEVICE(0x0582, 0x0040),
1018 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1019 .vendor_name = "Roland",
1020 .product_name = "GI-20",
1022 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1023 .data = & (const struct snd_usb_midi_endpoint_info) {
1024 .out_cables = 0x0001,
1030 /* has ID 0x0043 when not in "Advanced Driver" mode */
1031 USB_DEVICE(0x0582, 0x0042),
1032 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1033 .vendor_name = "Roland",
1034 .product_name = "RS-70",
1036 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1037 .data = & (const struct snd_usb_midi_endpoint_info) {
1038 .out_cables = 0x0001,
1044 /* has ID 0x0049 when not in "Advanced Driver" mode */
1045 USB_DEVICE(0x0582, 0x0047),
1046 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1047 /* .vendor_name = "EDIROL", */
1048 /* .product_name = "UR-80", */
1049 .ifnum = QUIRK_ANY_INTERFACE,
1050 .type = QUIRK_COMPOSITE,
1051 .data = (const struct snd_usb_audio_quirk[]) {
1052 /* in the 96 kHz modes, only interface 1 is there */
1055 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1059 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1068 /* has ID 0x004a when not in "Advanced Driver" mode */
1069 USB_DEVICE(0x0582, 0x0048),
1070 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1071 /* .vendor_name = "EDIROL", */
1072 /* .product_name = "UR-80", */
1074 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1075 .data = & (const struct snd_usb_midi_endpoint_info) {
1076 .out_cables = 0x0003,
1081 /* TODO: add Edirol M-100FX support */
1083 /* has ID 0x004e when not in "Advanced Driver" mode */
1084 USB_DEVICE(0x0582, 0x004c),
1085 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1086 .vendor_name = "EDIROL",
1087 .product_name = "PCR-A",
1088 .ifnum = QUIRK_ANY_INTERFACE,
1089 .type = QUIRK_COMPOSITE,
1090 .data = (const struct snd_usb_audio_quirk[]) {
1093 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1097 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1106 /* has ID 0x004f when not in "Advanced Driver" mode */
1107 USB_DEVICE(0x0582, 0x004d),
1108 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1109 .vendor_name = "EDIROL",
1110 .product_name = "PCR-A",
1112 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1113 .data = & (const struct snd_usb_midi_endpoint_info) {
1114 .out_cables = 0x0003,
1121 * This quirk is for the "Advanced Driver" mode. If off, the UA-3FX
1122 * is standard compliant, but has only 16-bit PCM.
1124 USB_DEVICE(0x0582, 0x0050),
1125 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1126 .vendor_name = "EDIROL",
1127 .product_name = "UA-3FX",
1128 .ifnum = QUIRK_ANY_INTERFACE,
1129 .type = QUIRK_COMPOSITE,
1130 .data = (const struct snd_usb_audio_quirk[]) {
1133 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1137 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1146 USB_DEVICE(0x0582, 0x0052),
1147 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1148 .vendor_name = "EDIROL",
1149 .product_name = "UM-1SX",
1151 .type = QUIRK_MIDI_STANDARD_INTERFACE
1155 USB_DEVICE(0x0582, 0x0060),
1156 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1157 .vendor_name = "Roland",
1158 .product_name = "EXR Series",
1160 .type = QUIRK_MIDI_STANDARD_INTERFACE
1164 /* has ID 0x0066 when not in "Advanced Driver" mode */
1165 USB_DEVICE(0x0582, 0x0064),
1166 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1167 /* .vendor_name = "EDIROL", */
1168 /* .product_name = "PCR-1", */
1169 .ifnum = QUIRK_ANY_INTERFACE,
1170 .type = QUIRK_COMPOSITE,
1171 .data = (const struct snd_usb_audio_quirk[]) {
1174 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1178 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1187 /* has ID 0x0067 when not in "Advanced Driver" mode */
1188 USB_DEVICE(0x0582, 0x0065),
1189 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1190 /* .vendor_name = "EDIROL", */
1191 /* .product_name = "PCR-1", */
1193 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1194 .data = & (const struct snd_usb_midi_endpoint_info) {
1195 .out_cables = 0x0001,
1201 /* has ID 0x006b when not in "Advanced Driver" mode */
1202 USB_DEVICE_VENDOR_SPEC(0x0582, 0x006a),
1203 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1204 .vendor_name = "Roland",
1205 .product_name = "SP-606",
1207 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1208 .data = & (const struct snd_usb_midi_endpoint_info) {
1209 .out_cables = 0x0001,
1215 /* has ID 0x006e when not in "Advanced Driver" mode */
1216 USB_DEVICE(0x0582, 0x006d),
1217 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1218 .vendor_name = "Roland",
1219 .product_name = "FANTOM-X",
1221 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1222 .data = & (const struct snd_usb_midi_endpoint_info) {
1223 .out_cables = 0x0001,
1229 * This quirk is for the "Advanced" modes of the Edirol UA-25.
1230 * If the switch is not in an advanced setting, the UA-25 has
1231 * ID 0x0582/0x0073 and is standard compliant (no quirks), but
1232 * offers only 16-bit PCM at 44.1 kHz and no MIDI.
1234 USB_DEVICE_VENDOR_SPEC(0x0582, 0x0074),
1235 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1236 .vendor_name = "EDIROL",
1237 .product_name = "UA-25",
1238 .ifnum = QUIRK_ANY_INTERFACE,
1239 .type = QUIRK_COMPOSITE,
1240 .data = (const struct snd_usb_audio_quirk[]) {
1243 .type = QUIRK_AUDIO_EDIROL_UAXX
1247 .type = QUIRK_AUDIO_EDIROL_UAXX
1251 .type = QUIRK_AUDIO_EDIROL_UAXX
1260 /* has ID 0x0076 when not in "Advanced Driver" mode */
1261 USB_DEVICE(0x0582, 0x0075),
1262 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1263 .vendor_name = "BOSS",
1264 .product_name = "DR-880",
1266 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1267 .data = & (const struct snd_usb_midi_endpoint_info) {
1268 .out_cables = 0x0001,
1274 /* has ID 0x007b when not in "Advanced Driver" mode */
1275 USB_DEVICE_VENDOR_SPEC(0x0582, 0x007a),
1276 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1277 .vendor_name = "Roland",
1278 /* "RD" or "RD-700SX"? */
1280 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1281 .data = & (const struct snd_usb_midi_endpoint_info) {
1282 .out_cables = 0x0003,
1288 /* has ID 0x0081 when not in "Advanced Driver" mode */
1289 USB_DEVICE(0x0582, 0x0080),
1290 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1291 .vendor_name = "Roland",
1292 .product_name = "G-70",
1294 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1295 .data = & (const struct snd_usb_midi_endpoint_info) {
1296 .out_cables = 0x0001,
1301 /* TODO: add Roland V-SYNTH XT support */
1302 /* TODO: add BOSS GT-PRO support */
1304 /* has ID 0x008c when not in "Advanced Driver" mode */
1305 USB_DEVICE(0x0582, 0x008b),
1306 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1307 .vendor_name = "EDIROL",
1308 .product_name = "PC-50",
1310 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1311 .data = & (const struct snd_usb_midi_endpoint_info) {
1312 .out_cables = 0x0001,
1317 /* TODO: add Edirol PC-80 support */
1319 USB_DEVICE(0x0582, 0x0096),
1320 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1321 .vendor_name = "EDIROL",
1322 .product_name = "UA-1EX",
1323 .ifnum = QUIRK_ANY_INTERFACE,
1324 .type = QUIRK_COMPOSITE,
1325 .data = (const struct snd_usb_audio_quirk[]) {
1328 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1332 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1341 USB_DEVICE(0x0582, 0x009a),
1342 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1343 .vendor_name = "EDIROL",
1344 .product_name = "UM-3EX",
1346 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1347 .data = & (const struct snd_usb_midi_endpoint_info) {
1348 .out_cables = 0x000f,
1355 * This quirk is for the "Advanced Driver" mode. If off, the UA-4FX
1356 * is standard compliant, but has only 16-bit PCM and no MIDI.
1358 USB_DEVICE(0x0582, 0x00a3),
1359 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1360 .vendor_name = "EDIROL",
1361 .product_name = "UA-4FX",
1362 .ifnum = QUIRK_ANY_INTERFACE,
1363 .type = QUIRK_COMPOSITE,
1364 .data = (const struct snd_usb_audio_quirk[]) {
1367 .type = QUIRK_AUDIO_EDIROL_UAXX
1371 .type = QUIRK_AUDIO_EDIROL_UAXX
1375 .type = QUIRK_AUDIO_EDIROL_UAXX
1383 /* TODO: add Edirol MD-P1 support */
1385 USB_DEVICE(0x582, 0x00a6),
1386 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1387 .vendor_name = "Roland",
1388 .product_name = "Juno-G",
1390 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1391 .data = & (const struct snd_usb_midi_endpoint_info) {
1392 .out_cables = 0x0001,
1399 USB_DEVICE(0x0582, 0x00ad),
1400 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1401 .vendor_name = "Roland",
1402 .product_name = "SH-201",
1403 .ifnum = QUIRK_ANY_INTERFACE,
1404 .type = QUIRK_COMPOSITE,
1405 .data = (const struct snd_usb_audio_quirk[]) {
1408 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1412 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1416 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1417 .data = & (const struct snd_usb_midi_endpoint_info) {
1418 .out_cables = 0x0001,
1429 /* Roland SonicCell */
1430 USB_DEVICE(0x0582, 0x00c2),
1431 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1432 .vendor_name = "Roland",
1433 .product_name = "SonicCell",
1434 .ifnum = QUIRK_ANY_INTERFACE,
1435 .type = QUIRK_COMPOSITE,
1436 .data = (const struct snd_usb_audio_quirk[]) {
1439 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1443 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1447 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1448 .data = & (const struct snd_usb_midi_endpoint_info) {
1449 .out_cables = 0x0001,
1461 /* FIXME: This quirk gives a good-working capture stream but the
1462 * playback seems problematic because of lacking of sync
1463 * with capture stream. It needs to sync with the capture
1464 * clock. As now, you'll get frequent sound distortions
1467 USB_DEVICE(0x0582, 0x00c4),
1468 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1469 .ifnum = QUIRK_ANY_INTERFACE,
1470 .type = QUIRK_COMPOSITE,
1471 .data = (const struct snd_usb_audio_quirk[]) {
1474 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1478 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1482 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1483 .data = & (const struct snd_usb_midi_endpoint_info) {
1484 .out_cables = 0x0001,
1496 USB_DEVICE(0x0582, 0x00da),
1497 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1498 .ifnum = QUIRK_ANY_INTERFACE,
1499 .type = QUIRK_COMPOSITE,
1500 .data = (const struct snd_usb_audio_quirk[]) {
1503 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1507 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1511 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1512 .data = & (const struct snd_usb_midi_endpoint_info) {
1513 .out_cables = 0x0001,
1524 /* Advanced modes of the Edirol UA-25EX.
1525 * For the standard mode, UA-25EX has ID 0582:00e7, which
1526 * offers only 16-bit PCM at 44.1 kHz and no MIDI.
1528 USB_DEVICE_VENDOR_SPEC(0x0582, 0x00e6),
1529 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1530 .vendor_name = "EDIROL",
1531 .product_name = "UA-25EX",
1532 .ifnum = QUIRK_ANY_INTERFACE,
1533 .type = QUIRK_COMPOSITE,
1534 .data = (const struct snd_usb_audio_quirk[]) {
1537 .type = QUIRK_AUDIO_EDIROL_UAXX
1541 .type = QUIRK_AUDIO_EDIROL_UAXX
1545 .type = QUIRK_AUDIO_EDIROL_UAXX
1554 /* has ID 0x00ea when not in Advanced Driver mode */
1555 USB_DEVICE_VENDOR_SPEC(0x0582, 0x00e9),
1556 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1557 /* .vendor_name = "Roland", */
1558 /* .product_name = "UA-1G", */
1559 .ifnum = QUIRK_ANY_INTERFACE,
1560 .type = QUIRK_COMPOSITE,
1561 .data = (const struct snd_usb_audio_quirk[]) {
1564 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1568 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1577 USB_DEVICE_VENDOR_SPEC(0x0582, 0x0104),
1578 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1579 /* .vendor_name = "Roland", */
1580 /* .product_name = "UM-1G", */
1582 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1583 .data = & (const struct snd_usb_midi_endpoint_info) {
1584 .out_cables = 0x0001,
1590 /* Boss JS-8 Jam Station */
1591 USB_DEVICE(0x0582, 0x0109),
1592 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1593 /* .vendor_name = "BOSS", */
1594 /* .product_name = "JS-8", */
1595 .ifnum = QUIRK_ANY_INTERFACE,
1596 .type = QUIRK_COMPOSITE,
1597 .data = (const struct snd_usb_audio_quirk[]) {
1600 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1604 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1608 .type = QUIRK_MIDI_STANDARD_INTERFACE
1617 /* has ID 0x0110 when not in Advanced Driver mode */
1618 USB_DEVICE_VENDOR_SPEC(0x0582, 0x010f),
1619 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1620 /* .vendor_name = "Roland", */
1621 /* .product_name = "A-PRO", */
1623 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1624 .data = & (const struct snd_usb_midi_endpoint_info) {
1625 .out_cables = 0x0003,
1631 USB_DEVICE(0x0582, 0x0113),
1632 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1633 /* .vendor_name = "BOSS", */
1634 /* .product_name = "ME-25", */
1635 .ifnum = QUIRK_ANY_INTERFACE,
1636 .type = QUIRK_COMPOSITE,
1637 .data = (const struct snd_usb_audio_quirk[]) {
1640 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1644 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1648 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1649 .data = & (const struct snd_usb_midi_endpoint_info) {
1650 .out_cables = 0x0001,
1661 USB_DEVICE(0x0582, 0x0127),
1662 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1663 /* .vendor_name = "Roland", */
1664 /* .product_name = "GR-55", */
1665 .ifnum = QUIRK_ANY_INTERFACE,
1666 .type = QUIRK_COMPOSITE,
1667 .data = (const struct snd_usb_audio_quirk[]) {
1670 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1674 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1678 .type = QUIRK_MIDI_STANDARD_INTERFACE
1687 /* Guillemot devices */
1690 * This is for the "Windows Edition" where the external MIDI ports are
1691 * the only MIDI ports; the control data is reported through HID
1692 * interfaces. The "Macintosh Edition" has ID 0xd002 and uses standard
1693 * compliant USB MIDI ports for external MIDI and controls.
1695 USB_DEVICE_VENDOR_SPEC(0x06f8, 0xb000),
1696 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1697 .vendor_name = "Hercules",
1698 .product_name = "DJ Console (WE)",
1700 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1701 .data = & (const struct snd_usb_midi_endpoint_info) {
1702 .out_cables = 0x0001,
1708 /* Midiman/M-Audio devices */
1710 USB_DEVICE_VENDOR_SPEC(0x0763, 0x1002),
1711 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1712 .vendor_name = "M-Audio",
1713 .product_name = "MidiSport 2x2",
1714 .ifnum = QUIRK_ANY_INTERFACE,
1715 .type = QUIRK_MIDI_MIDIMAN,
1716 .data = & (const struct snd_usb_midi_endpoint_info) {
1717 .out_cables = 0x0003,
1723 USB_DEVICE_VENDOR_SPEC(0x0763, 0x1011),
1724 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1725 .vendor_name = "M-Audio",
1726 .product_name = "MidiSport 1x1",
1727 .ifnum = QUIRK_ANY_INTERFACE,
1728 .type = QUIRK_MIDI_MIDIMAN,
1729 .data = & (const struct snd_usb_midi_endpoint_info) {
1730 .out_cables = 0x0001,
1736 USB_DEVICE_VENDOR_SPEC(0x0763, 0x1015),
1737 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1738 .vendor_name = "M-Audio",
1739 .product_name = "Keystation",
1740 .ifnum = QUIRK_ANY_INTERFACE,
1741 .type = QUIRK_MIDI_MIDIMAN,
1742 .data = & (const struct snd_usb_midi_endpoint_info) {
1743 .out_cables = 0x0001,
1749 USB_DEVICE_VENDOR_SPEC(0x0763, 0x1021),
1750 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1751 .vendor_name = "M-Audio",
1752 .product_name = "MidiSport 4x4",
1753 .ifnum = QUIRK_ANY_INTERFACE,
1754 .type = QUIRK_MIDI_MIDIMAN,
1755 .data = & (const struct snd_usb_midi_endpoint_info) {
1756 .out_cables = 0x000f,
1763 * For hardware revision 1.05; in the later revisions (1.10 and
1764 * 1.21), 0x1031 is the ID for the device without firmware.
1765 * Thanks to Olaf Giesbrecht <Olaf_Giesbrecht@yahoo.de>
1767 USB_DEVICE_VER(0x0763, 0x1031, 0x0100, 0x0109),
1768 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1769 .vendor_name = "M-Audio",
1770 .product_name = "MidiSport 8x8",
1771 .ifnum = QUIRK_ANY_INTERFACE,
1772 .type = QUIRK_MIDI_MIDIMAN,
1773 .data = & (const struct snd_usb_midi_endpoint_info) {
1774 .out_cables = 0x01ff,
1780 USB_DEVICE_VENDOR_SPEC(0x0763, 0x1033),
1781 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1782 .vendor_name = "M-Audio",
1783 .product_name = "MidiSport 8x8",
1784 .ifnum = QUIRK_ANY_INTERFACE,
1785 .type = QUIRK_MIDI_MIDIMAN,
1786 .data = & (const struct snd_usb_midi_endpoint_info) {
1787 .out_cables = 0x01ff,
1793 USB_DEVICE_VENDOR_SPEC(0x0763, 0x1041),
1794 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1795 .vendor_name = "M-Audio",
1796 .product_name = "MidiSport 2x4",
1797 .ifnum = QUIRK_ANY_INTERFACE,
1798 .type = QUIRK_MIDI_MIDIMAN,
1799 .data = & (const struct snd_usb_midi_endpoint_info) {
1800 .out_cables = 0x000f,
1806 USB_DEVICE_VENDOR_SPEC(0x0763, 0x2001),
1807 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1808 .vendor_name = "M-Audio",
1809 .product_name = "Quattro",
1810 .ifnum = QUIRK_ANY_INTERFACE,
1811 .type = QUIRK_COMPOSITE,
1812 .data = & (const struct snd_usb_audio_quirk[]) {
1814 * Interfaces 0-2 are "Windows-compatible", 16-bit only,
1815 * and share endpoints with the other interfaces.
1816 * Ignore them. The other interfaces can do 24 bits,
1817 * but captured samples are big-endian (see usbaudio.c).
1821 .type = QUIRK_IGNORE_INTERFACE
1825 .type = QUIRK_IGNORE_INTERFACE
1829 .type = QUIRK_IGNORE_INTERFACE
1833 .type = QUIRK_IGNORE_INTERFACE
1837 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1841 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1845 .type = QUIRK_IGNORE_INTERFACE
1849 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1853 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1857 .type = QUIRK_MIDI_MIDIMAN,
1858 .data = & (const struct snd_usb_midi_endpoint_info) {
1859 .out_cables = 0x0001,
1870 USB_DEVICE_VENDOR_SPEC(0x0763, 0x2003),
1871 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1872 .vendor_name = "M-Audio",
1873 .product_name = "AudioPhile",
1875 .type = QUIRK_MIDI_MIDIMAN,
1876 .data = & (const struct snd_usb_midi_endpoint_info) {
1877 .out_cables = 0x0001,
1883 USB_DEVICE_VENDOR_SPEC(0x0763, 0x2008),
1884 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1885 .vendor_name = "M-Audio",
1886 .product_name = "Ozone",
1888 .type = QUIRK_MIDI_MIDIMAN,
1889 .data = & (const struct snd_usb_midi_endpoint_info) {
1890 .out_cables = 0x0001,
1896 USB_DEVICE_VENDOR_SPEC(0x0763, 0x200d),
1897 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1898 .vendor_name = "M-Audio",
1899 .product_name = "OmniStudio",
1900 .ifnum = QUIRK_ANY_INTERFACE,
1901 .type = QUIRK_COMPOSITE,
1902 .data = & (const struct snd_usb_audio_quirk[]) {
1905 .type = QUIRK_IGNORE_INTERFACE
1909 .type = QUIRK_IGNORE_INTERFACE
1913 .type = QUIRK_IGNORE_INTERFACE
1917 .type = QUIRK_IGNORE_INTERFACE
1921 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1925 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1929 .type = QUIRK_IGNORE_INTERFACE
1933 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1937 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1941 .type = QUIRK_MIDI_MIDIMAN,
1942 .data = & (const struct snd_usb_midi_endpoint_info) {
1943 .out_cables = 0x0001,
1954 USB_DEVICE(0x0763, 0x2019),
1955 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1956 /* .vendor_name = "M-Audio", */
1957 /* .product_name = "Ozone Academic", */
1958 .ifnum = QUIRK_ANY_INTERFACE,
1959 .type = QUIRK_COMPOSITE,
1960 .data = & (const struct snd_usb_audio_quirk[]) {
1963 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1967 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1971 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1975 .type = QUIRK_MIDI_MIDIMAN,
1976 .data = & (const struct snd_usb_midi_endpoint_info) {
1977 .out_cables = 0x0001,
1988 USB_DEVICE_VENDOR_SPEC(0x0763, 0x2080),
1989 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1990 /* .vendor_name = "M-Audio", */
1991 /* .product_name = "Fast Track Ultra", */
1992 .ifnum = QUIRK_ANY_INTERFACE,
1993 .type = QUIRK_COMPOSITE,
1994 .data = & (const struct snd_usb_audio_quirk[]) {
1997 .type = QUIRK_AUDIO_STANDARD_MIXER,
2001 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
2002 .data = & (const struct audioformat) {
2003 .formats = SNDRV_PCM_FMTBIT_S24_3LE,
2008 .attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
2011 .rates = SNDRV_PCM_RATE_44100 |
2012 SNDRV_PCM_RATE_48000 |
2013 SNDRV_PCM_RATE_88200 |
2014 SNDRV_PCM_RATE_96000,
2018 .rate_table = (unsigned int[]) {
2019 44100, 48000, 88200, 96000
2025 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
2026 .data = & (const struct audioformat) {
2027 .formats = SNDRV_PCM_FMTBIT_S24_3LE,
2032 .attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
2035 .rates = SNDRV_PCM_RATE_44100 |
2036 SNDRV_PCM_RATE_48000 |
2037 SNDRV_PCM_RATE_88200 |
2038 SNDRV_PCM_RATE_96000,
2042 .rate_table = (unsigned int[]) {
2043 44100, 48000, 88200, 96000
2047 /* interface 3 (MIDI) is standard compliant */
2055 USB_DEVICE_VENDOR_SPEC(0x0763, 0x2081),
2056 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2057 /* .vendor_name = "M-Audio", */
2058 /* .product_name = "Fast Track Ultra 8R", */
2059 .ifnum = QUIRK_ANY_INTERFACE,
2060 .type = QUIRK_COMPOSITE,
2061 .data = & (const struct snd_usb_audio_quirk[]) {
2064 .type = QUIRK_AUDIO_STANDARD_MIXER,
2068 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
2069 .data = & (const struct audioformat) {
2070 .formats = SNDRV_PCM_FMTBIT_S24_3LE,
2075 .attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
2078 .rates = SNDRV_PCM_RATE_44100 |
2079 SNDRV_PCM_RATE_48000 |
2080 SNDRV_PCM_RATE_88200 |
2081 SNDRV_PCM_RATE_96000,
2085 .rate_table = (unsigned int[]) {
2086 44100, 48000, 88200, 96000
2092 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
2093 .data = & (const struct audioformat) {
2094 .formats = SNDRV_PCM_FMTBIT_S24_3LE,
2099 .attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
2102 .rates = SNDRV_PCM_RATE_44100 |
2103 SNDRV_PCM_RATE_48000 |
2104 SNDRV_PCM_RATE_88200 |
2105 SNDRV_PCM_RATE_96000,
2109 .rate_table = (unsigned int[]) {
2110 44100, 48000, 88200, 96000
2114 /* interface 3 (MIDI) is standard compliant */
2124 USB_DEVICE(0x07cf, 0x6801),
2125 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2126 .vendor_name = "Casio",
2127 .product_name = "PL-40R",
2129 .type = QUIRK_MIDI_YAMAHA
2133 /* this ID is used by several devices without a product ID */
2134 USB_DEVICE(0x07cf, 0x6802),
2135 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2136 .vendor_name = "Casio",
2137 .product_name = "Keyboard",
2139 .type = QUIRK_MIDI_YAMAHA
2143 /* Mark of the Unicorn devices */
2145 /* thanks to Robert A. Lerche <ral 'at' msbit.com> */
2146 .match_flags = USB_DEVICE_ID_MATCH_VENDOR |
2147 USB_DEVICE_ID_MATCH_PRODUCT |
2148 USB_DEVICE_ID_MATCH_DEV_SUBCLASS,
2150 .idProduct = 0x0001,
2151 .bDeviceSubClass = 2,
2152 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2153 .vendor_name = "MOTU",
2154 .product_name = "Fastlane",
2155 .ifnum = QUIRK_ANY_INTERFACE,
2156 .type = QUIRK_COMPOSITE,
2157 .data = & (const struct snd_usb_audio_quirk[]) {
2160 .type = QUIRK_MIDI_RAW_BYTES
2164 .type = QUIRK_IGNORE_INTERFACE
2173 /* Emagic devices */
2175 USB_DEVICE(0x086a, 0x0001),
2176 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2177 .vendor_name = "Emagic",
2178 /* .product_name = "Unitor8", */
2180 .type = QUIRK_MIDI_EMAGIC,
2181 .data = & (const struct snd_usb_midi_endpoint_info) {
2182 .out_cables = 0x80ff,
2188 USB_DEVICE(0x086a, 0x0002),
2189 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2190 .vendor_name = "Emagic",
2191 /* .product_name = "AMT8", */
2193 .type = QUIRK_MIDI_EMAGIC,
2194 .data = & (const struct snd_usb_midi_endpoint_info) {
2195 .out_cables = 0x80ff,
2201 USB_DEVICE(0x086a, 0x0003),
2202 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2203 .vendor_name = "Emagic",
2204 /* .product_name = "MT4", */
2206 .type = QUIRK_MIDI_EMAGIC,
2207 .data = & (const struct snd_usb_midi_endpoint_info) {
2208 .out_cables = 0x800f,
2216 USB_DEVICE_VENDOR_SPEC(0x0944, 0x0200),
2217 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2218 .vendor_name = "KORG, Inc.",
2219 /* .product_name = "PANDORA PX5D", */
2221 .type = QUIRK_MIDI_STANDARD_INTERFACE,
2227 USB_DEVICE(0x09e8, 0x0062),
2228 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2229 .vendor_name = "AKAI",
2230 .product_name = "MPD16",
2232 .type = QUIRK_MIDI_AKAI,
2236 /* TerraTec devices */
2238 USB_DEVICE_VENDOR_SPEC(0x0ccd, 0x0012),
2239 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2240 .vendor_name = "TerraTec",
2241 .product_name = "PHASE 26",
2243 .type = QUIRK_MIDI_STANDARD_INTERFACE
2247 USB_DEVICE_VENDOR_SPEC(0x0ccd, 0x0013),
2248 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2249 .vendor_name = "TerraTec",
2250 .product_name = "PHASE 26",
2252 .type = QUIRK_MIDI_STANDARD_INTERFACE
2256 USB_DEVICE_VENDOR_SPEC(0x0ccd, 0x0014),
2257 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2258 .vendor_name = "TerraTec",
2259 .product_name = "PHASE 26",
2261 .type = QUIRK_MIDI_STANDARD_INTERFACE
2265 USB_DEVICE(0x0ccd, 0x0028),
2266 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2267 .vendor_name = "TerraTec",
2268 .product_name = "Aureon5.1MkII",
2269 .ifnum = QUIRK_NO_INTERFACE
2273 USB_DEVICE(0x0ccd, 0x0035),
2274 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2275 .vendor_name = "Miditech",
2276 .product_name = "Play'n Roll",
2278 .type = QUIRK_MIDI_CME
2282 /* Stanton/N2IT Final Scratch v1 device ('Scratchamp') */
2284 USB_DEVICE(0x103d, 0x0100),
2285 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2286 .vendor_name = "Stanton",
2287 .product_name = "ScratchAmp",
2288 .ifnum = QUIRK_NO_INTERFACE
2292 USB_DEVICE(0x103d, 0x0101),
2293 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2294 .vendor_name = "Stanton",
2295 .product_name = "ScratchAmp",
2296 .ifnum = QUIRK_NO_INTERFACE
2300 /* Novation EMS devices */
2302 USB_DEVICE_VENDOR_SPEC(0x1235, 0x0001),
2303 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2304 .vendor_name = "Novation",
2305 .product_name = "ReMOTE Audio/XStation",
2307 .type = QUIRK_MIDI_NOVATION
2311 USB_DEVICE_VENDOR_SPEC(0x1235, 0x0002),
2312 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2313 .vendor_name = "Novation",
2314 .product_name = "Speedio",
2316 .type = QUIRK_MIDI_NOVATION
2320 USB_DEVICE(0x1235, 0x000e),
2321 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2322 /* .vendor_name = "Novation", */
2323 /* .product_name = "Launchpad", */
2325 .type = QUIRK_MIDI_RAW_BYTES
2329 USB_DEVICE_VENDOR_SPEC(0x1235, 0x4661),
2330 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2331 .vendor_name = "Novation",
2332 .product_name = "ReMOTE25",
2334 .type = QUIRK_MIDI_NOVATION
2338 /* Access Music devices */
2340 /* VirusTI Desktop */
2341 USB_DEVICE_VENDOR_SPEC(0x133e, 0x0815),
2342 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
2343 .ifnum = QUIRK_ANY_INTERFACE,
2344 .type = QUIRK_COMPOSITE,
2345 .data = &(const struct snd_usb_audio_quirk[]) {
2348 .type = QUIRK_MIDI_FIXED_ENDPOINT,
2349 .data = &(const struct snd_usb_midi_endpoint_info) {
2350 .out_cables = 0x0003,
2356 .type = QUIRK_IGNORE_INTERFACE
2367 /* aka. Serato Scratch Live DJ Box */
2368 USB_DEVICE(0x13e5, 0x0001),
2369 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2370 .vendor_name = "Rane",
2371 .product_name = "SL-1",
2372 .ifnum = QUIRK_NO_INTERFACE
2376 /* Native Instruments MK2 series */
2378 /* Komplete Audio 6 */
2379 .match_flags = USB_DEVICE_ID_MATCH_DEVICE,
2381 .idProduct = 0x1000,
2384 /* Traktor Audio 6 */
2385 .match_flags = USB_DEVICE_ID_MATCH_DEVICE,
2387 .idProduct = 0x1010,
2390 /* Traktor Audio 10 */
2391 .match_flags = USB_DEVICE_ID_MATCH_DEVICE,
2393 .idProduct = 0x1020,
2396 /* Miditech devices */
2398 USB_DEVICE(0x4752, 0x0011),
2399 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2400 .vendor_name = "Miditech",
2401 .product_name = "Midistart-2",
2403 .type = QUIRK_MIDI_CME
2407 /* Central Music devices */
2409 /* this ID used by both Miditech MidiStudio-2 and CME UF-x */
2410 USB_DEVICE(0x7104, 0x2202),
2411 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2413 .type = QUIRK_MIDI_CME
2417 /* Hauppauge HVR-950Q and HVR-850 */
2419 USB_DEVICE_VENDOR_SPEC(0x2040, 0x7200),
2420 .match_flags = USB_DEVICE_ID_MATCH_DEVICE |
2421 USB_DEVICE_ID_MATCH_INT_CLASS |
2422 USB_DEVICE_ID_MATCH_INT_SUBCLASS,
2423 .bInterfaceClass = USB_CLASS_AUDIO,
2424 .bInterfaceSubClass = USB_SUBCLASS_AUDIOCONTROL,
2425 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
2426 .vendor_name = "Hauppauge",
2427 .product_name = "HVR-950Q",
2428 .ifnum = QUIRK_ANY_INTERFACE,
2429 .type = QUIRK_AUDIO_ALIGN_TRANSFER,
2433 USB_DEVICE_VENDOR_SPEC(0x2040, 0x7240),
2434 .match_flags = USB_DEVICE_ID_MATCH_DEVICE |
2435 USB_DEVICE_ID_MATCH_INT_CLASS |
2436 USB_DEVICE_ID_MATCH_INT_SUBCLASS,
2437 .bInterfaceClass = USB_CLASS_AUDIO,
2438 .bInterfaceSubClass = USB_SUBCLASS_AUDIOCONTROL,
2439 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
2440 .vendor_name = "Hauppauge",
2441 .product_name = "HVR-850",
2442 .ifnum = QUIRK_ANY_INTERFACE,
2443 .type = QUIRK_AUDIO_ALIGN_TRANSFER,
2447 USB_DEVICE_VENDOR_SPEC(0x2040, 0x7210),
2448 .match_flags = USB_DEVICE_ID_MATCH_DEVICE |
2449 USB_DEVICE_ID_MATCH_INT_CLASS |
2450 USB_DEVICE_ID_MATCH_INT_SUBCLASS,
2451 .bInterfaceClass = USB_CLASS_AUDIO,
2452 .bInterfaceSubClass = USB_SUBCLASS_AUDIOCONTROL,
2453 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
2454 .vendor_name = "Hauppauge",
2455 .product_name = "HVR-950Q",
2456 .ifnum = QUIRK_ANY_INTERFACE,
2457 .type = QUIRK_AUDIO_ALIGN_TRANSFER,
2461 USB_DEVICE_VENDOR_SPEC(0x2040, 0x7217),
2462 .match_flags = USB_DEVICE_ID_MATCH_DEVICE |
2463 USB_DEVICE_ID_MATCH_INT_CLASS |
2464 USB_DEVICE_ID_MATCH_INT_SUBCLASS,
2465 .bInterfaceClass = USB_CLASS_AUDIO,
2466 .bInterfaceSubClass = USB_SUBCLASS_AUDIOCONTROL,
2467 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
2468 .vendor_name = "Hauppauge",
2469 .product_name = "HVR-950Q",
2470 .ifnum = QUIRK_ANY_INTERFACE,
2471 .type = QUIRK_AUDIO_ALIGN_TRANSFER,
2475 USB_DEVICE_VENDOR_SPEC(0x2040, 0x721b),
2476 .match_flags = USB_DEVICE_ID_MATCH_DEVICE |
2477 USB_DEVICE_ID_MATCH_INT_CLASS |
2478 USB_DEVICE_ID_MATCH_INT_SUBCLASS,
2479 .bInterfaceClass = USB_CLASS_AUDIO,
2480 .bInterfaceSubClass = USB_SUBCLASS_AUDIOCONTROL,
2481 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
2482 .vendor_name = "Hauppauge",
2483 .product_name = "HVR-950Q",
2484 .ifnum = QUIRK_ANY_INTERFACE,
2485 .type = QUIRK_AUDIO_ALIGN_TRANSFER,
2489 USB_DEVICE_VENDOR_SPEC(0x2040, 0x721e),
2490 .match_flags = USB_DEVICE_ID_MATCH_DEVICE |
2491 USB_DEVICE_ID_MATCH_INT_CLASS |
2492 USB_DEVICE_ID_MATCH_INT_SUBCLASS,
2493 .bInterfaceClass = USB_CLASS_AUDIO,
2494 .bInterfaceSubClass = USB_SUBCLASS_AUDIOCONTROL,
2495 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
2496 .vendor_name = "Hauppauge",
2497 .product_name = "HVR-950Q",
2498 .ifnum = QUIRK_ANY_INTERFACE,
2499 .type = QUIRK_AUDIO_ALIGN_TRANSFER,
2503 USB_DEVICE_VENDOR_SPEC(0x2040, 0x721f),
2504 .match_flags = USB_DEVICE_ID_MATCH_DEVICE |
2505 USB_DEVICE_ID_MATCH_INT_CLASS |
2506 USB_DEVICE_ID_MATCH_INT_SUBCLASS,
2507 .bInterfaceClass = USB_CLASS_AUDIO,
2508 .bInterfaceSubClass = USB_SUBCLASS_AUDIOCONTROL,
2509 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
2510 .vendor_name = "Hauppauge",
2511 .product_name = "HVR-950Q",
2512 .ifnum = QUIRK_ANY_INTERFACE,
2513 .type = QUIRK_AUDIO_ALIGN_TRANSFER,
2517 USB_DEVICE_VENDOR_SPEC(0x2040, 0x7280),
2518 .match_flags = USB_DEVICE_ID_MATCH_DEVICE |
2519 USB_DEVICE_ID_MATCH_INT_CLASS |
2520 USB_DEVICE_ID_MATCH_INT_SUBCLASS,
2521 .bInterfaceClass = USB_CLASS_AUDIO,
2522 .bInterfaceSubClass = USB_SUBCLASS_AUDIOCONTROL,
2523 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
2524 .vendor_name = "Hauppauge",
2525 .product_name = "HVR-950Q",
2526 .ifnum = QUIRK_ANY_INTERFACE,
2527 .type = QUIRK_AUDIO_ALIGN_TRANSFER,
2531 USB_DEVICE_VENDOR_SPEC(0x0fd9, 0x0008),
2532 .match_flags = USB_DEVICE_ID_MATCH_DEVICE |
2533 USB_DEVICE_ID_MATCH_INT_CLASS |
2534 USB_DEVICE_ID_MATCH_INT_SUBCLASS,
2535 .bInterfaceClass = USB_CLASS_AUDIO,
2536 .bInterfaceSubClass = USB_SUBCLASS_AUDIOCONTROL,
2537 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
2538 .vendor_name = "Hauppauge",
2539 .product_name = "HVR-950Q",
2540 .ifnum = QUIRK_ANY_INTERFACE,
2541 .type = QUIRK_AUDIO_ALIGN_TRANSFER,
2545 /* Digidesign Mbox */
2547 /* Thanks to Clemens Ladisch <clemens@ladisch.de> */
2548 USB_DEVICE(0x0dba, 0x1000),
2549 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
2550 .vendor_name = "Digidesign",
2551 .product_name = "MBox",
2552 .ifnum = QUIRK_ANY_INTERFACE,
2553 .type = QUIRK_COMPOSITE,
2554 .data = (const struct snd_usb_audio_quirk[]){
2557 .type = QUIRK_IGNORE_INTERFACE,
2561 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
2562 .data = &(const struct audioformat) {
2563 .formats = SNDRV_PCM_FMTBIT_S24_3BE,
2568 .attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
2571 .maxpacksize = 0x130,
2572 .rates = SNDRV_PCM_RATE_44100 |
2573 SNDRV_PCM_RATE_48000,
2577 .rate_table = (unsigned int[]) {
2590 /* Microsoft XboxLive Headset/Xbox Communicator */
2592 USB_DEVICE(0x045e, 0x0283),
2593 .bInterfaceClass = USB_CLASS_PER_INTERFACE,
2594 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
2595 .vendor_name = "Microsoft",
2596 .product_name = "XboxLive Headset/Xbox Communicator",
2597 .ifnum = QUIRK_ANY_INTERFACE,
2598 .type = QUIRK_COMPOSITE,
2599 .data = &(const struct snd_usb_audio_quirk[]) {
2603 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
2604 .data = &(const struct audioformat) {
2605 .formats = SNDRV_PCM_FMTBIT_S16_LE,
2613 .rates = SNDRV_PCM_RATE_CONTINUOUS,
2621 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
2622 .data = &(const struct audioformat) {
2623 .formats = SNDRV_PCM_FMTBIT_S16_LE,
2631 .rates = SNDRV_PCM_RATE_CONTINUOUS,
2645 * Some USB MIDI devices don't have an audio control interface,
2646 * so we have to grab MIDI streaming interfaces here.
2648 .match_flags = USB_DEVICE_ID_MATCH_INT_CLASS |
2649 USB_DEVICE_ID_MATCH_INT_SUBCLASS,
2650 .bInterfaceClass = USB_CLASS_AUDIO,
2651 .bInterfaceSubClass = USB_SUBCLASS_MIDISTREAMING,
2652 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2653 .ifnum = QUIRK_ANY_INTERFACE,
2654 .type = QUIRK_MIDI_STANDARD_INTERFACE
2658 #undef USB_DEVICE_VENDOR_SPEC