1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 #define USB_DEVICE_VENDOR_SPEC(vend, prod) \
21 .match_flags = USB_DEVICE_ID_MATCH_VENDOR | \
22 USB_DEVICE_ID_MATCH_PRODUCT | \
23 USB_DEVICE_ID_MATCH_INT_CLASS, \
24 .idVendor = vend, \
25 .idProduct = prod, \
26 .bInterfaceClass = USB_CLASS_VENDOR_SPEC
27
28
29 {
30 USB_DEVICE(0x03f0, 0x0269),
31 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
32 .vendor_name = "HP",
33 .product_name = "Thunderbolt Dock Audio Headset",
34 .profile_name = "HP-Thunderbolt-Dock-Audio-Headset",
35 .ifnum = QUIRK_NO_INTERFACE
36 }
37 },
38
39 {
40 USB_DEVICE(0x03f0, 0x0567),
41 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
42 .vendor_name = "HP",
43 .product_name = "Thunderbolt Dock Audio Module",
44 .profile_name = "HP-Thunderbolt-Dock-Audio-Module",
45 .ifnum = QUIRK_NO_INTERFACE
46 }
47 },
48
49 {
50 USB_DEVICE(0x0403, 0xb8d8),
51 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
52
53
54 .ifnum = 0,
55 .type = QUIRK_MIDI_FTDI
56 }
57 },
58
59 {
60
61 USB_DEVICE(0x041e, 0x0005),
62 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
63 .ifnum = 1,
64 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
65 .data = &(const struct audioformat) {
66 .formats = SNDRV_PCM_FMTBIT_S16_LE,
67 .channels = 2,
68 .iface = 1,
69 .altsetting = 1,
70 .altset_idx = 1,
71 .endpoint = 0x03,
72 .ep_attr = USB_ENDPOINT_XFER_ISOC,
73 .attributes = 0,
74 .rates = SNDRV_PCM_RATE_CONTINUOUS,
75 .rate_min = 48000,
76 .rate_max = 48000,
77 }
78 }
79 },
80
81
82 {
83 USB_DEVICE(0x041e, 0x3010),
84 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
85 .vendor_name = "Creative Labs",
86 .product_name = "Sound Blaster MP3+",
87 .ifnum = QUIRK_NO_INTERFACE
88 }
89 },
90
91 {
92 USB_DEVICE(0x041e, 0x3048),
93 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
94 .vendor_name = "Toshiba",
95 .product_name = "SB-0500",
96 .ifnum = QUIRK_NO_INTERFACE
97 }
98 },
99 {
100
101 .match_flags = USB_DEVICE_ID_MATCH_DEVICE,
102 .idVendor = 0x041e,
103 .idProduct = 0x3f02,
104 .bInterfaceClass = USB_CLASS_AUDIO,
105 },
106 {
107
108 .match_flags = USB_DEVICE_ID_MATCH_DEVICE,
109 .idVendor = 0x041e,
110 .idProduct = 0x3f04,
111 .bInterfaceClass = USB_CLASS_AUDIO,
112 },
113 {
114
115 .match_flags = USB_DEVICE_ID_MATCH_DEVICE,
116 .idVendor = 0x041e,
117 .idProduct = 0x3f0a,
118 .bInterfaceClass = USB_CLASS_AUDIO,
119 },
120 {
121
122 .match_flags = USB_DEVICE_ID_MATCH_DEVICE,
123 .idVendor = 0x041e,
124 .idProduct = 0x3f19,
125 .bInterfaceClass = USB_CLASS_AUDIO,
126 },
127
128
129
130
131
132
133 {
134 USB_DEVICE(0x0424, 0xb832),
135 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
136 .vendor_name = "Standard Microsystems Corp.",
137 .product_name = "HP Wireless Audio",
138 .ifnum = QUIRK_ANY_INTERFACE,
139 .type = QUIRK_COMPOSITE,
140 .data = (const struct snd_usb_audio_quirk[]) {
141
142 {
143 .ifnum = 0,
144 .type = QUIRK_IGNORE_INTERFACE,
145 },
146
147 {
148 .ifnum = 1,
149 .type = QUIRK_IGNORE_INTERFACE,
150 },
151
152 {
153 .ifnum = 2,
154 .type = QUIRK_IGNORE_INTERFACE,
155 },
156
157 {
158 .ifnum = -1,
159 }
160 }
161 }
162 },
163
164
165
166
167
168 {
169 .match_flags = USB_DEVICE_ID_MATCH_DEVICE |
170 USB_DEVICE_ID_MATCH_INT_CLASS |
171 USB_DEVICE_ID_MATCH_INT_SUBCLASS,
172 .idVendor = 0x046d,
173 .idProduct = 0x0850,
174 .bInterfaceClass = USB_CLASS_AUDIO,
175 .bInterfaceSubClass = USB_SUBCLASS_AUDIOCONTROL
176 },
177 {
178 .match_flags = USB_DEVICE_ID_MATCH_DEVICE |
179 USB_DEVICE_ID_MATCH_INT_CLASS |
180 USB_DEVICE_ID_MATCH_INT_SUBCLASS,
181 .idVendor = 0x046d,
182 .idProduct = 0x08ae,
183 .bInterfaceClass = USB_CLASS_AUDIO,
184 .bInterfaceSubClass = USB_SUBCLASS_AUDIOCONTROL
185 },
186 {
187 .match_flags = USB_DEVICE_ID_MATCH_DEVICE |
188 USB_DEVICE_ID_MATCH_INT_CLASS |
189 USB_DEVICE_ID_MATCH_INT_SUBCLASS,
190 .idVendor = 0x046d,
191 .idProduct = 0x08c6,
192 .bInterfaceClass = USB_CLASS_AUDIO,
193 .bInterfaceSubClass = USB_SUBCLASS_AUDIOCONTROL
194 },
195 {
196 .match_flags = USB_DEVICE_ID_MATCH_DEVICE |
197 USB_DEVICE_ID_MATCH_INT_CLASS |
198 USB_DEVICE_ID_MATCH_INT_SUBCLASS,
199 .idVendor = 0x046d,
200 .idProduct = 0x08f0,
201 .bInterfaceClass = USB_CLASS_AUDIO,
202 .bInterfaceSubClass = USB_SUBCLASS_AUDIOCONTROL
203 },
204 {
205 .match_flags = USB_DEVICE_ID_MATCH_DEVICE |
206 USB_DEVICE_ID_MATCH_INT_CLASS |
207 USB_DEVICE_ID_MATCH_INT_SUBCLASS,
208 .idVendor = 0x046d,
209 .idProduct = 0x08f5,
210 .bInterfaceClass = USB_CLASS_AUDIO,
211 .bInterfaceSubClass = USB_SUBCLASS_AUDIOCONTROL
212 },
213 {
214 .match_flags = USB_DEVICE_ID_MATCH_DEVICE |
215 USB_DEVICE_ID_MATCH_INT_CLASS |
216 USB_DEVICE_ID_MATCH_INT_SUBCLASS,
217 .idVendor = 0x046d,
218 .idProduct = 0x08f6,
219 .bInterfaceClass = USB_CLASS_AUDIO,
220 .bInterfaceSubClass = USB_SUBCLASS_AUDIOCONTROL
221 },
222 {
223 .match_flags = USB_DEVICE_ID_MATCH_DEVICE |
224 USB_DEVICE_ID_MATCH_INT_CLASS |
225 USB_DEVICE_ID_MATCH_INT_SUBCLASS,
226 .idVendor = 0x046d,
227 .idProduct = 0x0990,
228 .bInterfaceClass = USB_CLASS_AUDIO,
229 .bInterfaceSubClass = USB_SUBCLASS_AUDIOCONTROL,
230 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
231 .vendor_name = "Logitech, Inc.",
232 .product_name = "QuickCam Pro 9000",
233 .ifnum = QUIRK_NO_INTERFACE
234 }
235 },
236
237
238
239
240
241 #define YAMAHA_DEVICE(id, name) { \
242 USB_DEVICE(0x0499, id), \
243 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { \
244 .vendor_name = "Yamaha", \
245 .product_name = name, \
246 .ifnum = QUIRK_ANY_INTERFACE, \
247 .type = QUIRK_MIDI_YAMAHA \
248 } \
249 }
250 #define YAMAHA_INTERFACE(id, intf, name) { \
251 USB_DEVICE_VENDOR_SPEC(0x0499, id), \
252 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { \
253 .vendor_name = "Yamaha", \
254 .product_name = name, \
255 .ifnum = intf, \
256 .type = QUIRK_MIDI_YAMAHA \
257 } \
258 }
259 YAMAHA_DEVICE(0x1000, "UX256"),
260 YAMAHA_DEVICE(0x1001, "MU1000"),
261 YAMAHA_DEVICE(0x1002, "MU2000"),
262 YAMAHA_DEVICE(0x1003, "MU500"),
263 YAMAHA_INTERFACE(0x1004, 3, "UW500"),
264 YAMAHA_DEVICE(0x1005, "MOTIF6"),
265 YAMAHA_DEVICE(0x1006, "MOTIF7"),
266 YAMAHA_DEVICE(0x1007, "MOTIF8"),
267 YAMAHA_DEVICE(0x1008, "UX96"),
268 YAMAHA_DEVICE(0x1009, "UX16"),
269 YAMAHA_INTERFACE(0x100a, 3, "EOS BX"),
270 YAMAHA_DEVICE(0x100c, "UC-MX"),
271 YAMAHA_DEVICE(0x100d, "UC-KX"),
272 YAMAHA_DEVICE(0x100e, "S08"),
273 YAMAHA_DEVICE(0x100f, "CLP-150"),
274 YAMAHA_DEVICE(0x1010, "CLP-170"),
275 YAMAHA_DEVICE(0x1011, "P-250"),
276 YAMAHA_DEVICE(0x1012, "TYROS"),
277 YAMAHA_DEVICE(0x1013, "PF-500"),
278 YAMAHA_DEVICE(0x1014, "S90"),
279 YAMAHA_DEVICE(0x1015, "MOTIF-R"),
280 YAMAHA_DEVICE(0x1016, "MDP-5"),
281 YAMAHA_DEVICE(0x1017, "CVP-204"),
282 YAMAHA_DEVICE(0x1018, "CVP-206"),
283 YAMAHA_DEVICE(0x1019, "CVP-208"),
284 YAMAHA_DEVICE(0x101a, "CVP-210"),
285 YAMAHA_DEVICE(0x101b, "PSR-1100"),
286 YAMAHA_DEVICE(0x101c, "PSR-2100"),
287 YAMAHA_DEVICE(0x101d, "CLP-175"),
288 YAMAHA_DEVICE(0x101e, "PSR-K1"),
289 YAMAHA_DEVICE(0x101f, "EZ-J24"),
290 YAMAHA_DEVICE(0x1020, "EZ-250i"),
291 YAMAHA_DEVICE(0x1021, "MOTIF ES 6"),
292 YAMAHA_DEVICE(0x1022, "MOTIF ES 7"),
293 YAMAHA_DEVICE(0x1023, "MOTIF ES 8"),
294 YAMAHA_DEVICE(0x1024, "CVP-301"),
295 YAMAHA_DEVICE(0x1025, "CVP-303"),
296 YAMAHA_DEVICE(0x1026, "CVP-305"),
297 YAMAHA_DEVICE(0x1027, "CVP-307"),
298 YAMAHA_DEVICE(0x1028, "CVP-309"),
299 YAMAHA_DEVICE(0x1029, "CVP-309GP"),
300 YAMAHA_DEVICE(0x102a, "PSR-1500"),
301 YAMAHA_DEVICE(0x102b, "PSR-3000"),
302 YAMAHA_DEVICE(0x102e, "ELS-01/01C"),
303 YAMAHA_DEVICE(0x1030, "PSR-295/293"),
304 YAMAHA_DEVICE(0x1031, "DGX-205/203"),
305 YAMAHA_DEVICE(0x1032, "DGX-305"),
306 YAMAHA_DEVICE(0x1033, "DGX-505"),
307 YAMAHA_DEVICE(0x1034, NULL),
308 YAMAHA_DEVICE(0x1035, NULL),
309 YAMAHA_DEVICE(0x1036, NULL),
310 YAMAHA_DEVICE(0x1037, NULL),
311 YAMAHA_DEVICE(0x1038, NULL),
312 YAMAHA_DEVICE(0x1039, NULL),
313 YAMAHA_DEVICE(0x103a, NULL),
314 YAMAHA_DEVICE(0x103b, NULL),
315 YAMAHA_DEVICE(0x103c, NULL),
316 YAMAHA_DEVICE(0x103d, NULL),
317 YAMAHA_DEVICE(0x103e, NULL),
318 YAMAHA_DEVICE(0x103f, NULL),
319 YAMAHA_DEVICE(0x1040, NULL),
320 YAMAHA_DEVICE(0x1041, NULL),
321 YAMAHA_DEVICE(0x1042, NULL),
322 YAMAHA_DEVICE(0x1043, NULL),
323 YAMAHA_DEVICE(0x1044, NULL),
324 YAMAHA_DEVICE(0x1045, NULL),
325 YAMAHA_INTERFACE(0x104e, 0, NULL),
326 YAMAHA_DEVICE(0x104f, NULL),
327 YAMAHA_DEVICE(0x1050, NULL),
328 YAMAHA_DEVICE(0x1051, NULL),
329 YAMAHA_DEVICE(0x1052, NULL),
330 YAMAHA_INTERFACE(0x1053, 0, NULL),
331 YAMAHA_INTERFACE(0x1054, 0, NULL),
332 YAMAHA_DEVICE(0x1055, NULL),
333 YAMAHA_DEVICE(0x1056, NULL),
334 YAMAHA_DEVICE(0x1057, NULL),
335 YAMAHA_DEVICE(0x1058, NULL),
336 YAMAHA_DEVICE(0x1059, NULL),
337 YAMAHA_DEVICE(0x105a, NULL),
338 YAMAHA_DEVICE(0x105b, NULL),
339 YAMAHA_DEVICE(0x105c, NULL),
340 YAMAHA_DEVICE(0x105d, NULL),
341 {
342 USB_DEVICE(0x0499, 0x1503),
343 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
344
345
346 .ifnum = QUIRK_ANY_INTERFACE,
347 .type = QUIRK_COMPOSITE,
348 .data = (const struct snd_usb_audio_quirk[]) {
349 {
350 .ifnum = 1,
351 .type = QUIRK_AUDIO_STANDARD_INTERFACE
352 },
353 {
354 .ifnum = 2,
355 .type = QUIRK_AUDIO_STANDARD_INTERFACE
356 },
357 {
358 .ifnum = 3,
359 .type = QUIRK_MIDI_YAMAHA
360 },
361 {
362 .ifnum = -1
363 }
364 }
365 }
366 },
367 {
368 USB_DEVICE(0x0499, 0x1507),
369 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
370
371
372 .ifnum = QUIRK_ANY_INTERFACE,
373 .type = QUIRK_COMPOSITE,
374 .data = (const struct snd_usb_audio_quirk[]) {
375 {
376 .ifnum = 1,
377 .type = QUIRK_AUDIO_STANDARD_INTERFACE
378 },
379 {
380 .ifnum = 2,
381 .type = QUIRK_AUDIO_STANDARD_INTERFACE
382 },
383 {
384 .ifnum = 3,
385 .type = QUIRK_MIDI_YAMAHA
386 },
387 {
388 .ifnum = -1
389 }
390 }
391 }
392 },
393 {
394 USB_DEVICE(0x0499, 0x1509),
395 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
396
397
398 .ifnum = QUIRK_ANY_INTERFACE,
399 .type = QUIRK_COMPOSITE,
400 .data = (const struct snd_usb_audio_quirk[]) {
401 {
402 .ifnum = 1,
403 .type = QUIRK_AUDIO_STANDARD_INTERFACE
404 },
405 {
406 .ifnum = 2,
407 .type = QUIRK_AUDIO_STANDARD_INTERFACE
408 },
409 {
410 .ifnum = 3,
411 .type = QUIRK_MIDI_YAMAHA
412 },
413 {
414 .ifnum = 4,
415 .type = QUIRK_IGNORE_INTERFACE
416 },
417 {
418 .ifnum = -1
419 }
420 }
421 }
422 },
423 {
424 USB_DEVICE(0x0499, 0x150a),
425 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
426
427
428 .ifnum = QUIRK_ANY_INTERFACE,
429 .type = QUIRK_COMPOSITE,
430 .data = (const struct snd_usb_audio_quirk[]) {
431 {
432 .ifnum = 1,
433 .type = QUIRK_AUDIO_STANDARD_INTERFACE
434 },
435 {
436 .ifnum = 2,
437 .type = QUIRK_AUDIO_STANDARD_INTERFACE
438 },
439 {
440 .ifnum = 3,
441 .type = QUIRK_MIDI_YAMAHA
442 },
443 {
444 .ifnum = -1
445 }
446 }
447 }
448 },
449 {
450 USB_DEVICE(0x0499, 0x150c),
451 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
452
453
454 .ifnum = QUIRK_ANY_INTERFACE,
455 .type = QUIRK_COMPOSITE,
456 .data = (const struct snd_usb_audio_quirk[]) {
457 {
458 .ifnum = 1,
459 .type = QUIRK_AUDIO_STANDARD_INTERFACE
460 },
461 {
462 .ifnum = 2,
463 .type = QUIRK_AUDIO_STANDARD_INTERFACE
464 },
465 {
466 .ifnum = 3,
467 .type = QUIRK_MIDI_YAMAHA
468 },
469 {
470 .ifnum = -1
471 }
472 }
473 }
474 },
475 YAMAHA_DEVICE(0x2000, "DGP-7"),
476 YAMAHA_DEVICE(0x2001, "DGP-5"),
477 YAMAHA_DEVICE(0x2002, NULL),
478 YAMAHA_DEVICE(0x2003, NULL),
479 YAMAHA_DEVICE(0x5000, "CS1D"),
480 YAMAHA_DEVICE(0x5001, "DSP1D"),
481 YAMAHA_DEVICE(0x5002, "DME32"),
482 YAMAHA_DEVICE(0x5003, "DM2000"),
483 YAMAHA_DEVICE(0x5004, "02R96"),
484 YAMAHA_DEVICE(0x5005, "ACU16-C"),
485 YAMAHA_DEVICE(0x5006, "NHB32-C"),
486 YAMAHA_DEVICE(0x5007, "DM1000"),
487 YAMAHA_DEVICE(0x5008, "01V96"),
488 YAMAHA_DEVICE(0x5009, "SPX2000"),
489 YAMAHA_DEVICE(0x500a, "PM5D"),
490 YAMAHA_DEVICE(0x500b, "DME64N"),
491 YAMAHA_DEVICE(0x500c, "DME24N"),
492 YAMAHA_DEVICE(0x500d, NULL),
493 YAMAHA_DEVICE(0x500e, NULL),
494 YAMAHA_DEVICE(0x500f, NULL),
495 YAMAHA_DEVICE(0x7000, "DTX"),
496 YAMAHA_DEVICE(0x7010, "UB99"),
497 #undef YAMAHA_DEVICE
498 #undef YAMAHA_INTERFACE
499
500 {
501 .match_flags = USB_DEVICE_ID_MATCH_VENDOR |
502 USB_DEVICE_ID_MATCH_INT_CLASS,
503 .idVendor = 0x0499,
504 .bInterfaceClass = USB_CLASS_VENDOR_SPEC,
505 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
506 .ifnum = QUIRK_ANY_INTERFACE,
507 .type = QUIRK_AUTODETECT
508 }
509 },
510
511
512
513
514 {
515 USB_DEVICE(0x0582, 0x0000),
516 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
517 .vendor_name = "Roland",
518 .product_name = "UA-100",
519 .ifnum = QUIRK_ANY_INTERFACE,
520 .type = QUIRK_COMPOSITE,
521 .data = (const struct snd_usb_audio_quirk[]) {
522 {
523 .ifnum = 0,
524 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
525 .data = & (const struct audioformat) {
526 .formats = SNDRV_PCM_FMTBIT_S16_LE,
527 .channels = 4,
528 .iface = 0,
529 .altsetting = 1,
530 .altset_idx = 1,
531 .attributes = 0,
532 .endpoint = 0x01,
533 .ep_attr = 0x09,
534 .rates = SNDRV_PCM_RATE_CONTINUOUS,
535 .rate_min = 44100,
536 .rate_max = 44100,
537 }
538 },
539 {
540 .ifnum = 1,
541 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
542 .data = & (const struct audioformat) {
543 .formats = SNDRV_PCM_FMTBIT_S16_LE,
544 .channels = 2,
545 .iface = 1,
546 .altsetting = 1,
547 .altset_idx = 1,
548 .attributes = UAC_EP_CS_ATTR_FILL_MAX,
549 .endpoint = 0x81,
550 .ep_attr = 0x05,
551 .rates = SNDRV_PCM_RATE_CONTINUOUS,
552 .rate_min = 44100,
553 .rate_max = 44100,
554 }
555 },
556 {
557 .ifnum = 2,
558 .type = QUIRK_MIDI_FIXED_ENDPOINT,
559 .data = & (const struct snd_usb_midi_endpoint_info) {
560 .out_cables = 0x0007,
561 .in_cables = 0x0007
562 }
563 },
564 {
565 .ifnum = -1
566 }
567 }
568 }
569 },
570 {
571 USB_DEVICE(0x0582, 0x0002),
572 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
573 .vendor_name = "EDIROL",
574 .product_name = "UM-4",
575 .ifnum = QUIRK_ANY_INTERFACE,
576 .type = QUIRK_COMPOSITE,
577 .data = (const struct snd_usb_audio_quirk[]) {
578 {
579 .ifnum = 0,
580 .type = QUIRK_IGNORE_INTERFACE
581 },
582 {
583 .ifnum = 1,
584 .type = QUIRK_IGNORE_INTERFACE
585 },
586 {
587 .ifnum = 2,
588 .type = QUIRK_MIDI_FIXED_ENDPOINT,
589 .data = & (const struct snd_usb_midi_endpoint_info) {
590 .out_cables = 0x000f,
591 .in_cables = 0x000f
592 }
593 },
594 {
595 .ifnum = -1
596 }
597 }
598 }
599 },
600 {
601 USB_DEVICE(0x0582, 0x0003),
602 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
603 .vendor_name = "Roland",
604 .product_name = "SC-8850",
605 .ifnum = QUIRK_ANY_INTERFACE,
606 .type = QUIRK_COMPOSITE,
607 .data = (const struct snd_usb_audio_quirk[]) {
608 {
609 .ifnum = 0,
610 .type = QUIRK_IGNORE_INTERFACE
611 },
612 {
613 .ifnum = 1,
614 .type = QUIRK_IGNORE_INTERFACE
615 },
616 {
617 .ifnum = 2,
618 .type = QUIRK_MIDI_FIXED_ENDPOINT,
619 .data = & (const struct snd_usb_midi_endpoint_info) {
620 .out_cables = 0x003f,
621 .in_cables = 0x003f
622 }
623 },
624 {
625 .ifnum = -1
626 }
627 }
628 }
629 },
630 {
631 USB_DEVICE(0x0582, 0x0004),
632 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
633 .vendor_name = "Roland",
634 .product_name = "U-8",
635 .ifnum = QUIRK_ANY_INTERFACE,
636 .type = QUIRK_COMPOSITE,
637 .data = (const struct snd_usb_audio_quirk[]) {
638 {
639 .ifnum = 0,
640 .type = QUIRK_IGNORE_INTERFACE
641 },
642 {
643 .ifnum = 1,
644 .type = QUIRK_IGNORE_INTERFACE
645 },
646 {
647 .ifnum = 2,
648 .type = QUIRK_MIDI_FIXED_ENDPOINT,
649 .data = & (const struct snd_usb_midi_endpoint_info) {
650 .out_cables = 0x0005,
651 .in_cables = 0x0005
652 }
653 },
654 {
655 .ifnum = -1
656 }
657 }
658 }
659 },
660 {
661
662
663 USB_DEVICE(0x0582, 0x0005),
664 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
665 .vendor_name = "EDIROL",
666 .product_name = "UM-2",
667 .ifnum = QUIRK_ANY_INTERFACE,
668 .type = QUIRK_COMPOSITE,
669 .data = (const struct snd_usb_audio_quirk[]) {
670 {
671 .ifnum = 0,
672 .type = QUIRK_IGNORE_INTERFACE
673 },
674 {
675 .ifnum = 1,
676 .type = QUIRK_IGNORE_INTERFACE
677 },
678 {
679 .ifnum = 2,
680 .type = QUIRK_MIDI_FIXED_ENDPOINT,
681 .data = & (const struct snd_usb_midi_endpoint_info) {
682 .out_cables = 0x0003,
683 .in_cables = 0x0003
684 }
685 },
686 {
687 .ifnum = -1
688 }
689 }
690 }
691 },
692 {
693 USB_DEVICE(0x0582, 0x0007),
694 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
695 .vendor_name = "Roland",
696 .product_name = "SC-8820",
697 .ifnum = QUIRK_ANY_INTERFACE,
698 .type = QUIRK_COMPOSITE,
699 .data = (const struct snd_usb_audio_quirk[]) {
700 {
701 .ifnum = 0,
702 .type = QUIRK_IGNORE_INTERFACE
703 },
704 {
705 .ifnum = 1,
706 .type = QUIRK_IGNORE_INTERFACE
707 },
708 {
709 .ifnum = 2,
710 .type = QUIRK_MIDI_FIXED_ENDPOINT,
711 .data = & (const struct snd_usb_midi_endpoint_info) {
712 .out_cables = 0x0013,
713 .in_cables = 0x0013
714 }
715 },
716 {
717 .ifnum = -1
718 }
719 }
720 }
721 },
722 {
723 USB_DEVICE(0x0582, 0x0008),
724 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
725 .vendor_name = "Roland",
726 .product_name = "PC-300",
727 .ifnum = QUIRK_ANY_INTERFACE,
728 .type = QUIRK_COMPOSITE,
729 .data = (const struct snd_usb_audio_quirk[]) {
730 {
731 .ifnum = 0,
732 .type = QUIRK_IGNORE_INTERFACE
733 },
734 {
735 .ifnum = 1,
736 .type = QUIRK_IGNORE_INTERFACE
737 },
738 {
739 .ifnum = 2,
740 .type = QUIRK_MIDI_FIXED_ENDPOINT,
741 .data = & (const struct snd_usb_midi_endpoint_info) {
742 .out_cables = 0x0001,
743 .in_cables = 0x0001
744 }
745 },
746 {
747 .ifnum = -1
748 }
749 }
750 }
751 },
752 {
753
754 USB_DEVICE(0x0582, 0x0009),
755 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
756 .vendor_name = "EDIROL",
757 .product_name = "UM-1",
758 .ifnum = QUIRK_ANY_INTERFACE,
759 .type = QUIRK_COMPOSITE,
760 .data = (const struct snd_usb_audio_quirk[]) {
761 {
762 .ifnum = 0,
763 .type = QUIRK_IGNORE_INTERFACE
764 },
765 {
766 .ifnum = 1,
767 .type = QUIRK_IGNORE_INTERFACE
768 },
769 {
770 .ifnum = 2,
771 .type = QUIRK_MIDI_FIXED_ENDPOINT,
772 .data = & (const struct snd_usb_midi_endpoint_info) {
773 .out_cables = 0x0001,
774 .in_cables = 0x0001
775 }
776 },
777 {
778 .ifnum = -1
779 }
780 }
781 }
782 },
783 {
784 USB_DEVICE(0x0582, 0x000b),
785 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
786 .vendor_name = "Roland",
787 .product_name = "SK-500",
788 .ifnum = QUIRK_ANY_INTERFACE,
789 .type = QUIRK_COMPOSITE,
790 .data = (const struct snd_usb_audio_quirk[]) {
791 {
792 .ifnum = 0,
793 .type = QUIRK_IGNORE_INTERFACE
794 },
795 {
796 .ifnum = 1,
797 .type = QUIRK_IGNORE_INTERFACE
798 },
799 {
800 .ifnum = 2,
801 .type = QUIRK_MIDI_FIXED_ENDPOINT,
802 .data = & (const struct snd_usb_midi_endpoint_info) {
803 .out_cables = 0x0013,
804 .in_cables = 0x0013
805 }
806 },
807 {
808 .ifnum = -1
809 }
810 }
811 }
812 },
813 {
814
815
816 USB_DEVICE(0x0582, 0x000c),
817 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
818 .vendor_name = "Roland",
819 .product_name = "SC-D70",
820 .ifnum = QUIRK_ANY_INTERFACE,
821 .type = QUIRK_COMPOSITE,
822 .data = (const struct snd_usb_audio_quirk[]) {
823 {
824 .ifnum = 0,
825 .type = QUIRK_AUDIO_STANDARD_INTERFACE
826 },
827 {
828 .ifnum = 1,
829 .type = QUIRK_AUDIO_STANDARD_INTERFACE
830 },
831 {
832 .ifnum = 2,
833 .type = QUIRK_MIDI_FIXED_ENDPOINT,
834 .data = & (const struct snd_usb_midi_endpoint_info) {
835 .out_cables = 0x0007,
836 .in_cables = 0x0007
837 }
838 },
839 {
840 .ifnum = -1
841 }
842 }
843 }
844 },
845 {
846
847
848
849
850
851
852
853
854 USB_DEVICE(0x0582, 0x0010),
855 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
856 .vendor_name = "EDIROL",
857 .product_name = "UA-5",
858 .ifnum = QUIRK_ANY_INTERFACE,
859 .type = QUIRK_COMPOSITE,
860 .data = (const struct snd_usb_audio_quirk[]) {
861 {
862 .ifnum = 1,
863 .type = QUIRK_AUDIO_STANDARD_INTERFACE
864 },
865 {
866 .ifnum = 2,
867 .type = QUIRK_AUDIO_STANDARD_INTERFACE
868 },
869 {
870 .ifnum = -1
871 }
872 }
873 }
874 },
875 {
876
877 USB_DEVICE(0x0582, 0x0012),
878 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
879 .vendor_name = "Roland",
880 .product_name = "XV-5050",
881 .ifnum = 0,
882 .type = QUIRK_MIDI_FIXED_ENDPOINT,
883 .data = & (const struct snd_usb_midi_endpoint_info) {
884 .out_cables = 0x0001,
885 .in_cables = 0x0001
886 }
887 }
888 },
889 {
890
891 USB_DEVICE(0x0582, 0x0014),
892 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
893 .vendor_name = "EDIROL",
894 .product_name = "UM-880",
895 .ifnum = 0,
896 .type = QUIRK_MIDI_FIXED_ENDPOINT,
897 .data = & (const struct snd_usb_midi_endpoint_info) {
898 .out_cables = 0x01ff,
899 .in_cables = 0x01ff
900 }
901 }
902 },
903 {
904
905 USB_DEVICE(0x0582, 0x0016),
906 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
907 .vendor_name = "EDIROL",
908 .product_name = "SD-90",
909 .ifnum = QUIRK_ANY_INTERFACE,
910 .type = QUIRK_COMPOSITE,
911 .data = (const struct snd_usb_audio_quirk[]) {
912 {
913 .ifnum = 0,
914 .type = QUIRK_AUDIO_STANDARD_INTERFACE
915 },
916 {
917 .ifnum = 1,
918 .type = QUIRK_AUDIO_STANDARD_INTERFACE
919 },
920 {
921 .ifnum = 2,
922 .type = QUIRK_MIDI_FIXED_ENDPOINT,
923 .data = & (const struct snd_usb_midi_endpoint_info) {
924 .out_cables = 0x000f,
925 .in_cables = 0x000f
926 }
927 },
928 {
929 .ifnum = -1
930 }
931 }
932 }
933 },
934 {
935
936 USB_DEVICE(0x0582, 0x001b),
937 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
938 .vendor_name = "Roland",
939 .product_name = "MMP-2",
940 .ifnum = QUIRK_ANY_INTERFACE,
941 .type = QUIRK_COMPOSITE,
942 .data = (const struct snd_usb_audio_quirk[]) {
943 {
944 .ifnum = 0,
945 .type = QUIRK_IGNORE_INTERFACE
946 },
947 {
948 .ifnum = 1,
949 .type = QUIRK_IGNORE_INTERFACE
950 },
951 {
952 .ifnum = 2,
953 .type = QUIRK_MIDI_FIXED_ENDPOINT,
954 .data = & (const struct snd_usb_midi_endpoint_info) {
955 .out_cables = 0x0001,
956 .in_cables = 0x0001
957 }
958 },
959 {
960 .ifnum = -1
961 }
962 }
963 }
964 },
965 {
966
967 USB_DEVICE(0x0582, 0x001d),
968 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
969 .vendor_name = "Roland",
970 .product_name = "V-SYNTH",
971 .ifnum = 0,
972 .type = QUIRK_MIDI_FIXED_ENDPOINT,
973 .data = & (const struct snd_usb_midi_endpoint_info) {
974 .out_cables = 0x0001,
975 .in_cables = 0x0001
976 }
977 }
978 },
979 {
980
981 USB_DEVICE(0x0582, 0x0023),
982 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
983 .vendor_name = "EDIROL",
984 .product_name = "UM-550",
985 .ifnum = 0,
986 .type = QUIRK_MIDI_FIXED_ENDPOINT,
987 .data = & (const struct snd_usb_midi_endpoint_info) {
988 .out_cables = 0x003f,
989 .in_cables = 0x003f
990 }
991 }
992 },
993 {
994
995
996
997
998
999 USB_DEVICE(0x0582, 0x0025),
1000 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1001 .vendor_name = "EDIROL",
1002 .product_name = "UA-20",
1003 .ifnum = QUIRK_ANY_INTERFACE,
1004 .type = QUIRK_COMPOSITE,
1005 .data = (const struct snd_usb_audio_quirk[]) {
1006 {
1007 .ifnum = 0,
1008 .type = QUIRK_IGNORE_INTERFACE
1009 },
1010 {
1011 .ifnum = 1,
1012 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
1013 .data = & (const struct audioformat) {
1014 .formats = SNDRV_PCM_FMTBIT_S24_3LE,
1015 .channels = 2,
1016 .iface = 1,
1017 .altsetting = 1,
1018 .altset_idx = 1,
1019 .attributes = 0,
1020 .endpoint = 0x01,
1021 .ep_attr = 0x01,
1022 .rates = SNDRV_PCM_RATE_CONTINUOUS,
1023 .rate_min = 44100,
1024 .rate_max = 44100,
1025 }
1026 },
1027 {
1028 .ifnum = 2,
1029 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
1030 .data = & (const struct audioformat) {
1031 .formats = SNDRV_PCM_FMTBIT_S24_3LE,
1032 .channels = 2,
1033 .iface = 2,
1034 .altsetting = 1,
1035 .altset_idx = 1,
1036 .attributes = 0,
1037 .endpoint = 0x82,
1038 .ep_attr = 0x01,
1039 .rates = SNDRV_PCM_RATE_CONTINUOUS,
1040 .rate_min = 44100,
1041 .rate_max = 44100,
1042 }
1043 },
1044 {
1045 .ifnum = 3,
1046 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1047 .data = & (const struct snd_usb_midi_endpoint_info) {
1048 .out_cables = 0x0001,
1049 .in_cables = 0x0001
1050 }
1051 },
1052 {
1053 .ifnum = -1
1054 }
1055 }
1056 }
1057 },
1058 {
1059
1060 USB_DEVICE(0x0582, 0x0027),
1061 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1062 .vendor_name = "EDIROL",
1063 .product_name = "SD-20",
1064 .ifnum = 0,
1065 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1066 .data = & (const struct snd_usb_midi_endpoint_info) {
1067 .out_cables = 0x0003,
1068 .in_cables = 0x0007
1069 }
1070 }
1071 },
1072 {
1073
1074 USB_DEVICE(0x0582, 0x0029),
1075 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1076 .vendor_name = "EDIROL",
1077 .product_name = "SD-80",
1078 .ifnum = 0,
1079 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1080 .data = & (const struct snd_usb_midi_endpoint_info) {
1081 .out_cables = 0x000f,
1082 .in_cables = 0x000f
1083 }
1084 }
1085 },
1086 {
1087
1088
1089
1090
1091
1092 USB_DEVICE_VENDOR_SPEC(0x0582, 0x002b),
1093 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1094 .vendor_name = "EDIROL",
1095 .product_name = "UA-700",
1096 .ifnum = QUIRK_ANY_INTERFACE,
1097 .type = QUIRK_COMPOSITE,
1098 .data = (const struct snd_usb_audio_quirk[]) {
1099 {
1100 .ifnum = 1,
1101 .type = QUIRK_AUDIO_EDIROL_UAXX
1102 },
1103 {
1104 .ifnum = 2,
1105 .type = QUIRK_AUDIO_EDIROL_UAXX
1106 },
1107 {
1108 .ifnum = 3,
1109 .type = QUIRK_AUDIO_EDIROL_UAXX
1110 },
1111 {
1112 .ifnum = -1
1113 }
1114 }
1115 }
1116 },
1117 {
1118
1119 USB_DEVICE(0x0582, 0x002d),
1120 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1121 .vendor_name = "Roland",
1122 .product_name = "XV-2020",
1123 .ifnum = 0,
1124 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1125 .data = & (const struct snd_usb_midi_endpoint_info) {
1126 .out_cables = 0x0001,
1127 .in_cables = 0x0001
1128 }
1129 }
1130 },
1131 {
1132
1133 USB_DEVICE(0x0582, 0x002f),
1134 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1135 .vendor_name = "Roland",
1136 .product_name = "VariOS",
1137 .ifnum = 0,
1138 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1139 .data = & (const struct snd_usb_midi_endpoint_info) {
1140 .out_cables = 0x0007,
1141 .in_cables = 0x0007
1142 }
1143 }
1144 },
1145 {
1146
1147 USB_DEVICE(0x0582, 0x0033),
1148 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1149 .vendor_name = "EDIROL",
1150 .product_name = "PCR",
1151 .ifnum = 0,
1152 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1153 .data = & (const struct snd_usb_midi_endpoint_info) {
1154 .out_cables = 0x0003,
1155 .in_cables = 0x0007
1156 }
1157 }
1158 },
1159 {
1160
1161
1162
1163
1164 USB_DEVICE(0x0582, 0x0037),
1165 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1166 .vendor_name = "Roland",
1167 .product_name = "Digital Piano",
1168 .ifnum = 0,
1169 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1170 .data = & (const struct snd_usb_midi_endpoint_info) {
1171 .out_cables = 0x0001,
1172 .in_cables = 0x0001
1173 }
1174 }
1175 },
1176 {
1177
1178
1179
1180
1181
1182 USB_DEVICE_VENDOR_SPEC(0x0582, 0x003b),
1183 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1184 .vendor_name = "BOSS",
1185 .product_name = "GS-10",
1186 .ifnum = QUIRK_ANY_INTERFACE,
1187 .type = QUIRK_COMPOSITE,
1188 .data = & (const struct snd_usb_audio_quirk[]) {
1189 {
1190 .ifnum = 1,
1191 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1192 },
1193 {
1194 .ifnum = 2,
1195 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1196 },
1197 {
1198 .ifnum = 3,
1199 .type = QUIRK_MIDI_STANDARD_INTERFACE
1200 },
1201 {
1202 .ifnum = -1
1203 }
1204 }
1205 }
1206 },
1207 {
1208
1209 USB_DEVICE(0x0582, 0x0040),
1210 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1211 .vendor_name = "Roland",
1212 .product_name = "GI-20",
1213 .ifnum = 0,
1214 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1215 .data = & (const struct snd_usb_midi_endpoint_info) {
1216 .out_cables = 0x0001,
1217 .in_cables = 0x0001
1218 }
1219 }
1220 },
1221 {
1222
1223 USB_DEVICE(0x0582, 0x0042),
1224 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1225 .vendor_name = "Roland",
1226 .product_name = "RS-70",
1227 .ifnum = 0,
1228 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1229 .data = & (const struct snd_usb_midi_endpoint_info) {
1230 .out_cables = 0x0001,
1231 .in_cables = 0x0001
1232 }
1233 }
1234 },
1235 {
1236
1237 USB_DEVICE(0x0582, 0x0047),
1238 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1239
1240
1241 .ifnum = QUIRK_ANY_INTERFACE,
1242 .type = QUIRK_COMPOSITE,
1243 .data = (const struct snd_usb_audio_quirk[]) {
1244
1245 {
1246 .ifnum = 1,
1247 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1248 },
1249 {
1250 .ifnum = 2,
1251 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1252 },
1253 {
1254 .ifnum = -1
1255 }
1256 }
1257 }
1258 },
1259 {
1260
1261 USB_DEVICE(0x0582, 0x0048),
1262 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1263
1264
1265 .ifnum = 0,
1266 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1267 .data = & (const struct snd_usb_midi_endpoint_info) {
1268 .out_cables = 0x0003,
1269 .in_cables = 0x0007
1270 }
1271 }
1272 },
1273 {
1274
1275 USB_DEVICE(0x0582, 0x004c),
1276 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1277 .vendor_name = "EDIROL",
1278 .product_name = "PCR-A",
1279 .ifnum = QUIRK_ANY_INTERFACE,
1280 .type = QUIRK_COMPOSITE,
1281 .data = (const struct snd_usb_audio_quirk[]) {
1282 {
1283 .ifnum = 1,
1284 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1285 },
1286 {
1287 .ifnum = 2,
1288 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1289 },
1290 {
1291 .ifnum = -1
1292 }
1293 }
1294 }
1295 },
1296 {
1297
1298 USB_DEVICE(0x0582, 0x004d),
1299 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1300 .vendor_name = "EDIROL",
1301 .product_name = "PCR-A",
1302 .ifnum = 0,
1303 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1304 .data = & (const struct snd_usb_midi_endpoint_info) {
1305 .out_cables = 0x0003,
1306 .in_cables = 0x0007
1307 }
1308 }
1309 },
1310 {
1311
1312
1313
1314
1315 USB_DEVICE(0x0582, 0x0050),
1316 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1317 .vendor_name = "EDIROL",
1318 .product_name = "UA-3FX",
1319 .ifnum = QUIRK_ANY_INTERFACE,
1320 .type = QUIRK_COMPOSITE,
1321 .data = (const struct snd_usb_audio_quirk[]) {
1322 {
1323 .ifnum = 1,
1324 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1325 },
1326 {
1327 .ifnum = 2,
1328 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1329 },
1330 {
1331 .ifnum = -1
1332 }
1333 }
1334 }
1335 },
1336 {
1337 USB_DEVICE(0x0582, 0x0052),
1338 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1339 .vendor_name = "EDIROL",
1340 .product_name = "UM-1SX",
1341 .ifnum = 0,
1342 .type = QUIRK_MIDI_STANDARD_INTERFACE
1343 }
1344 },
1345 {
1346 USB_DEVICE(0x0582, 0x0060),
1347 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1348 .vendor_name = "Roland",
1349 .product_name = "EXR Series",
1350 .ifnum = 0,
1351 .type = QUIRK_MIDI_STANDARD_INTERFACE
1352 }
1353 },
1354 {
1355
1356 USB_DEVICE(0x0582, 0x0064),
1357 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1358
1359
1360 .ifnum = QUIRK_ANY_INTERFACE,
1361 .type = QUIRK_COMPOSITE,
1362 .data = (const struct snd_usb_audio_quirk[]) {
1363 {
1364 .ifnum = 1,
1365 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1366 },
1367 {
1368 .ifnum = 2,
1369 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1370 },
1371 {
1372 .ifnum = -1
1373 }
1374 }
1375 }
1376 },
1377 {
1378
1379 USB_DEVICE(0x0582, 0x0065),
1380 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1381
1382
1383 .ifnum = 0,
1384 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1385 .data = & (const struct snd_usb_midi_endpoint_info) {
1386 .out_cables = 0x0001,
1387 .in_cables = 0x0003
1388 }
1389 }
1390 },
1391 {
1392
1393 USB_DEVICE(0x0582, 0x006d),
1394 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1395 .vendor_name = "Roland",
1396 .product_name = "FANTOM-X",
1397 .ifnum = 0,
1398 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1399 .data = & (const struct snd_usb_midi_endpoint_info) {
1400 .out_cables = 0x0001,
1401 .in_cables = 0x0001
1402 }
1403 }
1404 },
1405 {
1406
1407
1408
1409
1410
1411 USB_DEVICE_VENDOR_SPEC(0x0582, 0x0074),
1412 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1413 .vendor_name = "EDIROL",
1414 .product_name = "UA-25",
1415 .ifnum = QUIRK_ANY_INTERFACE,
1416 .type = QUIRK_COMPOSITE,
1417 .data = (const struct snd_usb_audio_quirk[]) {
1418 {
1419 .ifnum = 0,
1420 .type = QUIRK_AUDIO_EDIROL_UAXX
1421 },
1422 {
1423 .ifnum = 1,
1424 .type = QUIRK_AUDIO_EDIROL_UAXX
1425 },
1426 {
1427 .ifnum = 2,
1428 .type = QUIRK_AUDIO_EDIROL_UAXX
1429 },
1430 {
1431 .ifnum = -1
1432 }
1433 }
1434 }
1435 },
1436 {
1437
1438 USB_DEVICE(0x0582, 0x0075),
1439 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1440 .vendor_name = "BOSS",
1441 .product_name = "DR-880",
1442 .ifnum = 0,
1443 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1444 .data = & (const struct snd_usb_midi_endpoint_info) {
1445 .out_cables = 0x0001,
1446 .in_cables = 0x0001
1447 }
1448 }
1449 },
1450 {
1451
1452 USB_DEVICE_VENDOR_SPEC(0x0582, 0x007a),
1453 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1454 .vendor_name = "Roland",
1455
1456 .ifnum = 0,
1457 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1458 .data = & (const struct snd_usb_midi_endpoint_info) {
1459 .out_cables = 0x0003,
1460 .in_cables = 0x0003
1461 }
1462 }
1463 },
1464 {
1465
1466 USB_DEVICE(0x0582, 0x0080),
1467 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1468 .vendor_name = "Roland",
1469 .product_name = "G-70",
1470 .ifnum = 0,
1471 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1472 .data = & (const struct snd_usb_midi_endpoint_info) {
1473 .out_cables = 0x0001,
1474 .in_cables = 0x0001
1475 }
1476 }
1477 },
1478 {
1479
1480 USB_DEVICE(0x0582, 0x008b),
1481 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1482 .vendor_name = "EDIROL",
1483 .product_name = "PC-50",
1484 .ifnum = 0,
1485 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1486 .data = & (const struct snd_usb_midi_endpoint_info) {
1487 .out_cables = 0x0001,
1488 .in_cables = 0x0001
1489 }
1490 }
1491 },
1492 {
1493
1494
1495
1496
1497 USB_DEVICE(0x0582, 0x00a3),
1498 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1499 .vendor_name = "EDIROL",
1500 .product_name = "UA-4FX",
1501 .ifnum = QUIRK_ANY_INTERFACE,
1502 .type = QUIRK_COMPOSITE,
1503 .data = (const struct snd_usb_audio_quirk[]) {
1504 {
1505 .ifnum = 0,
1506 .type = QUIRK_AUDIO_EDIROL_UAXX
1507 },
1508 {
1509 .ifnum = 1,
1510 .type = QUIRK_AUDIO_EDIROL_UAXX
1511 },
1512 {
1513 .ifnum = 2,
1514 .type = QUIRK_AUDIO_EDIROL_UAXX
1515 },
1516 {
1517 .ifnum = -1
1518 }
1519 }
1520 }
1521 },
1522 {
1523
1524 USB_DEVICE(0x0582, 0x00c4),
1525 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1526 .ifnum = QUIRK_ANY_INTERFACE,
1527 .type = QUIRK_COMPOSITE,
1528 .data = (const struct snd_usb_audio_quirk[]) {
1529 {
1530 .ifnum = 0,
1531 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1532 },
1533 {
1534 .ifnum = 1,
1535 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1536 },
1537 {
1538 .ifnum = 2,
1539 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1540 .data = & (const struct snd_usb_midi_endpoint_info) {
1541 .out_cables = 0x0001,
1542 .in_cables = 0x0001
1543 }
1544 },
1545 {
1546 .ifnum = -1
1547 }
1548 }
1549 }
1550 },
1551 {
1552
1553
1554
1555
1556 USB_DEVICE_VENDOR_SPEC(0x0582, 0x00e6),
1557 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1558 .vendor_name = "EDIROL",
1559 .product_name = "UA-25EX",
1560 .ifnum = QUIRK_ANY_INTERFACE,
1561 .type = QUIRK_COMPOSITE,
1562 .data = (const struct snd_usb_audio_quirk[]) {
1563 {
1564 .ifnum = 0,
1565 .type = QUIRK_AUDIO_EDIROL_UAXX
1566 },
1567 {
1568 .ifnum = 1,
1569 .type = QUIRK_AUDIO_EDIROL_UAXX
1570 },
1571 {
1572 .ifnum = 2,
1573 .type = QUIRK_AUDIO_EDIROL_UAXX
1574 },
1575 {
1576 .ifnum = -1
1577 }
1578 }
1579 }
1580 },
1581 {
1582
1583 USB_DEVICE_VENDOR_SPEC(0x0582, 0x0108),
1584 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1585 .ifnum = 0,
1586 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1587 .data = & (const struct snd_usb_midi_endpoint_info) {
1588 .out_cables = 0x0007,
1589 .in_cables = 0x0007
1590 }
1591 }
1592 },
1593 {
1594
1595 USB_DEVICE(0x0582, 0x0113),
1596 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1597 .ifnum = QUIRK_ANY_INTERFACE,
1598 .type = QUIRK_COMPOSITE,
1599 .data = (const struct snd_usb_audio_quirk[]) {
1600 {
1601 .ifnum = 0,
1602 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1603 },
1604 {
1605 .ifnum = 1,
1606 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1607 },
1608 {
1609 .ifnum = 2,
1610 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1611 .data = & (const struct snd_usb_midi_endpoint_info) {
1612 .out_cables = 0x0001,
1613 .in_cables = 0x0001
1614 }
1615 },
1616 {
1617 .ifnum = -1
1618 }
1619 }
1620 }
1621 },
1622 {
1623
1624 USB_DEVICE(0x0582, 0x0120),
1625 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1626
1627
1628 .ifnum = QUIRK_ANY_INTERFACE,
1629 .type = QUIRK_COMPOSITE,
1630 .data = (const struct snd_usb_audio_quirk[]) {
1631 {
1632 .ifnum = 0,
1633 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
1634 .data = & (const struct audioformat) {
1635 .formats = SNDRV_PCM_FMTBIT_S32_LE,
1636 .channels = 10,
1637 .iface = 0,
1638 .altsetting = 1,
1639 .altset_idx = 1,
1640 .endpoint = 0x05,
1641 .ep_attr = 0x05,
1642 .rates = SNDRV_PCM_RATE_44100,
1643 .rate_min = 44100,
1644 .rate_max = 44100,
1645 .nr_rates = 1,
1646 .rate_table = (unsigned int[]) { 44100 }
1647 }
1648 },
1649 {
1650 .ifnum = 1,
1651 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
1652 .data = & (const struct audioformat) {
1653 .formats = SNDRV_PCM_FMTBIT_S32_LE,
1654 .channels = 12,
1655 .iface = 1,
1656 .altsetting = 1,
1657 .altset_idx = 1,
1658 .endpoint = 0x85,
1659 .ep_attr = 0x25,
1660 .rates = SNDRV_PCM_RATE_44100,
1661 .rate_min = 44100,
1662 .rate_max = 44100,
1663 .nr_rates = 1,
1664 .rate_table = (unsigned int[]) { 44100 }
1665 }
1666 },
1667 {
1668 .ifnum = 2,
1669 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1670 .data = & (const struct snd_usb_midi_endpoint_info) {
1671 .out_cables = 0x0001,
1672 .in_cables = 0x0001
1673 }
1674 },
1675 {
1676 .ifnum = 3,
1677 .type = QUIRK_IGNORE_INTERFACE
1678 },
1679 {
1680 .ifnum = 4,
1681 .type = QUIRK_IGNORE_INTERFACE
1682 },
1683 {
1684 .ifnum = -1
1685 }
1686 }
1687 }
1688 },
1689 {
1690
1691 USB_DEVICE(0x0582, 0x012f),
1692 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1693
1694
1695 .ifnum = QUIRK_ANY_INTERFACE,
1696 .type = QUIRK_COMPOSITE,
1697 .data = (const struct snd_usb_audio_quirk[]) {
1698 {
1699 .ifnum = 0,
1700 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
1701 .data = & (const struct audioformat) {
1702 .formats = SNDRV_PCM_FMTBIT_S32_LE,
1703 .channels = 4,
1704 .iface = 0,
1705 .altsetting = 1,
1706 .altset_idx = 1,
1707 .endpoint = 0x05,
1708 .ep_attr = 0x05,
1709 .rates = SNDRV_PCM_RATE_44100,
1710 .rate_min = 44100,
1711 .rate_max = 44100,
1712 .nr_rates = 1,
1713 .rate_table = (unsigned int[]) { 44100 }
1714 }
1715 },
1716 {
1717 .ifnum = 1,
1718 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
1719 .data = & (const struct audioformat) {
1720 .formats = SNDRV_PCM_FMTBIT_S32_LE,
1721 .channels = 6,
1722 .iface = 1,
1723 .altsetting = 1,
1724 .altset_idx = 1,
1725 .endpoint = 0x85,
1726 .ep_attr = 0x25,
1727 .rates = SNDRV_PCM_RATE_44100,
1728 .rate_min = 44100,
1729 .rate_max = 44100,
1730 .nr_rates = 1,
1731 .rate_table = (unsigned int[]) { 44100 }
1732 }
1733 },
1734 {
1735 .ifnum = 2,
1736 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1737 .data = & (const struct snd_usb_midi_endpoint_info) {
1738 .out_cables = 0x0001,
1739 .in_cables = 0x0001
1740 }
1741 },
1742 {
1743 .ifnum = 3,
1744 .type = QUIRK_IGNORE_INTERFACE
1745 },
1746 {
1747 .ifnum = 4,
1748 .type = QUIRK_IGNORE_INTERFACE
1749 },
1750 {
1751 .ifnum = -1
1752 }
1753 }
1754 }
1755 },
1756 {
1757 USB_DEVICE(0x0582, 0x0159),
1758 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1759
1760
1761 .ifnum = QUIRK_ANY_INTERFACE,
1762 .type = QUIRK_COMPOSITE,
1763 .data = (const struct snd_usb_audio_quirk[]) {
1764 {
1765 .ifnum = 0,
1766 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1767 },
1768 {
1769 .ifnum = 1,
1770 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1771 },
1772 {
1773 .ifnum = 2,
1774 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1775 .data = & (const struct snd_usb_midi_endpoint_info) {
1776 .out_cables = 0x0001,
1777 .in_cables = 0x0001
1778 }
1779 },
1780 {
1781 .ifnum = -1
1782 }
1783 }
1784 }
1785 },
1786
1787 {
1788 .match_flags = USB_DEVICE_ID_MATCH_VENDOR |
1789 USB_DEVICE_ID_MATCH_INT_CLASS,
1790 .idVendor = 0x0582,
1791 .bInterfaceClass = USB_CLASS_VENDOR_SPEC,
1792 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
1793 .ifnum = QUIRK_ANY_INTERFACE,
1794 .type = QUIRK_AUTODETECT
1795 }
1796 },
1797
1798
1799 {
1800
1801
1802
1803
1804
1805
1806 USB_DEVICE_VENDOR_SPEC(0x06f8, 0xb000),
1807 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1808 .vendor_name = "Hercules",
1809 .product_name = "DJ Console (WE)",
1810 .ifnum = 4,
1811 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1812 .data = & (const struct snd_usb_midi_endpoint_info) {
1813 .out_cables = 0x0001,
1814 .in_cables = 0x0001
1815 }
1816 }
1817 },
1818
1819
1820 {
1821 USB_DEVICE_VENDOR_SPEC(0x0763, 0x1002),
1822 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1823 .vendor_name = "M-Audio",
1824 .product_name = "MidiSport 2x2",
1825 .ifnum = QUIRK_ANY_INTERFACE,
1826 .type = QUIRK_MIDI_MIDIMAN,
1827 .data = & (const struct snd_usb_midi_endpoint_info) {
1828 .out_cables = 0x0003,
1829 .in_cables = 0x0003
1830 }
1831 }
1832 },
1833 {
1834 USB_DEVICE_VENDOR_SPEC(0x0763, 0x1011),
1835 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1836 .vendor_name = "M-Audio",
1837 .product_name = "MidiSport 1x1",
1838 .ifnum = QUIRK_ANY_INTERFACE,
1839 .type = QUIRK_MIDI_MIDIMAN,
1840 .data = & (const struct snd_usb_midi_endpoint_info) {
1841 .out_cables = 0x0001,
1842 .in_cables = 0x0001
1843 }
1844 }
1845 },
1846 {
1847 USB_DEVICE_VENDOR_SPEC(0x0763, 0x1015),
1848 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1849 .vendor_name = "M-Audio",
1850 .product_name = "Keystation",
1851 .ifnum = QUIRK_ANY_INTERFACE,
1852 .type = QUIRK_MIDI_MIDIMAN,
1853 .data = & (const struct snd_usb_midi_endpoint_info) {
1854 .out_cables = 0x0001,
1855 .in_cables = 0x0001
1856 }
1857 }
1858 },
1859 {
1860 USB_DEVICE_VENDOR_SPEC(0x0763, 0x1021),
1861 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1862 .vendor_name = "M-Audio",
1863 .product_name = "MidiSport 4x4",
1864 .ifnum = QUIRK_ANY_INTERFACE,
1865 .type = QUIRK_MIDI_MIDIMAN,
1866 .data = & (const struct snd_usb_midi_endpoint_info) {
1867 .out_cables = 0x000f,
1868 .in_cables = 0x000f
1869 }
1870 }
1871 },
1872 {
1873
1874
1875
1876
1877
1878 USB_DEVICE_VER(0x0763, 0x1031, 0x0100, 0x0109),
1879 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1880 .vendor_name = "M-Audio",
1881 .product_name = "MidiSport 8x8",
1882 .ifnum = QUIRK_ANY_INTERFACE,
1883 .type = QUIRK_MIDI_MIDIMAN,
1884 .data = & (const struct snd_usb_midi_endpoint_info) {
1885 .out_cables = 0x01ff,
1886 .in_cables = 0x01ff
1887 }
1888 }
1889 },
1890 {
1891 USB_DEVICE_VENDOR_SPEC(0x0763, 0x1033),
1892 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1893 .vendor_name = "M-Audio",
1894 .product_name = "MidiSport 8x8",
1895 .ifnum = QUIRK_ANY_INTERFACE,
1896 .type = QUIRK_MIDI_MIDIMAN,
1897 .data = & (const struct snd_usb_midi_endpoint_info) {
1898 .out_cables = 0x01ff,
1899 .in_cables = 0x01ff
1900 }
1901 }
1902 },
1903 {
1904 USB_DEVICE_VENDOR_SPEC(0x0763, 0x1041),
1905 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1906 .vendor_name = "M-Audio",
1907 .product_name = "MidiSport 2x4",
1908 .ifnum = QUIRK_ANY_INTERFACE,
1909 .type = QUIRK_MIDI_MIDIMAN,
1910 .data = & (const struct snd_usb_midi_endpoint_info) {
1911 .out_cables = 0x000f,
1912 .in_cables = 0x0003
1913 }
1914 }
1915 },
1916 {
1917 USB_DEVICE_VENDOR_SPEC(0x0763, 0x2001),
1918 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1919 .vendor_name = "M-Audio",
1920 .product_name = "Quattro",
1921 .ifnum = QUIRK_ANY_INTERFACE,
1922 .type = QUIRK_COMPOSITE,
1923 .data = & (const struct snd_usb_audio_quirk[]) {
1924
1925
1926
1927
1928
1929
1930 {
1931 .ifnum = 0,
1932 .type = QUIRK_IGNORE_INTERFACE
1933 },
1934 {
1935 .ifnum = 1,
1936 .type = QUIRK_IGNORE_INTERFACE
1937 },
1938 {
1939 .ifnum = 2,
1940 .type = QUIRK_IGNORE_INTERFACE
1941 },
1942 {
1943 .ifnum = 3,
1944 .type = QUIRK_IGNORE_INTERFACE
1945 },
1946 {
1947 .ifnum = 4,
1948 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1949 },
1950 {
1951 .ifnum = 5,
1952 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1953 },
1954 {
1955 .ifnum = 6,
1956 .type = QUIRK_IGNORE_INTERFACE
1957 },
1958 {
1959 .ifnum = 7,
1960 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1961 },
1962 {
1963 .ifnum = 8,
1964 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1965 },
1966 {
1967 .ifnum = 9,
1968 .type = QUIRK_MIDI_MIDIMAN,
1969 .data = & (const struct snd_usb_midi_endpoint_info) {
1970 .out_cables = 0x0001,
1971 .in_cables = 0x0001
1972 }
1973 },
1974 {
1975 .ifnum = -1
1976 }
1977 }
1978 }
1979 },
1980 {
1981 USB_DEVICE_VENDOR_SPEC(0x0763, 0x2003),
1982 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1983 .vendor_name = "M-Audio",
1984 .product_name = "AudioPhile",
1985 .ifnum = 6,
1986 .type = QUIRK_MIDI_MIDIMAN,
1987 .data = & (const struct snd_usb_midi_endpoint_info) {
1988 .out_cables = 0x0001,
1989 .in_cables = 0x0001
1990 }
1991 }
1992 },
1993 {
1994 USB_DEVICE_VENDOR_SPEC(0x0763, 0x2008),
1995 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1996 .vendor_name = "M-Audio",
1997 .product_name = "Ozone",
1998 .ifnum = 3,
1999 .type = QUIRK_MIDI_MIDIMAN,
2000 .data = & (const struct snd_usb_midi_endpoint_info) {
2001 .out_cables = 0x0001,
2002 .in_cables = 0x0001
2003 }
2004 }
2005 },
2006 {
2007 USB_DEVICE_VENDOR_SPEC(0x0763, 0x200d),
2008 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2009 .vendor_name = "M-Audio",
2010 .product_name = "OmniStudio",
2011 .ifnum = QUIRK_ANY_INTERFACE,
2012 .type = QUIRK_COMPOSITE,
2013 .data = & (const struct snd_usb_audio_quirk[]) {
2014 {
2015 .ifnum = 0,
2016 .type = QUIRK_IGNORE_INTERFACE
2017 },
2018 {
2019 .ifnum = 1,
2020 .type = QUIRK_IGNORE_INTERFACE
2021 },
2022 {
2023 .ifnum = 2,
2024 .type = QUIRK_IGNORE_INTERFACE
2025 },
2026 {
2027 .ifnum = 3,
2028 .type = QUIRK_IGNORE_INTERFACE
2029 },
2030 {
2031 .ifnum = 4,
2032 .type = QUIRK_AUDIO_STANDARD_INTERFACE
2033 },
2034 {
2035 .ifnum = 5,
2036 .type = QUIRK_AUDIO_STANDARD_INTERFACE
2037 },
2038 {
2039 .ifnum = 6,
2040 .type = QUIRK_IGNORE_INTERFACE
2041 },
2042 {
2043 .ifnum = 7,
2044 .type = QUIRK_AUDIO_STANDARD_INTERFACE
2045 },
2046 {
2047 .ifnum = 8,
2048 .type = QUIRK_AUDIO_STANDARD_INTERFACE
2049 },
2050 {
2051 .ifnum = 9,
2052 .type = QUIRK_MIDI_MIDIMAN,
2053 .data = & (const struct snd_usb_midi_endpoint_info) {
2054 .out_cables = 0x0001,
2055 .in_cables = 0x0001
2056 }
2057 },
2058 {
2059 .ifnum = -1
2060 }
2061 }
2062 }
2063 },
2064 {
2065 USB_DEVICE(0x0763, 0x2019),
2066 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2067
2068
2069 .ifnum = QUIRK_ANY_INTERFACE,
2070 .type = QUIRK_COMPOSITE,
2071 .data = & (const struct snd_usb_audio_quirk[]) {
2072 {
2073 .ifnum = 0,
2074 .type = QUIRK_AUDIO_STANDARD_INTERFACE
2075 },
2076 {
2077 .ifnum = 1,
2078 .type = QUIRK_AUDIO_STANDARD_INTERFACE
2079 },
2080 {
2081 .ifnum = 2,
2082 .type = QUIRK_AUDIO_STANDARD_INTERFACE
2083 },
2084 {
2085 .ifnum = 3,
2086 .type = QUIRK_MIDI_MIDIMAN,
2087 .data = & (const struct snd_usb_midi_endpoint_info) {
2088 .out_cables = 0x0001,
2089 .in_cables = 0x0001
2090 }
2091 },
2092 {
2093 .ifnum = -1
2094 }
2095 }
2096 }
2097 },
2098 {
2099 USB_DEVICE_VENDOR_SPEC(0x0763, 0x2030),
2100 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
2101
2102
2103 .ifnum = QUIRK_ANY_INTERFACE,
2104 .type = QUIRK_COMPOSITE,
2105 .data = &(const struct snd_usb_audio_quirk[]) {
2106 {
2107 .ifnum = 1,
2108 .type = QUIRK_AUDIO_STANDARD_MIXER,
2109 },
2110
2111 {
2112 .ifnum = 2,
2113 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
2114 .data = &(const struct audioformat) {
2115 .formats = SNDRV_PCM_FMTBIT_S24_3LE,
2116 .channels = 6,
2117 .iface = 2,
2118 .altsetting = 1,
2119 .altset_idx = 1,
2120 .attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
2121 .endpoint = 0x01,
2122 .ep_attr = 0x09,
2123 .rates = SNDRV_PCM_RATE_44100 |
2124 SNDRV_PCM_RATE_48000 |
2125 SNDRV_PCM_RATE_88200 |
2126 SNDRV_PCM_RATE_96000,
2127 .rate_min = 44100,
2128 .rate_max = 96000,
2129 .nr_rates = 4,
2130 .rate_table = (unsigned int[]) {
2131 44100, 48000, 88200, 96000
2132 },
2133 .clock = 0x80,
2134 }
2135 },
2136
2137 {
2138 .ifnum = 3,
2139 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
2140 .data = &(const struct audioformat) {
2141 .formats = SNDRV_PCM_FMTBIT_S24_3LE,
2142 .channels = 4,
2143 .iface = 3,
2144 .altsetting = 1,
2145 .altset_idx = 1,
2146 .attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
2147 .endpoint = 0x81,
2148 .ep_attr = 0x05,
2149 .rates = SNDRV_PCM_RATE_44100 |
2150 SNDRV_PCM_RATE_48000 |
2151 SNDRV_PCM_RATE_88200 |
2152 SNDRV_PCM_RATE_96000,
2153 .rate_min = 44100,
2154 .rate_max = 96000,
2155 .nr_rates = 4,
2156 .rate_table = (unsigned int[]) {
2157 44100, 48000, 88200, 96000
2158 },
2159 .clock = 0x80,
2160 }
2161 },
2162
2163 {
2164 .ifnum = -1
2165 }
2166 }
2167 }
2168 },
2169 {
2170 USB_DEVICE_VENDOR_SPEC(0x0763, 0x2031),
2171 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
2172
2173
2174 .ifnum = QUIRK_ANY_INTERFACE,
2175 .type = QUIRK_COMPOSITE,
2176 .data = &(const struct snd_usb_audio_quirk[]) {
2177 {
2178 .ifnum = 1,
2179 .type = QUIRK_AUDIO_STANDARD_MIXER,
2180 },
2181
2182 {
2183 .ifnum = 2,
2184 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
2185 .data = &(const struct audioformat) {
2186 .formats = SNDRV_PCM_FMTBIT_S24_3LE,
2187 .channels = 8,
2188 .iface = 2,
2189 .altsetting = 1,
2190 .altset_idx = 1,
2191 .attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
2192 .endpoint = 0x01,
2193 .ep_attr = 0x09,
2194 .rates = SNDRV_PCM_RATE_44100 |
2195 SNDRV_PCM_RATE_48000 |
2196 SNDRV_PCM_RATE_88200 |
2197 SNDRV_PCM_RATE_96000,
2198 .rate_min = 44100,
2199 .rate_max = 96000,
2200 .nr_rates = 4,
2201 .rate_table = (unsigned int[]) {
2202 44100, 48000, 88200, 96000
2203 },
2204 .clock = 0x80,
2205 }
2206 },
2207
2208 {
2209 .ifnum = 3,
2210 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
2211 .data = &(const struct audioformat) {
2212 .formats = SNDRV_PCM_FMTBIT_S24_3LE,
2213 .channels = 6,
2214 .iface = 3,
2215 .altsetting = 1,
2216 .altset_idx = 1,
2217 .attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
2218 .endpoint = 0x81,
2219 .ep_attr = 0x05,
2220 .rates = SNDRV_PCM_RATE_44100 |
2221 SNDRV_PCM_RATE_48000 |
2222 SNDRV_PCM_RATE_88200 |
2223 SNDRV_PCM_RATE_96000,
2224 .rate_min = 44100,
2225 .rate_max = 96000,
2226 .nr_rates = 4,
2227 .rate_table = (unsigned int[]) {
2228 44100, 48000, 88200, 96000
2229 },
2230 .clock = 0x80,
2231 }
2232 },
2233
2234 {
2235 .ifnum = -1
2236 }
2237 }
2238 }
2239 },
2240 {
2241 USB_DEVICE_VENDOR_SPEC(0x0763, 0x2080),
2242 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2243
2244
2245 .ifnum = QUIRK_ANY_INTERFACE,
2246 .type = QUIRK_COMPOSITE,
2247 .data = & (const struct snd_usb_audio_quirk[]) {
2248 {
2249 .ifnum = 0,
2250 .type = QUIRK_AUDIO_STANDARD_MIXER,
2251 },
2252 {
2253 .ifnum = 1,
2254 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
2255 .data = & (const struct audioformat) {
2256 .formats = SNDRV_PCM_FMTBIT_S24_3LE,
2257 .channels = 8,
2258 .iface = 1,
2259 .altsetting = 1,
2260 .altset_idx = 1,
2261 .attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
2262 .endpoint = 0x01,
2263 .ep_attr = 0x09,
2264 .rates = SNDRV_PCM_RATE_44100 |
2265 SNDRV_PCM_RATE_48000 |
2266 SNDRV_PCM_RATE_88200 |
2267 SNDRV_PCM_RATE_96000,
2268 .rate_min = 44100,
2269 .rate_max = 96000,
2270 .nr_rates = 4,
2271 .rate_table = (unsigned int[]) {
2272 44100, 48000, 88200, 96000
2273 }
2274 }
2275 },
2276 {
2277 .ifnum = 2,
2278 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
2279 .data = & (const struct audioformat) {
2280 .formats = SNDRV_PCM_FMTBIT_S24_3LE,
2281 .channels = 8,
2282 .iface = 2,
2283 .altsetting = 1,
2284 .altset_idx = 1,
2285 .attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
2286 .endpoint = 0x81,
2287 .ep_attr = 0x05,
2288 .rates = SNDRV_PCM_RATE_44100 |
2289 SNDRV_PCM_RATE_48000 |
2290 SNDRV_PCM_RATE_88200 |
2291 SNDRV_PCM_RATE_96000,
2292 .rate_min = 44100,
2293 .rate_max = 96000,
2294 .nr_rates = 4,
2295 .rate_table = (unsigned int[]) {
2296 44100, 48000, 88200, 96000
2297 }
2298 }
2299 },
2300
2301 {
2302 .ifnum = -1
2303 }
2304 }
2305 }
2306 },
2307 {
2308 USB_DEVICE_VENDOR_SPEC(0x0763, 0x2081),
2309 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2310
2311
2312 .ifnum = QUIRK_ANY_INTERFACE,
2313 .type = QUIRK_COMPOSITE,
2314 .data = & (const struct snd_usb_audio_quirk[]) {
2315 {
2316 .ifnum = 0,
2317 .type = QUIRK_AUDIO_STANDARD_MIXER,
2318 },
2319 {
2320 .ifnum = 1,
2321 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
2322 .data = & (const struct audioformat) {
2323 .formats = SNDRV_PCM_FMTBIT_S24_3LE,
2324 .channels = 8,
2325 .iface = 1,
2326 .altsetting = 1,
2327 .altset_idx = 1,
2328 .attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
2329 .endpoint = 0x01,
2330 .ep_attr = 0x09,
2331 .rates = SNDRV_PCM_RATE_44100 |
2332 SNDRV_PCM_RATE_48000 |
2333 SNDRV_PCM_RATE_88200 |
2334 SNDRV_PCM_RATE_96000,
2335 .rate_min = 44100,
2336 .rate_max = 96000,
2337 .nr_rates = 4,
2338 .rate_table = (unsigned int[]) {
2339 44100, 48000, 88200, 96000
2340 }
2341 }
2342 },
2343 {
2344 .ifnum = 2,
2345 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
2346 .data = & (const struct audioformat) {
2347 .formats = SNDRV_PCM_FMTBIT_S24_3LE,
2348 .channels = 8,
2349 .iface = 2,
2350 .altsetting = 1,
2351 .altset_idx = 1,
2352 .attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
2353 .endpoint = 0x81,
2354 .ep_attr = 0x05,
2355 .rates = SNDRV_PCM_RATE_44100 |
2356 SNDRV_PCM_RATE_48000 |
2357 SNDRV_PCM_RATE_88200 |
2358 SNDRV_PCM_RATE_96000,
2359 .rate_min = 44100,
2360 .rate_max = 96000,
2361 .nr_rates = 4,
2362 .rate_table = (unsigned int[]) {
2363 44100, 48000, 88200, 96000
2364 }
2365 }
2366 },
2367
2368 {
2369 .ifnum = -1
2370 }
2371 }
2372 }
2373 },
2374
2375
2376 {
2377 USB_DEVICE(0x07cf, 0x6801),
2378 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2379 .vendor_name = "Casio",
2380 .product_name = "PL-40R",
2381 .ifnum = 0,
2382 .type = QUIRK_MIDI_YAMAHA
2383 }
2384 },
2385 {
2386
2387 USB_DEVICE(0x07cf, 0x6802),
2388 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2389 .vendor_name = "Casio",
2390 .product_name = "Keyboard",
2391 .ifnum = 0,
2392 .type = QUIRK_MIDI_YAMAHA
2393 }
2394 },
2395
2396
2397 {
2398
2399 .match_flags = USB_DEVICE_ID_MATCH_VENDOR |
2400 USB_DEVICE_ID_MATCH_PRODUCT |
2401 USB_DEVICE_ID_MATCH_DEV_SUBCLASS,
2402 .idVendor = 0x07fd,
2403 .idProduct = 0x0001,
2404 .bDeviceSubClass = 2,
2405 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2406 .vendor_name = "MOTU",
2407 .product_name = "Fastlane",
2408 .ifnum = QUIRK_ANY_INTERFACE,
2409 .type = QUIRK_COMPOSITE,
2410 .data = & (const struct snd_usb_audio_quirk[]) {
2411 {
2412 .ifnum = 0,
2413 .type = QUIRK_MIDI_RAW_BYTES
2414 },
2415 {
2416 .ifnum = 1,
2417 .type = QUIRK_IGNORE_INTERFACE
2418 },
2419 {
2420 .ifnum = -1
2421 }
2422 }
2423 }
2424 },
2425
2426
2427 {
2428 USB_DEVICE(0x086a, 0x0001),
2429 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2430 .vendor_name = "Emagic",
2431 .product_name = "Unitor8",
2432 .ifnum = 2,
2433 .type = QUIRK_MIDI_EMAGIC,
2434 .data = & (const struct snd_usb_midi_endpoint_info) {
2435 .out_cables = 0x80ff,
2436 .in_cables = 0x80ff
2437 }
2438 }
2439 },
2440 {
2441 USB_DEVICE(0x086a, 0x0002),
2442 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2443 .vendor_name = "Emagic",
2444
2445 .ifnum = 2,
2446 .type = QUIRK_MIDI_EMAGIC,
2447 .data = & (const struct snd_usb_midi_endpoint_info) {
2448 .out_cables = 0x80ff,
2449 .in_cables = 0x80ff
2450 }
2451 }
2452 },
2453 {
2454 USB_DEVICE(0x086a, 0x0003),
2455 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2456 .vendor_name = "Emagic",
2457
2458 .ifnum = 2,
2459 .type = QUIRK_MIDI_EMAGIC,
2460 .data = & (const struct snd_usb_midi_endpoint_info) {
2461 .out_cables = 0x800f,
2462 .in_cables = 0x8003
2463 }
2464 }
2465 },
2466
2467
2468 {
2469 USB_DEVICE_VENDOR_SPEC(0x0944, 0x0200),
2470 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2471 .vendor_name = "KORG, Inc.",
2472
2473 .ifnum = 3,
2474 .type = QUIRK_MIDI_STANDARD_INTERFACE,
2475 }
2476 },
2477
2478 {
2479 USB_DEVICE_VENDOR_SPEC(0x0944, 0x0201),
2480 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2481 .vendor_name = "KORG, Inc.",
2482
2483 .ifnum = 3,
2484 .type = QUIRK_MIDI_STANDARD_INTERFACE,
2485 }
2486 },
2487
2488
2489 {
2490 USB_DEVICE(0x09e8, 0x0062),
2491 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2492 .vendor_name = "AKAI",
2493 .product_name = "MPD16",
2494 .ifnum = 0,
2495 .type = QUIRK_MIDI_AKAI,
2496 }
2497 },
2498
2499 {
2500
2501 USB_DEVICE(0x09e8, 0x0021),
2502 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2503 .ifnum = QUIRK_ANY_INTERFACE,
2504 .type = QUIRK_COMPOSITE,
2505 .data = & (const struct snd_usb_audio_quirk[]) {
2506 {
2507 .ifnum = 0,
2508 .type = QUIRK_IGNORE_INTERFACE
2509 },
2510 {
2511 .ifnum = 1,
2512 .type = QUIRK_MIDI_STANDARD_INTERFACE
2513 },
2514 {
2515 .ifnum = -1
2516 }
2517 }
2518 }
2519 },
2520
2521
2522 {
2523
2524 USB_DEVICE_VENDOR_SPEC(0x0a4e, 0x2040),
2525 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2526 .ifnum = QUIRK_ANY_INTERFACE,
2527 .type = QUIRK_COMPOSITE,
2528 .data = & (const struct snd_usb_audio_quirk[]) {
2529 {
2530 .ifnum = 0,
2531 .type = QUIRK_AUDIO_STANDARD_INTERFACE
2532 },
2533 {
2534 .ifnum = 1,
2535 .type = QUIRK_AUDIO_STANDARD_INTERFACE
2536 },
2537 {
2538 .ifnum = 2,
2539 .type = QUIRK_AUDIO_STANDARD_INTERFACE
2540 },
2541 {
2542 .ifnum = 3,
2543 .type = QUIRK_MIDI_FIXED_ENDPOINT,
2544 .data = &(const struct snd_usb_midi_endpoint_info) {
2545 .out_cables = 0x0001,
2546 .in_cables = 0x0001
2547 }
2548 },
2549 {
2550 .ifnum = -1
2551 }
2552 }
2553 }
2554 },
2555 {
2556
2557 USB_DEVICE_VENDOR_SPEC(0x0a4e, 0x4040),
2558 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2559 .ifnum = QUIRK_ANY_INTERFACE,
2560 .type = QUIRK_COMPOSITE,
2561 .data = & (const struct snd_usb_audio_quirk[]) {
2562 {
2563 .ifnum = 0,
2564 .type = QUIRK_AUDIO_STANDARD_INTERFACE
2565 },
2566 {
2567 .ifnum = 1,
2568 .type = QUIRK_AUDIO_STANDARD_INTERFACE
2569 },
2570 {
2571 .ifnum = 2,
2572 .type = QUIRK_AUDIO_STANDARD_INTERFACE
2573 },
2574 {
2575 .ifnum = 3,
2576 .type = QUIRK_MIDI_FIXED_ENDPOINT,
2577 .data = &(const struct snd_usb_midi_endpoint_info) {
2578 .out_cables = 0x0001,
2579 .in_cables = 0x0001
2580 }
2581 },
2582 {
2583 .ifnum = -1
2584 }
2585 }
2586 }
2587 },
2588
2589
2590 {
2591 USB_DEVICE_VENDOR_SPEC(0x0ccd, 0x0012),
2592 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2593 .vendor_name = "TerraTec",
2594 .product_name = "PHASE 26",
2595 .ifnum = 3,
2596 .type = QUIRK_MIDI_STANDARD_INTERFACE
2597 }
2598 },
2599 {
2600 USB_DEVICE_VENDOR_SPEC(0x0ccd, 0x0013),
2601 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2602 .vendor_name = "TerraTec",
2603 .product_name = "PHASE 26",
2604 .ifnum = 3,
2605 .type = QUIRK_MIDI_STANDARD_INTERFACE
2606 }
2607 },
2608 {
2609 USB_DEVICE_VENDOR_SPEC(0x0ccd, 0x0014),
2610 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2611 .vendor_name = "TerraTec",
2612 .product_name = "PHASE 26",
2613 .ifnum = 3,
2614 .type = QUIRK_MIDI_STANDARD_INTERFACE
2615 }
2616 },
2617 {
2618 USB_DEVICE(0x0ccd, 0x0028),
2619 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2620 .vendor_name = "TerraTec",
2621 .product_name = "Aureon5.1MkII",
2622 .ifnum = QUIRK_NO_INTERFACE
2623 }
2624 },
2625 {
2626 USB_DEVICE(0x0ccd, 0x0035),
2627 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2628 .vendor_name = "Miditech",
2629 .product_name = "Play'n Roll",
2630 .ifnum = 0,
2631 .type = QUIRK_MIDI_CME
2632 }
2633 },
2634
2635
2636 {
2637 USB_DEVICE(0x103d, 0x0100),
2638 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2639 .vendor_name = "Stanton",
2640 .product_name = "ScratchAmp",
2641 .ifnum = QUIRK_NO_INTERFACE
2642 }
2643 },
2644 {
2645 USB_DEVICE(0x103d, 0x0101),
2646 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2647 .vendor_name = "Stanton",
2648 .product_name = "ScratchAmp",
2649 .ifnum = QUIRK_NO_INTERFACE
2650 }
2651 },
2652
2653
2654 {
2655 USB_DEVICE_VENDOR_SPEC(0x1235, 0x0001),
2656 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2657 .vendor_name = "Novation",
2658 .product_name = "ReMOTE Audio/XStation",
2659 .ifnum = 4,
2660 .type = QUIRK_MIDI_NOVATION
2661 }
2662 },
2663 {
2664 USB_DEVICE_VENDOR_SPEC(0x1235, 0x0002),
2665 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2666 .vendor_name = "Novation",
2667 .product_name = "Speedio",
2668 .ifnum = 3,
2669 .type = QUIRK_MIDI_NOVATION
2670 }
2671 },
2672 {
2673 USB_DEVICE(0x1235, 0x000a),
2674 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2675
2676
2677 .ifnum = 0,
2678 .type = QUIRK_MIDI_RAW_BYTES
2679 }
2680 },
2681 {
2682 USB_DEVICE(0x1235, 0x000e),
2683 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2684
2685
2686 .ifnum = 0,
2687 .type = QUIRK_MIDI_RAW_BYTES
2688 }
2689 },
2690 {
2691 USB_DEVICE(0x1235, 0x0010),
2692 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
2693 .vendor_name = "Focusrite",
2694 .product_name = "Saffire 6 USB",
2695 .ifnum = QUIRK_ANY_INTERFACE,
2696 .type = QUIRK_COMPOSITE,
2697 .data = (const struct snd_usb_audio_quirk[]) {
2698 {
2699 .ifnum = 0,
2700 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
2701 .data = &(const struct audioformat) {
2702 .formats = SNDRV_PCM_FMTBIT_S24_3LE,
2703 .channels = 4,
2704 .iface = 0,
2705 .altsetting = 1,
2706 .altset_idx = 1,
2707 .attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
2708 .endpoint = 0x01,
2709 .ep_attr = USB_ENDPOINT_XFER_ISOC,
2710 .rates = SNDRV_PCM_RATE_44100 |
2711 SNDRV_PCM_RATE_48000,
2712 .rate_min = 44100,
2713 .rate_max = 48000,
2714 .nr_rates = 2,
2715 .rate_table = (unsigned int[]) {
2716 44100, 48000
2717 }
2718 }
2719 },
2720 {
2721 .ifnum = 1,
2722 .type = QUIRK_MIDI_RAW_BYTES
2723 },
2724 {
2725 .ifnum = -1
2726 }
2727 }
2728 }
2729 },
2730 {
2731 USB_DEVICE(0x1235, 0x0018),
2732 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2733 .vendor_name = "Novation",
2734 .product_name = "Twitch",
2735 .ifnum = QUIRK_ANY_INTERFACE,
2736 .type = QUIRK_COMPOSITE,
2737 .data = (const struct snd_usb_audio_quirk[]) {
2738 {
2739 .ifnum = 0,
2740 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
2741 .data = & (const struct audioformat) {
2742 .formats = SNDRV_PCM_FMTBIT_S24_3LE,
2743 .channels = 4,
2744 .iface = 0,
2745 .altsetting = 1,
2746 .altset_idx = 1,
2747 .attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
2748 .endpoint = 0x01,
2749 .ep_attr = USB_ENDPOINT_XFER_ISOC,
2750 .rates = SNDRV_PCM_RATE_44100 |
2751 SNDRV_PCM_RATE_48000,
2752 .rate_min = 44100,
2753 .rate_max = 48000,
2754 .nr_rates = 2,
2755 .rate_table = (unsigned int[]) {
2756 44100, 48000
2757 }
2758 }
2759 },
2760 {
2761 .ifnum = 1,
2762 .type = QUIRK_MIDI_RAW_BYTES
2763 },
2764 {
2765 .ifnum = -1
2766 }
2767 }
2768 }
2769 },
2770 {
2771 USB_DEVICE_VENDOR_SPEC(0x1235, 0x4661),
2772 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2773 .vendor_name = "Novation",
2774 .product_name = "ReMOTE25",
2775 .ifnum = 0,
2776 .type = QUIRK_MIDI_NOVATION
2777 }
2778 },
2779 {
2780
2781
2782
2783
2784
2785
2786
2787 USB_DEVICE(0x1235, 0x8205),
2788 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2789 .ifnum = QUIRK_ANY_INTERFACE,
2790 .type = QUIRK_COMPOSITE,
2791 .data = (const struct snd_usb_audio_quirk[]) {
2792 {
2793 .ifnum = 1,
2794 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
2795 .data = & (const struct audioformat) {
2796 .formats = SNDRV_PCM_FMTBIT_S32_LE,
2797 .channels = 2,
2798 .iface = 1,
2799 .altsetting = 1,
2800 .altset_idx = 1,
2801 .attributes = 0,
2802 .endpoint = 0x01,
2803 .ep_attr = USB_ENDPOINT_XFER_ISOC |
2804 USB_ENDPOINT_SYNC_ASYNC,
2805 .protocol = UAC_VERSION_2,
2806 .rates = SNDRV_PCM_RATE_44100 |
2807 SNDRV_PCM_RATE_48000 |
2808 SNDRV_PCM_RATE_88200 |
2809 SNDRV_PCM_RATE_96000 |
2810 SNDRV_PCM_RATE_176400 |
2811 SNDRV_PCM_RATE_192000,
2812 .rate_min = 44100,
2813 .rate_max = 192000,
2814 .nr_rates = 6,
2815 .rate_table = (unsigned int[]) {
2816 44100, 48000, 88200,
2817 96000, 176400, 192000
2818 },
2819 .clock = 41
2820 }
2821 },
2822 {
2823 .ifnum = 2,
2824 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
2825 .data = & (const struct audioformat) {
2826 .formats = SNDRV_PCM_FMTBIT_S32_LE,
2827 .channels = 2,
2828 .iface = 2,
2829 .altsetting = 1,
2830 .altset_idx = 1,
2831 .attributes = 0,
2832 .endpoint = 0x82,
2833 .ep_attr = USB_ENDPOINT_XFER_ISOC |
2834 USB_ENDPOINT_SYNC_ASYNC |
2835 USB_ENDPOINT_USAGE_IMPLICIT_FB,
2836 .protocol = UAC_VERSION_2,
2837 .rates = SNDRV_PCM_RATE_44100 |
2838 SNDRV_PCM_RATE_48000 |
2839 SNDRV_PCM_RATE_88200 |
2840 SNDRV_PCM_RATE_96000 |
2841 SNDRV_PCM_RATE_176400 |
2842 SNDRV_PCM_RATE_192000,
2843 .rate_min = 44100,
2844 .rate_max = 192000,
2845 .nr_rates = 6,
2846 .rate_table = (unsigned int[]) {
2847 44100, 48000, 88200,
2848 96000, 176400, 192000
2849 },
2850 .clock = 41
2851 }
2852 },
2853 {
2854 .ifnum = 3,
2855 .type = QUIRK_IGNORE_INTERFACE
2856 },
2857 {
2858 .ifnum = -1
2859 }
2860 }
2861 }
2862 },
2863
2864
2865 {
2866
2867 USB_DEVICE_VENDOR_SPEC(0x133e, 0x0815),
2868 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
2869 .ifnum = QUIRK_ANY_INTERFACE,
2870 .type = QUIRK_COMPOSITE,
2871 .data = &(const struct snd_usb_audio_quirk[]) {
2872 {
2873 .ifnum = 3,
2874 .type = QUIRK_MIDI_FIXED_ENDPOINT,
2875 .data = &(const struct snd_usb_midi_endpoint_info) {
2876 .out_cables = 0x0003,
2877 .in_cables = 0x0003
2878 }
2879 },
2880 {
2881 .ifnum = 4,
2882 .type = QUIRK_IGNORE_INTERFACE
2883 },
2884 {
2885 .ifnum = -1
2886 }
2887 }
2888 }
2889 },
2890
2891
2892 {
2893
2894 USB_DEVICE(0x13e5, 0x0001),
2895 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2896 .vendor_name = "Rane",
2897 .product_name = "SL-1",
2898 .ifnum = QUIRK_NO_INTERFACE
2899 }
2900 },
2901
2902
2903 {
2904
2905 .match_flags = USB_DEVICE_ID_MATCH_DEVICE,
2906 .idVendor = 0x17cc,
2907 .idProduct = 0x1000,
2908 },
2909 {
2910
2911 .match_flags = USB_DEVICE_ID_MATCH_DEVICE,
2912 .idVendor = 0x17cc,
2913 .idProduct = 0x1010,
2914 },
2915 {
2916
2917 .match_flags = USB_DEVICE_ID_MATCH_DEVICE,
2918 .idVendor = 0x17cc,
2919 .idProduct = 0x1020,
2920 },
2921
2922
2923 {
2924 USB_DEVICE(0x1a86, 0x752d),
2925 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
2926 .vendor_name = "QinHeng",
2927 .product_name = "CH345",
2928 .ifnum = 1,
2929 .type = QUIRK_MIDI_CH345
2930 }
2931 },
2932
2933
2934 {
2935 USB_DEVICE(0x1f38, 0x0001),
2936 .bInterfaceClass = USB_CLASS_AUDIO,
2937 },
2938
2939
2940 {
2941 USB_DEVICE(0x4752, 0x0011),
2942 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2943 .vendor_name = "Miditech",
2944 .product_name = "Midistart-2",
2945 .ifnum = 0,
2946 .type = QUIRK_MIDI_CME
2947 }
2948 },
2949
2950
2951 {
2952
2953 USB_DEVICE(0x7104, 0x2202),
2954 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2955 .ifnum = 0,
2956 .type = QUIRK_MIDI_CME
2957 }
2958 },
2959
2960
2961
2962
2963
2964
2965
2966
2967 #define AU0828_DEVICE(vid, pid, vname, pname) { \
2968 .idVendor = vid, \
2969 .idProduct = pid, \
2970 .match_flags = USB_DEVICE_ID_MATCH_DEVICE | \
2971 USB_DEVICE_ID_MATCH_INT_CLASS | \
2972 USB_DEVICE_ID_MATCH_INT_SUBCLASS, \
2973 .bInterfaceClass = USB_CLASS_AUDIO, \
2974 .bInterfaceSubClass = USB_SUBCLASS_AUDIOCONTROL, \
2975 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) { \
2976 .vendor_name = vname, \
2977 .product_name = pname, \
2978 .ifnum = QUIRK_ANY_INTERFACE, \
2979 .type = QUIRK_AUDIO_ALIGN_TRANSFER, \
2980 .shares_media_device = 1, \
2981 } \
2982 }
2983
2984 AU0828_DEVICE(0x2040, 0x7200, "Hauppauge", "HVR-950Q"),
2985 AU0828_DEVICE(0x2040, 0x7240, "Hauppauge", "HVR-850"),
2986 AU0828_DEVICE(0x2040, 0x7210, "Hauppauge", "HVR-950Q"),
2987 AU0828_DEVICE(0x2040, 0x7217, "Hauppauge", "HVR-950Q"),
2988 AU0828_DEVICE(0x2040, 0x721b, "Hauppauge", "HVR-950Q"),
2989 AU0828_DEVICE(0x2040, 0x721e, "Hauppauge", "HVR-950Q"),
2990 AU0828_DEVICE(0x2040, 0x721f, "Hauppauge", "HVR-950Q"),
2991 AU0828_DEVICE(0x2040, 0x7280, "Hauppauge", "HVR-950Q"),
2992 AU0828_DEVICE(0x0fd9, 0x0008, "Hauppauge", "HVR-950Q"),
2993 AU0828_DEVICE(0x2040, 0x7201, "Hauppauge", "HVR-950Q-MXL"),
2994 AU0828_DEVICE(0x2040, 0x7211, "Hauppauge", "HVR-950Q-MXL"),
2995 AU0828_DEVICE(0x2040, 0x7281, "Hauppauge", "HVR-950Q-MXL"),
2996 AU0828_DEVICE(0x05e1, 0x0480, "Hauppauge", "Woodbury"),
2997 AU0828_DEVICE(0x2040, 0x8200, "Hauppauge", "Woodbury"),
2998 AU0828_DEVICE(0x2040, 0x7260, "Hauppauge", "HVR-950Q"),
2999 AU0828_DEVICE(0x2040, 0x7213, "Hauppauge", "HVR-950Q"),
3000 AU0828_DEVICE(0x2040, 0x7270, "Hauppauge", "HVR-950Q"),
3001
3002
3003 {
3004 .match_flags = USB_DEVICE_ID_MATCH_DEVICE |
3005 USB_DEVICE_ID_MATCH_INT_CLASS |
3006 USB_DEVICE_ID_MATCH_INT_SUBCLASS,
3007 .idVendor = 0x05e1,
3008 .idProduct = 0x0408,
3009 .bInterfaceClass = USB_CLASS_AUDIO,
3010 .bInterfaceSubClass = USB_SUBCLASS_AUDIOCONTROL,
3011 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
3012 .vendor_name = "Syntek",
3013 .product_name = "STK1160",
3014 .ifnum = QUIRK_ANY_INTERFACE,
3015 .type = QUIRK_AUDIO_ALIGN_TRANSFER
3016 }
3017 },
3018
3019
3020 {
3021
3022 USB_DEVICE(0x0dba, 0x1000),
3023 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
3024 .vendor_name = "Digidesign",
3025 .product_name = "MBox",
3026 .ifnum = QUIRK_ANY_INTERFACE,
3027 .type = QUIRK_COMPOSITE,
3028 .data = (const struct snd_usb_audio_quirk[]){
3029 {
3030 .ifnum = 0,
3031 .type = QUIRK_AUDIO_STANDARD_MIXER,
3032 },
3033 {
3034 .ifnum = 1,
3035 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
3036 .data = &(const struct audioformat) {
3037 .formats = SNDRV_PCM_FMTBIT_S24_3BE,
3038 .channels = 2,
3039 .iface = 1,
3040 .altsetting = 1,
3041 .altset_idx = 1,
3042 .attributes = 0x4,
3043 .endpoint = 0x02,
3044 .ep_attr = USB_ENDPOINT_XFER_ISOC |
3045 USB_ENDPOINT_SYNC_SYNC,
3046 .maxpacksize = 0x130,
3047 .rates = SNDRV_PCM_RATE_48000,
3048 .rate_min = 48000,
3049 .rate_max = 48000,
3050 .nr_rates = 1,
3051 .rate_table = (unsigned int[]) {
3052 48000
3053 }
3054 }
3055 },
3056 {
3057 .ifnum = 1,
3058 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
3059 .data = &(const struct audioformat) {
3060 .formats = SNDRV_PCM_FMTBIT_S24_3BE,
3061 .channels = 2,
3062 .iface = 1,
3063 .altsetting = 1,
3064 .altset_idx = 1,
3065 .attributes = 0x4,
3066 .endpoint = 0x81,
3067 .ep_attr = USB_ENDPOINT_XFER_ISOC |
3068 USB_ENDPOINT_SYNC_ASYNC,
3069 .maxpacksize = 0x130,
3070 .rates = SNDRV_PCM_RATE_48000,
3071 .rate_min = 48000,
3072 .rate_max = 48000,
3073 .nr_rates = 1,
3074 .rate_table = (unsigned int[]) {
3075 48000
3076 }
3077 }
3078 },
3079 {
3080 .ifnum = -1
3081 }
3082 }
3083 }
3084 },
3085
3086
3087 {
3088 USB_DEVICE(0x0dba, 0x3000),
3089 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
3090 .vendor_name = "Digidesign",
3091 .product_name = "Mbox 2",
3092 .ifnum = QUIRK_ANY_INTERFACE,
3093 .type = QUIRK_COMPOSITE,
3094 .data = (const struct snd_usb_audio_quirk[]) {
3095 {
3096 .ifnum = 0,
3097 .type = QUIRK_IGNORE_INTERFACE
3098 },
3099 {
3100 .ifnum = 1,
3101 .type = QUIRK_IGNORE_INTERFACE
3102 },
3103 {
3104 .ifnum = 2,
3105 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
3106 .data = &(const struct audioformat) {
3107 .formats = SNDRV_PCM_FMTBIT_S24_3BE,
3108 .channels = 2,
3109 .iface = 2,
3110 .altsetting = 2,
3111 .altset_idx = 1,
3112 .attributes = 0x00,
3113 .endpoint = 0x03,
3114 .ep_attr = USB_ENDPOINT_SYNC_ASYNC,
3115 .rates = SNDRV_PCM_RATE_48000,
3116 .rate_min = 48000,
3117 .rate_max = 48000,
3118 .nr_rates = 1,
3119 .rate_table = (unsigned int[]) {
3120 48000
3121 }
3122 }
3123 },
3124 {
3125 .ifnum = 3,
3126 .type = QUIRK_IGNORE_INTERFACE
3127 },
3128 {
3129 .ifnum = 4,
3130 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
3131 .data = &(const struct audioformat) {
3132 .formats = SNDRV_PCM_FMTBIT_S24_3BE,
3133 .channels = 2,
3134 .iface = 4,
3135 .altsetting = 2,
3136 .altset_idx = 1,
3137 .attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
3138 .endpoint = 0x85,
3139 .ep_attr = USB_ENDPOINT_SYNC_SYNC,
3140 .rates = SNDRV_PCM_RATE_48000,
3141 .rate_min = 48000,
3142 .rate_max = 48000,
3143 .nr_rates = 1,
3144 .rate_table = (unsigned int[]) {
3145 48000
3146 }
3147 }
3148 },
3149 {
3150 .ifnum = 5,
3151 .type = QUIRK_IGNORE_INTERFACE
3152 },
3153 {
3154 .ifnum = 6,
3155 .type = QUIRK_MIDI_MIDIMAN,
3156 .data = &(const struct snd_usb_midi_endpoint_info) {
3157 .out_ep = 0x02,
3158 .out_cables = 0x0001,
3159 .in_ep = 0x81,
3160 .in_interval = 0x01,
3161 .in_cables = 0x0001
3162 }
3163 },
3164 {
3165 .ifnum = -1
3166 }
3167 }
3168 }
3169 },
3170 {
3171
3172 .match_flags = USB_DEVICE_ID_MATCH_DEVICE,
3173 .idVendor = 0x0644,
3174 .idProduct = 0x8021,
3175 .bInterfaceClass = USB_CLASS_AUDIO,
3176 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
3177 .vendor_name = "TASCAM",
3178 .product_name = "US122 MKII",
3179 .ifnum = QUIRK_ANY_INTERFACE,
3180 .type = QUIRK_COMPOSITE,
3181 .data = (const struct snd_usb_audio_quirk[]) {
3182 {
3183 .ifnum = 0,
3184 .type = QUIRK_IGNORE_INTERFACE
3185 },
3186 {
3187 .ifnum = 1,
3188 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
3189 .data = &(const struct audioformat) {
3190 .formats = SNDRV_PCM_FMTBIT_S24_3LE,
3191 .channels = 2,
3192 .iface = 1,
3193 .altsetting = 1,
3194 .altset_idx = 1,
3195 .attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
3196 .endpoint = 0x02,
3197 .ep_attr = USB_ENDPOINT_XFER_ISOC,
3198 .rates = SNDRV_PCM_RATE_44100 |
3199 SNDRV_PCM_RATE_48000 |
3200 SNDRV_PCM_RATE_88200 |
3201 SNDRV_PCM_RATE_96000,
3202 .rate_min = 44100,
3203 .rate_max = 96000,
3204 .nr_rates = 4,
3205 .rate_table = (unsigned int[]) {
3206 44100, 48000, 88200, 96000
3207 }
3208 }
3209 },
3210 {
3211 .ifnum = -1
3212 }
3213 }
3214 }
3215 },
3216
3217
3218 {
3219 USB_DEVICE(0x045e, 0x0283),
3220 .bInterfaceClass = USB_CLASS_PER_INTERFACE,
3221 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
3222 .vendor_name = "Microsoft",
3223 .product_name = "XboxLive Headset/Xbox Communicator",
3224 .ifnum = QUIRK_ANY_INTERFACE,
3225 .type = QUIRK_COMPOSITE,
3226 .data = &(const struct snd_usb_audio_quirk[]) {
3227 {
3228
3229 .ifnum = 0,
3230 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
3231 .data = &(const struct audioformat) {
3232 .formats = SNDRV_PCM_FMTBIT_S16_LE,
3233 .channels = 1,
3234 .iface = 0,
3235 .altsetting = 0,
3236 .altset_idx = 0,
3237 .attributes = 0,
3238 .endpoint = 0x04,
3239 .ep_attr = 0x05,
3240 .rates = SNDRV_PCM_RATE_CONTINUOUS,
3241 .rate_min = 22050,
3242 .rate_max = 22050
3243 }
3244 },
3245 {
3246
3247 .ifnum = 1,
3248 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
3249 .data = &(const struct audioformat) {
3250 .formats = SNDRV_PCM_FMTBIT_S16_LE,
3251 .channels = 1,
3252 .iface = 1,
3253 .altsetting = 0,
3254 .altset_idx = 0,
3255 .attributes = 0,
3256 .endpoint = 0x85,
3257 .ep_attr = 0x05,
3258 .rates = SNDRV_PCM_RATE_CONTINUOUS,
3259 .rate_min = 16000,
3260 .rate_max = 16000
3261 }
3262 },
3263 {
3264 .ifnum = -1
3265 }
3266 }
3267 }
3268 },
3269
3270
3271 {
3272 USB_DEVICE(0x200c, 0x100b),
3273 .bInterfaceClass = USB_CLASS_PER_INTERFACE,
3274 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
3275 .ifnum = QUIRK_ANY_INTERFACE,
3276 .type = QUIRK_COMPOSITE,
3277 .data = &(const struct snd_usb_audio_quirk[]) {
3278 {
3279 .ifnum = 0,
3280 .type = QUIRK_AUDIO_STANDARD_MIXER,
3281 },
3282 {
3283 .ifnum = 1,
3284 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
3285 .data = &(const struct audioformat) {
3286 .formats = SNDRV_PCM_FMTBIT_S24_3LE,
3287 .channels = 4,
3288 .iface = 1,
3289 .altsetting = 1,
3290 .altset_idx = 1,
3291 .attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
3292 .endpoint = 0x01,
3293 .ep_attr = USB_ENDPOINT_SYNC_ADAPTIVE,
3294 .rates = SNDRV_PCM_RATE_44100 |
3295 SNDRV_PCM_RATE_48000,
3296 .rate_min = 44100,
3297 .rate_max = 48000,
3298 .nr_rates = 2,
3299 .rate_table = (unsigned int[]) {
3300 44100, 48000
3301 }
3302 }
3303 },
3304 {
3305 .ifnum = -1
3306 }
3307 }
3308 }
3309 },
3310
3311 {
3312
3313
3314
3315
3316
3317
3318 USB_DEVICE(0x1686, 0x00dd),
3319 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
3320 .ifnum = QUIRK_ANY_INTERFACE,
3321 .type = QUIRK_COMPOSITE,
3322 .data = (const struct snd_usb_audio_quirk[]) {
3323 {
3324
3325 .ifnum = 1,
3326 .type = QUIRK_AUDIO_STANDARD_INTERFACE,
3327 },
3328 {
3329
3330 .ifnum = 2,
3331 .type = QUIRK_AUDIO_STANDARD_INTERFACE,
3332 },
3333 {
3334
3335 .ifnum = 3,
3336 .type = QUIRK_MIDI_STANDARD_INTERFACE
3337 },
3338 {
3339 .ifnum = -1
3340 },
3341 }
3342 }
3343 },
3344
3345 {
3346
3347
3348
3349
3350 .match_flags = USB_DEVICE_ID_MATCH_INT_CLASS |
3351 USB_DEVICE_ID_MATCH_INT_SUBCLASS,
3352 .bInterfaceClass = USB_CLASS_AUDIO,
3353 .bInterfaceSubClass = USB_SUBCLASS_MIDISTREAMING,
3354 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
3355 .ifnum = QUIRK_ANY_INTERFACE,
3356 .type = QUIRK_MIDI_STANDARD_INTERFACE
3357 }
3358 },
3359
3360 {
3361
3362
3363
3364
3365 USB_DEVICE(0x0d8c, 0x0103),
3366 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
3367 .product_name = "Audio Advantage MicroII",
3368 .ifnum = QUIRK_NO_INTERFACE
3369 }
3370 },
3371
3372
3373
3374
3375 #if 0
3376 {
3377
3378
3379
3380
3381
3382
3383 USB_DEVICE(0x0a12, 0x1243),
3384 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
3385 .ifnum = QUIRK_ANY_INTERFACE,
3386 .type = QUIRK_COMPOSITE,
3387 .data = (const struct snd_usb_audio_quirk[]) {
3388 {
3389 .ifnum = 0,
3390 .type = QUIRK_AUDIO_STANDARD_MIXER,
3391 },
3392
3393 {
3394 .ifnum = 1,
3395 .type = QUIRK_IGNORE_INTERFACE,
3396 },
3397
3398 {
3399 .ifnum = 2,
3400 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
3401 .data = &(const struct audioformat) {
3402 .formats = SNDRV_PCM_FMTBIT_S16_LE,
3403 .channels = 2,
3404 .iface = 2,
3405 .altsetting = 1,
3406 .altset_idx = 1,
3407 .attributes = UAC_EP_CS_ATTR_FILL_MAX |
3408 UAC_EP_CS_ATTR_SAMPLE_RATE,
3409 .endpoint = 0x03,
3410 .ep_attr = USB_ENDPOINT_XFER_ISOC,
3411 .rates = SNDRV_PCM_RATE_48000,
3412 .rate_min = 48000,
3413 .rate_max = 48000,
3414 .nr_rates = 1,
3415 .rate_table = (unsigned int[]) {
3416 48000
3417 }
3418 }
3419 },
3420 {
3421 .ifnum = -1
3422 },
3423 }
3424 }
3425 },
3426 #endif
3427
3428 {
3429
3430
3431
3432
3433
3434 USB_DEVICE(0x19b5, 0x0021),
3435 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
3436 .ifnum = QUIRK_ANY_INTERFACE,
3437 .type = QUIRK_COMPOSITE,
3438 .data = (const struct snd_usb_audio_quirk[]) {
3439 {
3440 .ifnum = 0,
3441 .type = QUIRK_AUDIO_STANDARD_MIXER,
3442 },
3443
3444 {
3445 .ifnum = 1,
3446 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
3447 .data = &(const struct audioformat) {
3448 .formats = SNDRV_PCM_FMTBIT_S16_LE,
3449 .channels = 2,
3450 .iface = 1,
3451 .altsetting = 1,
3452 .altset_idx = 1,
3453 .attributes = UAC_EP_CS_ATTR_FILL_MAX |
3454 UAC_EP_CS_ATTR_SAMPLE_RATE,
3455 .endpoint = 0x03,
3456 .ep_attr = USB_ENDPOINT_XFER_ISOC,
3457 .rates = SNDRV_PCM_RATE_48000,
3458 .rate_min = 48000,
3459 .rate_max = 48000,
3460 .nr_rates = 1,
3461 .rate_table = (unsigned int[]) {
3462 48000
3463 }
3464 }
3465 },
3466 {
3467 .ifnum = -1
3468 },
3469 }
3470 }
3471 },
3472
3473 {
3474 USB_DEVICE(0x0bda, 0x4014),
3475 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
3476 .vendor_name = "Dell",
3477 .product_name = "WD15 Dock",
3478 .profile_name = "Dell-WD15-Dock",
3479 .ifnum = QUIRK_NO_INTERFACE
3480 }
3481 },
3482
3483 {
3484 USB_DEVICE(0x0bda, 0x402e),
3485 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
3486 .vendor_name = "Dell",
3487 .product_name = "WD19 Dock",
3488 .profile_name = "Dell-WD15-Dock",
3489 .ifnum = QUIRK_ANY_INTERFACE,
3490 .type = QUIRK_SETUP_FMT_AFTER_RESUME
3491 }
3492 },
3493
3494 {
3495 USB_DEVICE(0x07fd, 0x0004),
3496 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
3497 .vendor_name = "MOTU",
3498 .product_name = "MicroBookII",
3499 .ifnum = QUIRK_ANY_INTERFACE,
3500 .type = QUIRK_COMPOSITE,
3501 .data = (const struct snd_usb_audio_quirk[]) {
3502 {
3503 .ifnum = 0,
3504 .type = QUIRK_AUDIO_STANDARD_MIXER,
3505 },
3506 {
3507 .ifnum = 0,
3508 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
3509 .data = &(const struct audioformat) {
3510 .formats = SNDRV_PCM_FMTBIT_S24_3BE,
3511 .channels = 6,
3512 .iface = 0,
3513 .altsetting = 1,
3514 .altset_idx = 1,
3515 .attributes = 0,
3516 .endpoint = 0x84,
3517 .rates = SNDRV_PCM_RATE_96000,
3518 .ep_attr = USB_ENDPOINT_XFER_ISOC |
3519 USB_ENDPOINT_SYNC_ASYNC,
3520 .rate_min = 96000,
3521 .rate_max = 96000,
3522 .nr_rates = 1,
3523 .maxpacksize = 0x00d8,
3524 .rate_table = (unsigned int[]) {
3525 96000
3526 }
3527 }
3528 },
3529 {
3530 .ifnum = 0,
3531 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
3532 .data = &(const struct audioformat) {
3533 .formats = SNDRV_PCM_FMTBIT_S24_3BE,
3534 .channels = 8,
3535 .iface = 0,
3536 .altsetting = 1,
3537 .altset_idx = 1,
3538 .attributes = 0,
3539 .endpoint = 0x03,
3540 .rates = SNDRV_PCM_RATE_96000,
3541 .ep_attr = USB_ENDPOINT_XFER_ISOC |
3542 USB_ENDPOINT_SYNC_ASYNC,
3543 .rate_min = 96000,
3544 .rate_max = 96000,
3545 .nr_rates = 1,
3546 .maxpacksize = 0x0120,
3547 .rate_table = (unsigned int[]) {
3548 96000
3549 }
3550 }
3551 },
3552 {
3553 .ifnum = -1
3554 }
3555 }
3556 }
3557 },
3558 {
3559
3560
3561
3562
3563
3564
3565 USB_DEVICE_VENDOR_SPEC(0x2b73, 0x0023),
3566 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
3567 .ifnum = QUIRK_ANY_INTERFACE,
3568 .type = QUIRK_COMPOSITE,
3569 .data = (const struct snd_usb_audio_quirk[]) {
3570 {
3571 .ifnum = 0,
3572 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
3573 .data = &(const struct audioformat) {
3574 .formats = SNDRV_PCM_FMTBIT_S32_LE,
3575 .channels = 12,
3576 .iface = 0,
3577 .altsetting = 1,
3578 .altset_idx = 1,
3579 .endpoint = 0x05,
3580 .ep_attr = USB_ENDPOINT_XFER_ISOC|
3581 USB_ENDPOINT_SYNC_ASYNC,
3582 .rates = SNDRV_PCM_RATE_44100,
3583 .rate_min = 44100,
3584 .rate_max = 44100,
3585 .nr_rates = 1,
3586 .rate_table = (unsigned int[]) { 44100 }
3587 }
3588 },
3589 {
3590 .ifnum = 0,
3591 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
3592 .data = &(const struct audioformat) {
3593 .formats = SNDRV_PCM_FMTBIT_S32_LE,
3594 .channels = 10,
3595 .iface = 0,
3596 .altsetting = 1,
3597 .altset_idx = 1,
3598 .endpoint = 0x86,
3599 .ep_attr = USB_ENDPOINT_XFER_ISOC|
3600 USB_ENDPOINT_SYNC_ASYNC|
3601 USB_ENDPOINT_USAGE_IMPLICIT_FB,
3602 .rates = SNDRV_PCM_RATE_44100,
3603 .rate_min = 44100,
3604 .rate_max = 44100,
3605 .nr_rates = 1,
3606 .rate_table = (unsigned int[]) { 44100 }
3607 }
3608 },
3609 {
3610 .ifnum = -1
3611 }
3612 }
3613 }
3614 },
3615 {
3616
3617
3618
3619
3620
3621
3622
3623
3624
3625
3626
3627 USB_DEVICE_VENDOR_SPEC(0x2b73, 0x0017),
3628 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
3629 .ifnum = QUIRK_ANY_INTERFACE,
3630 .type = QUIRK_COMPOSITE,
3631 .data = (const struct snd_usb_audio_quirk[]) {
3632 {
3633 .ifnum = 0,
3634 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
3635 .data = &(const struct audioformat) {
3636 .formats = SNDRV_PCM_FMTBIT_S24_3LE,
3637 .channels = 8,
3638 .iface = 0,
3639 .altsetting = 1,
3640 .altset_idx = 1,
3641 .endpoint = 0x01,
3642 .ep_attr = USB_ENDPOINT_XFER_ISOC|
3643 USB_ENDPOINT_SYNC_ASYNC,
3644 .rates = SNDRV_PCM_RATE_48000,
3645 .rate_min = 48000,
3646 .rate_max = 48000,
3647 .nr_rates = 1,
3648 .rate_table = (unsigned int[]) { 48000 }
3649 }
3650 },
3651 {
3652 .ifnum = -1
3653 }
3654 }
3655 }
3656 },
3657
3658 #define ALC1220_VB_DESKTOP(vend, prod) { \
3659 USB_DEVICE(vend, prod), \
3660 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { \
3661 .vendor_name = "Realtek", \
3662 .product_name = "ALC1220-VB-DT", \
3663 .profile_name = "Realtek-ALC1220-VB-Desktop", \
3664 .ifnum = QUIRK_NO_INTERFACE \
3665 } \
3666 }
3667 ALC1220_VB_DESKTOP(0x0414, 0xa002),
3668 ALC1220_VB_DESKTOP(0x0db0, 0x0d64),
3669 ALC1220_VB_DESKTOP(0x0db0, 0x543d),
3670 ALC1220_VB_DESKTOP(0x26ce, 0x0a01),
3671 #undef ALC1220_VB_DESKTOP
3672
3673
3674
3675
3676
3677
3678
3679 {
3680 USB_DEVICE(0x0414, 0xa000),
3681 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
3682 .vendor_name = "Gigabyte",
3683 .product_name = "Aorus Master Front Headphone",
3684 .profile_name = "Gigabyte-Aorus-Master-Front-Headphone",
3685 .ifnum = QUIRK_NO_INTERFACE
3686 }
3687 },
3688 {
3689 USB_DEVICE(0x0414, 0xa001),
3690 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
3691 .vendor_name = "Gigabyte",
3692 .product_name = "Aorus Master Main Audio",
3693 .profile_name = "Gigabyte-Aorus-Master-Main-Audio",
3694 .ifnum = QUIRK_NO_INTERFACE
3695 }
3696 },
3697
3698 #undef USB_DEVICE_VENDOR_SPEC