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