Linux-2.6.12-rc2
[linux-2.6/linux-acpi-2.6/ibm-acpi-2.6.git] / sound / usb / usbquirks.h
blob88bbd944d4be997b1a672b3f504e15568b983855
1 /*
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, \
38 .idVendor = vend, \
39 .idProduct = prod, \
40 .bInterfaceClass = USB_CLASS_VENDOR_SPEC
43 * Yamaha devices
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 \
53 } \
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, \
60 .ifnum = intf, \
61 .type = QUIRK_MIDI_YAMAHA \
62 } \
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"),
139 #undef YAMAHA_DEVICE
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[]) {
154 .ifnum = 0,
155 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
156 .data = & (const struct audioformat) {
157 .format = SNDRV_PCM_FORMAT_S16_LE,
158 .channels = 4,
159 .iface = 0,
160 .altsetting = 1,
161 .altset_idx = 1,
162 .attributes = 0,
163 .endpoint = 0x01,
164 .ep_attr = 0x09,
165 .rates = SNDRV_PCM_RATE_CONTINUOUS,
166 .rate_min = 44100,
167 .rate_max = 44100,
171 .ifnum = 1,
172 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
173 .data = & (const struct audioformat) {
174 .format = SNDRV_PCM_FORMAT_S16_LE,
175 .channels = 2,
176 .iface = 1,
177 .altsetting = 1,
178 .altset_idx = 1,
179 .attributes = EP_CS_ATTR_FILL_MAX,
180 .endpoint = 0x81,
181 .ep_attr = 0x05,
182 .rates = SNDRV_PCM_RATE_CONTINUOUS,
183 .rate_min = 44100,
184 .rate_max = 44100,
188 .ifnum = 2,
189 .type = QUIRK_MIDI_FIXED_ENDPOINT,
190 .data = & (const snd_usb_midi_endpoint_info_t) {
191 .out_cables = 0x0007,
192 .in_cables = 0x0007
196 .ifnum = -1
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",
206 .ifnum = 2,
207 .type = QUIRK_MIDI_FIXED_ENDPOINT,
208 .data = & (const snd_usb_midi_endpoint_info_t) {
209 .out_cables = 0x000f,
210 .in_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",
219 .ifnum = 2,
220 .type = QUIRK_MIDI_FIXED_ENDPOINT,
221 .data = & (const snd_usb_midi_endpoint_info_t) {
222 .out_cables = 0x003f,
223 .in_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",
232 .ifnum = 2,
233 .type = QUIRK_MIDI_FIXED_ENDPOINT,
234 .data = & (const snd_usb_midi_endpoint_info_t) {
235 .out_cables = 0x0005,
236 .in_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",
245 .ifnum = 2,
246 .type = QUIRK_MIDI_FIXED_ENDPOINT,
247 .data = & (const snd_usb_midi_endpoint_info_t) {
248 .out_cables = 0x0003,
249 .in_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",
258 .ifnum = 2,
259 .type = QUIRK_MIDI_FIXED_ENDPOINT,
260 .data = & (const snd_usb_midi_endpoint_info_t) {
261 .out_cables = 0x0013,
262 .in_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",
271 .ifnum = 2,
272 .type = QUIRK_MIDI_FIXED_ENDPOINT,
273 .data = & (const snd_usb_midi_endpoint_info_t) {
274 .out_cables = 0x0001,
275 .in_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",
284 .ifnum = 2,
285 .type = QUIRK_MIDI_FIXED_ENDPOINT,
286 .data = & (const snd_usb_midi_endpoint_info_t) {
287 .out_cables = 0x0001,
288 .in_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",
297 .ifnum = 2,
298 .type = QUIRK_MIDI_FIXED_ENDPOINT,
299 .data = & (const snd_usb_midi_endpoint_info_t) {
300 .out_cables = 0x0013,
301 .in_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[]) {
316 .ifnum = 0,
317 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
318 .data = & (const struct audioformat) {
319 .format = SNDRV_PCM_FORMAT_S24_3LE,
320 .channels = 2,
321 .iface = 0,
322 .altsetting = 1,
323 .altset_idx = 1,
324 .attributes = 0,
325 .endpoint = 0x01,
326 .ep_attr = 0x01,
327 .rates = SNDRV_PCM_RATE_CONTINUOUS,
328 .rate_min = 44100,
329 .rate_max = 44100,
333 .ifnum = 1,
334 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
335 .data = & (const struct audioformat) {
336 .format = SNDRV_PCM_FORMAT_S24_3LE,
337 .channels = 2,
338 .iface = 1,
339 .altsetting = 1,
340 .altset_idx = 1,
341 .attributes = 0,
342 .endpoint = 0x81,
343 .ep_attr = 0x01,
344 .rates = SNDRV_PCM_RATE_CONTINUOUS,
345 .rate_min = 44100,
346 .rate_max = 44100,
350 .ifnum = 2,
351 .type = QUIRK_MIDI_FIXED_ENDPOINT,
352 .data = & (const snd_usb_midi_endpoint_info_t) {
353 .out_cables = 0x0007,
354 .in_cables = 0x0007
358 .ifnum = -1
363 { /*
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[]) {
380 .ifnum = 1,
381 .type = QUIRK_AUDIO_STANDARD_INTERFACE
384 .ifnum = 2,
385 .type = QUIRK_AUDIO_STANDARD_INTERFACE
388 .ifnum = -1
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",
398 .ifnum = 0,
399 .type = QUIRK_MIDI_FIXED_ENDPOINT,
400 .data = & (const snd_usb_midi_endpoint_info_t) {
401 .out_cables = 0x0001,
402 .in_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",
411 .ifnum = 0,
412 .type = QUIRK_MIDI_FIXED_ENDPOINT,
413 .data = & (const snd_usb_midi_endpoint_info_t) {
414 .out_cables = 0x01ff,
415 .in_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",
424 .ifnum = 2,
425 .type = QUIRK_MIDI_FIXED_ENDPOINT,
426 .data = & (const snd_usb_midi_endpoint_info_t) {
427 .out_cables = 0x000f,
428 .in_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",
437 .ifnum = 2,
438 .type = QUIRK_MIDI_FIXED_ENDPOINT,
439 .data = & (const snd_usb_midi_endpoint_info_t) {
440 .out_cables = 0x0001,
441 .in_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",
450 .ifnum = 0,
451 .type = QUIRK_MIDI_FIXED_ENDPOINT,
452 .data = & (const snd_usb_midi_endpoint_info_t) {
453 .out_cables = 0x0001,
454 .in_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",
463 .ifnum = 0,
464 .type = QUIRK_MIDI_FIXED_ENDPOINT,
465 .data = & (const snd_usb_midi_endpoint_info_t) {
466 .out_cables = 0x003f,
467 .in_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
475 * and no MIDI.
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[]) {
485 .ifnum = 1,
486 .type = QUIRK_AUDIO_STANDARD_INTERFACE
489 .ifnum = 2,
490 .type = QUIRK_AUDIO_STANDARD_INTERFACE
493 .ifnum = 3,
494 .type = QUIRK_MIDI_STANDARD_INTERFACE
497 .ifnum = -1
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",
507 .ifnum = 0,
508 .type = QUIRK_MIDI_FIXED_ENDPOINT,
509 .data = & (const snd_usb_midi_endpoint_info_t) {
510 .out_cables = 0x0003,
511 .in_cables = 0x0007
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",
520 .ifnum = 0,
521 .type = QUIRK_MIDI_FIXED_ENDPOINT,
522 .data = & (const snd_usb_midi_endpoint_info_t) {
523 .out_cables = 0x000f,
524 .in_cables = 0x000f
528 { /*
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[]) {
542 .ifnum = 1,
543 .type = QUIRK_AUDIO_EDIROL_UA700_UA25
546 .ifnum = 2,
547 .type = QUIRK_AUDIO_EDIROL_UA700_UA25
550 .ifnum = 3,
551 .type = QUIRK_AUDIO_EDIROL_UA700_UA25
554 .ifnum = -1
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",
564 .ifnum = 0,
565 .type = QUIRK_MIDI_FIXED_ENDPOINT,
566 .data = & (const snd_usb_midi_endpoint_info_t) {
567 .out_cables = 0x0001,
568 .in_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",
577 .ifnum = 0,
578 .type = QUIRK_MIDI_FIXED_ENDPOINT,
579 .data = & (const snd_usb_midi_endpoint_info_t) {
580 .out_cables = 0x0007,
581 .in_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",
590 .ifnum = 0,
591 .type = QUIRK_MIDI_FIXED_ENDPOINT,
592 .data = & (const snd_usb_midi_endpoint_info_t) {
593 .out_cables = 0x0003,
594 .in_cables = 0x0007
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",
603 .ifnum = 0,
604 .type = QUIRK_MIDI_FIXED_ENDPOINT,
605 .data = & (const snd_usb_midi_endpoint_info_t) {
606 .out_cables = 0x0001,
607 .in_cables = 0x0001
612 USB_DEVICE_VENDOR_SPEC(0x0582, 0x003b),
613 .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
614 .vendor_name = "BOSS",
615 .product_name = "GS-10",
616 .ifnum = 3,
617 .type = QUIRK_MIDI_FIXED_ENDPOINT,
618 .data = & (const snd_usb_midi_endpoint_info_t) {
619 .out_cables = 0x0003,
620 .in_cables = 0x0003
625 USB_DEVICE(0x0582, 0x0040),
626 .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
627 .vendor_name = "Roland",
628 .product_name = "GI-20",
629 .ifnum = 0,
630 .type = QUIRK_MIDI_FIXED_ENDPOINT,
631 .data = & (const snd_usb_midi_endpoint_info_t) {
632 .out_cables = 0x0001,
633 .in_cables = 0x0001
638 USB_DEVICE(0x0582, 0x0042),
639 .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
640 .vendor_name = "Roland",
641 .product_name = "RS-70",
642 .ifnum = 0,
643 .type = QUIRK_MIDI_FIXED_ENDPOINT,
644 .data = & (const snd_usb_midi_endpoint_info_t) {
645 .out_cables = 0x0001,
646 .in_cables = 0x0001
651 USB_DEVICE(0x0582, 0x0044),
652 .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
653 .vendor_name = "Roland",
654 .product_name = "UA-1000",
655 .ifnum = QUIRK_ANY_INTERFACE,
656 .type = QUIRK_COMPOSITE,
657 .data = (const snd_usb_audio_quirk_t[]) {
659 .ifnum = 1,
660 .type = QUIRK_AUDIO_EDIROL_UA1000
663 .ifnum = 2,
664 .type = QUIRK_AUDIO_EDIROL_UA1000
667 .ifnum = 3,
668 .type = QUIRK_MIDI_FIXED_ENDPOINT,
669 .data = & (const snd_usb_midi_endpoint_info_t) {
670 .out_cables = 0x0003,
671 .in_cables = 0x0003
675 .ifnum = -1
681 USB_DEVICE(0x0582, 0x0048),
682 .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
683 .vendor_name = "EDIROL",
684 .product_name = "UR-80",
685 .ifnum = 0,
686 .type = QUIRK_MIDI_FIXED_ENDPOINT,
687 .data = & (const snd_usb_midi_endpoint_info_t) {
688 .out_cables = 0x0003,
689 .in_cables = 0x0007
694 USB_DEVICE(0x0582, 0x004d),
695 .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
696 .vendor_name = "EDIROL",
697 .product_name = "PCR-A",
698 .ifnum = 0,
699 .type = QUIRK_MIDI_FIXED_ENDPOINT,
700 .data = & (const snd_usb_midi_endpoint_info_t) {
701 .out_cables = 0x0003,
702 .in_cables = 0x0007
708 * This quirk is for the "Advanced Driver" mode. If off, the UA-3FX
709 * is standard compliant, but has only 16-bit PCM.
711 USB_DEVICE(0x0582, 0x0050),
712 .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
713 .vendor_name = "EDIROL",
714 .product_name = "UA-3FX",
715 .ifnum = QUIRK_ANY_INTERFACE,
716 .type = QUIRK_COMPOSITE,
717 .data = (const snd_usb_audio_quirk_t[]) {
719 .ifnum = 1,
720 .type = QUIRK_AUDIO_STANDARD_INTERFACE
723 .ifnum = 2,
724 .type = QUIRK_AUDIO_STANDARD_INTERFACE
727 .ifnum = -1
733 USB_DEVICE(0x0582, 0x0052),
734 .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
735 .vendor_name = "EDIROL",
736 .product_name = "UM-1SX",
737 .ifnum = 0,
738 .type = QUIRK_MIDI_STANDARD_INTERFACE
742 USB_DEVICE(0x0582, 0x0065),
743 .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
744 .vendor_name = "EDIROL",
745 .product_name = "PCR-1",
746 .ifnum = 0,
747 .type = QUIRK_MIDI_FIXED_ENDPOINT,
748 .data = & (const snd_usb_midi_endpoint_info_t) {
749 .out_cables = 0x0001,
750 .in_cables = 0x0003
755 USB_DEVICE_VENDOR_SPEC(0x0582, 0x006a),
756 .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
757 .vendor_name = "Roland",
758 .product_name = "SP-606",
759 .ifnum = 3,
760 .type = QUIRK_MIDI_FIXED_ENDPOINT,
761 .data = & (const snd_usb_midi_endpoint_info_t) {
762 .out_cables = 0x0001,
763 .in_cables = 0x0001
768 USB_DEVICE(0x0582, 0x006d),
769 .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
770 .vendor_name = "Roland",
771 .product_name = "FANTOM-X",
772 .ifnum = 0,
773 .type = QUIRK_MIDI_FIXED_ENDPOINT,
774 .data = & (const snd_usb_midi_endpoint_info_t) {
775 .out_cables = 0x0001,
776 .in_cables = 0x0001
780 { /*
781 * This quirk is for the "Advanced" modes of the Edirol UA-25.
782 * If the switch is not in an advanced setting, the UA-25 has
783 * ID 0x0582/0x0073 and is standard compliant (no quirks), but
784 * offers only 16-bit PCM at 44.1 kHz and no MIDI.
786 USB_DEVICE_VENDOR_SPEC(0x0582, 0x0074),
787 .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
788 .vendor_name = "EDIROL",
789 .product_name = "UA-25",
790 .ifnum = QUIRK_ANY_INTERFACE,
791 .type = QUIRK_COMPOSITE,
792 .data = (const snd_usb_audio_quirk_t[]) {
794 .ifnum = 0,
795 .type = QUIRK_AUDIO_EDIROL_UA700_UA25
798 .ifnum = 1,
799 .type = QUIRK_AUDIO_EDIROL_UA700_UA25
802 .ifnum = 2,
803 .type = QUIRK_AUDIO_EDIROL_UA700_UA25
806 .ifnum = -1
812 USB_DEVICE(0x0582, 0x0075),
813 .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
814 .vendor_name = "BOSS",
815 .product_name = "DR-880",
816 .ifnum = 0,
817 .type = QUIRK_MIDI_FIXED_ENDPOINT,
818 .data = & (const snd_usb_midi_endpoint_info_t) {
819 .out_cables = 0x0001,
820 .in_cables = 0x0001
825 /* Midiman/M-Audio devices */
827 USB_DEVICE_VENDOR_SPEC(0x0763, 0x1002),
828 .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
829 .vendor_name = "M-Audio",
830 .product_name = "MidiSport 2x2",
831 .ifnum = QUIRK_ANY_INTERFACE,
832 .type = QUIRK_MIDI_MIDIMAN,
833 .data = & (const snd_usb_midi_endpoint_info_t) {
834 .out_cables = 0x0003,
835 .in_cables = 0x0003
840 USB_DEVICE_VENDOR_SPEC(0x0763, 0x1011),
841 .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
842 .vendor_name = "M-Audio",
843 .product_name = "MidiSport 1x1",
844 .ifnum = QUIRK_ANY_INTERFACE,
845 .type = QUIRK_MIDI_MIDIMAN,
846 .data = & (const snd_usb_midi_endpoint_info_t) {
847 .out_cables = 0x0001,
848 .in_cables = 0x0001
853 USB_DEVICE_VENDOR_SPEC(0x0763, 0x1015),
854 .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
855 .vendor_name = "M-Audio",
856 .product_name = "Keystation",
857 .ifnum = QUIRK_ANY_INTERFACE,
858 .type = QUIRK_MIDI_MIDIMAN,
859 .data = & (const snd_usb_midi_endpoint_info_t) {
860 .out_cables = 0x0001,
861 .in_cables = 0x0001
866 USB_DEVICE_VENDOR_SPEC(0x0763, 0x1021),
867 .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
868 .vendor_name = "M-Audio",
869 .product_name = "MidiSport 4x4",
870 .ifnum = QUIRK_ANY_INTERFACE,
871 .type = QUIRK_MIDI_MIDIMAN,
872 .data = & (const snd_usb_midi_endpoint_info_t) {
873 .out_cables = 0x000f,
874 .in_cables = 0x000f
880 * For hardware revision 1.05; in the later revisions (1.10 and
881 * 1.21), 0x1031 is the ID for the device without firmware.
882 * Thanks to Olaf Giesbrecht <Olaf_Giesbrecht@yahoo.de>
884 USB_DEVICE_VER(0x0763, 0x1031, 0x0100, 0x0109),
885 .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
886 .vendor_name = "M-Audio",
887 .product_name = "MidiSport 8x8",
888 .ifnum = QUIRK_ANY_INTERFACE,
889 .type = QUIRK_MIDI_MIDIMAN,
890 .data = & (const snd_usb_midi_endpoint_info_t) {
891 .out_cables = 0x01ff,
892 .in_cables = 0x01ff
897 USB_DEVICE_VENDOR_SPEC(0x0763, 0x1033),
898 .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
899 .vendor_name = "M-Audio",
900 .product_name = "MidiSport 8x8",
901 .ifnum = QUIRK_ANY_INTERFACE,
902 .type = QUIRK_MIDI_MIDIMAN,
903 .data = & (const snd_usb_midi_endpoint_info_t) {
904 .out_cables = 0x01ff,
905 .in_cables = 0x01ff
910 USB_DEVICE_VENDOR_SPEC(0x0763, 0x1041),
911 .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
912 .vendor_name = "M-Audio",
913 .product_name = "MidiSport 2x4",
914 .ifnum = QUIRK_ANY_INTERFACE,
915 .type = QUIRK_MIDI_MIDIMAN,
916 .data = & (const snd_usb_midi_endpoint_info_t) {
917 .out_cables = 0x000f,
918 .in_cables = 0x0003
923 USB_DEVICE_VENDOR_SPEC(0x0763, 0x2001),
924 .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
925 .vendor_name = "M-Audio",
926 .product_name = "Quattro",
927 .ifnum = QUIRK_ANY_INTERFACE,
928 .type = QUIRK_COMPOSITE,
929 .data = & (const snd_usb_audio_quirk_t[]) {
931 * Interfaces 0-2 are "Windows-compatible", 16-bit only,
932 * and share endpoints with the other interfaces.
933 * Ignore them. The other interfaces can do 24 bits,
934 * but captured samples are big-endian (see usbaudio.c).
937 .ifnum = 0,
938 .type = QUIRK_IGNORE_INTERFACE
941 .ifnum = 1,
942 .type = QUIRK_IGNORE_INTERFACE
945 .ifnum = 2,
946 .type = QUIRK_IGNORE_INTERFACE
949 .ifnum = 3,
950 .type = QUIRK_IGNORE_INTERFACE
953 .ifnum = 4,
954 .type = QUIRK_AUDIO_STANDARD_INTERFACE
957 .ifnum = 5,
958 .type = QUIRK_AUDIO_STANDARD_INTERFACE
961 .ifnum = 6,
962 .type = QUIRK_IGNORE_INTERFACE
965 .ifnum = 7,
966 .type = QUIRK_AUDIO_STANDARD_INTERFACE
969 .ifnum = 8,
970 .type = QUIRK_AUDIO_STANDARD_INTERFACE
973 .ifnum = 9,
974 .type = QUIRK_MIDI_MIDIMAN,
975 .data = & (const snd_usb_midi_endpoint_info_t) {
976 .out_cables = 0x0001,
977 .in_cables = 0x0001
981 .ifnum = -1
987 USB_DEVICE_VENDOR_SPEC(0x0763, 0x2003),
988 .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
989 .vendor_name = "M-Audio",
990 .product_name = "AudioPhile",
991 .ifnum = 6,
992 .type = QUIRK_MIDI_MIDIMAN,
993 .data = & (const snd_usb_midi_endpoint_info_t) {
994 .out_cables = 0x0001,
995 .in_cables = 0x0001
1000 USB_DEVICE_VENDOR_SPEC(0x0763, 0x2008),
1001 .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
1002 .vendor_name = "M-Audio",
1003 .product_name = "Ozone",
1004 .ifnum = 3,
1005 .type = QUIRK_MIDI_MIDIMAN,
1006 .data = & (const snd_usb_midi_endpoint_info_t) {
1007 .out_cables = 0x0001,
1008 .in_cables = 0x0001
1013 USB_DEVICE_VENDOR_SPEC(0x0763, 0x200d),
1014 .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
1015 .vendor_name = "M-Audio",
1016 .product_name = "OmniStudio",
1017 .ifnum = QUIRK_ANY_INTERFACE,
1018 .type = QUIRK_COMPOSITE,
1019 .data = & (const snd_usb_audio_quirk_t[]) {
1021 .ifnum = 0,
1022 .type = QUIRK_IGNORE_INTERFACE
1025 .ifnum = 1,
1026 .type = QUIRK_IGNORE_INTERFACE
1029 .ifnum = 2,
1030 .type = QUIRK_IGNORE_INTERFACE
1033 .ifnum = 3,
1034 .type = QUIRK_IGNORE_INTERFACE
1037 .ifnum = 4,
1038 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1041 .ifnum = 5,
1042 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1045 .ifnum = 6,
1046 .type = QUIRK_IGNORE_INTERFACE
1049 .ifnum = 7,
1050 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1053 .ifnum = 8,
1054 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1057 .ifnum = 9,
1058 .type = QUIRK_MIDI_MIDIMAN,
1059 .data = & (const snd_usb_midi_endpoint_info_t) {
1060 .out_cables = 0x0001,
1061 .in_cables = 0x0001
1065 .ifnum = -1
1071 /* Mark of the Unicorn devices */
1073 /* thanks to Robert A. Lerche <ral 'at' msbit.com> */
1074 USB_DEVICE(0x07fd, 0x0001),
1075 .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
1076 .vendor_name = "MOTU",
1077 .product_name = "Fastlane",
1078 .ifnum = QUIRK_ANY_INTERFACE,
1079 .type = QUIRK_COMPOSITE,
1080 .data = & (const snd_usb_audio_quirk_t[]) {
1082 .ifnum = 0,
1083 .type = QUIRK_MIDI_MOTU
1086 .ifnum = 1,
1087 .type = QUIRK_IGNORE_INTERFACE
1090 .ifnum = -1
1097 /* Creative Sound Blaster MP3+ */
1098 USB_DEVICE(0x041e, 0x3010),
1099 .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
1100 .vendor_name = "Creative Labs",
1101 .product_name = "Sound Blaster MP3+",
1102 .ifnum = QUIRK_NO_INTERFACE
1107 /* Emagic devices */
1109 USB_DEVICE(0x086a, 0x0001),
1110 .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
1111 .vendor_name = "Emagic",
1112 /* .product_name = "Unitor8", */
1113 .ifnum = 2,
1114 .type = QUIRK_MIDI_EMAGIC,
1115 .data = & (const snd_usb_midi_endpoint_info_t) {
1116 .out_cables = 0x80ff,
1117 .in_cables = 0x80ff
1122 USB_DEVICE(0x086a, 0x0002),
1123 .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
1124 .vendor_name = "Emagic",
1125 /* .product_name = "AMT8", */
1126 .ifnum = 2,
1127 .type = QUIRK_MIDI_EMAGIC,
1128 .data = & (const snd_usb_midi_endpoint_info_t) {
1129 .out_cables = 0x80ff,
1130 .in_cables = 0x80ff
1135 USB_DEVICE(0x086a, 0x0003),
1136 .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
1137 .vendor_name = "Emagic",
1138 /* .product_name = "MT4", */
1139 .ifnum = 2,
1140 .type = QUIRK_MIDI_EMAGIC,
1141 .data = & (const snd_usb_midi_endpoint_info_t) {
1142 .out_cables = 0x800f,
1143 .in_cables = 0x8003
1149 USB_DEVICE_VENDOR_SPEC(0x0ccd, 0x0013),
1150 .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
1151 .vendor_name = "Terratec",
1152 .product_name = "PHASE 26",
1153 .ifnum = 3,
1154 .type = QUIRK_MIDI_STANDARD_INTERFACE
1158 /* Novation EMS devices */
1160 USB_DEVICE_VENDOR_SPEC(0x1235, 0x0001),
1161 .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
1162 .vendor_name = "Novation",
1163 .product_name = "ReMOTE Audio/XStation",
1164 .ifnum = 4,
1165 .type = QUIRK_MIDI_NOVATION
1169 USB_DEVICE_VENDOR_SPEC(0x1235, 0x0002),
1170 .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
1171 .vendor_name = "Novation",
1172 .product_name = "Speedio",
1173 .ifnum = 3,
1174 .type = QUIRK_MIDI_NOVATION
1178 USB_DEVICE_VENDOR_SPEC(0x1235, 0x4661),
1179 .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
1180 .vendor_name = "Novation",
1181 .product_name = "ReMOTE25",
1182 .ifnum = 0,
1183 .type = QUIRK_MIDI_NOVATION
1189 * Some USB MIDI devices don't have an audio control interface,
1190 * so we have to grab MIDI streaming interfaces here.
1192 .match_flags = USB_DEVICE_ID_MATCH_INT_CLASS |
1193 USB_DEVICE_ID_MATCH_INT_SUBCLASS,
1194 .bInterfaceClass = USB_CLASS_AUDIO,
1195 .bInterfaceSubClass = USB_SUBCLASS_MIDI_STREAMING,
1196 .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
1197 .ifnum = QUIRK_ANY_INTERFACE,
1198 .type = QUIRK_MIDI_STANDARD_INTERFACE
1202 #undef USB_DEVICE_VENDOR_SPEC