arm: walk_stacktrace() needs to be exported
[deliverable/linux.git] / sound / usb / usbquirks.h
CommitLineData
1da177e4
LT
1/*
2 * ALSA USB Audio Driver
3 *
4 * Copyright (c) 2002 by Takashi Iwai <tiwai@suse.de>,
5 * Clemens Ladisch <clemens@ladisch.de>
6 *
7 *
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.
12 *
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.
17 *
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
21 */
22
23/*
24 * The contents of this file are part of the driver's id_table.
25 *
26 * In a perfect world, this file would be empty.
27 */
28
29/*
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.)
33 */
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
41
a9121458
DD
42/*
43 * Logitech QuickCam: bDeviceClass is vendor-specific, so generic interface
44 * class matches do not take effect without an explicit ID match.
45 */
46{
47 .match_flags = USB_DEVICE_ID_MATCH_DEVICE |
48 USB_DEVICE_ID_MATCH_INT_CLASS |
49 USB_DEVICE_ID_MATCH_INT_SUBCLASS,
50 .idVendor = 0x046d,
51 .idProduct = 0x08f0,
52 .bInterfaceClass = USB_CLASS_AUDIO,
53 .bInterfaceSubClass = USB_SUBCLASS_AUDIO_CONTROL
54},
55{
56 .match_flags = USB_DEVICE_ID_MATCH_DEVICE |
57 USB_DEVICE_ID_MATCH_INT_CLASS |
58 USB_DEVICE_ID_MATCH_INT_SUBCLASS,
59 .idVendor = 0x046d,
60 .idProduct = 0x08f6,
61 .bInterfaceClass = USB_CLASS_AUDIO,
62 .bInterfaceSubClass = USB_SUBCLASS_AUDIO_CONTROL
63},
64
1da177e4
LT
65/*
66 * Yamaha devices
67 */
68
69#define YAMAHA_DEVICE(id, name) { \
70 USB_DEVICE(0x0499, id), \
86e07d34 71 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { \
1da177e4
LT
72 .vendor_name = "Yamaha", \
73 .product_name = name, \
74 .ifnum = QUIRK_ANY_INTERFACE, \
75 .type = QUIRK_MIDI_YAMAHA \
76 } \
77}
78#define YAMAHA_INTERFACE(id, intf, name) { \
79 USB_DEVICE_VENDOR_SPEC(0x0499, id), \
86e07d34 80 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { \
1da177e4
LT
81 .vendor_name = "Yamaha", \
82 .product_name = name, \
83 .ifnum = intf, \
84 .type = QUIRK_MIDI_YAMAHA \
85 } \
86}
87YAMAHA_DEVICE(0x1000, "UX256"),
88YAMAHA_DEVICE(0x1001, "MU1000"),
89YAMAHA_DEVICE(0x1002, "MU2000"),
90YAMAHA_DEVICE(0x1003, "MU500"),
91YAMAHA_INTERFACE(0x1004, 3, "UW500"),
92YAMAHA_DEVICE(0x1005, "MOTIF6"),
93YAMAHA_DEVICE(0x1006, "MOTIF7"),
94YAMAHA_DEVICE(0x1007, "MOTIF8"),
95YAMAHA_DEVICE(0x1008, "UX96"),
96YAMAHA_DEVICE(0x1009, "UX16"),
97YAMAHA_INTERFACE(0x100a, 3, "EOS BX"),
98YAMAHA_DEVICE(0x100c, "UC-MX"),
99YAMAHA_DEVICE(0x100d, "UC-KX"),
100YAMAHA_DEVICE(0x100e, "S08"),
101YAMAHA_DEVICE(0x100f, "CLP-150"),
102YAMAHA_DEVICE(0x1010, "CLP-170"),
103YAMAHA_DEVICE(0x1011, "P-250"),
104YAMAHA_DEVICE(0x1012, "TYROS"),
105YAMAHA_DEVICE(0x1013, "PF-500"),
106YAMAHA_DEVICE(0x1014, "S90"),
107YAMAHA_DEVICE(0x1015, "MOTIF-R"),
4ccb4a43 108YAMAHA_DEVICE(0x1016, "MDP-5"),
1da177e4
LT
109YAMAHA_DEVICE(0x1017, "CVP-204"),
110YAMAHA_DEVICE(0x1018, "CVP-206"),
111YAMAHA_DEVICE(0x1019, "CVP-208"),
112YAMAHA_DEVICE(0x101a, "CVP-210"),
113YAMAHA_DEVICE(0x101b, "PSR-1100"),
114YAMAHA_DEVICE(0x101c, "PSR-2100"),
115YAMAHA_DEVICE(0x101d, "CLP-175"),
116YAMAHA_DEVICE(0x101e, "PSR-K1"),
4ccb4a43 117YAMAHA_DEVICE(0x101f, "EZ-J24"),
1da177e4
LT
118YAMAHA_DEVICE(0x1020, "EZ-250i"),
119YAMAHA_DEVICE(0x1021, "MOTIF ES 6"),
120YAMAHA_DEVICE(0x1022, "MOTIF ES 7"),
121YAMAHA_DEVICE(0x1023, "MOTIF ES 8"),
122YAMAHA_DEVICE(0x1024, "CVP-301"),
123YAMAHA_DEVICE(0x1025, "CVP-303"),
124YAMAHA_DEVICE(0x1026, "CVP-305"),
125YAMAHA_DEVICE(0x1027, "CVP-307"),
126YAMAHA_DEVICE(0x1028, "CVP-309"),
127YAMAHA_DEVICE(0x1029, "CVP-309GP"),
128YAMAHA_DEVICE(0x102a, "PSR-1500"),
129YAMAHA_DEVICE(0x102b, "PSR-3000"),
130YAMAHA_DEVICE(0x102e, "ELS-01/01C"),
131YAMAHA_DEVICE(0x1030, "PSR-295/293"),
132YAMAHA_DEVICE(0x1031, "DGX-205/203"),
133YAMAHA_DEVICE(0x1032, "DGX-305"),
134YAMAHA_DEVICE(0x1033, "DGX-505"),
135YAMAHA_DEVICE(0x1034, NULL),
136YAMAHA_DEVICE(0x1035, NULL),
137YAMAHA_DEVICE(0x1036, NULL),
138YAMAHA_DEVICE(0x1037, NULL),
139YAMAHA_DEVICE(0x1038, NULL),
140YAMAHA_DEVICE(0x1039, NULL),
141YAMAHA_DEVICE(0x103a, NULL),
142YAMAHA_DEVICE(0x103b, NULL),
143YAMAHA_DEVICE(0x103c, NULL),
0ac2ac0a 144YAMAHA_DEVICE(0x103d, NULL),
f542fda8
CL
145YAMAHA_DEVICE(0x103e, NULL),
146YAMAHA_DEVICE(0x103f, NULL),
147YAMAHA_DEVICE(0x1040, NULL),
148YAMAHA_DEVICE(0x1041, NULL),
f1265391
CL
149YAMAHA_DEVICE(0x1042, NULL),
150YAMAHA_DEVICE(0x1043, NULL),
151YAMAHA_DEVICE(0x1044, NULL),
152YAMAHA_DEVICE(0x1045, NULL),
1da177e4
LT
153YAMAHA_DEVICE(0x2000, "DGP-7"),
154YAMAHA_DEVICE(0x2001, "DGP-5"),
155YAMAHA_DEVICE(0x2002, NULL),
156YAMAHA_DEVICE(0x5000, "CS1D"),
157YAMAHA_DEVICE(0x5001, "DSP1D"),
158YAMAHA_DEVICE(0x5002, "DME32"),
159YAMAHA_DEVICE(0x5003, "DM2000"),
160YAMAHA_DEVICE(0x5004, "02R96"),
161YAMAHA_DEVICE(0x5005, "ACU16-C"),
162YAMAHA_DEVICE(0x5006, "NHB32-C"),
163YAMAHA_DEVICE(0x5007, "DM1000"),
164YAMAHA_DEVICE(0x5008, "01V96"),
165YAMAHA_DEVICE(0x5009, "SPX2000"),
166YAMAHA_DEVICE(0x500a, "PM5D"),
167YAMAHA_DEVICE(0x500b, "DME64N"),
168YAMAHA_DEVICE(0x500c, "DME24N"),
169YAMAHA_DEVICE(0x500d, NULL),
170YAMAHA_DEVICE(0x500e, NULL),
f1265391 171YAMAHA_DEVICE(0x500f, NULL),
1da177e4
LT
172YAMAHA_DEVICE(0x7000, "DTX"),
173YAMAHA_DEVICE(0x7010, "UB99"),
174#undef YAMAHA_DEVICE
175#undef YAMAHA_INTERFACE
176
177/*
178 * Roland/RolandED/Edirol/BOSS devices
179 */
180{
181 USB_DEVICE(0x0582, 0x0000),
86e07d34 182 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1da177e4
LT
183 .vendor_name = "Roland",
184 .product_name = "UA-100",
185 .ifnum = QUIRK_ANY_INTERFACE,
186 .type = QUIRK_COMPOSITE,
86e07d34 187 .data = (const struct snd_usb_audio_quirk[]) {
1da177e4
LT
188 {
189 .ifnum = 0,
190 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
191 .data = & (const struct audioformat) {
192 .format = SNDRV_PCM_FORMAT_S16_LE,
193 .channels = 4,
194 .iface = 0,
195 .altsetting = 1,
196 .altset_idx = 1,
197 .attributes = 0,
198 .endpoint = 0x01,
199 .ep_attr = 0x09,
200 .rates = SNDRV_PCM_RATE_CONTINUOUS,
201 .rate_min = 44100,
202 .rate_max = 44100,
203 }
204 },
205 {
206 .ifnum = 1,
207 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
208 .data = & (const struct audioformat) {
209 .format = SNDRV_PCM_FORMAT_S16_LE,
210 .channels = 2,
211 .iface = 1,
212 .altsetting = 1,
213 .altset_idx = 1,
214 .attributes = EP_CS_ATTR_FILL_MAX,
215 .endpoint = 0x81,
216 .ep_attr = 0x05,
217 .rates = SNDRV_PCM_RATE_CONTINUOUS,
218 .rate_min = 44100,
219 .rate_max = 44100,
220 }
221 },
222 {
223 .ifnum = 2,
224 .type = QUIRK_MIDI_FIXED_ENDPOINT,
86e07d34 225 .data = & (const struct snd_usb_midi_endpoint_info) {
1da177e4
LT
226 .out_cables = 0x0007,
227 .in_cables = 0x0007
228 }
229 },
230 {
231 .ifnum = -1
232 }
233 }
234 }
235},
236{
237 USB_DEVICE(0x0582, 0x0002),
86e07d34 238 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1da177e4
LT
239 .vendor_name = "EDIROL",
240 .product_name = "UM-4",
d3ff42fd
CL
241 .ifnum = QUIRK_ANY_INTERFACE,
242 .type = QUIRK_COMPOSITE,
86e07d34 243 .data = (const struct snd_usb_audio_quirk[]) {
d3ff42fd
CL
244 {
245 .ifnum = 0,
246 .type = QUIRK_IGNORE_INTERFACE
247 },
248 {
249 .ifnum = 1,
250 .type = QUIRK_IGNORE_INTERFACE
251 },
252 {
253 .ifnum = 2,
254 .type = QUIRK_MIDI_FIXED_ENDPOINT,
86e07d34 255 .data = & (const struct snd_usb_midi_endpoint_info) {
d3ff42fd
CL
256 .out_cables = 0x000f,
257 .in_cables = 0x000f
258 }
259 },
260 {
261 .ifnum = -1
262 }
1da177e4
LT
263 }
264 }
265},
266{
267 USB_DEVICE(0x0582, 0x0003),
86e07d34 268 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1da177e4
LT
269 .vendor_name = "Roland",
270 .product_name = "SC-8850",
d3ff42fd
CL
271 .ifnum = QUIRK_ANY_INTERFACE,
272 .type = QUIRK_COMPOSITE,
86e07d34 273 .data = (const struct snd_usb_audio_quirk[]) {
d3ff42fd
CL
274 {
275 .ifnum = 0,
276 .type = QUIRK_IGNORE_INTERFACE
277 },
278 {
279 .ifnum = 1,
280 .type = QUIRK_IGNORE_INTERFACE
281 },
282 {
283 .ifnum = 2,
284 .type = QUIRK_MIDI_FIXED_ENDPOINT,
86e07d34 285 .data = & (const struct snd_usb_midi_endpoint_info) {
d3ff42fd
CL
286 .out_cables = 0x003f,
287 .in_cables = 0x003f
288 }
289 },
290 {
291 .ifnum = -1
292 }
1da177e4
LT
293 }
294 }
295},
296{
297 USB_DEVICE(0x0582, 0x0004),
86e07d34 298 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1da177e4
LT
299 .vendor_name = "Roland",
300 .product_name = "U-8",
d3ff42fd
CL
301 .ifnum = QUIRK_ANY_INTERFACE,
302 .type = QUIRK_COMPOSITE,
86e07d34 303 .data = (const struct snd_usb_audio_quirk[]) {
d3ff42fd
CL
304 {
305 .ifnum = 0,
306 .type = QUIRK_IGNORE_INTERFACE
307 },
308 {
309 .ifnum = 1,
310 .type = QUIRK_IGNORE_INTERFACE
311 },
312 {
313 .ifnum = 2,
314 .type = QUIRK_MIDI_FIXED_ENDPOINT,
86e07d34 315 .data = & (const struct snd_usb_midi_endpoint_info) {
d3ff42fd
CL
316 .out_cables = 0x0005,
317 .in_cables = 0x0005
318 }
319 },
320 {
321 .ifnum = -1
322 }
1da177e4
LT
323 }
324 }
325},
326{
119c4ff5
CL
327 /* Has ID 0x0099 when not in "Advanced Driver" mode.
328 * The UM-2EX has only one input, but we cannot detect this. */
1da177e4 329 USB_DEVICE(0x0582, 0x0005),
86e07d34 330 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1da177e4
LT
331 .vendor_name = "EDIROL",
332 .product_name = "UM-2",
d3ff42fd
CL
333 .ifnum = QUIRK_ANY_INTERFACE,
334 .type = QUIRK_COMPOSITE,
86e07d34 335 .data = (const struct snd_usb_audio_quirk[]) {
d3ff42fd
CL
336 {
337 .ifnum = 0,
338 .type = QUIRK_IGNORE_INTERFACE
339 },
340 {
341 .ifnum = 1,
342 .type = QUIRK_IGNORE_INTERFACE
343 },
344 {
345 .ifnum = 2,
346 .type = QUIRK_MIDI_FIXED_ENDPOINT,
86e07d34 347 .data = & (const struct snd_usb_midi_endpoint_info) {
d3ff42fd
CL
348 .out_cables = 0x0003,
349 .in_cables = 0x0003
350 }
351 },
352 {
353 .ifnum = -1
354 }
1da177e4
LT
355 }
356 }
357},
358{
359 USB_DEVICE(0x0582, 0x0007),
86e07d34 360 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1da177e4
LT
361 .vendor_name = "Roland",
362 .product_name = "SC-8820",
d3ff42fd
CL
363 .ifnum = QUIRK_ANY_INTERFACE,
364 .type = QUIRK_COMPOSITE,
86e07d34 365 .data = (const struct snd_usb_audio_quirk[]) {
d3ff42fd
CL
366 {
367 .ifnum = 0,
368 .type = QUIRK_IGNORE_INTERFACE
369 },
370 {
371 .ifnum = 1,
372 .type = QUIRK_IGNORE_INTERFACE
373 },
374 {
375 .ifnum = 2,
376 .type = QUIRK_MIDI_FIXED_ENDPOINT,
86e07d34 377 .data = & (const struct snd_usb_midi_endpoint_info) {
d3ff42fd
CL
378 .out_cables = 0x0013,
379 .in_cables = 0x0013
380 }
381 },
382 {
383 .ifnum = -1
384 }
1da177e4
LT
385 }
386 }
387},
388{
389 USB_DEVICE(0x0582, 0x0008),
86e07d34 390 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1da177e4
LT
391 .vendor_name = "Roland",
392 .product_name = "PC-300",
d3ff42fd
CL
393 .ifnum = QUIRK_ANY_INTERFACE,
394 .type = QUIRK_COMPOSITE,
86e07d34 395 .data = (const struct snd_usb_audio_quirk[]) {
d3ff42fd
CL
396 {
397 .ifnum = 0,
398 .type = QUIRK_IGNORE_INTERFACE
399 },
400 {
401 .ifnum = 1,
402 .type = QUIRK_IGNORE_INTERFACE
403 },
404 {
405 .ifnum = 2,
406 .type = QUIRK_MIDI_FIXED_ENDPOINT,
86e07d34 407 .data = & (const struct snd_usb_midi_endpoint_info) {
d3ff42fd
CL
408 .out_cables = 0x0001,
409 .in_cables = 0x0001
410 }
411 },
412 {
413 .ifnum = -1
414 }
1da177e4
LT
415 }
416 }
417},
418{
119c4ff5 419 /* has ID 0x009d when not in "Advanced Driver" mode */
1da177e4 420 USB_DEVICE(0x0582, 0x0009),
86e07d34 421 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1da177e4
LT
422 .vendor_name = "EDIROL",
423 .product_name = "UM-1",
d3ff42fd
CL
424 .ifnum = QUIRK_ANY_INTERFACE,
425 .type = QUIRK_COMPOSITE,
86e07d34 426 .data = (const struct snd_usb_audio_quirk[]) {
d3ff42fd
CL
427 {
428 .ifnum = 0,
429 .type = QUIRK_IGNORE_INTERFACE
430 },
431 {
432 .ifnum = 1,
433 .type = QUIRK_IGNORE_INTERFACE
434 },
435 {
436 .ifnum = 2,
437 .type = QUIRK_MIDI_FIXED_ENDPOINT,
86e07d34 438 .data = & (const struct snd_usb_midi_endpoint_info) {
d3ff42fd
CL
439 .out_cables = 0x0001,
440 .in_cables = 0x0001
441 }
442 },
443 {
444 .ifnum = -1
445 }
1da177e4
LT
446 }
447 }
448},
449{
450 USB_DEVICE(0x0582, 0x000b),
86e07d34 451 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1da177e4
LT
452 .vendor_name = "Roland",
453 .product_name = "SK-500",
d3ff42fd
CL
454 .ifnum = QUIRK_ANY_INTERFACE,
455 .type = QUIRK_COMPOSITE,
86e07d34 456 .data = (const struct snd_usb_audio_quirk[]) {
d3ff42fd
CL
457 {
458 .ifnum = 0,
459 .type = QUIRK_IGNORE_INTERFACE
460 },
461 {
462 .ifnum = 1,
463 .type = QUIRK_IGNORE_INTERFACE
464 },
465 {
466 .ifnum = 2,
467 .type = QUIRK_MIDI_FIXED_ENDPOINT,
86e07d34 468 .data = & (const struct snd_usb_midi_endpoint_info) {
d3ff42fd
CL
469 .out_cables = 0x0013,
470 .in_cables = 0x0013
471 }
472 },
473 {
474 .ifnum = -1
475 }
1da177e4
LT
476 }
477 }
478},
479{
480 /* thanks to Emiliano Grilli <emillo@libero.it>
481 * for helping researching this data */
482 USB_DEVICE(0x0582, 0x000c),
86e07d34 483 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1da177e4
LT
484 .vendor_name = "Roland",
485 .product_name = "SC-D70",
486 .ifnum = QUIRK_ANY_INTERFACE,
487 .type = QUIRK_COMPOSITE,
86e07d34 488 .data = (const struct snd_usb_audio_quirk[]) {
1da177e4
LT
489 {
490 .ifnum = 0,
491 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
492 .data = & (const struct audioformat) {
493 .format = SNDRV_PCM_FORMAT_S24_3LE,
494 .channels = 2,
495 .iface = 0,
496 .altsetting = 1,
497 .altset_idx = 1,
498 .attributes = 0,
499 .endpoint = 0x01,
500 .ep_attr = 0x01,
501 .rates = SNDRV_PCM_RATE_CONTINUOUS,
502 .rate_min = 44100,
503 .rate_max = 44100,
504 }
505 },
506 {
507 .ifnum = 1,
508 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
509 .data = & (const struct audioformat) {
510 .format = SNDRV_PCM_FORMAT_S24_3LE,
511 .channels = 2,
512 .iface = 1,
513 .altsetting = 1,
514 .altset_idx = 1,
515 .attributes = 0,
516 .endpoint = 0x81,
517 .ep_attr = 0x01,
518 .rates = SNDRV_PCM_RATE_CONTINUOUS,
519 .rate_min = 44100,
520 .rate_max = 44100,
521 }
522 },
523 {
524 .ifnum = 2,
525 .type = QUIRK_MIDI_FIXED_ENDPOINT,
86e07d34 526 .data = & (const struct snd_usb_midi_endpoint_info) {
1da177e4
LT
527 .out_cables = 0x0007,
528 .in_cables = 0x0007
529 }
530 },
531 {
532 .ifnum = -1
533 }
534 }
535 }
536},
537{ /*
538 * This quirk is for the "Advanced Driver" mode of the Edirol UA-5.
539 * If the advanced mode switch at the back of the unit is off, the
540 * UA-5 has ID 0x0582/0x0011 and is standard compliant (no quirks),
541 * but offers only 16-bit PCM.
542 * In advanced mode, the UA-5 will output S24_3LE samples (two
543 * channels) at the rate indicated on the front switch, including
544 * the 96kHz sample rate.
545 */
546 USB_DEVICE(0x0582, 0x0010),
86e07d34 547 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1da177e4
LT
548 .vendor_name = "EDIROL",
549 .product_name = "UA-5",
550 .ifnum = QUIRK_ANY_INTERFACE,
551 .type = QUIRK_COMPOSITE,
86e07d34 552 .data = (const struct snd_usb_audio_quirk[]) {
1da177e4
LT
553 {
554 .ifnum = 1,
555 .type = QUIRK_AUDIO_STANDARD_INTERFACE
556 },
557 {
558 .ifnum = 2,
559 .type = QUIRK_AUDIO_STANDARD_INTERFACE
560 },
561 {
562 .ifnum = -1
563 }
564 }
565 }
566},
567{
d879f0cc 568 /* has ID 0x0013 when not in "Advanced Driver" mode */
1da177e4 569 USB_DEVICE(0x0582, 0x0012),
86e07d34 570 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1da177e4
LT
571 .vendor_name = "Roland",
572 .product_name = "XV-5050",
573 .ifnum = 0,
574 .type = QUIRK_MIDI_FIXED_ENDPOINT,
86e07d34 575 .data = & (const struct snd_usb_midi_endpoint_info) {
1da177e4
LT
576 .out_cables = 0x0001,
577 .in_cables = 0x0001
578 }
579 }
580},
581{
d879f0cc 582 /* has ID 0x0015 when not in "Advanced Driver" mode */
1da177e4 583 USB_DEVICE(0x0582, 0x0014),
86e07d34 584 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1da177e4
LT
585 .vendor_name = "EDIROL",
586 .product_name = "UM-880",
587 .ifnum = 0,
588 .type = QUIRK_MIDI_FIXED_ENDPOINT,
86e07d34 589 .data = & (const struct snd_usb_midi_endpoint_info) {
1da177e4
LT
590 .out_cables = 0x01ff,
591 .in_cables = 0x01ff
592 }
593 }
594},
595{
d879f0cc 596 /* has ID 0x0017 when not in "Advanced Driver" mode */
1da177e4 597 USB_DEVICE(0x0582, 0x0016),
86e07d34 598 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1da177e4
LT
599 .vendor_name = "EDIROL",
600 .product_name = "SD-90",
d3ff42fd
CL
601 .ifnum = QUIRK_ANY_INTERFACE,
602 .type = QUIRK_COMPOSITE,
86e07d34 603 .data = (const struct snd_usb_audio_quirk[]) {
d3ff42fd
CL
604 {
605 .ifnum = 0,
606 .type = QUIRK_IGNORE_INTERFACE
607 },
608 {
609 .ifnum = 1,
610 .type = QUIRK_IGNORE_INTERFACE
611 },
612 {
613 .ifnum = 2,
614 .type = QUIRK_MIDI_FIXED_ENDPOINT,
86e07d34 615 .data = & (const struct snd_usb_midi_endpoint_info) {
d3ff42fd
CL
616 .out_cables = 0x000f,
617 .in_cables = 0x000f
618 }
619 },
620 {
621 .ifnum = -1
622 }
1da177e4
LT
623 }
624 }
625},
626{
d879f0cc 627 /* has ID 0x001c when not in "Advanced Driver" mode */
1da177e4 628 USB_DEVICE(0x0582, 0x001b),
86e07d34 629 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1da177e4
LT
630 .vendor_name = "Roland",
631 .product_name = "MMP-2",
d3ff42fd
CL
632 .ifnum = QUIRK_ANY_INTERFACE,
633 .type = QUIRK_COMPOSITE,
86e07d34 634 .data = (const struct snd_usb_audio_quirk[]) {
d3ff42fd
CL
635 {
636 .ifnum = 0,
637 .type = QUIRK_IGNORE_INTERFACE
638 },
639 {
640 .ifnum = 1,
641 .type = QUIRK_IGNORE_INTERFACE
642 },
643 {
644 .ifnum = 2,
645 .type = QUIRK_MIDI_FIXED_ENDPOINT,
86e07d34 646 .data = & (const struct snd_usb_midi_endpoint_info) {
d3ff42fd
CL
647 .out_cables = 0x0001,
648 .in_cables = 0x0001
649 }
650 },
651 {
652 .ifnum = -1
653 }
1da177e4
LT
654 }
655 }
656},
657{
d879f0cc 658 /* has ID 0x001e when not in "Advanced Driver" mode */
1da177e4 659 USB_DEVICE(0x0582, 0x001d),
86e07d34 660 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1da177e4
LT
661 .vendor_name = "Roland",
662 .product_name = "V-SYNTH",
663 .ifnum = 0,
664 .type = QUIRK_MIDI_FIXED_ENDPOINT,
86e07d34 665 .data = & (const struct snd_usb_midi_endpoint_info) {
1da177e4
LT
666 .out_cables = 0x0001,
667 .in_cables = 0x0001
668 }
669 }
670},
671{
d879f0cc 672 /* has ID 0x0024 when not in "Advanced Driver" mode */
1da177e4 673 USB_DEVICE(0x0582, 0x0023),
86e07d34 674 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1da177e4
LT
675 .vendor_name = "EDIROL",
676 .product_name = "UM-550",
677 .ifnum = 0,
678 .type = QUIRK_MIDI_FIXED_ENDPOINT,
86e07d34 679 .data = & (const struct snd_usb_midi_endpoint_info) {
1da177e4
LT
680 .out_cables = 0x003f,
681 .in_cables = 0x003f
682 }
683 }
684},
685{
686 /*
687 * This quirk is for the "Advanced Driver" mode. If off, the UA-20
688 * has ID 0x0026 and is standard compliant, but has only 16-bit PCM
689 * and no MIDI.
690 */
691 USB_DEVICE(0x0582, 0x0025),
86e07d34 692 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1da177e4
LT
693 .vendor_name = "EDIROL",
694 .product_name = "UA-20",
695 .ifnum = QUIRK_ANY_INTERFACE,
696 .type = QUIRK_COMPOSITE,
86e07d34 697 .data = (const struct snd_usb_audio_quirk[]) {
1f14a657
CL
698 {
699 .ifnum = 0,
700 .type = QUIRK_IGNORE_INTERFACE
701 },
1da177e4
LT
702 {
703 .ifnum = 1,
1f14a657
CL
704 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
705 .data = & (const struct audioformat) {
706 .format = SNDRV_PCM_FORMAT_S24_3LE,
707 .channels = 2,
708 .iface = 1,
709 .altsetting = 1,
710 .altset_idx = 1,
711 .attributes = 0,
712 .endpoint = 0x01,
713 .ep_attr = 0x01,
714 .rates = SNDRV_PCM_RATE_CONTINUOUS,
715 .rate_min = 44100,
716 .rate_max = 44100,
717 }
1da177e4
LT
718 },
719 {
720 .ifnum = 2,
1f14a657
CL
721 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
722 .data = & (const struct audioformat) {
723 .format = SNDRV_PCM_FORMAT_S24_3LE,
724 .channels = 2,
725 .iface = 2,
726 .altsetting = 1,
727 .altset_idx = 1,
728 .attributes = 0,
729 .endpoint = 0x82,
730 .ep_attr = 0x01,
731 .rates = SNDRV_PCM_RATE_CONTINUOUS,
732 .rate_min = 44100,
733 .rate_max = 44100,
734 }
1da177e4
LT
735 },
736 {
737 .ifnum = 3,
1f14a657
CL
738 .type = QUIRK_MIDI_FIXED_ENDPOINT,
739 .data = & (const struct snd_usb_midi_endpoint_info) {
740 .out_cables = 0x0001,
741 .in_cables = 0x0001
742 }
1da177e4
LT
743 },
744 {
745 .ifnum = -1
746 }
747 }
748 }
749},
750{
d879f0cc 751 /* has ID 0x0028 when not in "Advanced Driver" mode */
1da177e4 752 USB_DEVICE(0x0582, 0x0027),
86e07d34 753 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1da177e4
LT
754 .vendor_name = "EDIROL",
755 .product_name = "SD-20",
756 .ifnum = 0,
757 .type = QUIRK_MIDI_FIXED_ENDPOINT,
86e07d34 758 .data = & (const struct snd_usb_midi_endpoint_info) {
1da177e4
LT
759 .out_cables = 0x0003,
760 .in_cables = 0x0007
761 }
762 }
763},
764{
d879f0cc 765 /* has ID 0x002a when not in "Advanced Driver" mode */
1da177e4 766 USB_DEVICE(0x0582, 0x0029),
86e07d34 767 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1da177e4
LT
768 .vendor_name = "EDIROL",
769 .product_name = "SD-80",
770 .ifnum = 0,
771 .type = QUIRK_MIDI_FIXED_ENDPOINT,
86e07d34 772 .data = & (const struct snd_usb_midi_endpoint_info) {
1da177e4
LT
773 .out_cables = 0x000f,
774 .in_cables = 0x000f
775 }
776 }
777},
778{ /*
779 * This quirk is for the "Advanced" modes of the Edirol UA-700.
780 * If the sample format switch is not in an advanced setting, the
781 * UA-700 has ID 0x0582/0x002c and is standard compliant (no quirks),
782 * but offers only 16-bit PCM and no MIDI.
783 */
784 USB_DEVICE_VENDOR_SPEC(0x0582, 0x002b),
86e07d34 785 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1da177e4
LT
786 .vendor_name = "EDIROL",
787 .product_name = "UA-700",
788 .ifnum = QUIRK_ANY_INTERFACE,
789 .type = QUIRK_COMPOSITE,
86e07d34 790 .data = (const struct snd_usb_audio_quirk[]) {
1da177e4
LT
791 {
792 .ifnum = 1,
793 .type = QUIRK_AUDIO_EDIROL_UA700_UA25
794 },
795 {
796 .ifnum = 2,
797 .type = QUIRK_AUDIO_EDIROL_UA700_UA25
798 },
799 {
800 .ifnum = 3,
801 .type = QUIRK_AUDIO_EDIROL_UA700_UA25
802 },
803 {
804 .ifnum = -1
805 }
806 }
807 }
808},
809{
d879f0cc 810 /* has ID 0x002e when not in "Advanced Driver" mode */
1da177e4 811 USB_DEVICE(0x0582, 0x002d),
86e07d34 812 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1da177e4
LT
813 .vendor_name = "Roland",
814 .product_name = "XV-2020",
815 .ifnum = 0,
816 .type = QUIRK_MIDI_FIXED_ENDPOINT,
86e07d34 817 .data = & (const struct snd_usb_midi_endpoint_info) {
1da177e4
LT
818 .out_cables = 0x0001,
819 .in_cables = 0x0001
820 }
821 }
822},
823{
d879f0cc 824 /* has ID 0x0030 when not in "Advanced Driver" mode */
1da177e4 825 USB_DEVICE(0x0582, 0x002f),
86e07d34 826 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1da177e4
LT
827 .vendor_name = "Roland",
828 .product_name = "VariOS",
829 .ifnum = 0,
830 .type = QUIRK_MIDI_FIXED_ENDPOINT,
86e07d34 831 .data = & (const struct snd_usb_midi_endpoint_info) {
1da177e4
LT
832 .out_cables = 0x0007,
833 .in_cables = 0x0007
834 }
835 }
836},
837{
d879f0cc 838 /* has ID 0x0034 when not in "Advanced Driver" mode */
1da177e4 839 USB_DEVICE(0x0582, 0x0033),
86e07d34 840 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1da177e4
LT
841 .vendor_name = "EDIROL",
842 .product_name = "PCR",
843 .ifnum = 0,
844 .type = QUIRK_MIDI_FIXED_ENDPOINT,
86e07d34 845 .data = & (const struct snd_usb_midi_endpoint_info) {
1da177e4
LT
846 .out_cables = 0x0003,
847 .in_cables = 0x0007
848 }
849 }
850},
d879f0cc 851 /* TODO: add Roland M-1000 support */
1da177e4 852{
d879f0cc
CL
853 /*
854 * Has ID 0x0038 when not in "Advanced Driver" mode;
855 * later revisions use IDs 0x0054 and 0x00a2.
856 */
1da177e4 857 USB_DEVICE(0x0582, 0x0037),
86e07d34 858 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1da177e4
LT
859 .vendor_name = "Roland",
860 .product_name = "Digital Piano",
861 .ifnum = 0,
862 .type = QUIRK_MIDI_FIXED_ENDPOINT,
86e07d34 863 .data = & (const struct snd_usb_midi_endpoint_info) {
1da177e4
LT
864 .out_cables = 0x0001,
865 .in_cables = 0x0001
866 }
867 }
868},
869{
5af4c833
CL
870 /*
871 * This quirk is for the "Advanced Driver" mode. If off, the GS-10
872 * has ID 0x003c and is standard compliant, but has only 16-bit PCM
873 * and no MIDI.
874 */
1da177e4 875 USB_DEVICE_VENDOR_SPEC(0x0582, 0x003b),
86e07d34 876 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1da177e4
LT
877 .vendor_name = "BOSS",
878 .product_name = "GS-10",
5af4c833
CL
879 .ifnum = QUIRK_ANY_INTERFACE,
880 .type = QUIRK_COMPOSITE,
86e07d34 881 .data = & (const struct snd_usb_audio_quirk[]) {
5af4c833
CL
882 {
883 .ifnum = 1,
884 .type = QUIRK_AUDIO_STANDARD_INTERFACE
885 },
886 {
887 .ifnum = 2,
888 .type = QUIRK_AUDIO_STANDARD_INTERFACE
889 },
890 {
891 .ifnum = 3,
892 .type = QUIRK_MIDI_STANDARD_INTERFACE
893 },
894 {
895 .ifnum = -1
896 }
1da177e4
LT
897 }
898 }
899},
900{
d879f0cc 901 /* has ID 0x0041 when not in "Advanced Driver" mode */
1da177e4 902 USB_DEVICE(0x0582, 0x0040),
86e07d34 903 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1da177e4
LT
904 .vendor_name = "Roland",
905 .product_name = "GI-20",
906 .ifnum = 0,
907 .type = QUIRK_MIDI_FIXED_ENDPOINT,
86e07d34 908 .data = & (const struct snd_usb_midi_endpoint_info) {
1da177e4
LT
909 .out_cables = 0x0001,
910 .in_cables = 0x0001
911 }
912 }
913},
914{
d879f0cc 915 /* has ID 0x0043 when not in "Advanced Driver" mode */
1da177e4 916 USB_DEVICE(0x0582, 0x0042),
86e07d34 917 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1da177e4
LT
918 .vendor_name = "Roland",
919 .product_name = "RS-70",
920 .ifnum = 0,
921 .type = QUIRK_MIDI_FIXED_ENDPOINT,
86e07d34 922 .data = & (const struct snd_usb_midi_endpoint_info) {
1da177e4
LT
923 .out_cables = 0x0001,
924 .in_cables = 0x0001
925 }
926 }
927},
928{
929 USB_DEVICE(0x0582, 0x0044),
86e07d34 930 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1da177e4
LT
931 .vendor_name = "Roland",
932 .product_name = "UA-1000",
933 .ifnum = QUIRK_ANY_INTERFACE,
934 .type = QUIRK_COMPOSITE,
86e07d34 935 .data = (const struct snd_usb_audio_quirk[]) {
1da177e4
LT
936 {
937 .ifnum = 1,
938 .type = QUIRK_AUDIO_EDIROL_UA1000
939 },
940 {
941 .ifnum = 2,
942 .type = QUIRK_AUDIO_EDIROL_UA1000
943 },
944 {
945 .ifnum = 3,
946 .type = QUIRK_MIDI_FIXED_ENDPOINT,
86e07d34 947 .data = & (const struct snd_usb_midi_endpoint_info) {
1da177e4
LT
948 .out_cables = 0x0003,
949 .in_cables = 0x0003
950 }
951 },
952 {
953 .ifnum = -1
954 }
955 }
956 }
957},
958{
d879f0cc 959 /* has ID 0x004a when not in "Advanced Driver" mode */
1da177e4 960 USB_DEVICE(0x0582, 0x0048),
86e07d34 961 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1da177e4
LT
962 .vendor_name = "EDIROL",
963 .product_name = "UR-80",
964 .ifnum = 0,
965 .type = QUIRK_MIDI_FIXED_ENDPOINT,
86e07d34 966 .data = & (const struct snd_usb_midi_endpoint_info) {
1da177e4
LT
967 .out_cables = 0x0003,
968 .in_cables = 0x0007
969 }
970 }
971},
d879f0cc 972 /* TODO: add Edirol M-100FX support */
f38cc317
CL
973{
974 /* has ID 0x004e when not in "Advanced Driver" mode */
975 USB_DEVICE(0x0582, 0x004c),
976 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
977 .vendor_name = "EDIROL",
978 .product_name = "PCR-A",
979 .ifnum = QUIRK_ANY_INTERFACE,
980 .type = QUIRK_COMPOSITE,
981 .data = (const struct snd_usb_audio_quirk[]) {
982 {
983 .ifnum = 1,
984 .type = QUIRK_AUDIO_STANDARD_INTERFACE
985 },
986 {
987 .ifnum = 2,
988 .type = QUIRK_AUDIO_STANDARD_INTERFACE
989 },
990 {
991 .ifnum = -1
992 }
993 }
994 }
995},
1da177e4 996{
d879f0cc 997 /* has ID 0x004f when not in "Advanced Driver" mode */
1da177e4 998 USB_DEVICE(0x0582, 0x004d),
86e07d34 999 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1da177e4
LT
1000 .vendor_name = "EDIROL",
1001 .product_name = "PCR-A",
1002 .ifnum = 0,
1003 .type = QUIRK_MIDI_FIXED_ENDPOINT,
86e07d34 1004 .data = & (const struct snd_usb_midi_endpoint_info) {
1da177e4
LT
1005 .out_cables = 0x0003,
1006 .in_cables = 0x0007
1007 }
1008 }
1009},
1010{
1011 /*
1012 * This quirk is for the "Advanced Driver" mode. If off, the UA-3FX
1013 * is standard compliant, but has only 16-bit PCM.
1014 */
1015 USB_DEVICE(0x0582, 0x0050),
86e07d34 1016 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1da177e4
LT
1017 .vendor_name = "EDIROL",
1018 .product_name = "UA-3FX",
1019 .ifnum = QUIRK_ANY_INTERFACE,
1020 .type = QUIRK_COMPOSITE,
86e07d34 1021 .data = (const struct snd_usb_audio_quirk[]) {
1da177e4
LT
1022 {
1023 .ifnum = 1,
1024 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1025 },
1026 {
1027 .ifnum = 2,
1028 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1029 },
1030 {
1031 .ifnum = -1
1032 }
1033 }
1034 }
1035},
1036{
1037 USB_DEVICE(0x0582, 0x0052),
86e07d34 1038 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1da177e4
LT
1039 .vendor_name = "EDIROL",
1040 .product_name = "UM-1SX",
1041 .ifnum = 0,
1042 .type = QUIRK_MIDI_STANDARD_INTERFACE
1043 }
1044},
d879f0cc 1045 /* TODO: add Roland EXR support */
1da177e4 1046{
d879f0cc 1047 /* has ID 0x0067 when not in "Advanced Driver" mode */
1da177e4 1048 USB_DEVICE(0x0582, 0x0065),
86e07d34 1049 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1da177e4
LT
1050 .vendor_name = "EDIROL",
1051 .product_name = "PCR-1",
1052 .ifnum = 0,
1053 .type = QUIRK_MIDI_FIXED_ENDPOINT,
86e07d34 1054 .data = & (const struct snd_usb_midi_endpoint_info) {
1da177e4
LT
1055 .out_cables = 0x0001,
1056 .in_cables = 0x0003
1057 }
1058 }
1059},
1060{
d879f0cc 1061 /* has ID 0x006b when not in "Advanced Driver" mode */
1da177e4 1062 USB_DEVICE_VENDOR_SPEC(0x0582, 0x006a),
86e07d34 1063 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1da177e4
LT
1064 .vendor_name = "Roland",
1065 .product_name = "SP-606",
1066 .ifnum = 3,
1067 .type = QUIRK_MIDI_FIXED_ENDPOINT,
86e07d34 1068 .data = & (const struct snd_usb_midi_endpoint_info) {
1da177e4
LT
1069 .out_cables = 0x0001,
1070 .in_cables = 0x0001
1071 }
1072 }
1073},
1074{
d879f0cc 1075 /* has ID 0x006e when not in "Advanced Driver" mode */
1da177e4 1076 USB_DEVICE(0x0582, 0x006d),
86e07d34 1077 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1da177e4
LT
1078 .vendor_name = "Roland",
1079 .product_name = "FANTOM-X",
1080 .ifnum = 0,
1081 .type = QUIRK_MIDI_FIXED_ENDPOINT,
86e07d34 1082 .data = & (const struct snd_usb_midi_endpoint_info) {
1da177e4
LT
1083 .out_cables = 0x0001,
1084 .in_cables = 0x0001
1085 }
1086 }
1087},
1088{ /*
1089 * This quirk is for the "Advanced" modes of the Edirol UA-25.
1090 * If the switch is not in an advanced setting, the UA-25 has
1091 * ID 0x0582/0x0073 and is standard compliant (no quirks), but
1092 * offers only 16-bit PCM at 44.1 kHz and no MIDI.
1093 */
1094 USB_DEVICE_VENDOR_SPEC(0x0582, 0x0074),
86e07d34 1095 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1da177e4
LT
1096 .vendor_name = "EDIROL",
1097 .product_name = "UA-25",
1098 .ifnum = QUIRK_ANY_INTERFACE,
1099 .type = QUIRK_COMPOSITE,
86e07d34 1100 .data = (const struct snd_usb_audio_quirk[]) {
1da177e4
LT
1101 {
1102 .ifnum = 0,
1103 .type = QUIRK_AUDIO_EDIROL_UA700_UA25
1104 },
1105 {
1106 .ifnum = 1,
1107 .type = QUIRK_AUDIO_EDIROL_UA700_UA25
1108 },
1109 {
1110 .ifnum = 2,
1111 .type = QUIRK_AUDIO_EDIROL_UA700_UA25
1112 },
1113 {
1114 .ifnum = -1
1115 }
1116 }
1117 }
1118},
1119{
d879f0cc 1120 /* has ID 0x0076 when not in "Advanced Driver" mode */
1da177e4 1121 USB_DEVICE(0x0582, 0x0075),
86e07d34 1122 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1da177e4
LT
1123 .vendor_name = "BOSS",
1124 .product_name = "DR-880",
1125 .ifnum = 0,
1126 .type = QUIRK_MIDI_FIXED_ENDPOINT,
86e07d34 1127 .data = & (const struct snd_usb_midi_endpoint_info) {
1da177e4
LT
1128 .out_cables = 0x0001,
1129 .in_cables = 0x0001
1130 }
1131 }
1132},
5a2a68f5 1133{
d879f0cc 1134 /* has ID 0x007b when not in "Advanced Driver" mode */
5a2a68f5 1135 USB_DEVICE_VENDOR_SPEC(0x0582, 0x007a),
86e07d34 1136 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
5a2a68f5 1137 .vendor_name = "Roland",
d879f0cc 1138 /* "RD" or "RD-700SX"? */
5a2a68f5
CL
1139 .ifnum = 0,
1140 .type = QUIRK_MIDI_FIXED_ENDPOINT,
86e07d34 1141 .data = & (const struct snd_usb_midi_endpoint_info) {
5a2a68f5
CL
1142 .out_cables = 0x0003,
1143 .in_cables = 0x0003
1144 }
1145 }
1146},
d0b0fac1
BF
1147/* Roland UA-101 in High-Speed Mode only */
1148{
1149 USB_DEVICE(0x0582, 0x007d),
1150 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1151 .vendor_name = "Roland",
1152 .product_name = "UA-101",
1153 .ifnum = QUIRK_ANY_INTERFACE,
1154 .type = QUIRK_COMPOSITE,
1155 .data = (const struct snd_usb_audio_quirk[]) {
1156 {
1157 .ifnum = 0,
1158 .type = QUIRK_AUDIO_EDIROL_UA101
1159 },
1160 {
1161 .ifnum = 1,
1162 .type = QUIRK_AUDIO_EDIROL_UA101
1163 },
1164 {
1165 .ifnum = 2,
1166 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1167 .data = & (const struct snd_usb_midi_endpoint_info) {
1168 .out_cables = 0x0001,
1169 .in_cables = 0x0001
1170 }
1171 },
1172 {
1173 .ifnum = -1
1174 }
1175 }
1176 }
1177},
cdca881d
CL
1178{
1179 /* has ID 0x0081 when not in "Advanced Driver" mode */
1180 USB_DEVICE(0x0582, 0x0080),
1181 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1182 .vendor_name = "Roland",
1183 .product_name = "G-70",
1184 .ifnum = 0,
1185 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1186 .data = & (const struct snd_usb_midi_endpoint_info) {
05422575
CL
1187 .out_cables = 0x0001,
1188 .in_cables = 0x0001
cdca881d
CL
1189 }
1190 }
1191},
7c79b768
CL
1192 /* TODO: add Roland V-SYNTH XT support */
1193 /* TODO: add BOSS GT-PRO support */
415b09e4
CL
1194{
1195 /* has ID 0x008c when not in "Advanced Driver" mode */
1196 USB_DEVICE(0x0582, 0x008b),
1197 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1198 .vendor_name = "EDIROL",
1199 .product_name = "PC-50",
1200 .ifnum = 0,
1201 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1202 .data = & (const struct snd_usb_midi_endpoint_info) {
1203 .out_cables = 0x0001,
1204 .in_cables = 0x0001
1205 }
1206 }
1207},
7c79b768
CL
1208 /* TODO: add Edirol PC-80 support */
1209 /* TODO: add Edirol UA-1EX support */
1210{
1211 USB_DEVICE(0x0582, 0x009a),
1212 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1213 .vendor_name = "EDIROL",
1214 .product_name = "UM-3EX",
1215 .ifnum = 0,
1216 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1217 .data = & (const struct snd_usb_midi_endpoint_info) {
1218 .out_cables = 0x000f,
1219 .in_cables = 0x000f
1220 }
1221 }
1222},
1223 /* TODO: add Edirol MD-P1 support */
1da177e4 1224
a25f175c
CL
1225/* Guillemot devices */
1226{
1227 /*
1228 * This is for the "Windows Edition" where the external MIDI ports are
1229 * the only MIDI ports; the control data is reported through HID
1230 * interfaces. The "Macintosh Edition" has ID 0xd002 and uses standard
1231 * compliant USB MIDI ports for external MIDI and controls.
1232 */
1233 USB_DEVICE_VENDOR_SPEC(0x06f8, 0xb000),
86e07d34 1234 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
a25f175c
CL
1235 .vendor_name = "Hercules",
1236 .product_name = "DJ Console (WE)",
1237 .ifnum = 4,
1238 .type = QUIRK_MIDI_FIXED_ENDPOINT,
86e07d34 1239 .data = & (const struct snd_usb_midi_endpoint_info) {
a25f175c
CL
1240 .out_cables = 0x0001,
1241 .in_cables = 0x0001
1242 }
1243 }
1244},
1245
1da177e4
LT
1246/* Midiman/M-Audio devices */
1247{
1248 USB_DEVICE_VENDOR_SPEC(0x0763, 0x1002),
86e07d34 1249 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1da177e4
LT
1250 .vendor_name = "M-Audio",
1251 .product_name = "MidiSport 2x2",
1252 .ifnum = QUIRK_ANY_INTERFACE,
1253 .type = QUIRK_MIDI_MIDIMAN,
86e07d34 1254 .data = & (const struct snd_usb_midi_endpoint_info) {
1da177e4
LT
1255 .out_cables = 0x0003,
1256 .in_cables = 0x0003
1257 }
1258 }
1259},
1260{
1261 USB_DEVICE_VENDOR_SPEC(0x0763, 0x1011),
86e07d34 1262 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1da177e4
LT
1263 .vendor_name = "M-Audio",
1264 .product_name = "MidiSport 1x1",
1265 .ifnum = QUIRK_ANY_INTERFACE,
1266 .type = QUIRK_MIDI_MIDIMAN,
86e07d34 1267 .data = & (const struct snd_usb_midi_endpoint_info) {
1da177e4
LT
1268 .out_cables = 0x0001,
1269 .in_cables = 0x0001
1270 }
1271 }
1272},
1273{
1274 USB_DEVICE_VENDOR_SPEC(0x0763, 0x1015),
86e07d34 1275 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1da177e4
LT
1276 .vendor_name = "M-Audio",
1277 .product_name = "Keystation",
1278 .ifnum = QUIRK_ANY_INTERFACE,
1279 .type = QUIRK_MIDI_MIDIMAN,
86e07d34 1280 .data = & (const struct snd_usb_midi_endpoint_info) {
1da177e4
LT
1281 .out_cables = 0x0001,
1282 .in_cables = 0x0001
1283 }
1284 }
1285},
1286{
1287 USB_DEVICE_VENDOR_SPEC(0x0763, 0x1021),
86e07d34 1288 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1da177e4
LT
1289 .vendor_name = "M-Audio",
1290 .product_name = "MidiSport 4x4",
1291 .ifnum = QUIRK_ANY_INTERFACE,
1292 .type = QUIRK_MIDI_MIDIMAN,
86e07d34 1293 .data = & (const struct snd_usb_midi_endpoint_info) {
1da177e4
LT
1294 .out_cables = 0x000f,
1295 .in_cables = 0x000f
1296 }
1297 }
1298},
1299{
1300 /*
1301 * For hardware revision 1.05; in the later revisions (1.10 and
1302 * 1.21), 0x1031 is the ID for the device without firmware.
1303 * Thanks to Olaf Giesbrecht <Olaf_Giesbrecht@yahoo.de>
1304 */
1305 USB_DEVICE_VER(0x0763, 0x1031, 0x0100, 0x0109),
86e07d34 1306 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1da177e4
LT
1307 .vendor_name = "M-Audio",
1308 .product_name = "MidiSport 8x8",
1309 .ifnum = QUIRK_ANY_INTERFACE,
1310 .type = QUIRK_MIDI_MIDIMAN,
86e07d34 1311 .data = & (const struct snd_usb_midi_endpoint_info) {
1da177e4
LT
1312 .out_cables = 0x01ff,
1313 .in_cables = 0x01ff
1314 }
1315 }
1316},
1317{
1318 USB_DEVICE_VENDOR_SPEC(0x0763, 0x1033),
86e07d34 1319 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1da177e4
LT
1320 .vendor_name = "M-Audio",
1321 .product_name = "MidiSport 8x8",
1322 .ifnum = QUIRK_ANY_INTERFACE,
1323 .type = QUIRK_MIDI_MIDIMAN,
86e07d34 1324 .data = & (const struct snd_usb_midi_endpoint_info) {
1da177e4
LT
1325 .out_cables = 0x01ff,
1326 .in_cables = 0x01ff
1327 }
1328 }
1329},
1330{
1331 USB_DEVICE_VENDOR_SPEC(0x0763, 0x1041),
86e07d34 1332 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1da177e4
LT
1333 .vendor_name = "M-Audio",
1334 .product_name = "MidiSport 2x4",
1335 .ifnum = QUIRK_ANY_INTERFACE,
1336 .type = QUIRK_MIDI_MIDIMAN,
86e07d34 1337 .data = & (const struct snd_usb_midi_endpoint_info) {
1da177e4
LT
1338 .out_cables = 0x000f,
1339 .in_cables = 0x0003
1340 }
1341 }
1342},
1343{
1344 USB_DEVICE_VENDOR_SPEC(0x0763, 0x2001),
86e07d34 1345 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1da177e4
LT
1346 .vendor_name = "M-Audio",
1347 .product_name = "Quattro",
1348 .ifnum = QUIRK_ANY_INTERFACE,
1349 .type = QUIRK_COMPOSITE,
86e07d34 1350 .data = & (const struct snd_usb_audio_quirk[]) {
1da177e4
LT
1351 /*
1352 * Interfaces 0-2 are "Windows-compatible", 16-bit only,
1353 * and share endpoints with the other interfaces.
1354 * Ignore them. The other interfaces can do 24 bits,
1355 * but captured samples are big-endian (see usbaudio.c).
1356 */
1357 {
1358 .ifnum = 0,
1359 .type = QUIRK_IGNORE_INTERFACE
1360 },
1361 {
1362 .ifnum = 1,
1363 .type = QUIRK_IGNORE_INTERFACE
1364 },
1365 {
1366 .ifnum = 2,
1367 .type = QUIRK_IGNORE_INTERFACE
1368 },
1369 {
1370 .ifnum = 3,
1371 .type = QUIRK_IGNORE_INTERFACE
1372 },
1373 {
1374 .ifnum = 4,
1375 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1376 },
1377 {
1378 .ifnum = 5,
1379 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1380 },
1381 {
1382 .ifnum = 6,
1383 .type = QUIRK_IGNORE_INTERFACE
1384 },
1385 {
1386 .ifnum = 7,
1387 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1388 },
1389 {
1390 .ifnum = 8,
1391 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1392 },
1393 {
1394 .ifnum = 9,
1395 .type = QUIRK_MIDI_MIDIMAN,
86e07d34 1396 .data = & (const struct snd_usb_midi_endpoint_info) {
1da177e4
LT
1397 .out_cables = 0x0001,
1398 .in_cables = 0x0001
1399 }
1400 },
1401 {
1402 .ifnum = -1
1403 }
1404 }
1405 }
1406},
1407{
1408 USB_DEVICE_VENDOR_SPEC(0x0763, 0x2003),
86e07d34 1409 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1da177e4
LT
1410 .vendor_name = "M-Audio",
1411 .product_name = "AudioPhile",
1412 .ifnum = 6,
1413 .type = QUIRK_MIDI_MIDIMAN,
86e07d34 1414 .data = & (const struct snd_usb_midi_endpoint_info) {
1da177e4
LT
1415 .out_cables = 0x0001,
1416 .in_cables = 0x0001
1417 }
1418 }
1419},
1420{
1421 USB_DEVICE_VENDOR_SPEC(0x0763, 0x2008),
86e07d34 1422 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1da177e4
LT
1423 .vendor_name = "M-Audio",
1424 .product_name = "Ozone",
1425 .ifnum = 3,
1426 .type = QUIRK_MIDI_MIDIMAN,
86e07d34 1427 .data = & (const struct snd_usb_midi_endpoint_info) {
1da177e4
LT
1428 .out_cables = 0x0001,
1429 .in_cables = 0x0001
1430 }
1431 }
1432},
1433{
1434 USB_DEVICE_VENDOR_SPEC(0x0763, 0x200d),
86e07d34 1435 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1da177e4
LT
1436 .vendor_name = "M-Audio",
1437 .product_name = "OmniStudio",
1438 .ifnum = QUIRK_ANY_INTERFACE,
1439 .type = QUIRK_COMPOSITE,
86e07d34 1440 .data = & (const struct snd_usb_audio_quirk[]) {
1da177e4
LT
1441 {
1442 .ifnum = 0,
1443 .type = QUIRK_IGNORE_INTERFACE
1444 },
1445 {
1446 .ifnum = 1,
1447 .type = QUIRK_IGNORE_INTERFACE
1448 },
1449 {
1450 .ifnum = 2,
1451 .type = QUIRK_IGNORE_INTERFACE
1452 },
1453 {
1454 .ifnum = 3,
1455 .type = QUIRK_IGNORE_INTERFACE
1456 },
1457 {
1458 .ifnum = 4,
1459 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1460 },
1461 {
1462 .ifnum = 5,
1463 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1464 },
1465 {
1466 .ifnum = 6,
1467 .type = QUIRK_IGNORE_INTERFACE
1468 },
1469 {
1470 .ifnum = 7,
1471 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1472 },
1473 {
1474 .ifnum = 8,
1475 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1476 },
1477 {
1478 .ifnum = 9,
1479 .type = QUIRK_MIDI_MIDIMAN,
86e07d34 1480 .data = & (const struct snd_usb_midi_endpoint_info) {
1da177e4
LT
1481 .out_cables = 0x0001,
1482 .in_cables = 0x0001
1483 }
1484 },
1485 {
1486 .ifnum = -1
1487 }
1488 }
1489 }
1490},
1491
0243ef71 1492/* Casio devices */
9808dc96
CL
1493{
1494 USB_DEVICE(0x07cf, 0x6801),
1495 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1496 .vendor_name = "Casio",
1497 .product_name = "PL-40R",
1498 .ifnum = 0,
1499 .type = QUIRK_MIDI_YAMAHA
1500 }
1501},
0243ef71 1502{
318d27f8 1503 /* this ID is used by several devices without a product ID */
0243ef71
CL
1504 USB_DEVICE(0x07cf, 0x6802),
1505 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1506 .vendor_name = "Casio",
318d27f8 1507 .product_name = "Keyboard",
0243ef71
CL
1508 .ifnum = 0,
1509 .type = QUIRK_MIDI_YAMAHA
1510 }
1511},
1512
1da177e4
LT
1513/* Mark of the Unicorn devices */
1514{
1515 /* thanks to Robert A. Lerche <ral 'at' msbit.com> */
bbd4615c
CL
1516 .match_flags = USB_DEVICE_ID_MATCH_VENDOR |
1517 USB_DEVICE_ID_MATCH_PRODUCT |
1518 USB_DEVICE_ID_MATCH_DEV_SUBCLASS,
1519 .idVendor = 0x07fd,
1520 .idProduct = 0x0001,
1521 .bDeviceSubClass = 2,
86e07d34 1522 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1da177e4
LT
1523 .vendor_name = "MOTU",
1524 .product_name = "Fastlane",
1525 .ifnum = QUIRK_ANY_INTERFACE,
1526 .type = QUIRK_COMPOSITE,
86e07d34 1527 .data = & (const struct snd_usb_audio_quirk[]) {
1da177e4
LT
1528 {
1529 .ifnum = 0,
6155aff8 1530 .type = QUIRK_MIDI_RAW
1da177e4
LT
1531 },
1532 {
1533 .ifnum = 1,
1534 .type = QUIRK_IGNORE_INTERFACE
1535 },
1536 {
1537 .ifnum = -1
1538 }
1539 }
1540 }
1541},
1542
1543{
1544 /* Creative Sound Blaster MP3+ */
1545 USB_DEVICE(0x041e, 0x3010),
86e07d34 1546 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1da177e4
LT
1547 .vendor_name = "Creative Labs",
1548 .product_name = "Sound Blaster MP3+",
1549 .ifnum = QUIRK_NO_INTERFACE
1550 }
1551
1552},
1553
1554/* Emagic devices */
1555{
1556 USB_DEVICE(0x086a, 0x0001),
86e07d34 1557 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1da177e4
LT
1558 .vendor_name = "Emagic",
1559 /* .product_name = "Unitor8", */
1560 .ifnum = 2,
1561 .type = QUIRK_MIDI_EMAGIC,
86e07d34 1562 .data = & (const struct snd_usb_midi_endpoint_info) {
1da177e4
LT
1563 .out_cables = 0x80ff,
1564 .in_cables = 0x80ff
1565 }
1566 }
1567},
1568{
1569 USB_DEVICE(0x086a, 0x0002),
86e07d34 1570 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1da177e4
LT
1571 .vendor_name = "Emagic",
1572 /* .product_name = "AMT8", */
1573 .ifnum = 2,
1574 .type = QUIRK_MIDI_EMAGIC,
86e07d34 1575 .data = & (const struct snd_usb_midi_endpoint_info) {
1da177e4
LT
1576 .out_cables = 0x80ff,
1577 .in_cables = 0x80ff
1578 }
1579 }
1580},
1581{
1582 USB_DEVICE(0x086a, 0x0003),
86e07d34 1583 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1da177e4
LT
1584 .vendor_name = "Emagic",
1585 /* .product_name = "MT4", */
1586 .ifnum = 2,
1587 .type = QUIRK_MIDI_EMAGIC,
86e07d34 1588 .data = & (const struct snd_usb_midi_endpoint_info) {
1da177e4
LT
1589 .out_cables = 0x800f,
1590 .in_cables = 0x8003
1591 }
1592 }
1593},
1594
31ab9523
CL
1595/* TerraTec devices */
1596{
1597 USB_DEVICE_VENDOR_SPEC(0x0ccd, 0x0012),
86e07d34 1598 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
31ab9523
CL
1599 .vendor_name = "TerraTec",
1600 .product_name = "PHASE 26",
1601 .ifnum = 3,
1602 .type = QUIRK_MIDI_STANDARD_INTERFACE
1603 }
1604},
1da177e4
LT
1605{
1606 USB_DEVICE_VENDOR_SPEC(0x0ccd, 0x0013),
86e07d34 1607 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
bc56eff1
CL
1608 .vendor_name = "TerraTec",
1609 .product_name = "PHASE 26",
1610 .ifnum = 3,
1611 .type = QUIRK_MIDI_STANDARD_INTERFACE
1612 }
1613},
1614{
1615 USB_DEVICE_VENDOR_SPEC(0x0ccd, 0x0014),
1616 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
31ab9523 1617 .vendor_name = "TerraTec",
1da177e4
LT
1618 .product_name = "PHASE 26",
1619 .ifnum = 3,
1620 .type = QUIRK_MIDI_STANDARD_INTERFACE
1621 }
1622},
b2b8229d
CL
1623{
1624 USB_DEVICE(0x0ccd, 0x0035),
1625 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1626 .vendor_name = "Miditech",
1627 .product_name = "Play'n Roll",
1628 .ifnum = 0,
1629 .type = QUIRK_MIDI_CME
1630 }
1631},
1da177e4
LT
1632
1633/* Novation EMS devices */
1634{
1635 USB_DEVICE_VENDOR_SPEC(0x1235, 0x0001),
86e07d34 1636 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1da177e4
LT
1637 .vendor_name = "Novation",
1638 .product_name = "ReMOTE Audio/XStation",
1639 .ifnum = 4,
1640 .type = QUIRK_MIDI_NOVATION
1641 }
1642},
1643{
1644 USB_DEVICE_VENDOR_SPEC(0x1235, 0x0002),
86e07d34 1645 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1da177e4
LT
1646 .vendor_name = "Novation",
1647 .product_name = "Speedio",
1648 .ifnum = 3,
1649 .type = QUIRK_MIDI_NOVATION
1650 }
1651},
1652{
1653 USB_DEVICE_VENDOR_SPEC(0x1235, 0x4661),
86e07d34 1654 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1da177e4
LT
1655 .vendor_name = "Novation",
1656 .product_name = "ReMOTE25",
1657 .ifnum = 0,
1658 .type = QUIRK_MIDI_NOVATION
1659 }
1660},
1661
cc7a59bd 1662/* Miditech devices */
f38275fe
CL
1663{
1664 USB_DEVICE(0x4752, 0x0011),
86e07d34 1665 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
f38275fe
CL
1666 .vendor_name = "Miditech",
1667 .product_name = "Midistart-2",
1668 .ifnum = 0,
cc7a59bd 1669 .type = QUIRK_MIDI_CME
f38275fe
CL
1670 }
1671},
cc7a59bd
CL
1672
1673/* Central Music devices */
f38275fe 1674{
cc7a59bd 1675 /* this ID used by both Miditech MidiStudio-2 and CME UF-x */
f38275fe 1676 USB_DEVICE(0x7104, 0x2202),
86e07d34 1677 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
f38275fe 1678 .ifnum = 0,
cc7a59bd 1679 .type = QUIRK_MIDI_CME
f38275fe
CL
1680 }
1681},
1682
1da177e4
LT
1683{
1684 /*
1685 * Some USB MIDI devices don't have an audio control interface,
1686 * so we have to grab MIDI streaming interfaces here.
1687 */
1688 .match_flags = USB_DEVICE_ID_MATCH_INT_CLASS |
1689 USB_DEVICE_ID_MATCH_INT_SUBCLASS,
1690 .bInterfaceClass = USB_CLASS_AUDIO,
1691 .bInterfaceSubClass = USB_SUBCLASS_MIDI_STREAMING,
86e07d34 1692 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1da177e4
LT
1693 .ifnum = QUIRK_ANY_INTERFACE,
1694 .type = QUIRK_MIDI_STANDARD_INTERFACE
1695 }
1696},
1697
1698#undef USB_DEVICE_VENDOR_SPEC
This page took 0.325002 seconds and 5 git commands to generate.