diff options
author | Takashi Iwai <tiwai@suse.de> | 2010-04-16 09:20:06 -0400 |
---|---|---|
committer | Takashi Iwai <tiwai@suse.de> | 2010-04-16 09:20:06 -0400 |
commit | cf0dbba515415bb19b11f9323d5f7bebd7f24fd6 (patch) | |
tree | 375bbc1ade1a92acd6493d224dd701fd7f209014 /sound/usb/quirks-table.h | |
parent | 1cff399ecd9125d8e6a634a1957be1aeb3195a12 (diff) | |
parent | 0340c7dccd80d8706c636e030a6ebbddbddca690 (diff) |
Merge remote branch 'alsa/devel' into topic/misc
Diffstat (limited to 'sound/usb/quirks-table.h')
-rw-r--r-- | sound/usb/quirks-table.h | 2302 |
1 files changed, 2302 insertions, 0 deletions
diff --git a/sound/usb/quirks-table.h b/sound/usb/quirks-table.h new file mode 100644 index 000000000000..91ddef31bcbd --- /dev/null +++ b/sound/usb/quirks-table.h | |||
@@ -0,0 +1,2302 @@ | |||
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 | |||
42 | /* Creative/Toshiba Multimedia Center SB-0500 */ | ||
43 | { | ||
44 | USB_DEVICE(0x041e, 0x3048), | ||
45 | .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { | ||
46 | .vendor_name = "Toshiba", | ||
47 | .product_name = "SB-0500", | ||
48 | .ifnum = QUIRK_NO_INTERFACE | ||
49 | } | ||
50 | }, | ||
51 | |||
52 | /* Creative/E-Mu devices */ | ||
53 | { | ||
54 | USB_DEVICE(0x041e, 0x3010), | ||
55 | .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { | ||
56 | .vendor_name = "Creative Labs", | ||
57 | .product_name = "Sound Blaster MP3+", | ||
58 | .ifnum = QUIRK_NO_INTERFACE | ||
59 | } | ||
60 | }, | ||
61 | { | ||
62 | /* E-Mu 0202 USB */ | ||
63 | .match_flags = USB_DEVICE_ID_MATCH_DEVICE, | ||
64 | .idVendor = 0x041e, | ||
65 | .idProduct = 0x3f02, | ||
66 | .bInterfaceClass = USB_CLASS_AUDIO, | ||
67 | }, | ||
68 | { | ||
69 | /* E-Mu 0404 USB */ | ||
70 | .match_flags = USB_DEVICE_ID_MATCH_DEVICE, | ||
71 | .idVendor = 0x041e, | ||
72 | .idProduct = 0x3f04, | ||
73 | .bInterfaceClass = USB_CLASS_AUDIO, | ||
74 | }, | ||
75 | { | ||
76 | /* E-Mu Tracker Pre */ | ||
77 | .match_flags = USB_DEVICE_ID_MATCH_DEVICE, | ||
78 | .idVendor = 0x041e, | ||
79 | .idProduct = 0x3f0a, | ||
80 | .bInterfaceClass = USB_CLASS_AUDIO, | ||
81 | }, | ||
82 | |||
83 | /* | ||
84 | * Logitech QuickCam: bDeviceClass is vendor-specific, so generic interface | ||
85 | * class matches do not take effect without an explicit ID match. | ||
86 | */ | ||
87 | { | ||
88 | .match_flags = USB_DEVICE_ID_MATCH_DEVICE | | ||
89 | USB_DEVICE_ID_MATCH_INT_CLASS | | ||
90 | USB_DEVICE_ID_MATCH_INT_SUBCLASS, | ||
91 | .idVendor = 0x046d, | ||
92 | .idProduct = 0x0850, | ||
93 | .bInterfaceClass = USB_CLASS_AUDIO, | ||
94 | .bInterfaceSubClass = USB_SUBCLASS_AUDIOCONTROL | ||
95 | }, | ||
96 | { | ||
97 | .match_flags = USB_DEVICE_ID_MATCH_DEVICE | | ||
98 | USB_DEVICE_ID_MATCH_INT_CLASS | | ||
99 | USB_DEVICE_ID_MATCH_INT_SUBCLASS, | ||
100 | .idVendor = 0x046d, | ||
101 | .idProduct = 0x08ae, | ||
102 | .bInterfaceClass = USB_CLASS_AUDIO, | ||
103 | .bInterfaceSubClass = USB_SUBCLASS_AUDIOCONTROL | ||
104 | }, | ||
105 | { | ||
106 | .match_flags = USB_DEVICE_ID_MATCH_DEVICE | | ||
107 | USB_DEVICE_ID_MATCH_INT_CLASS | | ||
108 | USB_DEVICE_ID_MATCH_INT_SUBCLASS, | ||
109 | .idVendor = 0x046d, | ||
110 | .idProduct = 0x08c6, | ||
111 | .bInterfaceClass = USB_CLASS_AUDIO, | ||
112 | .bInterfaceSubClass = USB_SUBCLASS_AUDIOCONTROL | ||
113 | }, | ||
114 | { | ||
115 | .match_flags = USB_DEVICE_ID_MATCH_DEVICE | | ||
116 | USB_DEVICE_ID_MATCH_INT_CLASS | | ||
117 | USB_DEVICE_ID_MATCH_INT_SUBCLASS, | ||
118 | .idVendor = 0x046d, | ||
119 | .idProduct = 0x08f0, | ||
120 | .bInterfaceClass = USB_CLASS_AUDIO, | ||
121 | .bInterfaceSubClass = USB_SUBCLASS_AUDIOCONTROL | ||
122 | }, | ||
123 | { | ||
124 | .match_flags = USB_DEVICE_ID_MATCH_DEVICE | | ||
125 | USB_DEVICE_ID_MATCH_INT_CLASS | | ||
126 | USB_DEVICE_ID_MATCH_INT_SUBCLASS, | ||
127 | .idVendor = 0x046d, | ||
128 | .idProduct = 0x08f5, | ||
129 | .bInterfaceClass = USB_CLASS_AUDIO, | ||
130 | .bInterfaceSubClass = USB_SUBCLASS_AUDIOCONTROL | ||
131 | }, | ||
132 | { | ||
133 | .match_flags = USB_DEVICE_ID_MATCH_DEVICE | | ||
134 | USB_DEVICE_ID_MATCH_INT_CLASS | | ||
135 | USB_DEVICE_ID_MATCH_INT_SUBCLASS, | ||
136 | .idVendor = 0x046d, | ||
137 | .idProduct = 0x08f6, | ||
138 | .bInterfaceClass = USB_CLASS_AUDIO, | ||
139 | .bInterfaceSubClass = USB_SUBCLASS_AUDIOCONTROL | ||
140 | }, | ||
141 | { | ||
142 | USB_DEVICE(0x046d, 0x0990), | ||
143 | .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { | ||
144 | .vendor_name = "Logitech, Inc.", | ||
145 | .product_name = "QuickCam Pro 9000", | ||
146 | .ifnum = QUIRK_NO_INTERFACE | ||
147 | } | ||
148 | }, | ||
149 | |||
150 | /* | ||
151 | * Yamaha devices | ||
152 | */ | ||
153 | |||
154 | #define YAMAHA_DEVICE(id, name) { \ | ||
155 | USB_DEVICE(0x0499, id), \ | ||
156 | .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { \ | ||
157 | .vendor_name = "Yamaha", \ | ||
158 | .product_name = name, \ | ||
159 | .ifnum = QUIRK_ANY_INTERFACE, \ | ||
160 | .type = QUIRK_MIDI_YAMAHA \ | ||
161 | } \ | ||
162 | } | ||
163 | #define YAMAHA_INTERFACE(id, intf, name) { \ | ||
164 | USB_DEVICE_VENDOR_SPEC(0x0499, id), \ | ||
165 | .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { \ | ||
166 | .vendor_name = "Yamaha", \ | ||
167 | .product_name = name, \ | ||
168 | .ifnum = intf, \ | ||
169 | .type = QUIRK_MIDI_YAMAHA \ | ||
170 | } \ | ||
171 | } | ||
172 | YAMAHA_DEVICE(0x1000, "UX256"), | ||
173 | YAMAHA_DEVICE(0x1001, "MU1000"), | ||
174 | YAMAHA_DEVICE(0x1002, "MU2000"), | ||
175 | YAMAHA_DEVICE(0x1003, "MU500"), | ||
176 | YAMAHA_INTERFACE(0x1004, 3, "UW500"), | ||
177 | YAMAHA_DEVICE(0x1005, "MOTIF6"), | ||
178 | YAMAHA_DEVICE(0x1006, "MOTIF7"), | ||
179 | YAMAHA_DEVICE(0x1007, "MOTIF8"), | ||
180 | YAMAHA_DEVICE(0x1008, "UX96"), | ||
181 | YAMAHA_DEVICE(0x1009, "UX16"), | ||
182 | YAMAHA_INTERFACE(0x100a, 3, "EOS BX"), | ||
183 | YAMAHA_DEVICE(0x100c, "UC-MX"), | ||
184 | YAMAHA_DEVICE(0x100d, "UC-KX"), | ||
185 | YAMAHA_DEVICE(0x100e, "S08"), | ||
186 | YAMAHA_DEVICE(0x100f, "CLP-150"), | ||
187 | YAMAHA_DEVICE(0x1010, "CLP-170"), | ||
188 | YAMAHA_DEVICE(0x1011, "P-250"), | ||
189 | YAMAHA_DEVICE(0x1012, "TYROS"), | ||
190 | YAMAHA_DEVICE(0x1013, "PF-500"), | ||
191 | YAMAHA_DEVICE(0x1014, "S90"), | ||
192 | YAMAHA_DEVICE(0x1015, "MOTIF-R"), | ||
193 | YAMAHA_DEVICE(0x1016, "MDP-5"), | ||
194 | YAMAHA_DEVICE(0x1017, "CVP-204"), | ||
195 | YAMAHA_DEVICE(0x1018, "CVP-206"), | ||
196 | YAMAHA_DEVICE(0x1019, "CVP-208"), | ||
197 | YAMAHA_DEVICE(0x101a, "CVP-210"), | ||
198 | YAMAHA_DEVICE(0x101b, "PSR-1100"), | ||
199 | YAMAHA_DEVICE(0x101c, "PSR-2100"), | ||
200 | YAMAHA_DEVICE(0x101d, "CLP-175"), | ||
201 | YAMAHA_DEVICE(0x101e, "PSR-K1"), | ||
202 | YAMAHA_DEVICE(0x101f, "EZ-J24"), | ||
203 | YAMAHA_DEVICE(0x1020, "EZ-250i"), | ||
204 | YAMAHA_DEVICE(0x1021, "MOTIF ES 6"), | ||
205 | YAMAHA_DEVICE(0x1022, "MOTIF ES 7"), | ||
206 | YAMAHA_DEVICE(0x1023, "MOTIF ES 8"), | ||
207 | YAMAHA_DEVICE(0x1024, "CVP-301"), | ||
208 | YAMAHA_DEVICE(0x1025, "CVP-303"), | ||
209 | YAMAHA_DEVICE(0x1026, "CVP-305"), | ||
210 | YAMAHA_DEVICE(0x1027, "CVP-307"), | ||
211 | YAMAHA_DEVICE(0x1028, "CVP-309"), | ||
212 | YAMAHA_DEVICE(0x1029, "CVP-309GP"), | ||
213 | YAMAHA_DEVICE(0x102a, "PSR-1500"), | ||
214 | YAMAHA_DEVICE(0x102b, "PSR-3000"), | ||
215 | YAMAHA_DEVICE(0x102e, "ELS-01/01C"), | ||
216 | YAMAHA_DEVICE(0x1030, "PSR-295/293"), | ||
217 | YAMAHA_DEVICE(0x1031, "DGX-205/203"), | ||
218 | YAMAHA_DEVICE(0x1032, "DGX-305"), | ||
219 | YAMAHA_DEVICE(0x1033, "DGX-505"), | ||
220 | YAMAHA_DEVICE(0x1034, NULL), | ||
221 | YAMAHA_DEVICE(0x1035, NULL), | ||
222 | YAMAHA_DEVICE(0x1036, NULL), | ||
223 | YAMAHA_DEVICE(0x1037, NULL), | ||
224 | YAMAHA_DEVICE(0x1038, NULL), | ||
225 | YAMAHA_DEVICE(0x1039, NULL), | ||
226 | YAMAHA_DEVICE(0x103a, NULL), | ||
227 | YAMAHA_DEVICE(0x103b, NULL), | ||
228 | YAMAHA_DEVICE(0x103c, NULL), | ||
229 | YAMAHA_DEVICE(0x103d, NULL), | ||
230 | YAMAHA_DEVICE(0x103e, NULL), | ||
231 | YAMAHA_DEVICE(0x103f, NULL), | ||
232 | YAMAHA_DEVICE(0x1040, NULL), | ||
233 | YAMAHA_DEVICE(0x1041, NULL), | ||
234 | YAMAHA_DEVICE(0x1042, NULL), | ||
235 | YAMAHA_DEVICE(0x1043, NULL), | ||
236 | YAMAHA_DEVICE(0x1044, NULL), | ||
237 | YAMAHA_DEVICE(0x1045, NULL), | ||
238 | YAMAHA_INTERFACE(0x104e, 0, NULL), | ||
239 | YAMAHA_DEVICE(0x104f, NULL), | ||
240 | YAMAHA_DEVICE(0x1050, NULL), | ||
241 | YAMAHA_DEVICE(0x1051, NULL), | ||
242 | YAMAHA_DEVICE(0x1052, NULL), | ||
243 | YAMAHA_DEVICE(0x2000, "DGP-7"), | ||
244 | YAMAHA_DEVICE(0x2001, "DGP-5"), | ||
245 | YAMAHA_DEVICE(0x2002, NULL), | ||
246 | YAMAHA_DEVICE(0x5000, "CS1D"), | ||
247 | YAMAHA_DEVICE(0x5001, "DSP1D"), | ||
248 | YAMAHA_DEVICE(0x5002, "DME32"), | ||
249 | YAMAHA_DEVICE(0x5003, "DM2000"), | ||
250 | YAMAHA_DEVICE(0x5004, "02R96"), | ||
251 | YAMAHA_DEVICE(0x5005, "ACU16-C"), | ||
252 | YAMAHA_DEVICE(0x5006, "NHB32-C"), | ||
253 | YAMAHA_DEVICE(0x5007, "DM1000"), | ||
254 | YAMAHA_DEVICE(0x5008, "01V96"), | ||
255 | YAMAHA_DEVICE(0x5009, "SPX2000"), | ||
256 | YAMAHA_DEVICE(0x500a, "PM5D"), | ||
257 | YAMAHA_DEVICE(0x500b, "DME64N"), | ||
258 | YAMAHA_DEVICE(0x500c, "DME24N"), | ||
259 | YAMAHA_DEVICE(0x500d, NULL), | ||
260 | YAMAHA_DEVICE(0x500e, NULL), | ||
261 | YAMAHA_DEVICE(0x500f, NULL), | ||
262 | YAMAHA_DEVICE(0x7000, "DTX"), | ||
263 | YAMAHA_DEVICE(0x7010, "UB99"), | ||
264 | #undef YAMAHA_DEVICE | ||
265 | #undef YAMAHA_INTERFACE | ||
266 | |||
267 | /* | ||
268 | * Roland/RolandED/Edirol/BOSS devices | ||
269 | */ | ||
270 | { | ||
271 | USB_DEVICE(0x0582, 0x0000), | ||
272 | .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { | ||
273 | .vendor_name = "Roland", | ||
274 | .product_name = "UA-100", | ||
275 | .ifnum = QUIRK_ANY_INTERFACE, | ||
276 | .type = QUIRK_COMPOSITE, | ||
277 | .data = (const struct snd_usb_audio_quirk[]) { | ||
278 | { | ||
279 | .ifnum = 0, | ||
280 | .type = QUIRK_AUDIO_FIXED_ENDPOINT, | ||
281 | .data = & (const struct audioformat) { | ||
282 | .formats = SNDRV_PCM_FMTBIT_S16_LE, | ||
283 | .channels = 4, | ||
284 | .iface = 0, | ||
285 | .altsetting = 1, | ||
286 | .altset_idx = 1, | ||
287 | .attributes = 0, | ||
288 | .endpoint = 0x01, | ||
289 | .ep_attr = 0x09, | ||
290 | .rates = SNDRV_PCM_RATE_CONTINUOUS, | ||
291 | .rate_min = 44100, | ||
292 | .rate_max = 44100, | ||
293 | } | ||
294 | }, | ||
295 | { | ||
296 | .ifnum = 1, | ||
297 | .type = QUIRK_AUDIO_FIXED_ENDPOINT, | ||
298 | .data = & (const struct audioformat) { | ||
299 | .formats = SNDRV_PCM_FMTBIT_S16_LE, | ||
300 | .channels = 2, | ||
301 | .iface = 1, | ||
302 | .altsetting = 1, | ||
303 | .altset_idx = 1, | ||
304 | .attributes = UAC_EP_CS_ATTR_FILL_MAX, | ||
305 | .endpoint = 0x81, | ||
306 | .ep_attr = 0x05, | ||
307 | .rates = SNDRV_PCM_RATE_CONTINUOUS, | ||
308 | .rate_min = 44100, | ||
309 | .rate_max = 44100, | ||
310 | } | ||
311 | }, | ||
312 | { | ||
313 | .ifnum = 2, | ||
314 | .type = QUIRK_MIDI_FIXED_ENDPOINT, | ||
315 | .data = & (const struct snd_usb_midi_endpoint_info) { | ||
316 | .out_cables = 0x0007, | ||
317 | .in_cables = 0x0007 | ||
318 | } | ||
319 | }, | ||
320 | { | ||
321 | .ifnum = -1 | ||
322 | } | ||
323 | } | ||
324 | } | ||
325 | }, | ||
326 | { | ||
327 | USB_DEVICE(0x0582, 0x0002), | ||
328 | .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { | ||
329 | .vendor_name = "EDIROL", | ||
330 | .product_name = "UM-4", | ||
331 | .ifnum = QUIRK_ANY_INTERFACE, | ||
332 | .type = QUIRK_COMPOSITE, | ||
333 | .data = (const struct snd_usb_audio_quirk[]) { | ||
334 | { | ||
335 | .ifnum = 0, | ||
336 | .type = QUIRK_IGNORE_INTERFACE | ||
337 | }, | ||
338 | { | ||
339 | .ifnum = 1, | ||
340 | .type = QUIRK_IGNORE_INTERFACE | ||
341 | }, | ||
342 | { | ||
343 | .ifnum = 2, | ||
344 | .type = QUIRK_MIDI_FIXED_ENDPOINT, | ||
345 | .data = & (const struct snd_usb_midi_endpoint_info) { | ||
346 | .out_cables = 0x000f, | ||
347 | .in_cables = 0x000f | ||
348 | } | ||
349 | }, | ||
350 | { | ||
351 | .ifnum = -1 | ||
352 | } | ||
353 | } | ||
354 | } | ||
355 | }, | ||
356 | { | ||
357 | USB_DEVICE(0x0582, 0x0003), | ||
358 | .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { | ||
359 | .vendor_name = "Roland", | ||
360 | .product_name = "SC-8850", | ||
361 | .ifnum = QUIRK_ANY_INTERFACE, | ||
362 | .type = QUIRK_COMPOSITE, | ||
363 | .data = (const struct snd_usb_audio_quirk[]) { | ||
364 | { | ||
365 | .ifnum = 0, | ||
366 | .type = QUIRK_IGNORE_INTERFACE | ||
367 | }, | ||
368 | { | ||
369 | .ifnum = 1, | ||
370 | .type = QUIRK_IGNORE_INTERFACE | ||
371 | }, | ||
372 | { | ||
373 | .ifnum = 2, | ||
374 | .type = QUIRK_MIDI_FIXED_ENDPOINT, | ||
375 | .data = & (const struct snd_usb_midi_endpoint_info) { | ||
376 | .out_cables = 0x003f, | ||
377 | .in_cables = 0x003f | ||
378 | } | ||
379 | }, | ||
380 | { | ||
381 | .ifnum = -1 | ||
382 | } | ||
383 | } | ||
384 | } | ||
385 | }, | ||
386 | { | ||
387 | USB_DEVICE(0x0582, 0x0004), | ||
388 | .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { | ||
389 | .vendor_name = "Roland", | ||
390 | .product_name = "U-8", | ||
391 | .ifnum = QUIRK_ANY_INTERFACE, | ||
392 | .type = QUIRK_COMPOSITE, | ||
393 | .data = (const struct snd_usb_audio_quirk[]) { | ||
394 | { | ||
395 | .ifnum = 0, | ||
396 | .type = QUIRK_IGNORE_INTERFACE | ||
397 | }, | ||
398 | { | ||
399 | .ifnum = 1, | ||
400 | .type = QUIRK_IGNORE_INTERFACE | ||
401 | }, | ||
402 | { | ||
403 | .ifnum = 2, | ||
404 | .type = QUIRK_MIDI_FIXED_ENDPOINT, | ||
405 | .data = & (const struct snd_usb_midi_endpoint_info) { | ||
406 | .out_cables = 0x0005, | ||
407 | .in_cables = 0x0005 | ||
408 | } | ||
409 | }, | ||
410 | { | ||
411 | .ifnum = -1 | ||
412 | } | ||
413 | } | ||
414 | } | ||
415 | }, | ||
416 | { | ||
417 | /* Has ID 0x0099 when not in "Advanced Driver" mode. | ||
418 | * The UM-2EX has only one input, but we cannot detect this. */ | ||
419 | USB_DEVICE(0x0582, 0x0005), | ||
420 | .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { | ||
421 | .vendor_name = "EDIROL", | ||
422 | .product_name = "UM-2", | ||
423 | .ifnum = QUIRK_ANY_INTERFACE, | ||
424 | .type = QUIRK_COMPOSITE, | ||
425 | .data = (const struct snd_usb_audio_quirk[]) { | ||
426 | { | ||
427 | .ifnum = 0, | ||
428 | .type = QUIRK_IGNORE_INTERFACE | ||
429 | }, | ||
430 | { | ||
431 | .ifnum = 1, | ||
432 | .type = QUIRK_IGNORE_INTERFACE | ||
433 | }, | ||
434 | { | ||
435 | .ifnum = 2, | ||
436 | .type = QUIRK_MIDI_FIXED_ENDPOINT, | ||
437 | .data = & (const struct snd_usb_midi_endpoint_info) { | ||
438 | .out_cables = 0x0003, | ||
439 | .in_cables = 0x0003 | ||
440 | } | ||
441 | }, | ||
442 | { | ||
443 | .ifnum = -1 | ||
444 | } | ||
445 | } | ||
446 | } | ||
447 | }, | ||
448 | { | ||
449 | USB_DEVICE(0x0582, 0x0007), | ||
450 | .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { | ||
451 | .vendor_name = "Roland", | ||
452 | .product_name = "SC-8820", | ||
453 | .ifnum = QUIRK_ANY_INTERFACE, | ||
454 | .type = QUIRK_COMPOSITE, | ||
455 | .data = (const struct snd_usb_audio_quirk[]) { | ||
456 | { | ||
457 | .ifnum = 0, | ||
458 | .type = QUIRK_IGNORE_INTERFACE | ||
459 | }, | ||
460 | { | ||
461 | .ifnum = 1, | ||
462 | .type = QUIRK_IGNORE_INTERFACE | ||
463 | }, | ||
464 | { | ||
465 | .ifnum = 2, | ||
466 | .type = QUIRK_MIDI_FIXED_ENDPOINT, | ||
467 | .data = & (const struct snd_usb_midi_endpoint_info) { | ||
468 | .out_cables = 0x0013, | ||
469 | .in_cables = 0x0013 | ||
470 | } | ||
471 | }, | ||
472 | { | ||
473 | .ifnum = -1 | ||
474 | } | ||
475 | } | ||
476 | } | ||
477 | }, | ||
478 | { | ||
479 | USB_DEVICE(0x0582, 0x0008), | ||
480 | .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { | ||
481 | .vendor_name = "Roland", | ||
482 | .product_name = "PC-300", | ||
483 | .ifnum = QUIRK_ANY_INTERFACE, | ||
484 | .type = QUIRK_COMPOSITE, | ||
485 | .data = (const struct snd_usb_audio_quirk[]) { | ||
486 | { | ||
487 | .ifnum = 0, | ||
488 | .type = QUIRK_IGNORE_INTERFACE | ||
489 | }, | ||
490 | { | ||
491 | .ifnum = 1, | ||
492 | .type = QUIRK_IGNORE_INTERFACE | ||
493 | }, | ||
494 | { | ||
495 | .ifnum = 2, | ||
496 | .type = QUIRK_MIDI_FIXED_ENDPOINT, | ||
497 | .data = & (const struct snd_usb_midi_endpoint_info) { | ||
498 | .out_cables = 0x0001, | ||
499 | .in_cables = 0x0001 | ||
500 | } | ||
501 | }, | ||
502 | { | ||
503 | .ifnum = -1 | ||
504 | } | ||
505 | } | ||
506 | } | ||
507 | }, | ||
508 | { | ||
509 | /* has ID 0x009d when not in "Advanced Driver" mode */ | ||
510 | USB_DEVICE(0x0582, 0x0009), | ||
511 | .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { | ||
512 | .vendor_name = "EDIROL", | ||
513 | .product_name = "UM-1", | ||
514 | .ifnum = QUIRK_ANY_INTERFACE, | ||
515 | .type = QUIRK_COMPOSITE, | ||
516 | .data = (const struct snd_usb_audio_quirk[]) { | ||
517 | { | ||
518 | .ifnum = 0, | ||
519 | .type = QUIRK_IGNORE_INTERFACE | ||
520 | }, | ||
521 | { | ||
522 | .ifnum = 1, | ||
523 | .type = QUIRK_IGNORE_INTERFACE | ||
524 | }, | ||
525 | { | ||
526 | .ifnum = 2, | ||
527 | .type = QUIRK_MIDI_FIXED_ENDPOINT, | ||
528 | .data = & (const struct snd_usb_midi_endpoint_info) { | ||
529 | .out_cables = 0x0001, | ||
530 | .in_cables = 0x0001 | ||
531 | } | ||
532 | }, | ||
533 | { | ||
534 | .ifnum = -1 | ||
535 | } | ||
536 | } | ||
537 | } | ||
538 | }, | ||
539 | { | ||
540 | USB_DEVICE(0x0582, 0x000b), | ||
541 | .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { | ||
542 | .vendor_name = "Roland", | ||
543 | .product_name = "SK-500", | ||
544 | .ifnum = QUIRK_ANY_INTERFACE, | ||
545 | .type = QUIRK_COMPOSITE, | ||
546 | .data = (const struct snd_usb_audio_quirk[]) { | ||
547 | { | ||
548 | .ifnum = 0, | ||
549 | .type = QUIRK_IGNORE_INTERFACE | ||
550 | }, | ||
551 | { | ||
552 | .ifnum = 1, | ||
553 | .type = QUIRK_IGNORE_INTERFACE | ||
554 | }, | ||
555 | { | ||
556 | .ifnum = 2, | ||
557 | .type = QUIRK_MIDI_FIXED_ENDPOINT, | ||
558 | .data = & (const struct snd_usb_midi_endpoint_info) { | ||
559 | .out_cables = 0x0013, | ||
560 | .in_cables = 0x0013 | ||
561 | } | ||
562 | }, | ||
563 | { | ||
564 | .ifnum = -1 | ||
565 | } | ||
566 | } | ||
567 | } | ||
568 | }, | ||
569 | { | ||
570 | /* thanks to Emiliano Grilli <emillo@libero.it> | ||
571 | * for helping researching this data */ | ||
572 | USB_DEVICE(0x0582, 0x000c), | ||
573 | .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { | ||
574 | .vendor_name = "Roland", | ||
575 | .product_name = "SC-D70", | ||
576 | .ifnum = QUIRK_ANY_INTERFACE, | ||
577 | .type = QUIRK_COMPOSITE, | ||
578 | .data = (const struct snd_usb_audio_quirk[]) { | ||
579 | { | ||
580 | .ifnum = 0, | ||
581 | .type = QUIRK_AUDIO_FIXED_ENDPOINT, | ||
582 | .data = & (const struct audioformat) { | ||
583 | .formats = SNDRV_PCM_FMTBIT_S24_3LE, | ||
584 | .channels = 2, | ||
585 | .iface = 0, | ||
586 | .altsetting = 1, | ||
587 | .altset_idx = 1, | ||
588 | .attributes = 0, | ||
589 | .endpoint = 0x01, | ||
590 | .ep_attr = 0x01, | ||
591 | .rates = SNDRV_PCM_RATE_CONTINUOUS, | ||
592 | .rate_min = 44100, | ||
593 | .rate_max = 44100, | ||
594 | } | ||
595 | }, | ||
596 | { | ||
597 | .ifnum = 1, | ||
598 | .type = QUIRK_AUDIO_FIXED_ENDPOINT, | ||
599 | .data = & (const struct audioformat) { | ||
600 | .formats = SNDRV_PCM_FMTBIT_S24_3LE, | ||
601 | .channels = 2, | ||
602 | .iface = 1, | ||
603 | .altsetting = 1, | ||
604 | .altset_idx = 1, | ||
605 | .attributes = 0, | ||
606 | .endpoint = 0x81, | ||
607 | .ep_attr = 0x01, | ||
608 | .rates = SNDRV_PCM_RATE_CONTINUOUS, | ||
609 | .rate_min = 44100, | ||
610 | .rate_max = 44100, | ||
611 | } | ||
612 | }, | ||
613 | { | ||
614 | .ifnum = 2, | ||
615 | .type = QUIRK_MIDI_FIXED_ENDPOINT, | ||
616 | .data = & (const struct snd_usb_midi_endpoint_info) { | ||
617 | .out_cables = 0x0007, | ||
618 | .in_cables = 0x0007 | ||
619 | } | ||
620 | }, | ||
621 | { | ||
622 | .ifnum = -1 | ||
623 | } | ||
624 | } | ||
625 | } | ||
626 | }, | ||
627 | { /* | ||
628 | * This quirk is for the "Advanced Driver" mode of the Edirol UA-5. | ||
629 | * If the advanced mode switch at the back of the unit is off, the | ||
630 | * UA-5 has ID 0x0582/0x0011 and is standard compliant (no quirks), | ||
631 | * but offers only 16-bit PCM. | ||
632 | * In advanced mode, the UA-5 will output S24_3LE samples (two | ||
633 | * channels) at the rate indicated on the front switch, including | ||
634 | * the 96kHz sample rate. | ||
635 | */ | ||
636 | USB_DEVICE(0x0582, 0x0010), | ||
637 | .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { | ||
638 | .vendor_name = "EDIROL", | ||
639 | .product_name = "UA-5", | ||
640 | .ifnum = QUIRK_ANY_INTERFACE, | ||
641 | .type = QUIRK_COMPOSITE, | ||
642 | .data = (const struct snd_usb_audio_quirk[]) { | ||
643 | { | ||
644 | .ifnum = 1, | ||
645 | .type = QUIRK_AUDIO_STANDARD_INTERFACE | ||
646 | }, | ||
647 | { | ||
648 | .ifnum = 2, | ||
649 | .type = QUIRK_AUDIO_STANDARD_INTERFACE | ||
650 | }, | ||
651 | { | ||
652 | .ifnum = -1 | ||
653 | } | ||
654 | } | ||
655 | } | ||
656 | }, | ||
657 | { | ||
658 | /* has ID 0x0013 when not in "Advanced Driver" mode */ | ||
659 | USB_DEVICE(0x0582, 0x0012), | ||
660 | .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { | ||
661 | .vendor_name = "Roland", | ||
662 | .product_name = "XV-5050", | ||
663 | .ifnum = 0, | ||
664 | .type = QUIRK_MIDI_FIXED_ENDPOINT, | ||
665 | .data = & (const struct snd_usb_midi_endpoint_info) { | ||
666 | .out_cables = 0x0001, | ||
667 | .in_cables = 0x0001 | ||
668 | } | ||
669 | } | ||
670 | }, | ||
671 | { | ||
672 | /* has ID 0x0015 when not in "Advanced Driver" mode */ | ||
673 | USB_DEVICE(0x0582, 0x0014), | ||
674 | .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { | ||
675 | .vendor_name = "EDIROL", | ||
676 | .product_name = "UM-880", | ||
677 | .ifnum = 0, | ||
678 | .type = QUIRK_MIDI_FIXED_ENDPOINT, | ||
679 | .data = & (const struct snd_usb_midi_endpoint_info) { | ||
680 | .out_cables = 0x01ff, | ||
681 | .in_cables = 0x01ff | ||
682 | } | ||
683 | } | ||
684 | }, | ||
685 | { | ||
686 | /* has ID 0x0017 when not in "Advanced Driver" mode */ | ||
687 | USB_DEVICE(0x0582, 0x0016), | ||
688 | .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { | ||
689 | .vendor_name = "EDIROL", | ||
690 | .product_name = "SD-90", | ||
691 | .ifnum = QUIRK_ANY_INTERFACE, | ||
692 | .type = QUIRK_COMPOSITE, | ||
693 | .data = (const struct snd_usb_audio_quirk[]) { | ||
694 | { | ||
695 | .ifnum = 0, | ||
696 | .type = QUIRK_IGNORE_INTERFACE | ||
697 | }, | ||
698 | { | ||
699 | .ifnum = 1, | ||
700 | .type = QUIRK_IGNORE_INTERFACE | ||
701 | }, | ||
702 | { | ||
703 | .ifnum = 2, | ||
704 | .type = QUIRK_MIDI_FIXED_ENDPOINT, | ||
705 | .data = & (const struct snd_usb_midi_endpoint_info) { | ||
706 | .out_cables = 0x000f, | ||
707 | .in_cables = 0x000f | ||
708 | } | ||
709 | }, | ||
710 | { | ||
711 | .ifnum = -1 | ||
712 | } | ||
713 | } | ||
714 | } | ||
715 | }, | ||
716 | { | ||
717 | /* has ID 0x001c when not in "Advanced Driver" mode */ | ||
718 | USB_DEVICE(0x0582, 0x001b), | ||
719 | .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { | ||
720 | .vendor_name = "Roland", | ||
721 | .product_name = "MMP-2", | ||
722 | .ifnum = QUIRK_ANY_INTERFACE, | ||
723 | .type = QUIRK_COMPOSITE, | ||
724 | .data = (const struct snd_usb_audio_quirk[]) { | ||
725 | { | ||
726 | .ifnum = 0, | ||
727 | .type = QUIRK_IGNORE_INTERFACE | ||
728 | }, | ||
729 | { | ||
730 | .ifnum = 1, | ||
731 | .type = QUIRK_IGNORE_INTERFACE | ||
732 | }, | ||
733 | { | ||
734 | .ifnum = 2, | ||
735 | .type = QUIRK_MIDI_FIXED_ENDPOINT, | ||
736 | .data = & (const struct snd_usb_midi_endpoint_info) { | ||
737 | .out_cables = 0x0001, | ||
738 | .in_cables = 0x0001 | ||
739 | } | ||
740 | }, | ||
741 | { | ||
742 | .ifnum = -1 | ||
743 | } | ||
744 | } | ||
745 | } | ||
746 | }, | ||
747 | { | ||
748 | /* has ID 0x001e when not in "Advanced Driver" mode */ | ||
749 | USB_DEVICE(0x0582, 0x001d), | ||
750 | .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { | ||
751 | .vendor_name = "Roland", | ||
752 | .product_name = "V-SYNTH", | ||
753 | .ifnum = 0, | ||
754 | .type = QUIRK_MIDI_FIXED_ENDPOINT, | ||
755 | .data = & (const struct snd_usb_midi_endpoint_info) { | ||
756 | .out_cables = 0x0001, | ||
757 | .in_cables = 0x0001 | ||
758 | } | ||
759 | } | ||
760 | }, | ||
761 | { | ||
762 | /* has ID 0x0024 when not in "Advanced Driver" mode */ | ||
763 | USB_DEVICE(0x0582, 0x0023), | ||
764 | .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { | ||
765 | .vendor_name = "EDIROL", | ||
766 | .product_name = "UM-550", | ||
767 | .ifnum = 0, | ||
768 | .type = QUIRK_MIDI_FIXED_ENDPOINT, | ||
769 | .data = & (const struct snd_usb_midi_endpoint_info) { | ||
770 | .out_cables = 0x003f, | ||
771 | .in_cables = 0x003f | ||
772 | } | ||
773 | } | ||
774 | }, | ||
775 | { | ||
776 | /* | ||
777 | * This quirk is for the "Advanced Driver" mode. If off, the UA-20 | ||
778 | * has ID 0x0026 and is standard compliant, but has only 16-bit PCM | ||
779 | * and no MIDI. | ||
780 | */ | ||
781 | USB_DEVICE(0x0582, 0x0025), | ||
782 | .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { | ||
783 | .vendor_name = "EDIROL", | ||
784 | .product_name = "UA-20", | ||
785 | .ifnum = QUIRK_ANY_INTERFACE, | ||
786 | .type = QUIRK_COMPOSITE, | ||
787 | .data = (const struct snd_usb_audio_quirk[]) { | ||
788 | { | ||
789 | .ifnum = 0, | ||
790 | .type = QUIRK_IGNORE_INTERFACE | ||
791 | }, | ||
792 | { | ||
793 | .ifnum = 1, | ||
794 | .type = QUIRK_AUDIO_FIXED_ENDPOINT, | ||
795 | .data = & (const struct audioformat) { | ||
796 | .formats = SNDRV_PCM_FMTBIT_S24_3LE, | ||
797 | .channels = 2, | ||
798 | .iface = 1, | ||
799 | .altsetting = 1, | ||
800 | .altset_idx = 1, | ||
801 | .attributes = 0, | ||
802 | .endpoint = 0x01, | ||
803 | .ep_attr = 0x01, | ||
804 | .rates = SNDRV_PCM_RATE_CONTINUOUS, | ||
805 | .rate_min = 44100, | ||
806 | .rate_max = 44100, | ||
807 | } | ||
808 | }, | ||
809 | { | ||
810 | .ifnum = 2, | ||
811 | .type = QUIRK_AUDIO_FIXED_ENDPOINT, | ||
812 | .data = & (const struct audioformat) { | ||
813 | .formats = SNDRV_PCM_FMTBIT_S24_3LE, | ||
814 | .channels = 2, | ||
815 | .iface = 2, | ||
816 | .altsetting = 1, | ||
817 | .altset_idx = 1, | ||
818 | .attributes = 0, | ||
819 | .endpoint = 0x82, | ||
820 | .ep_attr = 0x01, | ||
821 | .rates = SNDRV_PCM_RATE_CONTINUOUS, | ||
822 | .rate_min = 44100, | ||
823 | .rate_max = 44100, | ||
824 | } | ||
825 | }, | ||
826 | { | ||
827 | .ifnum = 3, | ||
828 | .type = QUIRK_MIDI_FIXED_ENDPOINT, | ||
829 | .data = & (const struct snd_usb_midi_endpoint_info) { | ||
830 | .out_cables = 0x0001, | ||
831 | .in_cables = 0x0001 | ||
832 | } | ||
833 | }, | ||
834 | { | ||
835 | .ifnum = -1 | ||
836 | } | ||
837 | } | ||
838 | } | ||
839 | }, | ||
840 | { | ||
841 | /* has ID 0x0028 when not in "Advanced Driver" mode */ | ||
842 | USB_DEVICE(0x0582, 0x0027), | ||
843 | .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { | ||
844 | .vendor_name = "EDIROL", | ||
845 | .product_name = "SD-20", | ||
846 | .ifnum = 0, | ||
847 | .type = QUIRK_MIDI_FIXED_ENDPOINT, | ||
848 | .data = & (const struct snd_usb_midi_endpoint_info) { | ||
849 | .out_cables = 0x0003, | ||
850 | .in_cables = 0x0007 | ||
851 | } | ||
852 | } | ||
853 | }, | ||
854 | { | ||
855 | /* has ID 0x002a when not in "Advanced Driver" mode */ | ||
856 | USB_DEVICE(0x0582, 0x0029), | ||
857 | .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { | ||
858 | .vendor_name = "EDIROL", | ||
859 | .product_name = "SD-80", | ||
860 | .ifnum = 0, | ||
861 | .type = QUIRK_MIDI_FIXED_ENDPOINT, | ||
862 | .data = & (const struct snd_usb_midi_endpoint_info) { | ||
863 | .out_cables = 0x000f, | ||
864 | .in_cables = 0x000f | ||
865 | } | ||
866 | } | ||
867 | }, | ||
868 | { /* | ||
869 | * This quirk is for the "Advanced" modes of the Edirol UA-700. | ||
870 | * If the sample format switch is not in an advanced setting, the | ||
871 | * UA-700 has ID 0x0582/0x002c and is standard compliant (no quirks), | ||
872 | * but offers only 16-bit PCM and no MIDI. | ||
873 | */ | ||
874 | USB_DEVICE_VENDOR_SPEC(0x0582, 0x002b), | ||
875 | .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { | ||
876 | .vendor_name = "EDIROL", | ||
877 | .product_name = "UA-700", | ||
878 | .ifnum = QUIRK_ANY_INTERFACE, | ||
879 | .type = QUIRK_COMPOSITE, | ||
880 | .data = (const struct snd_usb_audio_quirk[]) { | ||
881 | { | ||
882 | .ifnum = 1, | ||
883 | .type = QUIRK_AUDIO_EDIROL_UAXX | ||
884 | }, | ||
885 | { | ||
886 | .ifnum = 2, | ||
887 | .type = QUIRK_AUDIO_EDIROL_UAXX | ||
888 | }, | ||
889 | { | ||
890 | .ifnum = 3, | ||
891 | .type = QUIRK_AUDIO_EDIROL_UAXX | ||
892 | }, | ||
893 | { | ||
894 | .ifnum = -1 | ||
895 | } | ||
896 | } | ||
897 | } | ||
898 | }, | ||
899 | { | ||
900 | /* has ID 0x002e when not in "Advanced Driver" mode */ | ||
901 | USB_DEVICE(0x0582, 0x002d), | ||
902 | .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { | ||
903 | .vendor_name = "Roland", | ||
904 | .product_name = "XV-2020", | ||
905 | .ifnum = 0, | ||
906 | .type = QUIRK_MIDI_FIXED_ENDPOINT, | ||
907 | .data = & (const struct snd_usb_midi_endpoint_info) { | ||
908 | .out_cables = 0x0001, | ||
909 | .in_cables = 0x0001 | ||
910 | } | ||
911 | } | ||
912 | }, | ||
913 | { | ||
914 | /* has ID 0x0030 when not in "Advanced Driver" mode */ | ||
915 | USB_DEVICE(0x0582, 0x002f), | ||
916 | .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { | ||
917 | .vendor_name = "Roland", | ||
918 | .product_name = "VariOS", | ||
919 | .ifnum = 0, | ||
920 | .type = QUIRK_MIDI_FIXED_ENDPOINT, | ||
921 | .data = & (const struct snd_usb_midi_endpoint_info) { | ||
922 | .out_cables = 0x0007, | ||
923 | .in_cables = 0x0007 | ||
924 | } | ||
925 | } | ||
926 | }, | ||
927 | { | ||
928 | /* has ID 0x0034 when not in "Advanced Driver" mode */ | ||
929 | USB_DEVICE(0x0582, 0x0033), | ||
930 | .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { | ||
931 | .vendor_name = "EDIROL", | ||
932 | .product_name = "PCR", | ||
933 | .ifnum = 0, | ||
934 | .type = QUIRK_MIDI_FIXED_ENDPOINT, | ||
935 | .data = & (const struct snd_usb_midi_endpoint_info) { | ||
936 | .out_cables = 0x0003, | ||
937 | .in_cables = 0x0007 | ||
938 | } | ||
939 | } | ||
940 | }, | ||
941 | /* TODO: add Roland M-1000 support */ | ||
942 | { | ||
943 | /* | ||
944 | * Has ID 0x0038 when not in "Advanced Driver" mode; | ||
945 | * later revisions use IDs 0x0054 and 0x00a2. | ||
946 | */ | ||
947 | USB_DEVICE(0x0582, 0x0037), | ||
948 | .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { | ||
949 | .vendor_name = "Roland", | ||
950 | .product_name = "Digital Piano", | ||
951 | .ifnum = 0, | ||
952 | .type = QUIRK_MIDI_FIXED_ENDPOINT, | ||
953 | .data = & (const struct snd_usb_midi_endpoint_info) { | ||
954 | .out_cables = 0x0001, | ||
955 | .in_cables = 0x0001 | ||
956 | } | ||
957 | } | ||
958 | }, | ||
959 | { | ||
960 | /* | ||
961 | * This quirk is for the "Advanced Driver" mode. If off, the GS-10 | ||
962 | * has ID 0x003c and is standard compliant, but has only 16-bit PCM | ||
963 | * and no MIDI. | ||
964 | */ | ||
965 | USB_DEVICE_VENDOR_SPEC(0x0582, 0x003b), | ||
966 | .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { | ||
967 | .vendor_name = "BOSS", | ||
968 | .product_name = "GS-10", | ||
969 | .ifnum = QUIRK_ANY_INTERFACE, | ||
970 | .type = QUIRK_COMPOSITE, | ||
971 | .data = & (const struct snd_usb_audio_quirk[]) { | ||
972 | { | ||
973 | .ifnum = 1, | ||
974 | .type = QUIRK_AUDIO_STANDARD_INTERFACE | ||
975 | }, | ||
976 | { | ||
977 | .ifnum = 2, | ||
978 | .type = QUIRK_AUDIO_STANDARD_INTERFACE | ||
979 | }, | ||
980 | { | ||
981 | .ifnum = 3, | ||
982 | .type = QUIRK_MIDI_STANDARD_INTERFACE | ||
983 | }, | ||
984 | { | ||
985 | .ifnum = -1 | ||
986 | } | ||
987 | } | ||
988 | } | ||
989 | }, | ||
990 | { | ||
991 | /* has ID 0x0041 when not in "Advanced Driver" mode */ | ||
992 | USB_DEVICE(0x0582, 0x0040), | ||
993 | .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { | ||
994 | .vendor_name = "Roland", | ||
995 | .product_name = "GI-20", | ||
996 | .ifnum = 0, | ||
997 | .type = QUIRK_MIDI_FIXED_ENDPOINT, | ||
998 | .data = & (const struct snd_usb_midi_endpoint_info) { | ||
999 | .out_cables = 0x0001, | ||
1000 | .in_cables = 0x0001 | ||
1001 | } | ||
1002 | } | ||
1003 | }, | ||
1004 | { | ||
1005 | /* has ID 0x0043 when not in "Advanced Driver" mode */ | ||
1006 | USB_DEVICE(0x0582, 0x0042), | ||
1007 | .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { | ||
1008 | .vendor_name = "Roland", | ||
1009 | .product_name = "RS-70", | ||
1010 | .ifnum = 0, | ||
1011 | .type = QUIRK_MIDI_FIXED_ENDPOINT, | ||
1012 | .data = & (const struct snd_usb_midi_endpoint_info) { | ||
1013 | .out_cables = 0x0001, | ||
1014 | .in_cables = 0x0001 | ||
1015 | } | ||
1016 | } | ||
1017 | }, | ||
1018 | { | ||
1019 | /* has ID 0x0049 when not in "Advanced Driver" mode */ | ||
1020 | USB_DEVICE(0x0582, 0x0047), | ||
1021 | .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { | ||
1022 | /* .vendor_name = "EDIROL", */ | ||
1023 | /* .product_name = "UR-80", */ | ||
1024 | .ifnum = QUIRK_ANY_INTERFACE, | ||
1025 | .type = QUIRK_COMPOSITE, | ||
1026 | .data = (const struct snd_usb_audio_quirk[]) { | ||
1027 | /* in the 96 kHz modes, only interface 1 is there */ | ||
1028 | { | ||
1029 | .ifnum = 1, | ||
1030 | .type = QUIRK_AUDIO_STANDARD_INTERFACE | ||
1031 | }, | ||
1032 | { | ||
1033 | .ifnum = 2, | ||
1034 | .type = QUIRK_AUDIO_STANDARD_INTERFACE | ||
1035 | }, | ||
1036 | { | ||
1037 | .ifnum = -1 | ||
1038 | } | ||
1039 | } | ||
1040 | } | ||
1041 | }, | ||
1042 | { | ||
1043 | /* has ID 0x004a when not in "Advanced Driver" mode */ | ||
1044 | USB_DEVICE(0x0582, 0x0048), | ||
1045 | .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { | ||
1046 | /* .vendor_name = "EDIROL", */ | ||
1047 | /* .product_name = "UR-80", */ | ||
1048 | .ifnum = 0, | ||
1049 | .type = QUIRK_MIDI_FIXED_ENDPOINT, | ||
1050 | .data = & (const struct snd_usb_midi_endpoint_info) { | ||
1051 | .out_cables = 0x0003, | ||
1052 | .in_cables = 0x0007 | ||
1053 | } | ||
1054 | } | ||
1055 | }, | ||
1056 | /* TODO: add Edirol M-100FX support */ | ||
1057 | { | ||
1058 | /* has ID 0x004e when not in "Advanced Driver" mode */ | ||
1059 | USB_DEVICE(0x0582, 0x004c), | ||
1060 | .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { | ||
1061 | .vendor_name = "EDIROL", | ||
1062 | .product_name = "PCR-A", | ||
1063 | .ifnum = QUIRK_ANY_INTERFACE, | ||
1064 | .type = QUIRK_COMPOSITE, | ||
1065 | .data = (const struct snd_usb_audio_quirk[]) { | ||
1066 | { | ||
1067 | .ifnum = 1, | ||
1068 | .type = QUIRK_AUDIO_STANDARD_INTERFACE | ||
1069 | }, | ||
1070 | { | ||
1071 | .ifnum = 2, | ||
1072 | .type = QUIRK_AUDIO_STANDARD_INTERFACE | ||
1073 | }, | ||
1074 | { | ||
1075 | .ifnum = -1 | ||
1076 | } | ||
1077 | } | ||
1078 | } | ||
1079 | }, | ||
1080 | { | ||
1081 | /* has ID 0x004f when not in "Advanced Driver" mode */ | ||
1082 | USB_DEVICE(0x0582, 0x004d), | ||
1083 | .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { | ||
1084 | .vendor_name = "EDIROL", | ||
1085 | .product_name = "PCR-A", | ||
1086 | .ifnum = 0, | ||
1087 | .type = QUIRK_MIDI_FIXED_ENDPOINT, | ||
1088 | .data = & (const struct snd_usb_midi_endpoint_info) { | ||
1089 | .out_cables = 0x0003, | ||
1090 | .in_cables = 0x0007 | ||
1091 | } | ||
1092 | } | ||
1093 | }, | ||
1094 | { | ||
1095 | /* | ||
1096 | * This quirk is for the "Advanced Driver" mode. If off, the UA-3FX | ||
1097 | * is standard compliant, but has only 16-bit PCM. | ||
1098 | */ | ||
1099 | USB_DEVICE(0x0582, 0x0050), | ||
1100 | .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { | ||
1101 | .vendor_name = "EDIROL", | ||
1102 | .product_name = "UA-3FX", | ||
1103 | .ifnum = QUIRK_ANY_INTERFACE, | ||
1104 | .type = QUIRK_COMPOSITE, | ||
1105 | .data = (const struct snd_usb_audio_quirk[]) { | ||
1106 | { | ||
1107 | .ifnum = 1, | ||
1108 | .type = QUIRK_AUDIO_STANDARD_INTERFACE | ||
1109 | }, | ||
1110 | { | ||
1111 | .ifnum = 2, | ||
1112 | .type = QUIRK_AUDIO_STANDARD_INTERFACE | ||
1113 | }, | ||
1114 | { | ||
1115 | .ifnum = -1 | ||
1116 | } | ||
1117 | } | ||
1118 | } | ||
1119 | }, | ||
1120 | { | ||
1121 | USB_DEVICE(0x0582, 0x0052), | ||
1122 | .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { | ||
1123 | .vendor_name = "EDIROL", | ||
1124 | .product_name = "UM-1SX", | ||
1125 | .ifnum = 0, | ||
1126 | .type = QUIRK_MIDI_STANDARD_INTERFACE | ||
1127 | } | ||
1128 | }, | ||
1129 | { | ||
1130 | USB_DEVICE(0x0582, 0x0060), | ||
1131 | .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { | ||
1132 | .vendor_name = "Roland", | ||
1133 | .product_name = "EXR Series", | ||
1134 | .ifnum = 0, | ||
1135 | .type = QUIRK_MIDI_STANDARD_INTERFACE | ||
1136 | } | ||
1137 | }, | ||
1138 | { | ||
1139 | /* has ID 0x0067 when not in "Advanced Driver" mode */ | ||
1140 | USB_DEVICE(0x0582, 0x0065), | ||
1141 | .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { | ||
1142 | .vendor_name = "EDIROL", | ||
1143 | .product_name = "PCR-1", | ||
1144 | .ifnum = 0, | ||
1145 | .type = QUIRK_MIDI_FIXED_ENDPOINT, | ||
1146 | .data = & (const struct snd_usb_midi_endpoint_info) { | ||
1147 | .out_cables = 0x0001, | ||
1148 | .in_cables = 0x0003 | ||
1149 | } | ||
1150 | } | ||
1151 | }, | ||
1152 | { | ||
1153 | /* has ID 0x006b when not in "Advanced Driver" mode */ | ||
1154 | USB_DEVICE_VENDOR_SPEC(0x0582, 0x006a), | ||
1155 | .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { | ||
1156 | .vendor_name = "Roland", | ||
1157 | .product_name = "SP-606", | ||
1158 | .ifnum = 3, | ||
1159 | .type = QUIRK_MIDI_FIXED_ENDPOINT, | ||
1160 | .data = & (const struct snd_usb_midi_endpoint_info) { | ||
1161 | .out_cables = 0x0001, | ||
1162 | .in_cables = 0x0001 | ||
1163 | } | ||
1164 | } | ||
1165 | }, | ||
1166 | { | ||
1167 | /* has ID 0x006e when not in "Advanced Driver" mode */ | ||
1168 | USB_DEVICE(0x0582, 0x006d), | ||
1169 | .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { | ||
1170 | .vendor_name = "Roland", | ||
1171 | .product_name = "FANTOM-X", | ||
1172 | .ifnum = 0, | ||
1173 | .type = QUIRK_MIDI_FIXED_ENDPOINT, | ||
1174 | .data = & (const struct snd_usb_midi_endpoint_info) { | ||
1175 | .out_cables = 0x0001, | ||
1176 | .in_cables = 0x0001 | ||
1177 | } | ||
1178 | } | ||
1179 | }, | ||
1180 | { /* | ||
1181 | * This quirk is for the "Advanced" modes of the Edirol UA-25. | ||
1182 | * If the switch is not in an advanced setting, the UA-25 has | ||
1183 | * ID 0x0582/0x0073 and is standard compliant (no quirks), but | ||
1184 | * offers only 16-bit PCM at 44.1 kHz and no MIDI. | ||
1185 | */ | ||
1186 | USB_DEVICE_VENDOR_SPEC(0x0582, 0x0074), | ||
1187 | .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { | ||
1188 | .vendor_name = "EDIROL", | ||
1189 | .product_name = "UA-25", | ||
1190 | .ifnum = QUIRK_ANY_INTERFACE, | ||
1191 | .type = QUIRK_COMPOSITE, | ||
1192 | .data = (const struct snd_usb_audio_quirk[]) { | ||
1193 | { | ||
1194 | .ifnum = 0, | ||
1195 | .type = QUIRK_AUDIO_EDIROL_UAXX | ||
1196 | }, | ||
1197 | { | ||
1198 | .ifnum = 1, | ||
1199 | .type = QUIRK_AUDIO_EDIROL_UAXX | ||
1200 | }, | ||
1201 | { | ||
1202 | .ifnum = 2, | ||
1203 | .type = QUIRK_AUDIO_EDIROL_UAXX | ||
1204 | }, | ||
1205 | { | ||
1206 | .ifnum = -1 | ||
1207 | } | ||
1208 | } | ||
1209 | } | ||
1210 | }, | ||
1211 | { | ||
1212 | /* has ID 0x0076 when not in "Advanced Driver" mode */ | ||
1213 | USB_DEVICE(0x0582, 0x0075), | ||
1214 | .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { | ||
1215 | .vendor_name = "BOSS", | ||
1216 | .product_name = "DR-880", | ||
1217 | .ifnum = 0, | ||
1218 | .type = QUIRK_MIDI_FIXED_ENDPOINT, | ||
1219 | .data = & (const struct snd_usb_midi_endpoint_info) { | ||
1220 | .out_cables = 0x0001, | ||
1221 | .in_cables = 0x0001 | ||
1222 | } | ||
1223 | } | ||
1224 | }, | ||
1225 | { | ||
1226 | /* has ID 0x007b when not in "Advanced Driver" mode */ | ||
1227 | USB_DEVICE_VENDOR_SPEC(0x0582, 0x007a), | ||
1228 | .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { | ||
1229 | .vendor_name = "Roland", | ||
1230 | /* "RD" or "RD-700SX"? */ | ||
1231 | .ifnum = 0, | ||
1232 | .type = QUIRK_MIDI_FIXED_ENDPOINT, | ||
1233 | .data = & (const struct snd_usb_midi_endpoint_info) { | ||
1234 | .out_cables = 0x0003, | ||
1235 | .in_cables = 0x0003 | ||
1236 | } | ||
1237 | } | ||
1238 | }, | ||
1239 | { | ||
1240 | /* has ID 0x0081 when not in "Advanced Driver" mode */ | ||
1241 | USB_DEVICE(0x0582, 0x0080), | ||
1242 | .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { | ||
1243 | .vendor_name = "Roland", | ||
1244 | .product_name = "G-70", | ||
1245 | .ifnum = 0, | ||
1246 | .type = QUIRK_MIDI_FIXED_ENDPOINT, | ||
1247 | .data = & (const struct snd_usb_midi_endpoint_info) { | ||
1248 | .out_cables = 0x0001, | ||
1249 | .in_cables = 0x0001 | ||
1250 | } | ||
1251 | } | ||
1252 | }, | ||
1253 | /* TODO: add Roland V-SYNTH XT support */ | ||
1254 | /* TODO: add BOSS GT-PRO support */ | ||
1255 | { | ||
1256 | /* has ID 0x008c when not in "Advanced Driver" mode */ | ||
1257 | USB_DEVICE(0x0582, 0x008b), | ||
1258 | .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { | ||
1259 | .vendor_name = "EDIROL", | ||
1260 | .product_name = "PC-50", | ||
1261 | .ifnum = 0, | ||
1262 | .type = QUIRK_MIDI_FIXED_ENDPOINT, | ||
1263 | .data = & (const struct snd_usb_midi_endpoint_info) { | ||
1264 | .out_cables = 0x0001, | ||
1265 | .in_cables = 0x0001 | ||
1266 | } | ||
1267 | } | ||
1268 | }, | ||
1269 | /* TODO: add Edirol PC-80 support */ | ||
1270 | { | ||
1271 | USB_DEVICE(0x0582, 0x0096), | ||
1272 | .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { | ||
1273 | .vendor_name = "EDIROL", | ||
1274 | .product_name = "UA-1EX", | ||
1275 | .ifnum = QUIRK_ANY_INTERFACE, | ||
1276 | .type = QUIRK_COMPOSITE, | ||
1277 | .data = (const struct snd_usb_audio_quirk[]) { | ||
1278 | { | ||
1279 | .ifnum = 0, | ||
1280 | .type = QUIRK_AUDIO_STANDARD_INTERFACE | ||
1281 | }, | ||
1282 | { | ||
1283 | .ifnum = 1, | ||
1284 | .type = QUIRK_AUDIO_STANDARD_INTERFACE | ||
1285 | }, | ||
1286 | { | ||
1287 | .ifnum = -1 | ||
1288 | } | ||
1289 | } | ||
1290 | } | ||
1291 | }, | ||
1292 | { | ||
1293 | USB_DEVICE(0x0582, 0x009a), | ||
1294 | .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { | ||
1295 | .vendor_name = "EDIROL", | ||
1296 | .product_name = "UM-3EX", | ||
1297 | .ifnum = 0, | ||
1298 | .type = QUIRK_MIDI_FIXED_ENDPOINT, | ||
1299 | .data = & (const struct snd_usb_midi_endpoint_info) { | ||
1300 | .out_cables = 0x000f, | ||
1301 | .in_cables = 0x000f | ||
1302 | } | ||
1303 | } | ||
1304 | }, | ||
1305 | { | ||
1306 | /* | ||
1307 | * This quirk is for the "Advanced Driver" mode. If off, the UA-4FX | ||
1308 | * is standard compliant, but has only 16-bit PCM and no MIDI. | ||
1309 | */ | ||
1310 | USB_DEVICE(0x0582, 0x00a3), | ||
1311 | .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { | ||
1312 | .vendor_name = "EDIROL", | ||
1313 | .product_name = "UA-4FX", | ||
1314 | .ifnum = QUIRK_ANY_INTERFACE, | ||
1315 | .type = QUIRK_COMPOSITE, | ||
1316 | .data = (const struct snd_usb_audio_quirk[]) { | ||
1317 | { | ||
1318 | .ifnum = 0, | ||
1319 | .type = QUIRK_AUDIO_EDIROL_UAXX | ||
1320 | }, | ||
1321 | { | ||
1322 | .ifnum = 1, | ||
1323 | .type = QUIRK_AUDIO_EDIROL_UAXX | ||
1324 | }, | ||
1325 | { | ||
1326 | .ifnum = 2, | ||
1327 | .type = QUIRK_AUDIO_EDIROL_UAXX | ||
1328 | }, | ||
1329 | { | ||
1330 | .ifnum = -1 | ||
1331 | } | ||
1332 | } | ||
1333 | } | ||
1334 | }, | ||
1335 | /* TODO: add Edirol MD-P1 support */ | ||
1336 | { | ||
1337 | USB_DEVICE(0x582, 0x00a6), | ||
1338 | .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { | ||
1339 | .vendor_name = "Roland", | ||
1340 | .product_name = "Juno-G", | ||
1341 | .ifnum = 0, | ||
1342 | .type = QUIRK_MIDI_FIXED_ENDPOINT, | ||
1343 | .data = & (const struct snd_usb_midi_endpoint_info) { | ||
1344 | .out_cables = 0x0001, | ||
1345 | .in_cables = 0x0001 | ||
1346 | } | ||
1347 | } | ||
1348 | }, | ||
1349 | { | ||
1350 | /* Roland SH-201 */ | ||
1351 | USB_DEVICE(0x0582, 0x00ad), | ||
1352 | .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { | ||
1353 | .vendor_name = "Roland", | ||
1354 | .product_name = "SH-201", | ||
1355 | .ifnum = QUIRK_ANY_INTERFACE, | ||
1356 | .type = QUIRK_COMPOSITE, | ||
1357 | .data = (const struct snd_usb_audio_quirk[]) { | ||
1358 | { | ||
1359 | .ifnum = 0, | ||
1360 | .type = QUIRK_AUDIO_STANDARD_INTERFACE | ||
1361 | }, | ||
1362 | { | ||
1363 | .ifnum = 1, | ||
1364 | .type = QUIRK_AUDIO_STANDARD_INTERFACE | ||
1365 | }, | ||
1366 | { | ||
1367 | .ifnum = 2, | ||
1368 | .type = QUIRK_MIDI_FIXED_ENDPOINT, | ||
1369 | .data = & (const struct snd_usb_midi_endpoint_info) { | ||
1370 | .out_cables = 0x0001, | ||
1371 | .in_cables = 0x0001 | ||
1372 | } | ||
1373 | }, | ||
1374 | { | ||
1375 | .ifnum = -1 | ||
1376 | } | ||
1377 | } | ||
1378 | } | ||
1379 | }, | ||
1380 | { | ||
1381 | /* Roland SonicCell */ | ||
1382 | USB_DEVICE(0x0582, 0x00c2), | ||
1383 | .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { | ||
1384 | .vendor_name = "Roland", | ||
1385 | .product_name = "SonicCell", | ||
1386 | .ifnum = QUIRK_ANY_INTERFACE, | ||
1387 | .type = QUIRK_COMPOSITE, | ||
1388 | .data = (const struct snd_usb_audio_quirk[]) { | ||
1389 | { | ||
1390 | .ifnum = 0, | ||
1391 | .type = QUIRK_AUDIO_STANDARD_INTERFACE | ||
1392 | }, | ||
1393 | { | ||
1394 | .ifnum = 1, | ||
1395 | .type = QUIRK_AUDIO_STANDARD_INTERFACE | ||
1396 | }, | ||
1397 | { | ||
1398 | .ifnum = 2, | ||
1399 | .type = QUIRK_MIDI_FIXED_ENDPOINT, | ||
1400 | .data = & (const struct snd_usb_midi_endpoint_info) { | ||
1401 | .out_cables = 0x0001, | ||
1402 | .in_cables = 0x0001 | ||
1403 | } | ||
1404 | }, | ||
1405 | { | ||
1406 | .ifnum = -1 | ||
1407 | } | ||
1408 | } | ||
1409 | } | ||
1410 | }, | ||
1411 | { | ||
1412 | /* Edirol M-16DX */ | ||
1413 | /* FIXME: This quirk gives a good-working capture stream but the | ||
1414 | * playback seems problematic because of lacking of sync | ||
1415 | * with capture stream. It needs to sync with the capture | ||
1416 | * clock. As now, you'll get frequent sound distortions | ||
1417 | * via the playback. | ||
1418 | */ | ||
1419 | USB_DEVICE(0x0582, 0x00c4), | ||
1420 | .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { | ||
1421 | .ifnum = QUIRK_ANY_INTERFACE, | ||
1422 | .type = QUIRK_COMPOSITE, | ||
1423 | .data = (const struct snd_usb_audio_quirk[]) { | ||
1424 | { | ||
1425 | .ifnum = 0, | ||
1426 | .type = QUIRK_AUDIO_STANDARD_INTERFACE | ||
1427 | }, | ||
1428 | { | ||
1429 | .ifnum = 1, | ||
1430 | .type = QUIRK_AUDIO_STANDARD_INTERFACE | ||
1431 | }, | ||
1432 | { | ||
1433 | .ifnum = 2, | ||
1434 | .type = QUIRK_MIDI_FIXED_ENDPOINT, | ||
1435 | .data = & (const struct snd_usb_midi_endpoint_info) { | ||
1436 | .out_cables = 0x0001, | ||
1437 | .in_cables = 0x0001 | ||
1438 | } | ||
1439 | }, | ||
1440 | { | ||
1441 | .ifnum = -1 | ||
1442 | } | ||
1443 | } | ||
1444 | } | ||
1445 | }, | ||
1446 | { | ||
1447 | /* BOSS GT-10 */ | ||
1448 | USB_DEVICE(0x0582, 0x00da), | ||
1449 | .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { | ||
1450 | .ifnum = QUIRK_ANY_INTERFACE, | ||
1451 | .type = QUIRK_COMPOSITE, | ||
1452 | .data = (const struct snd_usb_audio_quirk[]) { | ||
1453 | { | ||
1454 | .ifnum = 0, | ||
1455 | .type = QUIRK_AUDIO_STANDARD_INTERFACE | ||
1456 | }, | ||
1457 | { | ||
1458 | .ifnum = 1, | ||
1459 | .type = QUIRK_AUDIO_STANDARD_INTERFACE | ||
1460 | }, | ||
1461 | { | ||
1462 | .ifnum = 2, | ||
1463 | .type = QUIRK_MIDI_FIXED_ENDPOINT, | ||
1464 | .data = & (const struct snd_usb_midi_endpoint_info) { | ||
1465 | .out_cables = 0x0001, | ||
1466 | .in_cables = 0x0001 | ||
1467 | } | ||
1468 | }, | ||
1469 | { | ||
1470 | .ifnum = -1 | ||
1471 | } | ||
1472 | } | ||
1473 | } | ||
1474 | }, | ||
1475 | { | ||
1476 | /* Advanced modes of the Edirol UA-25EX. | ||
1477 | * For the standard mode, UA-25EX has ID 0582:00e7, which | ||
1478 | * offers only 16-bit PCM at 44.1 kHz and no MIDI. | ||
1479 | */ | ||
1480 | USB_DEVICE_VENDOR_SPEC(0x0582, 0x00e6), | ||
1481 | .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { | ||
1482 | .vendor_name = "EDIROL", | ||
1483 | .product_name = "UA-25EX", | ||
1484 | .ifnum = QUIRK_ANY_INTERFACE, | ||
1485 | .type = QUIRK_COMPOSITE, | ||
1486 | .data = (const struct snd_usb_audio_quirk[]) { | ||
1487 | { | ||
1488 | .ifnum = 0, | ||
1489 | .type = QUIRK_AUDIO_EDIROL_UAXX | ||
1490 | }, | ||
1491 | { | ||
1492 | .ifnum = 1, | ||
1493 | .type = QUIRK_AUDIO_EDIROL_UAXX | ||
1494 | }, | ||
1495 | { | ||
1496 | .ifnum = 2, | ||
1497 | .type = QUIRK_AUDIO_EDIROL_UAXX | ||
1498 | }, | ||
1499 | { | ||
1500 | .ifnum = -1 | ||
1501 | } | ||
1502 | } | ||
1503 | } | ||
1504 | }, | ||
1505 | { | ||
1506 | /* has ID 0x00ea when not in Advanced Driver mode */ | ||
1507 | USB_DEVICE_VENDOR_SPEC(0x0582, 0x00e9), | ||
1508 | .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { | ||
1509 | /* .vendor_name = "Roland", */ | ||
1510 | /* .product_name = "UA-1G", */ | ||
1511 | .ifnum = QUIRK_ANY_INTERFACE, | ||
1512 | .type = QUIRK_COMPOSITE, | ||
1513 | .data = (const struct snd_usb_audio_quirk[]) { | ||
1514 | { | ||
1515 | .ifnum = 0, | ||
1516 | .type = QUIRK_AUDIO_STANDARD_INTERFACE | ||
1517 | }, | ||
1518 | { | ||
1519 | .ifnum = 1, | ||
1520 | .type = QUIRK_AUDIO_STANDARD_INTERFACE | ||
1521 | }, | ||
1522 | { | ||
1523 | .ifnum = -1 | ||
1524 | } | ||
1525 | } | ||
1526 | } | ||
1527 | }, | ||
1528 | |||
1529 | /* Guillemot devices */ | ||
1530 | { | ||
1531 | /* | ||
1532 | * This is for the "Windows Edition" where the external MIDI ports are | ||
1533 | * the only MIDI ports; the control data is reported through HID | ||
1534 | * interfaces. The "Macintosh Edition" has ID 0xd002 and uses standard | ||
1535 | * compliant USB MIDI ports for external MIDI and controls. | ||
1536 | */ | ||
1537 | USB_DEVICE_VENDOR_SPEC(0x06f8, 0xb000), | ||
1538 | .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { | ||
1539 | .vendor_name = "Hercules", | ||
1540 | .product_name = "DJ Console (WE)", | ||
1541 | .ifnum = 4, | ||
1542 | .type = QUIRK_MIDI_FIXED_ENDPOINT, | ||
1543 | .data = & (const struct snd_usb_midi_endpoint_info) { | ||
1544 | .out_cables = 0x0001, | ||
1545 | .in_cables = 0x0001 | ||
1546 | } | ||
1547 | } | ||
1548 | }, | ||
1549 | |||
1550 | /* Midiman/M-Audio devices */ | ||
1551 | { | ||
1552 | USB_DEVICE_VENDOR_SPEC(0x0763, 0x1002), | ||
1553 | .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { | ||
1554 | .vendor_name = "M-Audio", | ||
1555 | .product_name = "MidiSport 2x2", | ||
1556 | .ifnum = QUIRK_ANY_INTERFACE, | ||
1557 | .type = QUIRK_MIDI_MIDIMAN, | ||
1558 | .data = & (const struct snd_usb_midi_endpoint_info) { | ||
1559 | .out_cables = 0x0003, | ||
1560 | .in_cables = 0x0003 | ||
1561 | } | ||
1562 | } | ||
1563 | }, | ||
1564 | { | ||
1565 | USB_DEVICE_VENDOR_SPEC(0x0763, 0x1011), | ||
1566 | .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { | ||
1567 | .vendor_name = "M-Audio", | ||
1568 | .product_name = "MidiSport 1x1", | ||
1569 | .ifnum = QUIRK_ANY_INTERFACE, | ||
1570 | .type = QUIRK_MIDI_MIDIMAN, | ||
1571 | .data = & (const struct snd_usb_midi_endpoint_info) { | ||
1572 | .out_cables = 0x0001, | ||
1573 | .in_cables = 0x0001 | ||
1574 | } | ||
1575 | } | ||
1576 | }, | ||
1577 | { | ||
1578 | USB_DEVICE_VENDOR_SPEC(0x0763, 0x1015), | ||
1579 | .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { | ||
1580 | .vendor_name = "M-Audio", | ||
1581 | .product_name = "Keystation", | ||
1582 | .ifnum = QUIRK_ANY_INTERFACE, | ||
1583 | .type = QUIRK_MIDI_MIDIMAN, | ||
1584 | .data = & (const struct snd_usb_midi_endpoint_info) { | ||
1585 | .out_cables = 0x0001, | ||
1586 | .in_cables = 0x0001 | ||
1587 | } | ||
1588 | } | ||
1589 | }, | ||
1590 | { | ||
1591 | USB_DEVICE_VENDOR_SPEC(0x0763, 0x1021), | ||
1592 | .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { | ||
1593 | .vendor_name = "M-Audio", | ||
1594 | .product_name = "MidiSport 4x4", | ||
1595 | .ifnum = QUIRK_ANY_INTERFACE, | ||
1596 | .type = QUIRK_MIDI_MIDIMAN, | ||
1597 | .data = & (const struct snd_usb_midi_endpoint_info) { | ||
1598 | .out_cables = 0x000f, | ||
1599 | .in_cables = 0x000f | ||
1600 | } | ||
1601 | } | ||
1602 | }, | ||
1603 | { | ||
1604 | /* | ||
1605 | * For hardware revision 1.05; in the later revisions (1.10 and | ||
1606 | * 1.21), 0x1031 is the ID for the device without firmware. | ||
1607 | * Thanks to Olaf Giesbrecht <Olaf_Giesbrecht@yahoo.de> | ||
1608 | */ | ||
1609 | USB_DEVICE_VER(0x0763, 0x1031, 0x0100, 0x0109), | ||
1610 | .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { | ||
1611 | .vendor_name = "M-Audio", | ||
1612 | .product_name = "MidiSport 8x8", | ||
1613 | .ifnum = QUIRK_ANY_INTERFACE, | ||
1614 | .type = QUIRK_MIDI_MIDIMAN, | ||
1615 | .data = & (const struct snd_usb_midi_endpoint_info) { | ||
1616 | .out_cables = 0x01ff, | ||
1617 | .in_cables = 0x01ff | ||
1618 | } | ||
1619 | } | ||
1620 | }, | ||
1621 | { | ||
1622 | USB_DEVICE_VENDOR_SPEC(0x0763, 0x1033), | ||
1623 | .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { | ||
1624 | .vendor_name = "M-Audio", | ||
1625 | .product_name = "MidiSport 8x8", | ||
1626 | .ifnum = QUIRK_ANY_INTERFACE, | ||
1627 | .type = QUIRK_MIDI_MIDIMAN, | ||
1628 | .data = & (const struct snd_usb_midi_endpoint_info) { | ||
1629 | .out_cables = 0x01ff, | ||
1630 | .in_cables = 0x01ff | ||
1631 | } | ||
1632 | } | ||
1633 | }, | ||
1634 | { | ||
1635 | USB_DEVICE_VENDOR_SPEC(0x0763, 0x1041), | ||
1636 | .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { | ||
1637 | .vendor_name = "M-Audio", | ||
1638 | .product_name = "MidiSport 2x4", | ||
1639 | .ifnum = QUIRK_ANY_INTERFACE, | ||
1640 | .type = QUIRK_MIDI_MIDIMAN, | ||
1641 | .data = & (const struct snd_usb_midi_endpoint_info) { | ||
1642 | .out_cables = 0x000f, | ||
1643 | .in_cables = 0x0003 | ||
1644 | } | ||
1645 | } | ||
1646 | }, | ||
1647 | { | ||
1648 | USB_DEVICE_VENDOR_SPEC(0x0763, 0x2001), | ||
1649 | .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { | ||
1650 | .vendor_name = "M-Audio", | ||
1651 | .product_name = "Quattro", | ||
1652 | .ifnum = QUIRK_ANY_INTERFACE, | ||
1653 | .type = QUIRK_COMPOSITE, | ||
1654 | .data = & (const struct snd_usb_audio_quirk[]) { | ||
1655 | /* | ||
1656 | * Interfaces 0-2 are "Windows-compatible", 16-bit only, | ||
1657 | * and share endpoints with the other interfaces. | ||
1658 | * Ignore them. The other interfaces can do 24 bits, | ||
1659 | * but captured samples are big-endian (see usbaudio.c). | ||
1660 | */ | ||
1661 | { | ||
1662 | .ifnum = 0, | ||
1663 | .type = QUIRK_IGNORE_INTERFACE | ||
1664 | }, | ||
1665 | { | ||
1666 | .ifnum = 1, | ||
1667 | .type = QUIRK_IGNORE_INTERFACE | ||
1668 | }, | ||
1669 | { | ||
1670 | .ifnum = 2, | ||
1671 | .type = QUIRK_IGNORE_INTERFACE | ||
1672 | }, | ||
1673 | { | ||
1674 | .ifnum = 3, | ||
1675 | .type = QUIRK_IGNORE_INTERFACE | ||
1676 | }, | ||
1677 | { | ||
1678 | .ifnum = 4, | ||
1679 | .type = QUIRK_AUDIO_STANDARD_INTERFACE | ||
1680 | }, | ||
1681 | { | ||
1682 | .ifnum = 5, | ||
1683 | .type = QUIRK_AUDIO_STANDARD_INTERFACE | ||
1684 | }, | ||
1685 | { | ||
1686 | .ifnum = 6, | ||
1687 | .type = QUIRK_IGNORE_INTERFACE | ||
1688 | }, | ||
1689 | { | ||
1690 | .ifnum = 7, | ||
1691 | .type = QUIRK_AUDIO_STANDARD_INTERFACE | ||
1692 | }, | ||
1693 | { | ||
1694 | .ifnum = 8, | ||
1695 | .type = QUIRK_AUDIO_STANDARD_INTERFACE | ||
1696 | }, | ||
1697 | { | ||
1698 | .ifnum = 9, | ||
1699 | .type = QUIRK_MIDI_MIDIMAN, | ||
1700 | .data = & (const struct snd_usb_midi_endpoint_info) { | ||
1701 | .out_cables = 0x0001, | ||
1702 | .in_cables = 0x0001 | ||
1703 | } | ||
1704 | }, | ||
1705 | { | ||
1706 | .ifnum = -1 | ||
1707 | } | ||
1708 | } | ||
1709 | } | ||
1710 | }, | ||
1711 | { | ||
1712 | USB_DEVICE_VENDOR_SPEC(0x0763, 0x2003), | ||
1713 | .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { | ||
1714 | .vendor_name = "M-Audio", | ||
1715 | .product_name = "AudioPhile", | ||
1716 | .ifnum = 6, | ||
1717 | .type = QUIRK_MIDI_MIDIMAN, | ||
1718 | .data = & (const struct snd_usb_midi_endpoint_info) { | ||
1719 | .out_cables = 0x0001, | ||
1720 | .in_cables = 0x0001 | ||
1721 | } | ||
1722 | } | ||
1723 | }, | ||
1724 | { | ||
1725 | USB_DEVICE_VENDOR_SPEC(0x0763, 0x2008), | ||
1726 | .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { | ||
1727 | .vendor_name = "M-Audio", | ||
1728 | .product_name = "Ozone", | ||
1729 | .ifnum = 3, | ||
1730 | .type = QUIRK_MIDI_MIDIMAN, | ||
1731 | .data = & (const struct snd_usb_midi_endpoint_info) { | ||
1732 | .out_cables = 0x0001, | ||
1733 | .in_cables = 0x0001 | ||
1734 | } | ||
1735 | } | ||
1736 | }, | ||
1737 | { | ||
1738 | USB_DEVICE_VENDOR_SPEC(0x0763, 0x200d), | ||
1739 | .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { | ||
1740 | .vendor_name = "M-Audio", | ||
1741 | .product_name = "OmniStudio", | ||
1742 | .ifnum = QUIRK_ANY_INTERFACE, | ||
1743 | .type = QUIRK_COMPOSITE, | ||
1744 | .data = & (const struct snd_usb_audio_quirk[]) { | ||
1745 | { | ||
1746 | .ifnum = 0, | ||
1747 | .type = QUIRK_IGNORE_INTERFACE | ||
1748 | }, | ||
1749 | { | ||
1750 | .ifnum = 1, | ||
1751 | .type = QUIRK_IGNORE_INTERFACE | ||
1752 | }, | ||
1753 | { | ||
1754 | .ifnum = 2, | ||
1755 | .type = QUIRK_IGNORE_INTERFACE | ||
1756 | }, | ||
1757 | { | ||
1758 | .ifnum = 3, | ||
1759 | .type = QUIRK_IGNORE_INTERFACE | ||
1760 | }, | ||
1761 | { | ||
1762 | .ifnum = 4, | ||
1763 | .type = QUIRK_AUDIO_STANDARD_INTERFACE | ||
1764 | }, | ||
1765 | { | ||
1766 | .ifnum = 5, | ||
1767 | .type = QUIRK_AUDIO_STANDARD_INTERFACE | ||
1768 | }, | ||
1769 | { | ||
1770 | .ifnum = 6, | ||
1771 | .type = QUIRK_IGNORE_INTERFACE | ||
1772 | }, | ||
1773 | { | ||
1774 | .ifnum = 7, | ||
1775 | .type = QUIRK_AUDIO_STANDARD_INTERFACE | ||
1776 | }, | ||
1777 | { | ||
1778 | .ifnum = 8, | ||
1779 | .type = QUIRK_AUDIO_STANDARD_INTERFACE | ||
1780 | }, | ||
1781 | { | ||
1782 | .ifnum = 9, | ||
1783 | .type = QUIRK_MIDI_MIDIMAN, | ||
1784 | .data = & (const struct snd_usb_midi_endpoint_info) { | ||
1785 | .out_cables = 0x0001, | ||
1786 | .in_cables = 0x0001 | ||
1787 | } | ||
1788 | }, | ||
1789 | { | ||
1790 | .ifnum = -1 | ||
1791 | } | ||
1792 | } | ||
1793 | } | ||
1794 | }, | ||
1795 | { | ||
1796 | USB_DEVICE(0x0763, 0x2019), | ||
1797 | .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { | ||
1798 | /* .vendor_name = "M-Audio", */ | ||
1799 | /* .product_name = "Ozone Academic", */ | ||
1800 | .ifnum = QUIRK_ANY_INTERFACE, | ||
1801 | .type = QUIRK_COMPOSITE, | ||
1802 | .data = & (const struct snd_usb_audio_quirk[]) { | ||
1803 | { | ||
1804 | .ifnum = 0, | ||
1805 | .type = QUIRK_AUDIO_STANDARD_INTERFACE | ||
1806 | }, | ||
1807 | { | ||
1808 | .ifnum = 1, | ||
1809 | .type = QUIRK_AUDIO_STANDARD_INTERFACE | ||
1810 | }, | ||
1811 | { | ||
1812 | .ifnum = 2, | ||
1813 | .type = QUIRK_AUDIO_STANDARD_INTERFACE | ||
1814 | }, | ||
1815 | { | ||
1816 | .ifnum = 3, | ||
1817 | .type = QUIRK_MIDI_MIDIMAN, | ||
1818 | .data = & (const struct snd_usb_midi_endpoint_info) { | ||
1819 | .out_cables = 0x0001, | ||
1820 | .in_cables = 0x0001 | ||
1821 | } | ||
1822 | }, | ||
1823 | { | ||
1824 | .ifnum = -1 | ||
1825 | } | ||
1826 | } | ||
1827 | } | ||
1828 | }, | ||
1829 | { | ||
1830 | USB_DEVICE(0x0763, 0x2080), | ||
1831 | .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { | ||
1832 | /* .vendor_name = "M-Audio", */ | ||
1833 | /* .product_name = "Fast Track Ultra 8", */ | ||
1834 | .ifnum = QUIRK_ANY_INTERFACE, | ||
1835 | .type = QUIRK_COMPOSITE, | ||
1836 | .data = & (const struct snd_usb_audio_quirk[]) { | ||
1837 | { | ||
1838 | .ifnum = 0, | ||
1839 | .type = QUIRK_IGNORE_INTERFACE | ||
1840 | }, | ||
1841 | { | ||
1842 | .ifnum = 1, | ||
1843 | .type = QUIRK_AUDIO_STANDARD_INTERFACE | ||
1844 | }, | ||
1845 | { | ||
1846 | .ifnum = 2, | ||
1847 | .type = QUIRK_AUDIO_STANDARD_INTERFACE | ||
1848 | }, | ||
1849 | /* interface 3 (MIDI) is standard compliant */ | ||
1850 | { | ||
1851 | .ifnum = -1 | ||
1852 | } | ||
1853 | } | ||
1854 | } | ||
1855 | }, | ||
1856 | { | ||
1857 | USB_DEVICE(0x0763, 0x2081), | ||
1858 | .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { | ||
1859 | /* .vendor_name = "M-Audio", */ | ||
1860 | /* .product_name = "Fast Track Ultra 8R", */ | ||
1861 | .ifnum = QUIRK_ANY_INTERFACE, | ||
1862 | .type = QUIRK_COMPOSITE, | ||
1863 | .data = & (const struct snd_usb_audio_quirk[]) { | ||
1864 | { | ||
1865 | .ifnum = 0, | ||
1866 | .type = QUIRK_IGNORE_INTERFACE | ||
1867 | }, | ||
1868 | { | ||
1869 | .ifnum = 1, | ||
1870 | .type = QUIRK_AUDIO_STANDARD_INTERFACE | ||
1871 | }, | ||
1872 | { | ||
1873 | .ifnum = 2, | ||
1874 | .type = QUIRK_AUDIO_STANDARD_INTERFACE | ||
1875 | }, | ||
1876 | /* interface 3 (MIDI) is standard compliant */ | ||
1877 | { | ||
1878 | .ifnum = -1 | ||
1879 | } | ||
1880 | } | ||
1881 | } | ||
1882 | }, | ||
1883 | |||
1884 | /* Casio devices */ | ||
1885 | { | ||
1886 | USB_DEVICE(0x07cf, 0x6801), | ||
1887 | .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { | ||
1888 | .vendor_name = "Casio", | ||
1889 | .product_name = "PL-40R", | ||
1890 | .ifnum = 0, | ||
1891 | .type = QUIRK_MIDI_YAMAHA | ||
1892 | } | ||
1893 | }, | ||
1894 | { | ||
1895 | /* this ID is used by several devices without a product ID */ | ||
1896 | USB_DEVICE(0x07cf, 0x6802), | ||
1897 | .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { | ||
1898 | .vendor_name = "Casio", | ||
1899 | .product_name = "Keyboard", | ||
1900 | .ifnum = 0, | ||
1901 | .type = QUIRK_MIDI_YAMAHA | ||
1902 | } | ||
1903 | }, | ||
1904 | |||
1905 | /* Mark of the Unicorn devices */ | ||
1906 | { | ||
1907 | /* thanks to Robert A. Lerche <ral 'at' msbit.com> */ | ||
1908 | .match_flags = USB_DEVICE_ID_MATCH_VENDOR | | ||
1909 | USB_DEVICE_ID_MATCH_PRODUCT | | ||
1910 | USB_DEVICE_ID_MATCH_DEV_SUBCLASS, | ||
1911 | .idVendor = 0x07fd, | ||
1912 | .idProduct = 0x0001, | ||
1913 | .bDeviceSubClass = 2, | ||
1914 | .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { | ||
1915 | .vendor_name = "MOTU", | ||
1916 | .product_name = "Fastlane", | ||
1917 | .ifnum = QUIRK_ANY_INTERFACE, | ||
1918 | .type = QUIRK_COMPOSITE, | ||
1919 | .data = & (const struct snd_usb_audio_quirk[]) { | ||
1920 | { | ||
1921 | .ifnum = 0, | ||
1922 | .type = QUIRK_MIDI_FASTLANE | ||
1923 | }, | ||
1924 | { | ||
1925 | .ifnum = 1, | ||
1926 | .type = QUIRK_IGNORE_INTERFACE | ||
1927 | }, | ||
1928 | { | ||
1929 | .ifnum = -1 | ||
1930 | } | ||
1931 | } | ||
1932 | } | ||
1933 | }, | ||
1934 | |||
1935 | /* Emagic devices */ | ||
1936 | { | ||
1937 | USB_DEVICE(0x086a, 0x0001), | ||
1938 | .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { | ||
1939 | .vendor_name = "Emagic", | ||
1940 | /* .product_name = "Unitor8", */ | ||
1941 | .ifnum = 2, | ||
1942 | .type = QUIRK_MIDI_EMAGIC, | ||
1943 | .data = & (const struct snd_usb_midi_endpoint_info) { | ||
1944 | .out_cables = 0x80ff, | ||
1945 | .in_cables = 0x80ff | ||
1946 | } | ||
1947 | } | ||
1948 | }, | ||
1949 | { | ||
1950 | USB_DEVICE(0x086a, 0x0002), | ||
1951 | .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { | ||
1952 | .vendor_name = "Emagic", | ||
1953 | /* .product_name = "AMT8", */ | ||
1954 | .ifnum = 2, | ||
1955 | .type = QUIRK_MIDI_EMAGIC, | ||
1956 | .data = & (const struct snd_usb_midi_endpoint_info) { | ||
1957 | .out_cables = 0x80ff, | ||
1958 | .in_cables = 0x80ff | ||
1959 | } | ||
1960 | } | ||
1961 | }, | ||
1962 | { | ||
1963 | USB_DEVICE(0x086a, 0x0003), | ||
1964 | .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { | ||
1965 | .vendor_name = "Emagic", | ||
1966 | /* .product_name = "MT4", */ | ||
1967 | .ifnum = 2, | ||
1968 | .type = QUIRK_MIDI_EMAGIC, | ||
1969 | .data = & (const struct snd_usb_midi_endpoint_info) { | ||
1970 | .out_cables = 0x800f, | ||
1971 | .in_cables = 0x8003 | ||
1972 | } | ||
1973 | } | ||
1974 | }, | ||
1975 | |||
1976 | /* TerraTec devices */ | ||
1977 | { | ||
1978 | USB_DEVICE_VENDOR_SPEC(0x0ccd, 0x0012), | ||
1979 | .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { | ||
1980 | .vendor_name = "TerraTec", | ||
1981 | .product_name = "PHASE 26", | ||
1982 | .ifnum = 3, | ||
1983 | .type = QUIRK_MIDI_STANDARD_INTERFACE | ||
1984 | } | ||
1985 | }, | ||
1986 | { | ||
1987 | USB_DEVICE_VENDOR_SPEC(0x0ccd, 0x0013), | ||
1988 | .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { | ||
1989 | .vendor_name = "TerraTec", | ||
1990 | .product_name = "PHASE 26", | ||
1991 | .ifnum = 3, | ||
1992 | .type = QUIRK_MIDI_STANDARD_INTERFACE | ||
1993 | } | ||
1994 | }, | ||
1995 | { | ||
1996 | USB_DEVICE_VENDOR_SPEC(0x0ccd, 0x0014), | ||
1997 | .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { | ||
1998 | .vendor_name = "TerraTec", | ||
1999 | .product_name = "PHASE 26", | ||
2000 | .ifnum = 3, | ||
2001 | .type = QUIRK_MIDI_STANDARD_INTERFACE | ||
2002 | } | ||
2003 | }, | ||
2004 | { | ||
2005 | USB_DEVICE(0x0ccd, 0x0028), | ||
2006 | .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { | ||
2007 | .vendor_name = "TerraTec", | ||
2008 | .product_name = "Aureon5.1MkII", | ||
2009 | .ifnum = QUIRK_NO_INTERFACE | ||
2010 | } | ||
2011 | }, | ||
2012 | { | ||
2013 | USB_DEVICE(0x0ccd, 0x0035), | ||
2014 | .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { | ||
2015 | .vendor_name = "Miditech", | ||
2016 | .product_name = "Play'n Roll", | ||
2017 | .ifnum = 0, | ||
2018 | .type = QUIRK_MIDI_CME | ||
2019 | } | ||
2020 | }, | ||
2021 | |||
2022 | /* Stanton/N2IT Final Scratch v1 device ('Scratchamp') */ | ||
2023 | { | ||
2024 | USB_DEVICE(0x103d, 0x0100), | ||
2025 | .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { | ||
2026 | .vendor_name = "Stanton", | ||
2027 | .product_name = "ScratchAmp", | ||
2028 | .ifnum = QUIRK_NO_INTERFACE | ||
2029 | } | ||
2030 | }, | ||
2031 | { | ||
2032 | USB_DEVICE(0x103d, 0x0101), | ||
2033 | .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { | ||
2034 | .vendor_name = "Stanton", | ||
2035 | .product_name = "ScratchAmp", | ||
2036 | .ifnum = QUIRK_NO_INTERFACE | ||
2037 | } | ||
2038 | }, | ||
2039 | |||
2040 | /* Novation EMS devices */ | ||
2041 | { | ||
2042 | USB_DEVICE_VENDOR_SPEC(0x1235, 0x0001), | ||
2043 | .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { | ||
2044 | .vendor_name = "Novation", | ||
2045 | .product_name = "ReMOTE Audio/XStation", | ||
2046 | .ifnum = 4, | ||
2047 | .type = QUIRK_MIDI_NOVATION | ||
2048 | } | ||
2049 | }, | ||
2050 | { | ||
2051 | USB_DEVICE_VENDOR_SPEC(0x1235, 0x0002), | ||
2052 | .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { | ||
2053 | .vendor_name = "Novation", | ||
2054 | .product_name = "Speedio", | ||
2055 | .ifnum = 3, | ||
2056 | .type = QUIRK_MIDI_NOVATION | ||
2057 | } | ||
2058 | }, | ||
2059 | { | ||
2060 | USB_DEVICE_VENDOR_SPEC(0x1235, 0x4661), | ||
2061 | .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { | ||
2062 | .vendor_name = "Novation", | ||
2063 | .product_name = "ReMOTE25", | ||
2064 | .ifnum = 0, | ||
2065 | .type = QUIRK_MIDI_NOVATION | ||
2066 | } | ||
2067 | }, | ||
2068 | |||
2069 | /* Access Music devices */ | ||
2070 | { | ||
2071 | /* VirusTI Desktop */ | ||
2072 | USB_DEVICE_VENDOR_SPEC(0x133e, 0x0815), | ||
2073 | .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) { | ||
2074 | .ifnum = QUIRK_ANY_INTERFACE, | ||
2075 | .type = QUIRK_COMPOSITE, | ||
2076 | .data = &(const struct snd_usb_audio_quirk[]) { | ||
2077 | { | ||
2078 | .ifnum = 3, | ||
2079 | .type = QUIRK_MIDI_FIXED_ENDPOINT, | ||
2080 | .data = &(const struct snd_usb_midi_endpoint_info) { | ||
2081 | .out_cables = 0x0003, | ||
2082 | .in_cables = 0x0003 | ||
2083 | } | ||
2084 | }, | ||
2085 | { | ||
2086 | .ifnum = 4, | ||
2087 | .type = QUIRK_IGNORE_INTERFACE | ||
2088 | }, | ||
2089 | { | ||
2090 | .ifnum = -1 | ||
2091 | } | ||
2092 | } | ||
2093 | } | ||
2094 | }, | ||
2095 | |||
2096 | /* */ | ||
2097 | { | ||
2098 | /* aka. Serato Scratch Live DJ Box */ | ||
2099 | USB_DEVICE(0x13e5, 0x0001), | ||
2100 | .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { | ||
2101 | .vendor_name = "Rane", | ||
2102 | .product_name = "SL-1", | ||
2103 | .ifnum = QUIRK_NO_INTERFACE | ||
2104 | } | ||
2105 | }, | ||
2106 | |||
2107 | /* Miditech devices */ | ||
2108 | { | ||
2109 | USB_DEVICE(0x4752, 0x0011), | ||
2110 | .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { | ||
2111 | .vendor_name = "Miditech", | ||
2112 | .product_name = "Midistart-2", | ||
2113 | .ifnum = 0, | ||
2114 | .type = QUIRK_MIDI_CME | ||
2115 | } | ||
2116 | }, | ||
2117 | |||
2118 | /* Central Music devices */ | ||
2119 | { | ||
2120 | /* this ID used by both Miditech MidiStudio-2 and CME UF-x */ | ||
2121 | USB_DEVICE(0x7104, 0x2202), | ||
2122 | .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { | ||
2123 | .ifnum = 0, | ||
2124 | .type = QUIRK_MIDI_CME | ||
2125 | } | ||
2126 | }, | ||
2127 | |||
2128 | /* Hauppauge HVR-950Q and HVR-850 */ | ||
2129 | { | ||
2130 | USB_DEVICE_VENDOR_SPEC(0x2040, 0x7200), | ||
2131 | .match_flags = USB_DEVICE_ID_MATCH_DEVICE | | ||
2132 | USB_DEVICE_ID_MATCH_INT_CLASS | | ||
2133 | USB_DEVICE_ID_MATCH_INT_SUBCLASS, | ||
2134 | .bInterfaceClass = USB_CLASS_AUDIO, | ||
2135 | .bInterfaceSubClass = USB_SUBCLASS_AUDIOCONTROL, | ||
2136 | .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) { | ||
2137 | .vendor_name = "Hauppauge", | ||
2138 | .product_name = "HVR-950Q", | ||
2139 | .ifnum = QUIRK_ANY_INTERFACE, | ||
2140 | .type = QUIRK_AUDIO_ALIGN_TRANSFER, | ||
2141 | } | ||
2142 | }, | ||
2143 | { | ||
2144 | USB_DEVICE_VENDOR_SPEC(0x2040, 0x7201), | ||
2145 | .match_flags = USB_DEVICE_ID_MATCH_DEVICE | | ||
2146 | USB_DEVICE_ID_MATCH_INT_CLASS | | ||
2147 | USB_DEVICE_ID_MATCH_INT_SUBCLASS, | ||
2148 | .bInterfaceClass = USB_CLASS_AUDIO, | ||
2149 | .bInterfaceSubClass = USB_SUBCLASS_AUDIOCONTROL, | ||
2150 | .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) { | ||
2151 | .vendor_name = "Hauppauge", | ||
2152 | .product_name = "HVR-950Q", | ||
2153 | .ifnum = QUIRK_ANY_INTERFACE, | ||
2154 | .type = QUIRK_AUDIO_ALIGN_TRANSFER, | ||
2155 | } | ||
2156 | }, | ||
2157 | { | ||
2158 | USB_DEVICE_VENDOR_SPEC(0x2040, 0x7202), | ||
2159 | .match_flags = USB_DEVICE_ID_MATCH_DEVICE | | ||
2160 | USB_DEVICE_ID_MATCH_INT_CLASS | | ||
2161 | USB_DEVICE_ID_MATCH_INT_SUBCLASS, | ||
2162 | .bInterfaceClass = USB_CLASS_AUDIO, | ||
2163 | .bInterfaceSubClass = USB_SUBCLASS_AUDIOCONTROL, | ||
2164 | .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) { | ||
2165 | .vendor_name = "Hauppauge", | ||
2166 | .product_name = "HVR-950Q", | ||
2167 | .ifnum = QUIRK_ANY_INTERFACE, | ||
2168 | .type = QUIRK_AUDIO_ALIGN_TRANSFER, | ||
2169 | } | ||
2170 | }, | ||
2171 | { | ||
2172 | USB_DEVICE_VENDOR_SPEC(0x2040, 0x7203), | ||
2173 | .match_flags = USB_DEVICE_ID_MATCH_DEVICE | | ||
2174 | USB_DEVICE_ID_MATCH_INT_CLASS | | ||
2175 | USB_DEVICE_ID_MATCH_INT_SUBCLASS, | ||
2176 | .bInterfaceClass = USB_CLASS_AUDIO, | ||
2177 | .bInterfaceSubClass = USB_SUBCLASS_AUDIOCONTROL, | ||
2178 | .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) { | ||
2179 | .vendor_name = "Hauppauge", | ||
2180 | .product_name = "HVR-950Q", | ||
2181 | .ifnum = QUIRK_ANY_INTERFACE, | ||
2182 | .type = QUIRK_AUDIO_ALIGN_TRANSFER, | ||
2183 | } | ||
2184 | }, | ||
2185 | { | ||
2186 | USB_DEVICE_VENDOR_SPEC(0x2040, 0x7204), | ||
2187 | .match_flags = USB_DEVICE_ID_MATCH_DEVICE | | ||
2188 | USB_DEVICE_ID_MATCH_INT_CLASS | | ||
2189 | USB_DEVICE_ID_MATCH_INT_SUBCLASS, | ||
2190 | .bInterfaceClass = USB_CLASS_AUDIO, | ||
2191 | .bInterfaceSubClass = USB_SUBCLASS_AUDIOCONTROL, | ||
2192 | .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) { | ||
2193 | .vendor_name = "Hauppauge", | ||
2194 | .product_name = "HVR-950Q", | ||
2195 | .ifnum = QUIRK_ANY_INTERFACE, | ||
2196 | .type = QUIRK_AUDIO_ALIGN_TRANSFER, | ||
2197 | } | ||
2198 | }, | ||
2199 | { | ||
2200 | USB_DEVICE_VENDOR_SPEC(0x2040, 0x7205), | ||
2201 | .match_flags = USB_DEVICE_ID_MATCH_DEVICE | | ||
2202 | USB_DEVICE_ID_MATCH_INT_CLASS | | ||
2203 | USB_DEVICE_ID_MATCH_INT_SUBCLASS, | ||
2204 | .bInterfaceClass = USB_CLASS_AUDIO, | ||
2205 | .bInterfaceSubClass = USB_SUBCLASS_AUDIOCONTROL, | ||
2206 | .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) { | ||
2207 | .vendor_name = "Hauppauge", | ||
2208 | .product_name = "HVR-950Q", | ||
2209 | .ifnum = QUIRK_ANY_INTERFACE, | ||
2210 | .type = QUIRK_AUDIO_ALIGN_TRANSFER, | ||
2211 | } | ||
2212 | }, | ||
2213 | { | ||
2214 | USB_DEVICE_VENDOR_SPEC(0x2040, 0x7250), | ||
2215 | .match_flags = USB_DEVICE_ID_MATCH_DEVICE | | ||
2216 | USB_DEVICE_ID_MATCH_INT_CLASS | | ||
2217 | USB_DEVICE_ID_MATCH_INT_SUBCLASS, | ||
2218 | .bInterfaceClass = USB_CLASS_AUDIO, | ||
2219 | .bInterfaceSubClass = USB_SUBCLASS_AUDIOCONTROL, | ||
2220 | .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) { | ||
2221 | .vendor_name = "Hauppauge", | ||
2222 | .product_name = "HVR-950Q", | ||
2223 | .ifnum = QUIRK_ANY_INTERFACE, | ||
2224 | .type = QUIRK_AUDIO_ALIGN_TRANSFER, | ||
2225 | } | ||
2226 | }, | ||
2227 | { | ||
2228 | USB_DEVICE_VENDOR_SPEC(0x2040, 0x7230), | ||
2229 | .match_flags = USB_DEVICE_ID_MATCH_DEVICE | | ||
2230 | USB_DEVICE_ID_MATCH_INT_CLASS | | ||
2231 | USB_DEVICE_ID_MATCH_INT_SUBCLASS, | ||
2232 | .bInterfaceClass = USB_CLASS_AUDIO, | ||
2233 | .bInterfaceSubClass = USB_SUBCLASS_AUDIOCONTROL, | ||
2234 | .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) { | ||
2235 | .vendor_name = "Hauppauge", | ||
2236 | .product_name = "HVR-850", | ||
2237 | .ifnum = QUIRK_ANY_INTERFACE, | ||
2238 | .type = QUIRK_AUDIO_ALIGN_TRANSFER, | ||
2239 | } | ||
2240 | }, | ||
2241 | |||
2242 | /* Digidesign Mbox */ | ||
2243 | { | ||
2244 | /* Thanks to Clemens Ladisch <clemens@ladisch.de> */ | ||
2245 | USB_DEVICE(0x0dba, 0x1000), | ||
2246 | .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) { | ||
2247 | .vendor_name = "Digidesign", | ||
2248 | .product_name = "MBox", | ||
2249 | .ifnum = QUIRK_ANY_INTERFACE, | ||
2250 | .type = QUIRK_COMPOSITE, | ||
2251 | .data = (const struct snd_usb_audio_quirk[]){ | ||
2252 | { | ||
2253 | .ifnum = 0, | ||
2254 | .type = QUIRK_IGNORE_INTERFACE, | ||
2255 | }, | ||
2256 | { | ||
2257 | .ifnum = 1, | ||
2258 | .type = QUIRK_AUDIO_FIXED_ENDPOINT, | ||
2259 | .data = &(const struct audioformat) { | ||
2260 | .formats = SNDRV_PCM_FMTBIT_S24_3BE, | ||
2261 | .channels = 2, | ||
2262 | .iface = 1, | ||
2263 | .altsetting = 1, | ||
2264 | .altset_idx = 1, | ||
2265 | .attributes = UAC_EP_CS_ATTR_SAMPLE_RATE, | ||
2266 | .endpoint = 0x02, | ||
2267 | .ep_attr = 0x01, | ||
2268 | .maxpacksize = 0x130, | ||
2269 | .rates = SNDRV_PCM_RATE_44100 | | ||
2270 | SNDRV_PCM_RATE_48000, | ||
2271 | .rate_min = 44100, | ||
2272 | .rate_max = 48000, | ||
2273 | .nr_rates = 2, | ||
2274 | .rate_table = (unsigned int[]) { | ||
2275 | 44100, 48000 | ||
2276 | } | ||
2277 | } | ||
2278 | }, | ||
2279 | { | ||
2280 | .ifnum = -1 | ||
2281 | } | ||
2282 | } | ||
2283 | |||
2284 | } | ||
2285 | }, | ||
2286 | |||
2287 | { | ||
2288 | /* | ||
2289 | * Some USB MIDI devices don't have an audio control interface, | ||
2290 | * so we have to grab MIDI streaming interfaces here. | ||
2291 | */ | ||
2292 | .match_flags = USB_DEVICE_ID_MATCH_INT_CLASS | | ||
2293 | USB_DEVICE_ID_MATCH_INT_SUBCLASS, | ||
2294 | .bInterfaceClass = USB_CLASS_AUDIO, | ||
2295 | .bInterfaceSubClass = USB_SUBCLASS_MIDISTREAMING, | ||
2296 | .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { | ||
2297 | .ifnum = QUIRK_ANY_INTERFACE, | ||
2298 | .type = QUIRK_MIDI_STANDARD_INTERFACE | ||
2299 | } | ||
2300 | }, | ||
2301 | |||
2302 | #undef USB_DEVICE_VENDOR_SPEC | ||