1 /* SPDX-License-Identifier: GPL-2.0-or-later */ 2 /* 3 * ALSA USB Audio Driver 4 * 5 * Copyright (c) 2002 by Takashi Iwai <tiwai@suse.de>, 6 * Clemens Ladisch <clemens@ladisch.de> 7 */ 8 9 /* 10 * The contents of this file are part of the driver's id_table. 11 * 12 * In a perfect world, this file would be empty. 13 */ 14 15 /* 16 * Use this for devices where other interfaces are standard compliant, 17 * to prevent the quirk being applied to those interfaces. (To work with 18 * hotplugging, bDeviceClass must be set to USB_CLASS_PER_INTERFACE.) 19 */ 20 #define USB_DEVICE_VENDOR_SPEC(vend, prod) \ 21 .match_flags = USB_DEVICE_ID_MATCH_VENDOR | \ 22 USB_DEVICE_ID_MATCH_PRODUCT | \ 23 USB_DEVICE_ID_MATCH_INT_CLASS, \ 24 .idVendor = vend, \ 25 .idProduct = prod, \ 26 .bInterfaceClass = USB_CLASS_VENDOR_SPEC 27 28 /* A standard entry matching with vid/pid and the audio class/subclass */ 29 #define USB_AUDIO_DEVICE(vend, prod) \ 30 .match_flags = USB_DEVICE_ID_MATCH_DEVICE | \ 31 USB_DEVICE_ID_MATCH_INT_CLASS | \ 32 USB_DEVICE_ID_MATCH_INT_SUBCLASS, \ 33 .idVendor = vend, \ 34 .idProduct = prod, \ 35 .bInterfaceClass = USB_CLASS_AUDIO, \ 36 .bInterfaceSubClass = USB_SUBCLASS_AUDIOCONTROL 37 38 /* Quirk .driver_info, followed by the definition of the quirk entry; 39 * put like QUIRK_DRIVER_INFO { ... } in each entry of the quirk table 40 */ 41 #define QUIRK_DRIVER_INFO \ 42 .driver_info = (unsigned long)&(const struct snd_usb_audio_quirk) 43 44 /* 45 * Macros for quirk data entries 46 */ 47 48 /* Quirk data entry for ignoring the interface */ 49 #define QUIRK_DATA_IGNORE(_ifno) \ 50 .ifnum = (_ifno), .type = QUIRK_IGNORE_INTERFACE 51 /* Quirk data entry for a standard audio interface */ 52 #define QUIRK_DATA_STANDARD_AUDIO(_ifno) \ 53 .ifnum = (_ifno), .type = QUIRK_AUDIO_STANDARD_INTERFACE 54 /* Quirk data entry for a standard MIDI interface */ 55 #define QUIRK_DATA_STANDARD_MIDI(_ifno) \ 56 .ifnum = (_ifno), .type = QUIRK_MIDI_STANDARD_INTERFACE 57 /* Quirk data entry for a standard mixer interface */ 58 #define QUIRK_DATA_STANDARD_MIXER(_ifno) \ 59 .ifnum = (_ifno), .type = QUIRK_AUDIO_STANDARD_MIXER 60 61 /* Quirk data entry for Yamaha MIDI */ 62 #define QUIRK_DATA_MIDI_YAMAHA(_ifno) \ 63 .ifnum = (_ifno), .type = QUIRK_MIDI_YAMAHA 64 /* Quirk data entry for Edirol UAxx */ 65 #define QUIRK_DATA_EDIROL_UAXX(_ifno) \ 66 .ifnum = (_ifno), .type = QUIRK_AUDIO_EDIROL_UAXX 67 /* Quirk data entry for raw bytes interface */ 68 #define QUIRK_DATA_RAW_BYTES(_ifno) \ 69 .ifnum = (_ifno), .type = QUIRK_MIDI_RAW_BYTES 70 71 /* Quirk composite array terminator */ 72 #define QUIRK_COMPOSITE_END { .ifnum = -1 } 73 74 /* Quirk data entry for composite quirks; 75 * followed by the quirk array that is terminated with QUIRK_COMPOSITE_END 76 * e.g. QUIRK_DATA_COMPOSITE { { quirk1 }, { quirk2 },..., QUIRK_COMPOSITE_END } 77 */ 78 #define QUIRK_DATA_COMPOSITE \ 79 .ifnum = QUIRK_ANY_INTERFACE, \ 80 .type = QUIRK_COMPOSITE, \ 81 .data = &(const struct snd_usb_audio_quirk[]) 82 83 /* Quirk data entry for a fixed audio endpoint; 84 * followed by audioformat definition 85 * e.g. QUIRK_DATA_AUDIOFORMAT(n) { .formats = xxx, ... } 86 */ 87 #define QUIRK_DATA_AUDIOFORMAT(_ifno) \ 88 .ifnum = (_ifno), \ 89 .type = QUIRK_AUDIO_FIXED_ENDPOINT, \ 90 .data = &(const struct audioformat) 91 92 /* Quirk data entry for a fixed MIDI endpoint; 93 * followed by snd_usb_midi_endpoint_info definition 94 * e.g. QUIRK_DATA_MIDI_FIXED_ENDPOINT(n) { .out_cables = x, .in_cables = y } 95 */ 96 #define QUIRK_DATA_MIDI_FIXED_ENDPOINT(_ifno) \ 97 .ifnum = (_ifno), \ 98 .type = QUIRK_MIDI_FIXED_ENDPOINT, \ 99 .data = &(const struct snd_usb_midi_endpoint_info) 100 /* Quirk data entry for a MIDIMAN MIDI endpoint */ 101 #define QUIRK_DATA_MIDI_MIDIMAN(_ifno) \ 102 .ifnum = (_ifno), \ 103 .type = QUIRK_MIDI_MIDIMAN, \ 104 .data = &(const struct snd_usb_midi_endpoint_info) 105 /* Quirk data entry for a EMAGIC MIDI endpoint */ 106 #define QUIRK_DATA_MIDI_EMAGIC(_ifno) \ 107 .ifnum = (_ifno), \ 108 .type = QUIRK_MIDI_EMAGIC, \ 109 .data = &(const struct snd_usb_midi_endpoint_info) 110 111 /* 112 * Here we go... the quirk table definition begins: 113 */ 114 115 /* FTDI devices */ 116 { 117 USB_DEVICE(0x0403, 0xb8d8), 118 QUIRK_DRIVER_INFO { 119 /* .vendor_name = "STARR LABS", */ 120 /* .product_name = "Starr Labs MIDI USB device", */ 121 .ifnum = 0, 122 .type = QUIRK_MIDI_FTDI 123 } 124 }, 125 126 { 127 /* Creative BT-D1 */ 128 USB_DEVICE(0x041e, 0x0005), 129 QUIRK_DRIVER_INFO { 130 QUIRK_DATA_AUDIOFORMAT(1) { 131 .formats = SNDRV_PCM_FMTBIT_S16_LE, 132 .channels = 2, 133 .iface = 1, 134 .altsetting = 1, 135 .altset_idx = 1, 136 .endpoint = 0x03, 137 .ep_attr = USB_ENDPOINT_XFER_ISOC, 138 .attributes = 0, 139 .rates = SNDRV_PCM_RATE_CONTINUOUS, 140 .rate_min = 48000, 141 .rate_max = 48000, 142 } 143 } 144 }, 145 146 /* E-Mu 0202 USB */ 147 { USB_DEVICE_VENDOR_SPEC(0x041e, 0x3f02) }, 148 /* E-Mu 0404 USB */ 149 { USB_DEVICE_VENDOR_SPEC(0x041e, 0x3f04) }, 150 /* E-Mu Tracker Pre */ 151 { USB_DEVICE_VENDOR_SPEC(0x041e, 0x3f0a) }, 152 /* E-Mu 0204 USB */ 153 { USB_DEVICE_VENDOR_SPEC(0x041e, 0x3f19) }, 154 /* Ktmicro Usb_audio device */ 155 { USB_DEVICE_VENDOR_SPEC(0x31b2, 0x0011) }, 156 157 /* 158 * Creative Technology, Ltd Live! Cam Sync HD [VF0770] 159 * The device advertises 8 formats, but only a rate of 48kHz is honored by the 160 * hardware and 24 bits give chopped audio, so only report the one working 161 * combination. 162 */ 163 { 164 USB_AUDIO_DEVICE(0x041e, 0x4095), 165 QUIRK_DRIVER_INFO { 166 QUIRK_DATA_COMPOSITE { 167 { QUIRK_DATA_STANDARD_MIXER(2) }, 168 { 169 QUIRK_DATA_AUDIOFORMAT(3) { 170 .formats = SNDRV_PCM_FMTBIT_S16_LE, 171 .channels = 2, 172 .fmt_bits = 16, 173 .iface = 3, 174 .altsetting = 4, 175 .altset_idx = 4, 176 .endpoint = 0x82, 177 .ep_attr = 0x05, 178 .rates = SNDRV_PCM_RATE_48000, 179 .rate_min = 48000, 180 .rate_max = 48000, 181 .nr_rates = 1, 182 .rate_table = (unsigned int[]) { 48000 }, 183 }, 184 }, 185 QUIRK_COMPOSITE_END 186 }, 187 }, 188 }, 189 190 /* 191 * HP Wireless Audio 192 * When not ignored, causes instability issues for some users, forcing them to 193 * skip the entire module. 194 */ 195 { 196 USB_DEVICE(0x0424, 0xb832), 197 QUIRK_DRIVER_INFO { 198 .vendor_name = "Standard Microsystems Corp.", 199 .product_name = "HP Wireless Audio", 200 QUIRK_DATA_COMPOSITE { 201 /* Mixer */ 202 { QUIRK_DATA_IGNORE(0) }, 203 /* Playback */ 204 { QUIRK_DATA_IGNORE(1) }, 205 /* Capture */ 206 { QUIRK_DATA_IGNORE(2) }, 207 /* HID Device, .ifnum = 3 */ 208 QUIRK_COMPOSITE_END 209 } 210 } 211 }, 212 213 /* 214 * Logitech QuickCam: bDeviceClass is vendor-specific, so generic interface 215 * class matches do not take effect without an explicit ID match. 216 */ 217 { USB_AUDIO_DEVICE(0x046d, 0x0850) }, 218 { USB_AUDIO_DEVICE(0x046d, 0x08ae) }, 219 { USB_AUDIO_DEVICE(0x046d, 0x08c6) }, 220 { USB_AUDIO_DEVICE(0x046d, 0x08f0) }, 221 { USB_AUDIO_DEVICE(0x046d, 0x08f5) }, 222 { USB_AUDIO_DEVICE(0x046d, 0x08f6) }, 223 { USB_AUDIO_DEVICE(0x046d, 0x0990) }, 224 225 /* 226 * Yamaha devices 227 */ 228 229 #define YAMAHA_DEVICE(id, name) { \ 230 USB_DEVICE(0x0499, id), \ 231 QUIRK_DRIVER_INFO { \ 232 .vendor_name = "Yamaha", \ 233 .product_name = name, \ 234 QUIRK_DATA_MIDI_YAMAHA(QUIRK_ANY_INTERFACE) \ 235 } \ 236 } 237 #define YAMAHA_INTERFACE(id, intf, name) { \ 238 USB_DEVICE_VENDOR_SPEC(0x0499, id), \ 239 QUIRK_DRIVER_INFO { \ 240 .vendor_name = "Yamaha", \ 241 .product_name = name, \ 242 QUIRK_DATA_MIDI_YAMAHA(intf) \ 243 } \ 244 } 245 YAMAHA_DEVICE(0x1000, "UX256"), 246 YAMAHA_DEVICE(0x1001, "MU1000"), 247 YAMAHA_DEVICE(0x1002, "MU2000"), 248 YAMAHA_DEVICE(0x1003, "MU500"), 249 YAMAHA_INTERFACE(0x1004, 3, "UW500"), 250 YAMAHA_DEVICE(0x1005, "MOTIF6"), 251 YAMAHA_DEVICE(0x1006, "MOTIF7"), 252 YAMAHA_DEVICE(0x1007, "MOTIF8"), 253 YAMAHA_DEVICE(0x1008, "UX96"), 254 YAMAHA_DEVICE(0x1009, "UX16"), 255 YAMAHA_INTERFACE(0x100a, 3, "EOS BX"), 256 YAMAHA_DEVICE(0x100c, "UC-MX"), 257 YAMAHA_DEVICE(0x100d, "UC-KX"), 258 YAMAHA_DEVICE(0x100e, "S08"), 259 YAMAHA_DEVICE(0x100f, "CLP-150"), 260 YAMAHA_DEVICE(0x1010, "CLP-170"), 261 YAMAHA_DEVICE(0x1011, "P-250"), 262 YAMAHA_DEVICE(0x1012, "TYROS"), 263 YAMAHA_DEVICE(0x1013, "PF-500"), 264 YAMAHA_DEVICE(0x1014, "S90"), 265 YAMAHA_DEVICE(0x1015, "MOTIF-R"), 266 YAMAHA_DEVICE(0x1016, "MDP-5"), 267 YAMAHA_DEVICE(0x1017, "CVP-204"), 268 YAMAHA_DEVICE(0x1018, "CVP-206"), 269 YAMAHA_DEVICE(0x1019, "CVP-208"), 270 YAMAHA_DEVICE(0x101a, "CVP-210"), 271 YAMAHA_DEVICE(0x101b, "PSR-1100"), 272 YAMAHA_DEVICE(0x101c, "PSR-2100"), 273 YAMAHA_DEVICE(0x101d, "CLP-175"), 274 YAMAHA_DEVICE(0x101e, "PSR-K1"), 275 YAMAHA_DEVICE(0x101f, "EZ-J24"), 276 YAMAHA_DEVICE(0x1020, "EZ-250i"), 277 YAMAHA_DEVICE(0x1021, "MOTIF ES 6"), 278 YAMAHA_DEVICE(0x1022, "MOTIF ES 7"), 279 YAMAHA_DEVICE(0x1023, "MOTIF ES 8"), 280 YAMAHA_DEVICE(0x1024, "CVP-301"), 281 YAMAHA_DEVICE(0x1025, "CVP-303"), 282 YAMAHA_DEVICE(0x1026, "CVP-305"), 283 YAMAHA_DEVICE(0x1027, "CVP-307"), 284 YAMAHA_DEVICE(0x1028, "CVP-309"), 285 YAMAHA_DEVICE(0x1029, "CVP-309GP"), 286 YAMAHA_DEVICE(0x102a, "PSR-1500"), 287 YAMAHA_DEVICE(0x102b, "PSR-3000"), 288 YAMAHA_DEVICE(0x102e, "ELS-01/01C"), 289 YAMAHA_DEVICE(0x1030, "PSR-295/293"), 290 YAMAHA_DEVICE(0x1031, "DGX-205/203"), 291 YAMAHA_DEVICE(0x1032, "DGX-305"), 292 YAMAHA_DEVICE(0x1033, "DGX-505"), 293 YAMAHA_DEVICE(0x1034, NULL), 294 YAMAHA_DEVICE(0x1035, NULL), 295 YAMAHA_DEVICE(0x1036, NULL), 296 YAMAHA_DEVICE(0x1037, NULL), 297 YAMAHA_DEVICE(0x1038, NULL), 298 YAMAHA_DEVICE(0x1039, NULL), 299 YAMAHA_DEVICE(0x103a, NULL), 300 YAMAHA_DEVICE(0x103b, NULL), 301 YAMAHA_DEVICE(0x103c, NULL), 302 YAMAHA_DEVICE(0x103d, NULL), 303 YAMAHA_DEVICE(0x103e, NULL), 304 YAMAHA_DEVICE(0x103f, NULL), 305 YAMAHA_DEVICE(0x1040, NULL), 306 YAMAHA_DEVICE(0x1041, NULL), 307 YAMAHA_DEVICE(0x1042, NULL), 308 YAMAHA_DEVICE(0x1043, NULL), 309 YAMAHA_DEVICE(0x1044, NULL), 310 YAMAHA_DEVICE(0x1045, NULL), 311 YAMAHA_INTERFACE(0x104e, 0, NULL), 312 YAMAHA_DEVICE(0x104f, NULL), 313 YAMAHA_DEVICE(0x1050, NULL), 314 YAMAHA_DEVICE(0x1051, NULL), 315 YAMAHA_DEVICE(0x1052, NULL), 316 YAMAHA_INTERFACE(0x1053, 0, NULL), 317 YAMAHA_INTERFACE(0x1054, 0, NULL), 318 YAMAHA_DEVICE(0x1055, NULL), 319 YAMAHA_DEVICE(0x1056, NULL), 320 YAMAHA_DEVICE(0x1057, NULL), 321 YAMAHA_DEVICE(0x1058, NULL), 322 YAMAHA_DEVICE(0x1059, NULL), 323 YAMAHA_DEVICE(0x105a, NULL), 324 YAMAHA_DEVICE(0x105b, NULL), 325 YAMAHA_DEVICE(0x105c, NULL), 326 YAMAHA_DEVICE(0x105d, NULL), 327 { 328 USB_DEVICE(0x0499, 0x1503), 329 QUIRK_DRIVER_INFO { 330 /* .vendor_name = "Yamaha", */ 331 /* .product_name = "MOX6/MOX8", */ 332 QUIRK_DATA_COMPOSITE { 333 { QUIRK_DATA_STANDARD_AUDIO(1) }, 334 { QUIRK_DATA_STANDARD_AUDIO(2) }, 335 { QUIRK_DATA_MIDI_YAMAHA(3) }, 336 QUIRK_COMPOSITE_END 337 } 338 } 339 }, 340 { 341 USB_DEVICE(0x0499, 0x1507), 342 QUIRK_DRIVER_INFO { 343 /* .vendor_name = "Yamaha", */ 344 /* .product_name = "THR10", */ 345 QUIRK_DATA_COMPOSITE { 346 { QUIRK_DATA_STANDARD_AUDIO(1) }, 347 { QUIRK_DATA_STANDARD_AUDIO(2) }, 348 { QUIRK_DATA_MIDI_YAMAHA(3) }, 349 QUIRK_COMPOSITE_END 350 } 351 } 352 }, 353 { 354 USB_DEVICE(0x0499, 0x1509), 355 QUIRK_DRIVER_INFO { 356 /* .vendor_name = "Yamaha", */ 357 /* .product_name = "Steinberg UR22", */ 358 QUIRK_DATA_COMPOSITE { 359 { QUIRK_DATA_STANDARD_AUDIO(1) }, 360 { QUIRK_DATA_STANDARD_AUDIO(2) }, 361 { QUIRK_DATA_MIDI_YAMAHA(3) }, 362 { QUIRK_DATA_IGNORE(4) }, 363 QUIRK_COMPOSITE_END 364 } 365 } 366 }, 367 { 368 USB_DEVICE(0x0499, 0x150a), 369 QUIRK_DRIVER_INFO { 370 /* .vendor_name = "Yamaha", */ 371 /* .product_name = "THR5A", */ 372 QUIRK_DATA_COMPOSITE { 373 { QUIRK_DATA_STANDARD_AUDIO(1) }, 374 { QUIRK_DATA_STANDARD_AUDIO(2) }, 375 { QUIRK_DATA_MIDI_YAMAHA(3) }, 376 QUIRK_COMPOSITE_END 377 } 378 } 379 }, 380 { 381 USB_DEVICE(0x0499, 0x150c), 382 QUIRK_DRIVER_INFO { 383 /* .vendor_name = "Yamaha", */ 384 /* .product_name = "THR10C", */ 385 QUIRK_DATA_COMPOSITE { 386 { QUIRK_DATA_STANDARD_AUDIO(1) }, 387 { QUIRK_DATA_STANDARD_AUDIO(2) }, 388 { QUIRK_DATA_MIDI_YAMAHA(3) }, 389 QUIRK_COMPOSITE_END 390 } 391 } 392 }, 393 { 394 USB_DEVICE(0x0499, 0x150d), 395 QUIRK_DRIVER_INFO { 396 /* .vendor_name = "Yamaha", */ 397 /* .product_name = "CDS3000", */ 398 QUIRK_DATA_COMPOSITE { 399 { QUIRK_DATA_STANDARD_AUDIO(1) }, 400 { QUIRK_DATA_STANDARD_AUDIO(2) }, 401 { QUIRK_DATA_MIDI_YAMAHA(3) }, 402 { QUIRK_DATA_IGNORE(4) }, 403 QUIRK_COMPOSITE_END 404 } 405 } 406 }, 407 { 408 USB_DEVICE(0x0499, 0x1718), 409 QUIRK_DRIVER_INFO { 410 /* .vendor_name = "Yamaha", */ 411 /* .product_name = "P-125", */ 412 QUIRK_DATA_COMPOSITE { 413 { QUIRK_DATA_STANDARD_AUDIO(1) }, 414 { QUIRK_DATA_STANDARD_AUDIO(2) }, 415 { QUIRK_DATA_MIDI_YAMAHA(3) }, 416 QUIRK_COMPOSITE_END 417 } 418 } 419 }, 420 YAMAHA_DEVICE(0x2000, "DGP-7"), 421 YAMAHA_DEVICE(0x2001, "DGP-5"), 422 YAMAHA_DEVICE(0x2002, NULL), 423 YAMAHA_DEVICE(0x2003, NULL), 424 YAMAHA_DEVICE(0x5000, "CS1D"), 425 YAMAHA_DEVICE(0x5001, "DSP1D"), 426 YAMAHA_DEVICE(0x5002, "DME32"), 427 YAMAHA_DEVICE(0x5003, "DM2000"), 428 YAMAHA_DEVICE(0x5004, "02R96"), 429 YAMAHA_DEVICE(0x5005, "ACU16-C"), 430 YAMAHA_DEVICE(0x5006, "NHB32-C"), 431 YAMAHA_DEVICE(0x5007, "DM1000"), 432 YAMAHA_DEVICE(0x5008, "01V96"), 433 YAMAHA_DEVICE(0x5009, "SPX2000"), 434 YAMAHA_DEVICE(0x500a, "PM5D"), 435 YAMAHA_DEVICE(0x500b, "DME64N"), 436 YAMAHA_DEVICE(0x500c, "DME24N"), 437 YAMAHA_DEVICE(0x500d, NULL), 438 YAMAHA_DEVICE(0x500e, NULL), 439 YAMAHA_DEVICE(0x500f, NULL), 440 YAMAHA_DEVICE(0x7000, "DTX"), 441 YAMAHA_DEVICE(0x7010, "UB99"), 442 #undef YAMAHA_DEVICE 443 #undef YAMAHA_INTERFACE 444 /* this catches most recent vendor-specific Yamaha devices */ 445 { 446 .match_flags = USB_DEVICE_ID_MATCH_VENDOR | 447 USB_DEVICE_ID_MATCH_INT_CLASS, 448 .idVendor = 0x0499, 449 .bInterfaceClass = USB_CLASS_VENDOR_SPEC, 450 QUIRK_DRIVER_INFO { 451 .ifnum = QUIRK_ANY_INTERFACE, 452 .type = QUIRK_AUTODETECT 453 } 454 }, 455 456 /* 457 * Roland/RolandED/Edirol/BOSS devices 458 */ 459 { 460 USB_DEVICE(0x0582, 0x0000), 461 QUIRK_DRIVER_INFO { 462 .vendor_name = "Roland", 463 .product_name = "UA-100", 464 QUIRK_DATA_COMPOSITE { 465 { 466 QUIRK_DATA_AUDIOFORMAT(0) { 467 .formats = SNDRV_PCM_FMTBIT_S16_LE, 468 .channels = 4, 469 .iface = 0, 470 .altsetting = 1, 471 .altset_idx = 1, 472 .attributes = 0, 473 .endpoint = 0x01, 474 .ep_attr = 0x09, 475 .rates = SNDRV_PCM_RATE_CONTINUOUS, 476 .rate_min = 44100, 477 .rate_max = 44100, 478 } 479 }, 480 { 481 QUIRK_DATA_AUDIOFORMAT(1) { 482 .formats = SNDRV_PCM_FMTBIT_S16_LE, 483 .channels = 2, 484 .iface = 1, 485 .altsetting = 1, 486 .altset_idx = 1, 487 .attributes = UAC_EP_CS_ATTR_FILL_MAX, 488 .endpoint = 0x81, 489 .ep_attr = 0x05, 490 .rates = SNDRV_PCM_RATE_CONTINUOUS, 491 .rate_min = 44100, 492 .rate_max = 44100, 493 } 494 }, 495 { 496 QUIRK_DATA_MIDI_FIXED_ENDPOINT(2) { 497 .out_cables = 0x0007, 498 .in_cables = 0x0007 499 } 500 }, 501 QUIRK_COMPOSITE_END 502 } 503 } 504 }, 505 { 506 USB_DEVICE(0x0582, 0x0002), 507 QUIRK_DRIVER_INFO { 508 .vendor_name = "EDIROL", 509 .product_name = "UM-4", 510 QUIRK_DATA_COMPOSITE { 511 { QUIRK_DATA_IGNORE(0) }, 512 { QUIRK_DATA_IGNORE(1) }, 513 { 514 QUIRK_DATA_MIDI_FIXED_ENDPOINT(2) { 515 .out_cables = 0x000f, 516 .in_cables = 0x000f 517 } 518 }, 519 QUIRK_COMPOSITE_END 520 } 521 } 522 }, 523 { 524 USB_DEVICE(0x0582, 0x0003), 525 QUIRK_DRIVER_INFO { 526 .vendor_name = "Roland", 527 .product_name = "SC-8850", 528 QUIRK_DATA_COMPOSITE { 529 { QUIRK_DATA_IGNORE(0) }, 530 { QUIRK_DATA_IGNORE(1) }, 531 { 532 QUIRK_DATA_MIDI_FIXED_ENDPOINT(2) { 533 .out_cables = 0x003f, 534 .in_cables = 0x003f 535 } 536 }, 537 QUIRK_COMPOSITE_END 538 } 539 } 540 }, 541 { 542 USB_DEVICE(0x0582, 0x0004), 543 QUIRK_DRIVER_INFO { 544 .vendor_name = "Roland", 545 .product_name = "U-8", 546 QUIRK_DATA_COMPOSITE { 547 { QUIRK_DATA_IGNORE(0) }, 548 { QUIRK_DATA_IGNORE(1) }, 549 { 550 QUIRK_DATA_MIDI_FIXED_ENDPOINT(2) { 551 .out_cables = 0x0005, 552 .in_cables = 0x0005 553 } 554 }, 555 QUIRK_COMPOSITE_END 556 } 557 } 558 }, 559 { 560 /* Has ID 0x0099 when not in "Advanced Driver" mode. 561 * The UM-2EX has only one input, but we cannot detect this. */ 562 USB_DEVICE(0x0582, 0x0005), 563 QUIRK_DRIVER_INFO { 564 .vendor_name = "EDIROL", 565 .product_name = "UM-2", 566 QUIRK_DATA_COMPOSITE { 567 { QUIRK_DATA_IGNORE(0) }, 568 { QUIRK_DATA_IGNORE(1) }, 569 { 570 QUIRK_DATA_MIDI_FIXED_ENDPOINT(2) { 571 .out_cables = 0x0003, 572 .in_cables = 0x0003 573 } 574 }, 575 QUIRK_COMPOSITE_END 576 } 577 } 578 }, 579 { 580 USB_DEVICE(0x0582, 0x0007), 581 QUIRK_DRIVER_INFO { 582 .vendor_name = "Roland", 583 .product_name = "SC-8820", 584 QUIRK_DATA_COMPOSITE { 585 { QUIRK_DATA_IGNORE(0) }, 586 { QUIRK_DATA_IGNORE(1) }, 587 { 588 QUIRK_DATA_MIDI_FIXED_ENDPOINT(2) { 589 .out_cables = 0x0013, 590 .in_cables = 0x0013 591 } 592 }, 593 QUIRK_COMPOSITE_END 594 } 595 } 596 }, 597 { 598 USB_DEVICE(0x0582, 0x0008), 599 QUIRK_DRIVER_INFO { 600 .vendor_name = "Roland", 601 .product_name = "PC-300", 602 QUIRK_DATA_COMPOSITE { 603 { QUIRK_DATA_IGNORE(0) }, 604 { QUIRK_DATA_IGNORE(1) }, 605 { 606 QUIRK_DATA_MIDI_FIXED_ENDPOINT(2) { 607 .out_cables = 0x0001, 608 .in_cables = 0x0001 609 } 610 }, 611 QUIRK_COMPOSITE_END 612 } 613 } 614 }, 615 { 616 /* has ID 0x009d when not in "Advanced Driver" mode */ 617 USB_DEVICE(0x0582, 0x0009), 618 QUIRK_DRIVER_INFO { 619 .vendor_name = "EDIROL", 620 .product_name = "UM-1", 621 QUIRK_DATA_COMPOSITE { 622 { QUIRK_DATA_IGNORE(0) }, 623 { QUIRK_DATA_IGNORE(1) }, 624 { 625 QUIRK_DATA_MIDI_FIXED_ENDPOINT(2) { 626 .out_cables = 0x0001, 627 .in_cables = 0x0001 628 } 629 }, 630 QUIRK_COMPOSITE_END 631 } 632 } 633 }, 634 { 635 USB_DEVICE(0x0582, 0x000b), 636 QUIRK_DRIVER_INFO { 637 .vendor_name = "Roland", 638 .product_name = "SK-500", 639 QUIRK_DATA_COMPOSITE { 640 { QUIRK_DATA_IGNORE(0) }, 641 { QUIRK_DATA_IGNORE(1) }, 642 { 643 QUIRK_DATA_MIDI_FIXED_ENDPOINT(2) { 644 .out_cables = 0x0013, 645 .in_cables = 0x0013 646 } 647 }, 648 QUIRK_COMPOSITE_END 649 } 650 } 651 }, 652 { 653 /* thanks to Emiliano Grilli <emillo@libero.it> 654 * for helping researching this data */ 655 USB_DEVICE(0x0582, 0x000c), 656 QUIRK_DRIVER_INFO { 657 .vendor_name = "Roland", 658 .product_name = "SC-D70", 659 QUIRK_DATA_COMPOSITE { 660 { QUIRK_DATA_STANDARD_AUDIO(0) }, 661 { QUIRK_DATA_STANDARD_AUDIO(1) }, 662 { 663 QUIRK_DATA_MIDI_FIXED_ENDPOINT(2) { 664 .out_cables = 0x0007, 665 .in_cables = 0x0007 666 } 667 }, 668 QUIRK_COMPOSITE_END 669 } 670 } 671 }, 672 { /* 673 * This quirk is for the "Advanced Driver" mode of the Edirol UA-5. 674 * If the advanced mode switch at the back of the unit is off, the 675 * UA-5 has ID 0x0582/0x0011 and is standard compliant (no quirks), 676 * but offers only 16-bit PCM. 677 * In advanced mode, the UA-5 will output S24_3LE samples (two 678 * channels) at the rate indicated on the front switch, including 679 * the 96kHz sample rate. 680 */ 681 USB_DEVICE(0x0582, 0x0010), 682 QUIRK_DRIVER_INFO { 683 .vendor_name = "EDIROL", 684 .product_name = "UA-5", 685 QUIRK_DATA_COMPOSITE { 686 { QUIRK_DATA_STANDARD_AUDIO(1) }, 687 { QUIRK_DATA_STANDARD_AUDIO(2) }, 688 QUIRK_COMPOSITE_END 689 } 690 } 691 }, 692 { 693 /* has ID 0x0013 when not in "Advanced Driver" mode */ 694 USB_DEVICE(0x0582, 0x0012), 695 QUIRK_DRIVER_INFO { 696 .vendor_name = "Roland", 697 .product_name = "XV-5050", 698 QUIRK_DATA_MIDI_FIXED_ENDPOINT(0) { 699 .out_cables = 0x0001, 700 .in_cables = 0x0001 701 } 702 } 703 }, 704 { 705 /* has ID 0x0015 when not in "Advanced Driver" mode */ 706 USB_DEVICE(0x0582, 0x0014), 707 QUIRK_DRIVER_INFO { 708 .vendor_name = "EDIROL", 709 .product_name = "UM-880", 710 QUIRK_DATA_MIDI_FIXED_ENDPOINT(0) { 711 .out_cables = 0x01ff, 712 .in_cables = 0x01ff 713 } 714 } 715 }, 716 { 717 /* has ID 0x0017 when not in "Advanced Driver" mode */ 718 USB_DEVICE(0x0582, 0x0016), 719 QUIRK_DRIVER_INFO { 720 .vendor_name = "EDIROL", 721 .product_name = "SD-90", 722 QUIRK_DATA_COMPOSITE { 723 { QUIRK_DATA_STANDARD_AUDIO(0) }, 724 { QUIRK_DATA_STANDARD_AUDIO(1) }, 725 { 726 QUIRK_DATA_MIDI_FIXED_ENDPOINT(2) { 727 .out_cables = 0x000f, 728 .in_cables = 0x000f 729 } 730 }, 731 QUIRK_COMPOSITE_END 732 } 733 } 734 }, 735 { 736 /* has ID 0x001c when not in "Advanced Driver" mode */ 737 USB_DEVICE(0x0582, 0x001b), 738 QUIRK_DRIVER_INFO { 739 .vendor_name = "Roland", 740 .product_name = "MMP-2", 741 QUIRK_DATA_COMPOSITE { 742 { QUIRK_DATA_IGNORE(0) }, 743 { QUIRK_DATA_IGNORE(1) }, 744 { 745 QUIRK_DATA_MIDI_FIXED_ENDPOINT(2) { 746 .out_cables = 0x0001, 747 .in_cables = 0x0001 748 } 749 }, 750 QUIRK_COMPOSITE_END 751 } 752 } 753 }, 754 { 755 /* has ID 0x001e when not in "Advanced Driver" mode */ 756 USB_DEVICE(0x0582, 0x001d), 757 QUIRK_DRIVER_INFO { 758 .vendor_name = "Roland", 759 .product_name = "V-SYNTH", 760 QUIRK_DATA_MIDI_FIXED_ENDPOINT(0) { 761 .out_cables = 0x0001, 762 .in_cables = 0x0001 763 } 764 } 765 }, 766 { 767 /* has ID 0x0024 when not in "Advanced Driver" mode */ 768 USB_DEVICE(0x0582, 0x0023), 769 QUIRK_DRIVER_INFO { 770 .vendor_name = "EDIROL", 771 .product_name = "UM-550", 772 QUIRK_DATA_MIDI_FIXED_ENDPOINT(0) { 773 .out_cables = 0x003f, 774 .in_cables = 0x003f 775 } 776 } 777 }, 778 { 779 /* 780 * This quirk is for the "Advanced Driver" mode. If off, the UA-20 781 * has ID 0x0026 and is standard compliant, but has only 16-bit PCM 782 * and no MIDI. 783 */ 784 USB_DEVICE(0x0582, 0x0025), 785 QUIRK_DRIVER_INFO { 786 .vendor_name = "EDIROL", 787 .product_name = "UA-20", 788 QUIRK_DATA_COMPOSITE { 789 { QUIRK_DATA_IGNORE(0) }, 790 { 791 QUIRK_DATA_AUDIOFORMAT(1) { 792 .formats = SNDRV_PCM_FMTBIT_S24_3LE, 793 .channels = 2, 794 .iface = 1, 795 .altsetting = 1, 796 .altset_idx = 1, 797 .attributes = 0, 798 .endpoint = 0x01, 799 .ep_attr = 0x01, 800 .rates = SNDRV_PCM_RATE_CONTINUOUS, 801 .rate_min = 44100, 802 .rate_max = 44100, 803 } 804 }, 805 { 806 QUIRK_DATA_AUDIOFORMAT(2) { 807 .formats = SNDRV_PCM_FMTBIT_S24_3LE, 808 .channels = 2, 809 .iface = 2, 810 .altsetting = 1, 811 .altset_idx = 1, 812 .attributes = 0, 813 .endpoint = 0x82, 814 .ep_attr = 0x01, 815 .rates = SNDRV_PCM_RATE_CONTINUOUS, 816 .rate_min = 44100, 817 .rate_max = 44100, 818 } 819 }, 820 { 821 QUIRK_DATA_MIDI_FIXED_ENDPOINT(3) { 822 .out_cables = 0x0001, 823 .in_cables = 0x0001 824 } 825 }, 826 QUIRK_COMPOSITE_END 827 } 828 } 829 }, 830 { 831 /* has ID 0x0028 when not in "Advanced Driver" mode */ 832 USB_DEVICE(0x0582, 0x0027), 833 QUIRK_DRIVER_INFO { 834 .vendor_name = "EDIROL", 835 .product_name = "SD-20", 836 QUIRK_DATA_MIDI_FIXED_ENDPOINT(0) { 837 .out_cables = 0x0003, 838 .in_cables = 0x0007 839 } 840 } 841 }, 842 { 843 /* has ID 0x002a when not in "Advanced Driver" mode */ 844 USB_DEVICE(0x0582, 0x0029), 845 QUIRK_DRIVER_INFO { 846 .vendor_name = "EDIROL", 847 .product_name = "SD-80", 848 QUIRK_DATA_MIDI_FIXED_ENDPOINT(0) { 849 .out_cables = 0x000f, 850 .in_cables = 0x000f 851 } 852 } 853 }, 854 { /* 855 * This quirk is for the "Advanced" modes of the Edirol UA-700. 856 * If the sample format switch is not in an advanced setting, the 857 * UA-700 has ID 0x0582/0x002c and is standard compliant (no quirks), 858 * but offers only 16-bit PCM and no MIDI. 859 */ 860 USB_DEVICE_VENDOR_SPEC(0x0582, 0x002b), 861 QUIRK_DRIVER_INFO { 862 .vendor_name = "EDIROL", 863 .product_name = "UA-700", 864 QUIRK_DATA_COMPOSITE { 865 { QUIRK_DATA_EDIROL_UAXX(1) }, 866 { QUIRK_DATA_EDIROL_UAXX(2) }, 867 { QUIRK_DATA_EDIROL_UAXX(3) }, 868 QUIRK_COMPOSITE_END 869 } 870 } 871 }, 872 { 873 /* has ID 0x002e when not in "Advanced Driver" mode */ 874 USB_DEVICE(0x0582, 0x002d), 875 QUIRK_DRIVER_INFO { 876 .vendor_name = "Roland", 877 .product_name = "XV-2020", 878 QUIRK_DATA_MIDI_FIXED_ENDPOINT(0) { 879 .out_cables = 0x0001, 880 .in_cables = 0x0001 881 } 882 } 883 }, 884 { 885 /* has ID 0x0030 when not in "Advanced Driver" mode */ 886 USB_DEVICE(0x0582, 0x002f), 887 QUIRK_DRIVER_INFO { 888 .vendor_name = "Roland", 889 .product_name = "VariOS", 890 QUIRK_DATA_MIDI_FIXED_ENDPOINT(0) { 891 .out_cables = 0x0007, 892 .in_cables = 0x0007 893 } 894 } 895 }, 896 { 897 /* has ID 0x0034 when not in "Advanced Driver" mode */ 898 USB_DEVICE(0x0582, 0x0033), 899 QUIRK_DRIVER_INFO { 900 .vendor_name = "EDIROL", 901 .product_name = "PCR", 902 QUIRK_DATA_MIDI_FIXED_ENDPOINT(0) { 903 .out_cables = 0x0003, 904 .in_cables = 0x0007 905 } 906 } 907 }, 908 { 909 /* 910 * Has ID 0x0038 when not in "Advanced Driver" mode; 911 * later revisions use IDs 0x0054 and 0x00a2. 912 */ 913 USB_DEVICE(0x0582, 0x0037), 914 QUIRK_DRIVER_INFO { 915 .vendor_name = "Roland", 916 .product_name = "Digital Piano", 917 QUIRK_DATA_MIDI_FIXED_ENDPOINT(0) { 918 .out_cables = 0x0001, 919 .in_cables = 0x0001 920 } 921 } 922 }, 923 { 924 /* 925 * This quirk is for the "Advanced Driver" mode. If off, the GS-10 926 * has ID 0x003c and is standard compliant, but has only 16-bit PCM 927 * and no MIDI. 928 */ 929 USB_DEVICE_VENDOR_SPEC(0x0582, 0x003b), 930 QUIRK_DRIVER_INFO { 931 .vendor_name = "BOSS", 932 .product_name = "GS-10", 933 QUIRK_DATA_COMPOSITE { 934 { QUIRK_DATA_STANDARD_AUDIO(1) }, 935 { QUIRK_DATA_STANDARD_AUDIO(2) }, 936 { QUIRK_DATA_STANDARD_MIDI(3) }, 937 QUIRK_COMPOSITE_END 938 } 939 } 940 }, 941 { 942 /* has ID 0x0041 when not in "Advanced Driver" mode */ 943 USB_DEVICE(0x0582, 0x0040), 944 QUIRK_DRIVER_INFO { 945 .vendor_name = "Roland", 946 .product_name = "GI-20", 947 QUIRK_DATA_MIDI_FIXED_ENDPOINT(0) { 948 .out_cables = 0x0001, 949 .in_cables = 0x0001 950 } 951 } 952 }, 953 { 954 /* has ID 0x0043 when not in "Advanced Driver" mode */ 955 USB_DEVICE(0x0582, 0x0042), 956 QUIRK_DRIVER_INFO { 957 .vendor_name = "Roland", 958 .product_name = "RS-70", 959 QUIRK_DATA_MIDI_FIXED_ENDPOINT(0) { 960 .out_cables = 0x0001, 961 .in_cables = 0x0001 962 } 963 } 964 }, 965 { 966 /* has ID 0x0049 when not in "Advanced Driver" mode */ 967 USB_DEVICE(0x0582, 0x0047), 968 QUIRK_DRIVER_INFO { 969 /* .vendor_name = "EDIROL", */ 970 /* .product_name = "UR-80", */ 971 QUIRK_DATA_COMPOSITE { 972 /* in the 96 kHz modes, only interface 1 is there */ 973 { QUIRK_DATA_STANDARD_AUDIO(1) }, 974 { QUIRK_DATA_STANDARD_AUDIO(2) }, 975 QUIRK_COMPOSITE_END 976 } 977 } 978 }, 979 { 980 /* has ID 0x004a when not in "Advanced Driver" mode */ 981 USB_DEVICE(0x0582, 0x0048), 982 QUIRK_DRIVER_INFO { 983 /* .vendor_name = "EDIROL", */ 984 /* .product_name = "UR-80", */ 985 QUIRK_DATA_MIDI_FIXED_ENDPOINT(0) { 986 .out_cables = 0x0003, 987 .in_cables = 0x0007 988 } 989 } 990 }, 991 { 992 /* has ID 0x004e when not in "Advanced Driver" mode */ 993 USB_DEVICE(0x0582, 0x004c), 994 QUIRK_DRIVER_INFO { 995 .vendor_name = "EDIROL", 996 .product_name = "PCR-A", 997 QUIRK_DATA_COMPOSITE { 998 { QUIRK_DATA_STANDARD_AUDIO(1) }, 999 { QUIRK_DATA_STANDARD_AUDIO(2) }, 1000 QUIRK_COMPOSITE_END 1001 } 1002 } 1003 }, 1004 { 1005 /* has ID 0x004f when not in "Advanced Driver" mode */ 1006 USB_DEVICE(0x0582, 0x004d), 1007 QUIRK_DRIVER_INFO { 1008 .vendor_name = "EDIROL", 1009 .product_name = "PCR-A", 1010 QUIRK_DATA_MIDI_FIXED_ENDPOINT(0) { 1011 .out_cables = 0x0003, 1012 .in_cables = 0x0007 1013 } 1014 } 1015 }, 1016 { 1017 /* 1018 * This quirk is for the "Advanced Driver" mode. If off, the UA-3FX 1019 * is standard compliant, but has only 16-bit PCM. 1020 */ 1021 USB_DEVICE(0x0582, 0x0050), 1022 QUIRK_DRIVER_INFO { 1023 .vendor_name = "EDIROL", 1024 .product_name = "UA-3FX", 1025 QUIRK_DATA_COMPOSITE { 1026 { QUIRK_DATA_STANDARD_AUDIO(1) }, 1027 { QUIRK_DATA_STANDARD_AUDIO(2) }, 1028 QUIRK_COMPOSITE_END 1029 } 1030 } 1031 }, 1032 { 1033 USB_DEVICE(0x0582, 0x0052), 1034 QUIRK_DRIVER_INFO { 1035 .vendor_name = "EDIROL", 1036 .product_name = "UM-1SX", 1037 QUIRK_DATA_STANDARD_MIDI(0) 1038 } 1039 }, 1040 { 1041 USB_DEVICE(0x0582, 0x0060), 1042 QUIRK_DRIVER_INFO { 1043 .vendor_name = "Roland", 1044 .product_name = "EXR Series", 1045 QUIRK_DATA_STANDARD_MIDI(0) 1046 } 1047 }, 1048 { 1049 /* has ID 0x0066 when not in "Advanced Driver" mode */ 1050 USB_DEVICE(0x0582, 0x0064), 1051 QUIRK_DRIVER_INFO { 1052 /* .vendor_name = "EDIROL", */ 1053 /* .product_name = "PCR-1", */ 1054 QUIRK_DATA_COMPOSITE { 1055 { QUIRK_DATA_STANDARD_AUDIO(1) }, 1056 { QUIRK_DATA_STANDARD_AUDIO(2) }, 1057 QUIRK_COMPOSITE_END 1058 } 1059 } 1060 }, 1061 { 1062 /* has ID 0x0067 when not in "Advanced Driver" mode */ 1063 USB_DEVICE(0x0582, 0x0065), 1064 QUIRK_DRIVER_INFO { 1065 /* .vendor_name = "EDIROL", */ 1066 /* .product_name = "PCR-1", */ 1067 QUIRK_DATA_MIDI_FIXED_ENDPOINT(0) { 1068 .out_cables = 0x0001, 1069 .in_cables = 0x0003 1070 } 1071 } 1072 }, 1073 { 1074 /* has ID 0x006e when not in "Advanced Driver" mode */ 1075 USB_DEVICE(0x0582, 0x006d), 1076 QUIRK_DRIVER_INFO { 1077 .vendor_name = "Roland", 1078 .product_name = "FANTOM-X", 1079 QUIRK_DATA_MIDI_FIXED_ENDPOINT(0) { 1080 .out_cables = 0x0001, 1081 .in_cables = 0x0001 1082 } 1083 } 1084 }, 1085 { /* 1086 * This quirk is for the "Advanced" modes of the Edirol UA-25. 1087 * If the switch is not in an advanced setting, the UA-25 has 1088 * ID 0x0582/0x0073 and is standard compliant (no quirks), but 1089 * offers only 16-bit PCM at 44.1 kHz and no MIDI. 1090 */ 1091 USB_DEVICE_VENDOR_SPEC(0x0582, 0x0074), 1092 QUIRK_DRIVER_INFO { 1093 .vendor_name = "EDIROL", 1094 .product_name = "UA-25", 1095 QUIRK_DATA_COMPOSITE { 1096 { QUIRK_DATA_EDIROL_UAXX(0) }, 1097 { QUIRK_DATA_EDIROL_UAXX(1) }, 1098 { QUIRK_DATA_EDIROL_UAXX(2) }, 1099 QUIRK_COMPOSITE_END 1100 } 1101 } 1102 }, 1103 { 1104 /* has ID 0x0076 when not in "Advanced Driver" mode */ 1105 USB_DEVICE(0x0582, 0x0075), 1106 QUIRK_DRIVER_INFO { 1107 .vendor_name = "BOSS", 1108 .product_name = "DR-880", 1109 QUIRK_DATA_MIDI_FIXED_ENDPOINT(0) { 1110 .out_cables = 0x0001, 1111 .in_cables = 0x0001 1112 } 1113 } 1114 }, 1115 { 1116 /* has ID 0x007b when not in "Advanced Driver" mode */ 1117 USB_DEVICE_VENDOR_SPEC(0x0582, 0x007a), 1118 QUIRK_DRIVER_INFO { 1119 .vendor_name = "Roland", 1120 /* "RD" or "RD-700SX"? */ 1121 QUIRK_DATA_MIDI_FIXED_ENDPOINT(0) { 1122 .out_cables = 0x0003, 1123 .in_cables = 0x0003 1124 } 1125 } 1126 }, 1127 { 1128 /* has ID 0x0081 when not in "Advanced Driver" mode */ 1129 USB_DEVICE(0x0582, 0x0080), 1130 QUIRK_DRIVER_INFO { 1131 .vendor_name = "Roland", 1132 .product_name = "G-70", 1133 QUIRK_DATA_MIDI_FIXED_ENDPOINT(0) { 1134 .out_cables = 0x0001, 1135 .in_cables = 0x0001 1136 } 1137 } 1138 }, 1139 { 1140 /* has ID 0x008c when not in "Advanced Driver" mode */ 1141 USB_DEVICE(0x0582, 0x008b), 1142 QUIRK_DRIVER_INFO { 1143 .vendor_name = "EDIROL", 1144 .product_name = "PC-50", 1145 QUIRK_DATA_MIDI_FIXED_ENDPOINT(0) { 1146 .out_cables = 0x0001, 1147 .in_cables = 0x0001 1148 } 1149 } 1150 }, 1151 { 1152 /* 1153 * This quirk is for the "Advanced Driver" mode. If off, the UA-4FX 1154 * is standard compliant, but has only 16-bit PCM and no MIDI. 1155 */ 1156 USB_DEVICE(0x0582, 0x00a3), 1157 QUIRK_DRIVER_INFO { 1158 .vendor_name = "EDIROL", 1159 .product_name = "UA-4FX", 1160 QUIRK_DATA_COMPOSITE { 1161 { QUIRK_DATA_EDIROL_UAXX(0) }, 1162 { QUIRK_DATA_EDIROL_UAXX(1) }, 1163 { QUIRK_DATA_EDIROL_UAXX(2) }, 1164 QUIRK_COMPOSITE_END 1165 } 1166 } 1167 }, 1168 { 1169 /* Edirol M-16DX */ 1170 USB_DEVICE(0x0582, 0x00c4), 1171 QUIRK_DRIVER_INFO { 1172 QUIRK_DATA_COMPOSITE { 1173 { QUIRK_DATA_STANDARD_AUDIO(0) }, 1174 { QUIRK_DATA_STANDARD_AUDIO(1) }, 1175 { 1176 QUIRK_DATA_MIDI_FIXED_ENDPOINT(2) { 1177 .out_cables = 0x0001, 1178 .in_cables = 0x0001 1179 } 1180 }, 1181 QUIRK_COMPOSITE_END 1182 } 1183 } 1184 }, 1185 { 1186 /* Advanced modes of the Edirol UA-25EX. 1187 * For the standard mode, UA-25EX has ID 0582:00e7, which 1188 * offers only 16-bit PCM at 44.1 kHz and no MIDI. 1189 */ 1190 USB_DEVICE_VENDOR_SPEC(0x0582, 0x00e6), 1191 QUIRK_DRIVER_INFO { 1192 .vendor_name = "EDIROL", 1193 .product_name = "UA-25EX", 1194 QUIRK_DATA_COMPOSITE { 1195 { QUIRK_DATA_EDIROL_UAXX(0) }, 1196 { QUIRK_DATA_EDIROL_UAXX(1) }, 1197 { QUIRK_DATA_EDIROL_UAXX(2) }, 1198 QUIRK_COMPOSITE_END 1199 } 1200 } 1201 }, 1202 { 1203 /* Edirol UM-3G */ 1204 USB_DEVICE_VENDOR_SPEC(0x0582, 0x0108), 1205 QUIRK_DRIVER_INFO { 1206 QUIRK_DATA_MIDI_FIXED_ENDPOINT(0) { 1207 .out_cables = 0x0007, 1208 .in_cables = 0x0007 1209 } 1210 } 1211 }, 1212 { 1213 /* BOSS ME-25 */ 1214 USB_DEVICE(0x0582, 0x0113), 1215 QUIRK_DRIVER_INFO { 1216 QUIRK_DATA_COMPOSITE { 1217 { QUIRK_DATA_STANDARD_AUDIO(0) }, 1218 { QUIRK_DATA_STANDARD_AUDIO(1) }, 1219 { 1220 QUIRK_DATA_MIDI_FIXED_ENDPOINT(2) { 1221 .out_cables = 0x0001, 1222 .in_cables = 0x0001 1223 } 1224 }, 1225 QUIRK_COMPOSITE_END 1226 } 1227 } 1228 }, 1229 { 1230 /* only 44.1 kHz works at the moment */ 1231 USB_DEVICE(0x0582, 0x0120), 1232 QUIRK_DRIVER_INFO { 1233 /* .vendor_name = "Roland", */ 1234 /* .product_name = "OCTO-CAPTURE", */ 1235 QUIRK_DATA_COMPOSITE { 1236 { 1237 QUIRK_DATA_AUDIOFORMAT(0) { 1238 .formats = SNDRV_PCM_FMTBIT_S32_LE, 1239 .channels = 10, 1240 .iface = 0, 1241 .altsetting = 1, 1242 .altset_idx = 1, 1243 .endpoint = 0x05, 1244 .ep_attr = 0x05, 1245 .rates = SNDRV_PCM_RATE_44100, 1246 .rate_min = 44100, 1247 .rate_max = 44100, 1248 .nr_rates = 1, 1249 .rate_table = (unsigned int[]) { 44100 } 1250 } 1251 }, 1252 { 1253 QUIRK_DATA_AUDIOFORMAT(1) { 1254 .formats = SNDRV_PCM_FMTBIT_S32_LE, 1255 .channels = 12, 1256 .iface = 1, 1257 .altsetting = 1, 1258 .altset_idx = 1, 1259 .endpoint = 0x85, 1260 .ep_attr = 0x25, 1261 .rates = SNDRV_PCM_RATE_44100, 1262 .rate_min = 44100, 1263 .rate_max = 44100, 1264 .nr_rates = 1, 1265 .rate_table = (unsigned int[]) { 44100 } 1266 } 1267 }, 1268 { 1269 QUIRK_DATA_MIDI_FIXED_ENDPOINT(2) { 1270 .out_cables = 0x0001, 1271 .in_cables = 0x0001 1272 } 1273 }, 1274 { QUIRK_DATA_IGNORE(3) }, 1275 { QUIRK_DATA_IGNORE(4) }, 1276 QUIRK_COMPOSITE_END 1277 } 1278 } 1279 }, 1280 { 1281 /* only 44.1 kHz works at the moment */ 1282 USB_DEVICE(0x0582, 0x012f), 1283 QUIRK_DRIVER_INFO { 1284 /* .vendor_name = "Roland", */ 1285 /* .product_name = "QUAD-CAPTURE", */ 1286 QUIRK_DATA_COMPOSITE { 1287 { 1288 QUIRK_DATA_AUDIOFORMAT(0) { 1289 .formats = SNDRV_PCM_FMTBIT_S32_LE, 1290 .channels = 4, 1291 .iface = 0, 1292 .altsetting = 1, 1293 .altset_idx = 1, 1294 .endpoint = 0x05, 1295 .ep_attr = 0x05, 1296 .rates = SNDRV_PCM_RATE_44100, 1297 .rate_min = 44100, 1298 .rate_max = 44100, 1299 .nr_rates = 1, 1300 .rate_table = (unsigned int[]) { 44100 } 1301 } 1302 }, 1303 { 1304 QUIRK_DATA_AUDIOFORMAT(1) { 1305 .formats = SNDRV_PCM_FMTBIT_S32_LE, 1306 .channels = 6, 1307 .iface = 1, 1308 .altsetting = 1, 1309 .altset_idx = 1, 1310 .endpoint = 0x85, 1311 .ep_attr = 0x25, 1312 .rates = SNDRV_PCM_RATE_44100, 1313 .rate_min = 44100, 1314 .rate_max = 44100, 1315 .nr_rates = 1, 1316 .rate_table = (unsigned int[]) { 44100 } 1317 } 1318 }, 1319 { 1320 QUIRK_DATA_MIDI_FIXED_ENDPOINT(2) { 1321 .out_cables = 0x0001, 1322 .in_cables = 0x0001 1323 } 1324 }, 1325 { QUIRK_DATA_IGNORE(3) }, 1326 { QUIRK_DATA_IGNORE(4) }, 1327 QUIRK_COMPOSITE_END 1328 } 1329 } 1330 }, 1331 { 1332 USB_DEVICE(0x0582, 0x0159), 1333 QUIRK_DRIVER_INFO { 1334 /* .vendor_name = "Roland", */ 1335 /* .product_name = "UA-22", */ 1336 QUIRK_DATA_COMPOSITE { 1337 { QUIRK_DATA_STANDARD_AUDIO(0) }, 1338 { QUIRK_DATA_STANDARD_AUDIO(1) }, 1339 { 1340 QUIRK_DATA_MIDI_FIXED_ENDPOINT(2) { 1341 .out_cables = 0x0001, 1342 .in_cables = 0x0001 1343 } 1344 }, 1345 QUIRK_COMPOSITE_END 1346 } 1347 } 1348 }, 1349 1350 /* UA101 and co are supported by another driver */ 1351 { 1352 USB_DEVICE(0x0582, 0x0044), /* UA-1000 high speed */ 1353 QUIRK_DRIVER_INFO { 1354 .ifnum = QUIRK_NODEV_INTERFACE 1355 }, 1356 }, 1357 { 1358 USB_DEVICE(0x0582, 0x007d), /* UA-101 high speed */ 1359 QUIRK_DRIVER_INFO { 1360 .ifnum = QUIRK_NODEV_INTERFACE 1361 }, 1362 }, 1363 { 1364 USB_DEVICE(0x0582, 0x008d), /* UA-101 full speed */ 1365 QUIRK_DRIVER_INFO { 1366 .ifnum = QUIRK_NODEV_INTERFACE 1367 }, 1368 }, 1369 1370 /* this catches most recent vendor-specific Roland devices */ 1371 { 1372 .match_flags = USB_DEVICE_ID_MATCH_VENDOR | 1373 USB_DEVICE_ID_MATCH_INT_CLASS, 1374 .idVendor = 0x0582, 1375 .bInterfaceClass = USB_CLASS_VENDOR_SPEC, 1376 QUIRK_DRIVER_INFO { 1377 .ifnum = QUIRK_ANY_INTERFACE, 1378 .type = QUIRK_AUTODETECT 1379 } 1380 }, 1381 1382 /* Guillemot devices */ 1383 { 1384 /* 1385 * This is for the "Windows Edition" where the external MIDI ports are 1386 * the only MIDI ports; the control data is reported through HID 1387 * interfaces. The "Macintosh Edition" has ID 0xd002 and uses standard 1388 * compliant USB MIDI ports for external MIDI and controls. 1389 */ 1390 USB_DEVICE_VENDOR_SPEC(0x06f8, 0xb000), 1391 QUIRK_DRIVER_INFO { 1392 .vendor_name = "Hercules", 1393 .product_name = "DJ Console (WE)", 1394 QUIRK_DATA_MIDI_FIXED_ENDPOINT(4) { 1395 .out_cables = 0x0001, 1396 .in_cables = 0x0001 1397 } 1398 } 1399 }, 1400 1401 /* Midiman/M-Audio devices */ 1402 { 1403 USB_DEVICE_VENDOR_SPEC(0x0763, 0x1002), 1404 QUIRK_DRIVER_INFO { 1405 .vendor_name = "M-Audio", 1406 .product_name = "MidiSport 2x2", 1407 QUIRK_DATA_MIDI_MIDIMAN(QUIRK_ANY_INTERFACE) { 1408 .out_cables = 0x0003, 1409 .in_cables = 0x0003 1410 } 1411 } 1412 }, 1413 { 1414 USB_DEVICE_VENDOR_SPEC(0x0763, 0x1011), 1415 QUIRK_DRIVER_INFO { 1416 .vendor_name = "M-Audio", 1417 .product_name = "MidiSport 1x1", 1418 QUIRK_DATA_MIDI_MIDIMAN(QUIRK_ANY_INTERFACE) { 1419 .out_cables = 0x0001, 1420 .in_cables = 0x0001 1421 } 1422 } 1423 }, 1424 { 1425 USB_DEVICE_VENDOR_SPEC(0x0763, 0x1015), 1426 QUIRK_DRIVER_INFO { 1427 .vendor_name = "M-Audio", 1428 .product_name = "Keystation", 1429 QUIRK_DATA_MIDI_MIDIMAN(QUIRK_ANY_INTERFACE) { 1430 .out_cables = 0x0001, 1431 .in_cables = 0x0001 1432 } 1433 } 1434 }, 1435 { 1436 USB_DEVICE_VENDOR_SPEC(0x0763, 0x1021), 1437 QUIRK_DRIVER_INFO { 1438 .vendor_name = "M-Audio", 1439 .product_name = "MidiSport 4x4", 1440 QUIRK_DATA_MIDI_MIDIMAN(QUIRK_ANY_INTERFACE) { 1441 .out_cables = 0x000f, 1442 .in_cables = 0x000f 1443 } 1444 } 1445 }, 1446 { 1447 /* 1448 * For hardware revision 1.05; in the later revisions (1.10 and 1449 * 1.21), 0x1031 is the ID for the device without firmware. 1450 * Thanks to Olaf Giesbrecht <Olaf_Giesbrecht@yahoo.de> 1451 */ 1452 USB_DEVICE_VER(0x0763, 0x1031, 0x0100, 0x0109), 1453 QUIRK_DRIVER_INFO { 1454 .vendor_name = "M-Audio", 1455 .product_name = "MidiSport 8x8", 1456 QUIRK_DATA_MIDI_MIDIMAN(QUIRK_ANY_INTERFACE) { 1457 .out_cables = 0x01ff, 1458 .in_cables = 0x01ff 1459 } 1460 } 1461 }, 1462 { 1463 USB_DEVICE_VENDOR_SPEC(0x0763, 0x1033), 1464 QUIRK_DRIVER_INFO { 1465 .vendor_name = "M-Audio", 1466 .product_name = "MidiSport 8x8", 1467 QUIRK_DATA_MIDI_MIDIMAN(QUIRK_ANY_INTERFACE) { 1468 .out_cables = 0x01ff, 1469 .in_cables = 0x01ff 1470 } 1471 } 1472 }, 1473 { 1474 USB_DEVICE_VENDOR_SPEC(0x0763, 0x1041), 1475 QUIRK_DRIVER_INFO { 1476 .vendor_name = "M-Audio", 1477 .product_name = "MidiSport 2x4", 1478 QUIRK_DATA_MIDI_MIDIMAN(QUIRK_ANY_INTERFACE) { 1479 .out_cables = 0x000f, 1480 .in_cables = 0x0003 1481 } 1482 } 1483 }, 1484 { 1485 USB_DEVICE_VENDOR_SPEC(0x0763, 0x2001), 1486 QUIRK_DRIVER_INFO { 1487 .vendor_name = "M-Audio", 1488 .product_name = "Quattro", 1489 QUIRK_DATA_COMPOSITE { 1490 /* 1491 * Interfaces 0-2 are "Windows-compatible", 16-bit only, 1492 * and share endpoints with the other interfaces. 1493 * Ignore them. The other interfaces can do 24 bits, 1494 * but captured samples are big-endian (see usbaudio.c). 1495 */ 1496 { QUIRK_DATA_IGNORE(0) }, 1497 { QUIRK_DATA_IGNORE(1) }, 1498 { QUIRK_DATA_IGNORE(2) }, 1499 { QUIRK_DATA_IGNORE(3) }, 1500 { QUIRK_DATA_STANDARD_AUDIO(4) }, 1501 { QUIRK_DATA_STANDARD_AUDIO(5) }, 1502 { QUIRK_DATA_IGNORE(6) }, 1503 { QUIRK_DATA_STANDARD_AUDIO(7) }, 1504 { QUIRK_DATA_STANDARD_AUDIO(8) }, 1505 { 1506 QUIRK_DATA_MIDI_MIDIMAN(9) { 1507 .out_cables = 0x0001, 1508 .in_cables = 0x0001 1509 } 1510 }, 1511 QUIRK_COMPOSITE_END 1512 } 1513 } 1514 }, 1515 { 1516 USB_DEVICE_VENDOR_SPEC(0x0763, 0x2003), 1517 QUIRK_DRIVER_INFO { 1518 .vendor_name = "M-Audio", 1519 .product_name = "AudioPhile", 1520 QUIRK_DATA_MIDI_MIDIMAN(6) { 1521 .out_cables = 0x0001, 1522 .in_cables = 0x0001 1523 } 1524 } 1525 }, 1526 { 1527 USB_DEVICE_VENDOR_SPEC(0x0763, 0x2008), 1528 QUIRK_DRIVER_INFO { 1529 .vendor_name = "M-Audio", 1530 .product_name = "Ozone", 1531 QUIRK_DATA_MIDI_MIDIMAN(3) { 1532 .out_cables = 0x0001, 1533 .in_cables = 0x0001 1534 } 1535 } 1536 }, 1537 { 1538 USB_DEVICE_VENDOR_SPEC(0x0763, 0x200d), 1539 QUIRK_DRIVER_INFO { 1540 .vendor_name = "M-Audio", 1541 .product_name = "OmniStudio", 1542 QUIRK_DATA_COMPOSITE { 1543 { QUIRK_DATA_IGNORE(0) }, 1544 { QUIRK_DATA_IGNORE(1) }, 1545 { QUIRK_DATA_IGNORE(2) }, 1546 { QUIRK_DATA_IGNORE(3) }, 1547 { QUIRK_DATA_STANDARD_AUDIO(4) }, 1548 { QUIRK_DATA_STANDARD_AUDIO(5) }, 1549 { QUIRK_DATA_IGNORE(6) }, 1550 { QUIRK_DATA_STANDARD_AUDIO(7) }, 1551 { QUIRK_DATA_STANDARD_AUDIO(8) }, 1552 { 1553 QUIRK_DATA_MIDI_MIDIMAN(9) { 1554 .out_cables = 0x0001, 1555 .in_cables = 0x0001 1556 } 1557 }, 1558 QUIRK_COMPOSITE_END 1559 } 1560 } 1561 }, 1562 { 1563 USB_DEVICE(0x0763, 0x2019), 1564 QUIRK_DRIVER_INFO { 1565 /* .vendor_name = "M-Audio", */ 1566 /* .product_name = "Ozone Academic", */ 1567 QUIRK_DATA_COMPOSITE { 1568 { QUIRK_DATA_STANDARD_AUDIO(0) }, 1569 { QUIRK_DATA_STANDARD_AUDIO(1) }, 1570 { QUIRK_DATA_STANDARD_AUDIO(2) }, 1571 { 1572 QUIRK_DATA_MIDI_MIDIMAN(3) { 1573 .out_cables = 0x0001, 1574 .in_cables = 0x0001 1575 } 1576 }, 1577 QUIRK_COMPOSITE_END 1578 } 1579 } 1580 }, 1581 { 1582 /* M-Audio Micro */ 1583 USB_DEVICE_VENDOR_SPEC(0x0763, 0x201a), 1584 }, 1585 { 1586 USB_DEVICE_VENDOR_SPEC(0x0763, 0x2030), 1587 QUIRK_DRIVER_INFO { 1588 /* .vendor_name = "M-Audio", */ 1589 /* .product_name = "Fast Track C400", */ 1590 QUIRK_DATA_COMPOSITE { 1591 { QUIRK_DATA_STANDARD_MIXER(1) }, 1592 /* Playback */ 1593 { 1594 QUIRK_DATA_AUDIOFORMAT(2) { 1595 .formats = SNDRV_PCM_FMTBIT_S24_3LE, 1596 .channels = 6, 1597 .iface = 2, 1598 .altsetting = 1, 1599 .altset_idx = 1, 1600 .attributes = UAC_EP_CS_ATTR_SAMPLE_RATE, 1601 .endpoint = 0x01, 1602 .ep_attr = 0x09, 1603 .rates = SNDRV_PCM_RATE_44100 | 1604 SNDRV_PCM_RATE_48000 | 1605 SNDRV_PCM_RATE_88200 | 1606 SNDRV_PCM_RATE_96000, 1607 .rate_min = 44100, 1608 .rate_max = 96000, 1609 .nr_rates = 4, 1610 .rate_table = (unsigned int[]) { 1611 44100, 48000, 88200, 96000 1612 }, 1613 .clock = 0x80, 1614 } 1615 }, 1616 /* Capture */ 1617 { 1618 QUIRK_DATA_AUDIOFORMAT(3) { 1619 .formats = SNDRV_PCM_FMTBIT_S24_3LE, 1620 .channels = 4, 1621 .iface = 3, 1622 .altsetting = 1, 1623 .altset_idx = 1, 1624 .attributes = UAC_EP_CS_ATTR_SAMPLE_RATE, 1625 .endpoint = 0x81, 1626 .ep_attr = 0x05, 1627 .rates = SNDRV_PCM_RATE_44100 | 1628 SNDRV_PCM_RATE_48000 | 1629 SNDRV_PCM_RATE_88200 | 1630 SNDRV_PCM_RATE_96000, 1631 .rate_min = 44100, 1632 .rate_max = 96000, 1633 .nr_rates = 4, 1634 .rate_table = (unsigned int[]) { 1635 44100, 48000, 88200, 96000 1636 }, 1637 .clock = 0x80, 1638 } 1639 }, 1640 /* MIDI: Interface = 4*/ 1641 QUIRK_COMPOSITE_END 1642 } 1643 } 1644 }, 1645 { 1646 USB_DEVICE_VENDOR_SPEC(0x0763, 0x2031), 1647 QUIRK_DRIVER_INFO { 1648 /* .vendor_name = "M-Audio", */ 1649 /* .product_name = "Fast Track C600", */ 1650 QUIRK_DATA_COMPOSITE { 1651 { QUIRK_DATA_STANDARD_MIXER(1) }, 1652 /* Playback */ 1653 { 1654 QUIRK_DATA_AUDIOFORMAT(2) { 1655 .formats = SNDRV_PCM_FMTBIT_S24_3LE, 1656 .channels = 8, 1657 .iface = 2, 1658 .altsetting = 1, 1659 .altset_idx = 1, 1660 .attributes = UAC_EP_CS_ATTR_SAMPLE_RATE, 1661 .endpoint = 0x01, 1662 .ep_attr = 0x09, 1663 .rates = SNDRV_PCM_RATE_44100 | 1664 SNDRV_PCM_RATE_48000 | 1665 SNDRV_PCM_RATE_88200 | 1666 SNDRV_PCM_RATE_96000, 1667 .rate_min = 44100, 1668 .rate_max = 96000, 1669 .nr_rates = 4, 1670 .rate_table = (unsigned int[]) { 1671 44100, 48000, 88200, 96000 1672 }, 1673 .clock = 0x80, 1674 } 1675 }, 1676 /* Capture */ 1677 { 1678 QUIRK_DATA_AUDIOFORMAT(3) { 1679 .formats = SNDRV_PCM_FMTBIT_S24_3LE, 1680 .channels = 6, 1681 .iface = 3, 1682 .altsetting = 1, 1683 .altset_idx = 1, 1684 .attributes = UAC_EP_CS_ATTR_SAMPLE_RATE, 1685 .endpoint = 0x81, 1686 .ep_attr = 0x05, 1687 .rates = SNDRV_PCM_RATE_44100 | 1688 SNDRV_PCM_RATE_48000 | 1689 SNDRV_PCM_RATE_88200 | 1690 SNDRV_PCM_RATE_96000, 1691 .rate_min = 44100, 1692 .rate_max = 96000, 1693 .nr_rates = 4, 1694 .rate_table = (unsigned int[]) { 1695 44100, 48000, 88200, 96000 1696 }, 1697 .clock = 0x80, 1698 } 1699 }, 1700 /* MIDI: Interface = 4 */ 1701 QUIRK_COMPOSITE_END 1702 } 1703 } 1704 }, 1705 { 1706 USB_DEVICE_VENDOR_SPEC(0x0763, 0x2080), 1707 QUIRK_DRIVER_INFO { 1708 /* .vendor_name = "M-Audio", */ 1709 /* .product_name = "Fast Track Ultra", */ 1710 QUIRK_DATA_COMPOSITE { 1711 { QUIRK_DATA_STANDARD_MIXER(0) }, 1712 { 1713 QUIRK_DATA_AUDIOFORMAT(1) { 1714 .formats = SNDRV_PCM_FMTBIT_S24_3LE, 1715 .channels = 8, 1716 .iface = 1, 1717 .altsetting = 1, 1718 .altset_idx = 1, 1719 .attributes = UAC_EP_CS_ATTR_SAMPLE_RATE, 1720 .endpoint = 0x01, 1721 .ep_attr = 0x09, 1722 .rates = SNDRV_PCM_RATE_44100 | 1723 SNDRV_PCM_RATE_48000 | 1724 SNDRV_PCM_RATE_88200 | 1725 SNDRV_PCM_RATE_96000, 1726 .rate_min = 44100, 1727 .rate_max = 96000, 1728 .nr_rates = 4, 1729 .rate_table = (unsigned int[]) { 1730 44100, 48000, 88200, 96000 1731 } 1732 } 1733 }, 1734 { 1735 QUIRK_DATA_AUDIOFORMAT(2) { 1736 .formats = SNDRV_PCM_FMTBIT_S24_3LE, 1737 .channels = 8, 1738 .iface = 2, 1739 .altsetting = 1, 1740 .altset_idx = 1, 1741 .attributes = UAC_EP_CS_ATTR_SAMPLE_RATE, 1742 .endpoint = 0x81, 1743 .ep_attr = 0x05, 1744 .rates = SNDRV_PCM_RATE_44100 | 1745 SNDRV_PCM_RATE_48000 | 1746 SNDRV_PCM_RATE_88200 | 1747 SNDRV_PCM_RATE_96000, 1748 .rate_min = 44100, 1749 .rate_max = 96000, 1750 .nr_rates = 4, 1751 .rate_table = (unsigned int[]) { 1752 44100, 48000, 88200, 96000 1753 } 1754 } 1755 }, 1756 /* interface 3 (MIDI) is standard compliant */ 1757 QUIRK_COMPOSITE_END 1758 } 1759 } 1760 }, 1761 { 1762 USB_DEVICE_VENDOR_SPEC(0x0763, 0x2081), 1763 QUIRK_DRIVER_INFO { 1764 /* .vendor_name = "M-Audio", */ 1765 /* .product_name = "Fast Track Ultra 8R", */ 1766 QUIRK_DATA_COMPOSITE { 1767 { QUIRK_DATA_STANDARD_MIXER(0) }, 1768 { 1769 QUIRK_DATA_AUDIOFORMAT(1) { 1770 .formats = SNDRV_PCM_FMTBIT_S24_3LE, 1771 .channels = 8, 1772 .iface = 1, 1773 .altsetting = 1, 1774 .altset_idx = 1, 1775 .attributes = UAC_EP_CS_ATTR_SAMPLE_RATE, 1776 .endpoint = 0x01, 1777 .ep_attr = 0x09, 1778 .rates = SNDRV_PCM_RATE_44100 | 1779 SNDRV_PCM_RATE_48000 | 1780 SNDRV_PCM_RATE_88200 | 1781 SNDRV_PCM_RATE_96000, 1782 .rate_min = 44100, 1783 .rate_max = 96000, 1784 .nr_rates = 4, 1785 .rate_table = (unsigned int[]) { 1786 44100, 48000, 88200, 96000 1787 } 1788 } 1789 }, 1790 { 1791 QUIRK_DATA_AUDIOFORMAT(2) { 1792 .formats = SNDRV_PCM_FMTBIT_S24_3LE, 1793 .channels = 8, 1794 .iface = 2, 1795 .altsetting = 1, 1796 .altset_idx = 1, 1797 .attributes = UAC_EP_CS_ATTR_SAMPLE_RATE, 1798 .endpoint = 0x81, 1799 .ep_attr = 0x05, 1800 .rates = SNDRV_PCM_RATE_44100 | 1801 SNDRV_PCM_RATE_48000 | 1802 SNDRV_PCM_RATE_88200 | 1803 SNDRV_PCM_RATE_96000, 1804 .rate_min = 44100, 1805 .rate_max = 96000, 1806 .nr_rates = 4, 1807 .rate_table = (unsigned int[]) { 1808 44100, 48000, 88200, 96000 1809 } 1810 } 1811 }, 1812 /* interface 3 (MIDI) is standard compliant */ 1813 QUIRK_COMPOSITE_END 1814 } 1815 } 1816 }, 1817 { 1818 /* 1819 * M-Audio Venom 1820 * 1821 * The AudioControl interface times out on every GET_CUR request, 1822 * which adds around 47 seconds to the card registration and 1823 * freezes the device, blocking streaming. 1824 * Using an explicit composite quirk to skip the mixer entirely. 1825 */ 1826 USB_DEVICE_VENDOR_SPEC(0x0763, 0x2084), 1827 QUIRK_DRIVER_INFO { 1828 .vendor_name = "M-Audio", 1829 .product_name = "Venom", 1830 QUIRK_DATA_COMPOSITE { 1831 { QUIRK_DATA_IGNORE(0) }, 1832 { QUIRK_DATA_STANDARD_AUDIO(1) }, 1833 { QUIRK_DATA_STANDARD_AUDIO(2) }, 1834 { QUIRK_DATA_STANDARD_MIDI(3) }, 1835 QUIRK_COMPOSITE_END 1836 } 1837 } 1838 }, 1839 1840 /* Casio devices */ 1841 { 1842 USB_DEVICE(0x07cf, 0x6801), 1843 QUIRK_DRIVER_INFO { 1844 .vendor_name = "Casio", 1845 .product_name = "PL-40R", 1846 QUIRK_DATA_MIDI_YAMAHA(0) 1847 } 1848 }, 1849 { 1850 /* this ID is used by several devices without a product ID */ 1851 USB_DEVICE(0x07cf, 0x6802), 1852 QUIRK_DRIVER_INFO { 1853 .vendor_name = "Casio", 1854 .product_name = "Keyboard", 1855 QUIRK_DATA_MIDI_YAMAHA(0) 1856 } 1857 }, 1858 1859 /* Mark of the Unicorn devices */ 1860 { 1861 /* thanks to Robert A. Lerche <ral 'at' msbit.com> */ 1862 .match_flags = USB_DEVICE_ID_MATCH_VENDOR | 1863 USB_DEVICE_ID_MATCH_PRODUCT | 1864 USB_DEVICE_ID_MATCH_DEV_SUBCLASS, 1865 .idVendor = 0x07fd, 1866 .idProduct = 0x0001, 1867 .bDeviceSubClass = 2, 1868 QUIRK_DRIVER_INFO { 1869 .vendor_name = "MOTU", 1870 .product_name = "Fastlane", 1871 QUIRK_DATA_COMPOSITE { 1872 { QUIRK_DATA_RAW_BYTES(0) }, 1873 { QUIRK_DATA_IGNORE(1) }, 1874 QUIRK_COMPOSITE_END 1875 } 1876 } 1877 }, 1878 1879 /* Emagic devices */ 1880 { 1881 USB_DEVICE(0x086a, 0x0001), 1882 QUIRK_DRIVER_INFO { 1883 .vendor_name = "Emagic", 1884 .product_name = "Unitor8", 1885 QUIRK_DATA_MIDI_EMAGIC(2) { 1886 .out_cables = 0x80ff, 1887 .in_cables = 0x80ff 1888 } 1889 } 1890 }, 1891 { 1892 USB_DEVICE(0x086a, 0x0002), 1893 QUIRK_DRIVER_INFO { 1894 .vendor_name = "Emagic", 1895 /* .product_name = "AMT8", */ 1896 QUIRK_DATA_MIDI_EMAGIC(2) { 1897 .out_cables = 0x80ff, 1898 .in_cables = 0x80ff 1899 } 1900 } 1901 }, 1902 { 1903 USB_DEVICE(0x086a, 0x0003), 1904 QUIRK_DRIVER_INFO { 1905 .vendor_name = "Emagic", 1906 /* .product_name = "MT4", */ 1907 QUIRK_DATA_MIDI_EMAGIC(2) { 1908 .out_cables = 0x800f, 1909 .in_cables = 0x8003 1910 } 1911 } 1912 }, 1913 1914 /* KORG devices */ 1915 { 1916 USB_DEVICE_VENDOR_SPEC(0x0944, 0x0200), 1917 QUIRK_DRIVER_INFO { 1918 .vendor_name = "KORG, Inc.", 1919 /* .product_name = "PANDORA PX5D", */ 1920 QUIRK_DATA_STANDARD_MIDI(3) 1921 } 1922 }, 1923 1924 { 1925 USB_DEVICE_VENDOR_SPEC(0x0944, 0x0201), 1926 QUIRK_DRIVER_INFO { 1927 .vendor_name = "KORG, Inc.", 1928 /* .product_name = "ToneLab ST", */ 1929 QUIRK_DATA_STANDARD_MIDI(3) 1930 } 1931 }, 1932 1933 { 1934 USB_DEVICE_VENDOR_SPEC(0x0944, 0x0204), 1935 QUIRK_DRIVER_INFO { 1936 .vendor_name = "KORG, Inc.", 1937 /* .product_name = "ToneLab EX", */ 1938 QUIRK_DATA_STANDARD_MIDI(3) 1939 } 1940 }, 1941 1942 /* AKAI devices */ 1943 { 1944 USB_DEVICE(0x09e8, 0x0062), 1945 QUIRK_DRIVER_INFO { 1946 .vendor_name = "AKAI", 1947 .product_name = "MPD16", 1948 .ifnum = 0, 1949 .type = QUIRK_MIDI_AKAI, 1950 } 1951 }, 1952 1953 { 1954 /* Akai MPC Element */ 1955 USB_DEVICE(0x09e8, 0x0021), 1956 QUIRK_DRIVER_INFO { 1957 QUIRK_DATA_COMPOSITE { 1958 { QUIRK_DATA_IGNORE(0) }, 1959 { QUIRK_DATA_STANDARD_MIDI(1) }, 1960 QUIRK_COMPOSITE_END 1961 } 1962 } 1963 }, 1964 1965 /* Steinberg devices */ 1966 { 1967 /* Steinberg MI2 */ 1968 USB_DEVICE_VENDOR_SPEC(0x0a4e, 0x2040), 1969 QUIRK_DRIVER_INFO { 1970 QUIRK_DATA_COMPOSITE { 1971 { QUIRK_DATA_STANDARD_AUDIO(0) }, 1972 { QUIRK_DATA_STANDARD_AUDIO(1) }, 1973 { QUIRK_DATA_STANDARD_AUDIO(2) }, 1974 { 1975 QUIRK_DATA_MIDI_FIXED_ENDPOINT(3) { 1976 .out_cables = 0x0001, 1977 .in_cables = 0x0001 1978 } 1979 }, 1980 QUIRK_COMPOSITE_END 1981 } 1982 } 1983 }, 1984 { 1985 /* Steinberg MI4 */ 1986 USB_DEVICE_VENDOR_SPEC(0x0a4e, 0x4040), 1987 QUIRK_DRIVER_INFO { 1988 QUIRK_DATA_COMPOSITE { 1989 { QUIRK_DATA_STANDARD_AUDIO(0) }, 1990 { QUIRK_DATA_STANDARD_AUDIO(1) }, 1991 { QUIRK_DATA_STANDARD_AUDIO(2) }, 1992 { 1993 QUIRK_DATA_MIDI_FIXED_ENDPOINT(3) { 1994 .out_cables = 0x0001, 1995 .in_cables = 0x0001 1996 } 1997 }, 1998 QUIRK_COMPOSITE_END 1999 } 2000 } 2001 }, 2002 2003 /* TerraTec devices */ 2004 { 2005 USB_DEVICE_VENDOR_SPEC(0x0ccd, 0x0012), 2006 QUIRK_DRIVER_INFO { 2007 .vendor_name = "TerraTec", 2008 .product_name = "PHASE 26", 2009 QUIRK_DATA_STANDARD_MIDI(3) 2010 } 2011 }, 2012 { 2013 USB_DEVICE_VENDOR_SPEC(0x0ccd, 0x0013), 2014 QUIRK_DRIVER_INFO { 2015 .vendor_name = "TerraTec", 2016 .product_name = "PHASE 26", 2017 QUIRK_DATA_STANDARD_MIDI(3) 2018 } 2019 }, 2020 { 2021 USB_DEVICE_VENDOR_SPEC(0x0ccd, 0x0014), 2022 QUIRK_DRIVER_INFO { 2023 .vendor_name = "TerraTec", 2024 .product_name = "PHASE 26", 2025 QUIRK_DATA_STANDARD_MIDI(3) 2026 } 2027 }, 2028 { 2029 USB_DEVICE(0x0ccd, 0x0035), 2030 QUIRK_DRIVER_INFO { 2031 .vendor_name = "Miditech", 2032 .product_name = "Play'n Roll", 2033 .ifnum = 0, 2034 .type = QUIRK_MIDI_CME 2035 } 2036 }, 2037 2038 /* Stanton ScratchAmp */ 2039 { USB_DEVICE(0x103d, 0x0100) }, 2040 { USB_DEVICE(0x103d, 0x0101) }, 2041 2042 /* Novation EMS devices */ 2043 { 2044 USB_DEVICE_VENDOR_SPEC(0x1235, 0x0001), 2045 QUIRK_DRIVER_INFO { 2046 .vendor_name = "Novation", 2047 .product_name = "ReMOTE Audio/XStation", 2048 .ifnum = 4, 2049 .type = QUIRK_MIDI_NOVATION 2050 } 2051 }, 2052 { 2053 USB_DEVICE_VENDOR_SPEC(0x1235, 0x0002), 2054 QUIRK_DRIVER_INFO { 2055 .vendor_name = "Novation", 2056 .product_name = "Speedio", 2057 .ifnum = 3, 2058 .type = QUIRK_MIDI_NOVATION 2059 } 2060 }, 2061 { 2062 USB_DEVICE(0x1235, 0x000a), 2063 QUIRK_DRIVER_INFO { 2064 /* .vendor_name = "Novation", */ 2065 /* .product_name = "Nocturn", */ 2066 QUIRK_DATA_RAW_BYTES(0) 2067 } 2068 }, 2069 { 2070 USB_DEVICE(0x1235, 0x000e), 2071 QUIRK_DRIVER_INFO { 2072 /* .vendor_name = "Novation", */ 2073 /* .product_name = "Launchpad", */ 2074 QUIRK_DATA_RAW_BYTES(0) 2075 } 2076 }, 2077 { 2078 USB_DEVICE(0x1235, 0x0010), 2079 QUIRK_DRIVER_INFO { 2080 .vendor_name = "Focusrite", 2081 .product_name = "Saffire 6 USB", 2082 QUIRK_DATA_COMPOSITE { 2083 { QUIRK_DATA_STANDARD_MIXER(0) }, 2084 { 2085 QUIRK_DATA_AUDIOFORMAT(0) { 2086 .formats = SNDRV_PCM_FMTBIT_S24_3LE, 2087 .channels = 4, 2088 .iface = 0, 2089 .altsetting = 1, 2090 .altset_idx = 1, 2091 .attributes = UAC_EP_CS_ATTR_SAMPLE_RATE, 2092 .endpoint = 0x01, 2093 .ep_attr = USB_ENDPOINT_XFER_ISOC, 2094 .datainterval = 1, 2095 .maxpacksize = 0x024c, 2096 .rates = SNDRV_PCM_RATE_44100 | 2097 SNDRV_PCM_RATE_48000, 2098 .rate_min = 44100, 2099 .rate_max = 48000, 2100 .nr_rates = 2, 2101 .rate_table = (unsigned int[]) { 2102 44100, 48000 2103 }, 2104 .sync_ep = 0x82, 2105 .sync_iface = 0, 2106 .sync_altsetting = 1, 2107 .sync_ep_idx = 1, 2108 .implicit_fb = 1, 2109 } 2110 }, 2111 { 2112 QUIRK_DATA_AUDIOFORMAT(0) { 2113 .formats = SNDRV_PCM_FMTBIT_S24_3LE, 2114 .channels = 2, 2115 .iface = 0, 2116 .altsetting = 1, 2117 .altset_idx = 1, 2118 .attributes = 0, 2119 .endpoint = 0x82, 2120 .ep_idx = 1, 2121 .ep_attr = USB_ENDPOINT_XFER_ISOC, 2122 .datainterval = 1, 2123 .maxpacksize = 0x0126, 2124 .rates = SNDRV_PCM_RATE_44100 | 2125 SNDRV_PCM_RATE_48000, 2126 .rate_min = 44100, 2127 .rate_max = 48000, 2128 .nr_rates = 2, 2129 .rate_table = (unsigned int[]) { 2130 44100, 48000 2131 } 2132 } 2133 }, 2134 { QUIRK_DATA_RAW_BYTES(1) }, 2135 QUIRK_COMPOSITE_END 2136 } 2137 } 2138 }, 2139 { 2140 USB_DEVICE(0x1235, 0x0018), 2141 QUIRK_DRIVER_INFO { 2142 .vendor_name = "Novation", 2143 .product_name = "Twitch", 2144 QUIRK_DATA_COMPOSITE { 2145 { 2146 QUIRK_DATA_AUDIOFORMAT(0) { 2147 .formats = SNDRV_PCM_FMTBIT_S24_3LE, 2148 .channels = 4, 2149 .iface = 0, 2150 .altsetting = 1, 2151 .altset_idx = 1, 2152 .attributes = UAC_EP_CS_ATTR_SAMPLE_RATE, 2153 .endpoint = 0x01, 2154 .ep_attr = USB_ENDPOINT_XFER_ISOC, 2155 .rates = SNDRV_PCM_RATE_44100 | 2156 SNDRV_PCM_RATE_48000, 2157 .rate_min = 44100, 2158 .rate_max = 48000, 2159 .nr_rates = 2, 2160 .rate_table = (unsigned int[]) { 2161 44100, 48000 2162 } 2163 } 2164 }, 2165 { QUIRK_DATA_RAW_BYTES(1) }, 2166 QUIRK_COMPOSITE_END 2167 } 2168 } 2169 }, 2170 { 2171 USB_DEVICE(0x1235, 0x001e), 2172 QUIRK_DRIVER_INFO { 2173 /* .vendor_name = "Novation", */ 2174 /* .product_name = "Mininova", */ 2175 QUIRK_DATA_RAW_BYTES(0) 2176 } 2177 }, 2178 { 2179 USB_DEVICE_VENDOR_SPEC(0x1235, 0x4661), 2180 QUIRK_DRIVER_INFO { 2181 .vendor_name = "Novation", 2182 .product_name = "ReMOTE25", 2183 .ifnum = 0, 2184 .type = QUIRK_MIDI_NOVATION 2185 } 2186 }, 2187 2188 /* Access Music devices */ 2189 { 2190 /* VirusTI Desktop */ 2191 USB_DEVICE_VENDOR_SPEC(0x133e, 0x0815), 2192 QUIRK_DRIVER_INFO { 2193 QUIRK_DATA_COMPOSITE { 2194 { 2195 QUIRK_DATA_MIDI_FIXED_ENDPOINT(3) { 2196 .out_cables = 0x0003, 2197 .in_cables = 0x0003 2198 } 2199 }, 2200 { QUIRK_DATA_IGNORE(4) }, 2201 QUIRK_COMPOSITE_END 2202 } 2203 } 2204 }, 2205 2206 /* Native Instruments MK2 series */ 2207 { 2208 /* Komplete Audio 6 */ 2209 .match_flags = USB_DEVICE_ID_MATCH_DEVICE, 2210 .idVendor = 0x17cc, 2211 .idProduct = 0x1000, 2212 }, 2213 { 2214 /* Traktor Audio 6 */ 2215 .match_flags = USB_DEVICE_ID_MATCH_DEVICE, 2216 .idVendor = 0x17cc, 2217 .idProduct = 0x1010, 2218 }, 2219 { 2220 /* Traktor Audio 10 */ 2221 .match_flags = USB_DEVICE_ID_MATCH_DEVICE, 2222 .idVendor = 0x17cc, 2223 .idProduct = 0x1020, 2224 }, 2225 2226 /* QinHeng devices */ 2227 { 2228 USB_DEVICE(0x1a86, 0x752d), 2229 QUIRK_DRIVER_INFO { 2230 .vendor_name = "QinHeng", 2231 .product_name = "CH345", 2232 .ifnum = 1, 2233 .type = QUIRK_MIDI_CH345 2234 } 2235 }, 2236 2237 /* KeithMcMillen Stringport */ 2238 { USB_DEVICE(0x1f38, 0x0001) }, /* FIXME: should be more restrictive matching */ 2239 2240 /* Miditech devices */ 2241 { 2242 USB_DEVICE(0x4752, 0x0011), 2243 QUIRK_DRIVER_INFO { 2244 .vendor_name = "Miditech", 2245 .product_name = "Midistart-2", 2246 .ifnum = 0, 2247 .type = QUIRK_MIDI_CME 2248 } 2249 }, 2250 2251 /* Central Music devices */ 2252 { 2253 /* this ID used by both Miditech MidiStudio-2 and CME UF-x */ 2254 USB_DEVICE(0x7104, 0x2202), 2255 QUIRK_DRIVER_INFO { 2256 .ifnum = 0, 2257 .type = QUIRK_MIDI_CME 2258 } 2259 }, 2260 2261 /* Digidesign Mbox */ 2262 { 2263 /* Thanks to Clemens Ladisch <clemens@ladisch.de> */ 2264 USB_DEVICE(0x0dba, 0x1000), 2265 QUIRK_DRIVER_INFO { 2266 .vendor_name = "Digidesign", 2267 .product_name = "MBox", 2268 QUIRK_DATA_COMPOSITE{ 2269 { QUIRK_DATA_STANDARD_MIXER(0) }, 2270 { 2271 QUIRK_DATA_AUDIOFORMAT(1) { 2272 .formats = SNDRV_PCM_FMTBIT_S24_3BE, 2273 .channels = 2, 2274 .iface = 1, 2275 .altsetting = 1, 2276 .altset_idx = 1, 2277 .attributes = 0x4, 2278 .endpoint = 0x02, 2279 .ep_attr = USB_ENDPOINT_XFER_ISOC | 2280 USB_ENDPOINT_SYNC_SYNC, 2281 .maxpacksize = 0x130, 2282 .rates = SNDRV_PCM_RATE_48000, 2283 .rate_min = 48000, 2284 .rate_max = 48000, 2285 .nr_rates = 1, 2286 .rate_table = (unsigned int[]) { 2287 48000 2288 } 2289 } 2290 }, 2291 { 2292 QUIRK_DATA_AUDIOFORMAT(1) { 2293 .formats = SNDRV_PCM_FMTBIT_S24_3BE, 2294 .channels = 2, 2295 .iface = 1, 2296 .altsetting = 1, 2297 .altset_idx = 1, 2298 .attributes = 0x4, 2299 .endpoint = 0x81, 2300 .ep_idx = 1, 2301 .ep_attr = USB_ENDPOINT_XFER_ISOC | 2302 USB_ENDPOINT_SYNC_ASYNC, 2303 .maxpacksize = 0x130, 2304 .rates = SNDRV_PCM_RATE_48000, 2305 .rate_min = 48000, 2306 .rate_max = 48000, 2307 .nr_rates = 1, 2308 .rate_table = (unsigned int[]) { 2309 48000 2310 } 2311 } 2312 }, 2313 QUIRK_COMPOSITE_END 2314 } 2315 } 2316 }, 2317 2318 /* DIGIDESIGN MBOX 2 */ 2319 { 2320 USB_DEVICE(0x0dba, 0x3000), 2321 QUIRK_DRIVER_INFO { 2322 .vendor_name = "Digidesign", 2323 .product_name = "Mbox 2", 2324 QUIRK_DATA_COMPOSITE { 2325 { QUIRK_DATA_IGNORE(0) }, 2326 { QUIRK_DATA_IGNORE(1) }, 2327 { 2328 QUIRK_DATA_AUDIOFORMAT(2) { 2329 .formats = SNDRV_PCM_FMTBIT_S24_3BE, 2330 .channels = 2, 2331 .iface = 2, 2332 .altsetting = 2, 2333 .altset_idx = 1, 2334 .attributes = 0x00, 2335 .endpoint = 0x03, 2336 .ep_attr = USB_ENDPOINT_SYNC_ASYNC, 2337 .rates = SNDRV_PCM_RATE_48000, 2338 .rate_min = 48000, 2339 .rate_max = 48000, 2340 .nr_rates = 1, 2341 .rate_table = (unsigned int[]) { 2342 48000 2343 } 2344 } 2345 }, 2346 { QUIRK_DATA_IGNORE(3) }, 2347 { 2348 QUIRK_DATA_AUDIOFORMAT(4) { 2349 .formats = SNDRV_PCM_FMTBIT_S24_3BE, 2350 .channels = 2, 2351 .iface = 4, 2352 .altsetting = 2, 2353 .altset_idx = 1, 2354 .attributes = UAC_EP_CS_ATTR_SAMPLE_RATE, 2355 .endpoint = 0x85, 2356 .ep_attr = USB_ENDPOINT_SYNC_SYNC, 2357 .rates = SNDRV_PCM_RATE_48000, 2358 .rate_min = 48000, 2359 .rate_max = 48000, 2360 .nr_rates = 1, 2361 .rate_table = (unsigned int[]) { 2362 48000 2363 } 2364 } 2365 }, 2366 { QUIRK_DATA_IGNORE(5) }, 2367 { 2368 QUIRK_DATA_MIDI_MIDIMAN(6) { 2369 .out_ep = 0x02, 2370 .out_cables = 0x0001, 2371 .in_ep = 0x81, 2372 .in_interval = 0x01, 2373 .in_cables = 0x0001 2374 } 2375 }, 2376 QUIRK_COMPOSITE_END 2377 } 2378 } 2379 }, 2380 /* DIGIDESIGN MBOX 3 */ 2381 { 2382 USB_DEVICE(0x0dba, 0x5000), 2383 QUIRK_DRIVER_INFO { 2384 .vendor_name = "Digidesign", 2385 .product_name = "Mbox 3", 2386 QUIRK_DATA_COMPOSITE { 2387 { QUIRK_DATA_IGNORE(0) }, 2388 { QUIRK_DATA_IGNORE(1) }, 2389 { 2390 QUIRK_DATA_AUDIOFORMAT(2) { 2391 .formats = SNDRV_PCM_FMTBIT_S24_3LE, 2392 .fmt_bits = 24, 2393 .channels = 4, 2394 .iface = 2, 2395 .altsetting = 1, 2396 .altset_idx = 1, 2397 .attributes = 0x00, 2398 .endpoint = USB_RECIP_INTERFACE | USB_DIR_OUT, 2399 .ep_attr = USB_ENDPOINT_XFER_ISOC | 2400 USB_ENDPOINT_SYNC_ASYNC, 2401 .rates = SNDRV_PCM_RATE_44100 | SNDRV_PCM_RATE_48000 | 2402 SNDRV_PCM_RATE_88200 | SNDRV_PCM_RATE_96000, 2403 .rate_min = 44100, 2404 .rate_max = 96000, 2405 .nr_rates = 4, 2406 .rate_table = (unsigned int[]) { 2407 44100, 48000, 88200, 96000 2408 }, 2409 .sync_ep = USB_RECIP_INTERFACE | USB_DIR_IN, 2410 .sync_iface = 3, 2411 .sync_altsetting = 1, 2412 .sync_ep_idx = 1, 2413 .implicit_fb = 1, 2414 } 2415 }, 2416 { 2417 QUIRK_DATA_AUDIOFORMAT(3) { 2418 .formats = SNDRV_PCM_FMTBIT_S24_3LE, 2419 .fmt_bits = 24, 2420 .channels = 4, 2421 .iface = 3, 2422 .altsetting = 1, 2423 .altset_idx = 1, 2424 .attributes = 0x00, 2425 .endpoint = USB_RECIP_INTERFACE | USB_DIR_IN, 2426 .ep_attr = USB_ENDPOINT_XFER_ISOC | 2427 USB_ENDPOINT_SYNC_ASYNC, 2428 .maxpacksize = 0x009c, 2429 .rates = SNDRV_PCM_RATE_44100 | SNDRV_PCM_RATE_48000 | 2430 SNDRV_PCM_RATE_88200 | SNDRV_PCM_RATE_96000, 2431 .rate_min = 44100, 2432 .rate_max = 96000, 2433 .nr_rates = 4, 2434 .rate_table = (unsigned int[]) { 2435 44100, 48000, 88200, 96000 2436 }, 2437 .implicit_fb = 0, 2438 } 2439 }, 2440 { 2441 QUIRK_DATA_MIDI_FIXED_ENDPOINT(4) { 2442 .out_cables = 0x0001, 2443 .in_cables = 0x0001 2444 } 2445 }, 2446 QUIRK_COMPOSITE_END 2447 } 2448 } 2449 }, 2450 { 2451 /* Tascam US122 MKII - playback-only support */ 2452 USB_DEVICE_VENDOR_SPEC(0x0644, 0x8021), 2453 QUIRK_DRIVER_INFO { 2454 .vendor_name = "TASCAM", 2455 .product_name = "US122 MKII", 2456 QUIRK_DATA_COMPOSITE { 2457 { QUIRK_DATA_IGNORE(0) }, 2458 { 2459 QUIRK_DATA_AUDIOFORMAT(1) { 2460 .formats = SNDRV_PCM_FMTBIT_S24_3LE, 2461 .channels = 2, 2462 .iface = 1, 2463 .altsetting = 1, 2464 .altset_idx = 1, 2465 .attributes = UAC_EP_CS_ATTR_SAMPLE_RATE, 2466 .endpoint = 0x02, 2467 .ep_attr = USB_ENDPOINT_XFER_ISOC, 2468 .rates = SNDRV_PCM_RATE_44100 | 2469 SNDRV_PCM_RATE_48000 | 2470 SNDRV_PCM_RATE_88200 | 2471 SNDRV_PCM_RATE_96000, 2472 .rate_min = 44100, 2473 .rate_max = 96000, 2474 .nr_rates = 4, 2475 .rate_table = (unsigned int[]) { 2476 44100, 48000, 88200, 96000 2477 } 2478 } 2479 }, 2480 QUIRK_COMPOSITE_END 2481 } 2482 } 2483 }, 2484 2485 /* Denon DN-X1600 */ 2486 { 2487 USB_AUDIO_DEVICE(0x154e, 0x500e), 2488 QUIRK_DRIVER_INFO { 2489 .vendor_name = "Denon", 2490 .product_name = "DN-X1600", 2491 QUIRK_DATA_COMPOSITE{ 2492 { QUIRK_DATA_IGNORE(0) }, 2493 { 2494 QUIRK_DATA_AUDIOFORMAT(1) { 2495 .formats = SNDRV_PCM_FMTBIT_S24_3LE, 2496 .channels = 8, 2497 .iface = 1, 2498 .altsetting = 1, 2499 .altset_idx = 1, 2500 .attributes = 0x0, 2501 .endpoint = 0x01, 2502 .ep_attr = USB_ENDPOINT_XFER_ISOC | 2503 USB_ENDPOINT_SYNC_ADAPTIVE, 2504 .maxpacksize = 0x138, 2505 .rates = SNDRV_PCM_RATE_48000, 2506 .rate_min = 48000, 2507 .rate_max = 48000, 2508 .nr_rates = 1, 2509 .rate_table = (unsigned int[]) { 2510 48000 2511 } 2512 } 2513 }, 2514 { 2515 QUIRK_DATA_AUDIOFORMAT(2) { 2516 .formats = SNDRV_PCM_FMTBIT_S24_3LE, 2517 .channels = 8, 2518 .iface = 2, 2519 .altsetting = 1, 2520 .altset_idx = 1, 2521 .attributes = 0x0, 2522 .endpoint = 0x85, 2523 .ep_attr = USB_ENDPOINT_XFER_ISOC | 2524 USB_ENDPOINT_SYNC_ADAPTIVE, 2525 .maxpacksize = 0x138, 2526 .rates = SNDRV_PCM_RATE_48000, 2527 .rate_min = 48000, 2528 .rate_max = 48000, 2529 .nr_rates = 1, 2530 .rate_table = (unsigned int[]) { 2531 48000 2532 } 2533 } 2534 }, 2535 { QUIRK_DATA_STANDARD_MIDI(4) }, 2536 QUIRK_COMPOSITE_END 2537 } 2538 } 2539 }, 2540 2541 /* Microsoft XboxLive Headset/Xbox Communicator */ 2542 { 2543 USB_DEVICE(0x045e, 0x0283), 2544 .bInterfaceClass = USB_CLASS_PER_INTERFACE, 2545 QUIRK_DRIVER_INFO { 2546 .vendor_name = "Microsoft", 2547 .product_name = "XboxLive Headset/Xbox Communicator", 2548 QUIRK_DATA_COMPOSITE { 2549 { 2550 /* playback */ 2551 QUIRK_DATA_AUDIOFORMAT(0) { 2552 .formats = SNDRV_PCM_FMTBIT_S16_LE, 2553 .channels = 1, 2554 .iface = 0, 2555 .altsetting = 0, 2556 .altset_idx = 0, 2557 .attributes = 0, 2558 .endpoint = 0x04, 2559 .ep_attr = 0x05, 2560 .rates = SNDRV_PCM_RATE_CONTINUOUS, 2561 .rate_min = 22050, 2562 .rate_max = 22050 2563 } 2564 }, 2565 { 2566 /* capture */ 2567 QUIRK_DATA_AUDIOFORMAT(1) { 2568 .formats = SNDRV_PCM_FMTBIT_S16_LE, 2569 .channels = 1, 2570 .iface = 1, 2571 .altsetting = 0, 2572 .altset_idx = 0, 2573 .attributes = 0, 2574 .endpoint = 0x85, 2575 .ep_attr = 0x05, 2576 .rates = SNDRV_PCM_RATE_CONTINUOUS, 2577 .rate_min = 16000, 2578 .rate_max = 16000 2579 } 2580 }, 2581 QUIRK_COMPOSITE_END 2582 } 2583 } 2584 }, 2585 2586 /* Reloop Play */ 2587 { 2588 USB_DEVICE(0x200c, 0x100b), 2589 .bInterfaceClass = USB_CLASS_PER_INTERFACE, 2590 QUIRK_DRIVER_INFO { 2591 QUIRK_DATA_COMPOSITE { 2592 { QUIRK_DATA_STANDARD_MIXER(0) }, 2593 { 2594 QUIRK_DATA_AUDIOFORMAT(1) { 2595 .formats = SNDRV_PCM_FMTBIT_S24_3LE, 2596 .channels = 4, 2597 .iface = 1, 2598 .altsetting = 1, 2599 .altset_idx = 1, 2600 .attributes = UAC_EP_CS_ATTR_SAMPLE_RATE, 2601 .endpoint = 0x01, 2602 .ep_attr = USB_ENDPOINT_SYNC_ADAPTIVE, 2603 .rates = SNDRV_PCM_RATE_44100 | 2604 SNDRV_PCM_RATE_48000, 2605 .rate_min = 44100, 2606 .rate_max = 48000, 2607 .nr_rates = 2, 2608 .rate_table = (unsigned int[]) { 2609 44100, 48000 2610 } 2611 } 2612 }, 2613 QUIRK_COMPOSITE_END 2614 } 2615 } 2616 }, 2617 2618 { 2619 /* 2620 * ZOOM R16/24 in audio interface mode. 2621 * Playback requires an extra four byte LE length indicator 2622 * at the start of each isochronous packet. This quirk is 2623 * enabled in create_standard_audio_quirk(). 2624 */ 2625 USB_DEVICE(0x1686, 0x00dd), 2626 QUIRK_DRIVER_INFO { 2627 QUIRK_DATA_COMPOSITE { 2628 { QUIRK_DATA_STANDARD_AUDIO(1) }, /* Playback */ 2629 { QUIRK_DATA_STANDARD_AUDIO(2) }, /* Capture */ 2630 { QUIRK_DATA_STANDARD_MIDI(3) }, /* Midi */ 2631 QUIRK_COMPOSITE_END 2632 } 2633 } 2634 }, 2635 2636 { 2637 /* 2638 * Some USB MIDI devices don't have an audio control interface, 2639 * so we have to grab MIDI streaming interfaces here. 2640 */ 2641 .match_flags = USB_DEVICE_ID_MATCH_INT_CLASS | 2642 USB_DEVICE_ID_MATCH_INT_SUBCLASS, 2643 .bInterfaceClass = USB_CLASS_AUDIO, 2644 .bInterfaceSubClass = USB_SUBCLASS_MIDISTREAMING, 2645 QUIRK_DRIVER_INFO { 2646 QUIRK_DATA_STANDARD_MIDI(QUIRK_ANY_INTERFACE) 2647 } 2648 }, 2649 2650 /* Rane SL-1 */ 2651 { 2652 USB_DEVICE(0x13e5, 0x0001), 2653 QUIRK_DRIVER_INFO { 2654 QUIRK_DATA_STANDARD_AUDIO(QUIRK_ANY_INTERFACE) 2655 } 2656 }, 2657 2658 /* disabled due to regression for other devices; 2659 * see https://bugzilla.kernel.org/show_bug.cgi?id=199905 2660 */ 2661 #if 0 2662 { 2663 /* 2664 * Nura's first gen headphones use Cambridge Silicon Radio's vendor 2665 * ID, but it looks like the product ID actually is only for Nura. 2666 * The capture interface does not work at all (even on Windows), 2667 * and only the 48 kHz sample rate works for the playback interface. 2668 */ 2669 USB_DEVICE(0x0a12, 0x1243), 2670 QUIRK_DRIVER_INFO { 2671 QUIRK_DATA_COMPOSITE { 2672 { QUIRK_DATA_STANDARD_MIXER(0) }, 2673 { QUIRK_DATA_IGNORE(1) }, /* Capture */ 2674 /* Playback */ 2675 { 2676 QUIRK_DATA_AUDIOFORMAT(2) { 2677 .formats = SNDRV_PCM_FMTBIT_S16_LE, 2678 .channels = 2, 2679 .iface = 2, 2680 .altsetting = 1, 2681 .altset_idx = 1, 2682 .attributes = UAC_EP_CS_ATTR_FILL_MAX | 2683 UAC_EP_CS_ATTR_SAMPLE_RATE, 2684 .endpoint = 0x03, 2685 .ep_attr = USB_ENDPOINT_XFER_ISOC, 2686 .rates = SNDRV_PCM_RATE_48000, 2687 .rate_min = 48000, 2688 .rate_max = 48000, 2689 .nr_rates = 1, 2690 .rate_table = (unsigned int[]) { 2691 48000 2692 } 2693 } 2694 }, 2695 QUIRK_COMPOSITE_END 2696 } 2697 } 2698 }, 2699 2700 #endif /* disabled */ 2701 2702 { 2703 /* 2704 * The AudioBox USB advertises S24_3LE as the only supported format 2705 * for both playback and capture. It does not support S16_LE despite 2706 * being a USB full-speed device. 2707 */ 2708 USB_DEVICE(0x194f, 0x0301), 2709 QUIRK_DRIVER_INFO { 2710 .vendor_name = "PreSonus", 2711 .product_name = "AudioBox USB", 2712 QUIRK_DATA_COMPOSITE { 2713 { QUIRK_DATA_IGNORE(0) }, 2714 { 2715 QUIRK_DATA_AUDIOFORMAT(2) { 2716 .formats = SNDRV_PCM_FMTBIT_S24_3LE, 2717 .fmt_bits = 24, 2718 .channels = 2, 2719 .iface = 2, 2720 .altsetting = 1, 2721 .altset_idx = 1, 2722 .attributes = 0, 2723 .endpoint = 0x01, 2724 .ep_attr = USB_ENDPOINT_XFER_ISOC, 2725 .rates = SNDRV_PCM_RATE_44100 | 2726 SNDRV_PCM_RATE_48000, 2727 .rate_min = 44100, 2728 .rate_max = 48000, 2729 .nr_rates = 2, 2730 .rate_table = (unsigned int[]) { 2731 44100, 48000 2732 }, 2733 } 2734 }, 2735 { 2736 QUIRK_DATA_AUDIOFORMAT(3) { 2737 .formats = SNDRV_PCM_FMTBIT_S24_3LE, 2738 .fmt_bits = 24, 2739 .channels = 2, 2740 .iface = 3, 2741 .altsetting = 1, 2742 .altset_idx = 1, 2743 .attributes = 0, 2744 .endpoint = 0x82, 2745 .ep_attr = USB_ENDPOINT_XFER_ISOC, 2746 .rates = SNDRV_PCM_RATE_44100 | 2747 SNDRV_PCM_RATE_48000, 2748 .rate_min = 44100, 2749 .rate_max = 48000, 2750 .nr_rates = 2, 2751 .rate_table = (unsigned int[]) { 2752 44100, 48000 2753 }, 2754 } 2755 }, 2756 QUIRK_COMPOSITE_END 2757 } 2758 } 2759 }, 2760 2761 { 2762 /* 2763 * Bower's & Wilkins PX headphones only support the 48 kHz sample rate 2764 * even though it advertises more. The capture interface doesn't work 2765 * even on windows. 2766 */ 2767 USB_DEVICE(0x19b5, 0x0021), 2768 QUIRK_DRIVER_INFO { 2769 QUIRK_DATA_COMPOSITE { 2770 { QUIRK_DATA_STANDARD_MIXER(0) }, 2771 /* Playback */ 2772 { 2773 QUIRK_DATA_AUDIOFORMAT(1) { 2774 .formats = SNDRV_PCM_FMTBIT_S16_LE, 2775 .channels = 2, 2776 .iface = 1, 2777 .altsetting = 1, 2778 .altset_idx = 1, 2779 .attributes = UAC_EP_CS_ATTR_FILL_MAX | 2780 UAC_EP_CS_ATTR_SAMPLE_RATE, 2781 .endpoint = 0x03, 2782 .ep_attr = USB_ENDPOINT_XFER_ISOC, 2783 .rates = SNDRV_PCM_RATE_48000, 2784 .rate_min = 48000, 2785 .rate_max = 48000, 2786 .nr_rates = 1, 2787 .rate_table = (unsigned int[]) { 2788 48000 2789 } 2790 } 2791 }, 2792 QUIRK_COMPOSITE_END 2793 } 2794 } 2795 }, 2796 /* MOTU Microbook II */ 2797 { 2798 USB_DEVICE_VENDOR_SPEC(0x07fd, 0x0004), 2799 QUIRK_DRIVER_INFO { 2800 .vendor_name = "MOTU", 2801 .product_name = "MicroBookII", 2802 QUIRK_DATA_COMPOSITE { 2803 { QUIRK_DATA_STANDARD_MIXER(0) }, 2804 { 2805 QUIRK_DATA_AUDIOFORMAT(0) { 2806 .formats = SNDRV_PCM_FMTBIT_S24_3BE, 2807 .channels = 6, 2808 .iface = 0, 2809 .altsetting = 1, 2810 .altset_idx = 1, 2811 .attributes = 0, 2812 .endpoint = 0x84, 2813 .rates = SNDRV_PCM_RATE_96000, 2814 .ep_attr = USB_ENDPOINT_XFER_ISOC | 2815 USB_ENDPOINT_SYNC_ASYNC, 2816 .rate_min = 96000, 2817 .rate_max = 96000, 2818 .nr_rates = 1, 2819 .maxpacksize = 0x00d8, 2820 .rate_table = (unsigned int[]) { 2821 96000 2822 } 2823 } 2824 }, 2825 { 2826 QUIRK_DATA_AUDIOFORMAT(0) { 2827 .formats = SNDRV_PCM_FMTBIT_S24_3BE, 2828 .channels = 8, 2829 .iface = 0, 2830 .altsetting = 1, 2831 .altset_idx = 1, 2832 .attributes = 0, 2833 .endpoint = 0x03, 2834 .ep_idx = 1, 2835 .rates = SNDRV_PCM_RATE_96000, 2836 .ep_attr = USB_ENDPOINT_XFER_ISOC | 2837 USB_ENDPOINT_SYNC_ASYNC, 2838 .rate_min = 96000, 2839 .rate_max = 96000, 2840 .nr_rates = 1, 2841 .maxpacksize = 0x0120, 2842 .rate_table = (unsigned int[]) { 2843 96000 2844 } 2845 } 2846 }, 2847 QUIRK_COMPOSITE_END 2848 } 2849 } 2850 }, 2851 { 2852 /* 2853 * PIONEER DJ DDJ-SX3 2854 * PCM is 12 channels out, 10 channels in @ 44.1 fixed 2855 * interface 0, vendor class alt setting 1 for endpoints 5 and 0x86 2856 * The feedback for the output is the input. 2857 */ 2858 USB_DEVICE_VENDOR_SPEC(0x2b73, 0x0023), 2859 QUIRK_DRIVER_INFO { 2860 QUIRK_DATA_COMPOSITE { 2861 { 2862 QUIRK_DATA_AUDIOFORMAT(0) { 2863 .formats = SNDRV_PCM_FMTBIT_S32_LE, 2864 .channels = 12, 2865 .iface = 0, 2866 .altsetting = 1, 2867 .altset_idx = 1, 2868 .endpoint = 0x05, 2869 .ep_attr = USB_ENDPOINT_XFER_ISOC| 2870 USB_ENDPOINT_SYNC_ASYNC, 2871 .rates = SNDRV_PCM_RATE_44100, 2872 .rate_min = 44100, 2873 .rate_max = 44100, 2874 .nr_rates = 1, 2875 .rate_table = (unsigned int[]) { 44100 } 2876 } 2877 }, 2878 { 2879 QUIRK_DATA_AUDIOFORMAT(0) { 2880 .formats = SNDRV_PCM_FMTBIT_S32_LE, 2881 .channels = 10, 2882 .iface = 0, 2883 .altsetting = 1, 2884 .altset_idx = 1, 2885 .endpoint = 0x86, 2886 .ep_idx = 1, 2887 .ep_attr = USB_ENDPOINT_XFER_ISOC| 2888 USB_ENDPOINT_SYNC_ASYNC| 2889 USB_ENDPOINT_USAGE_IMPLICIT_FB, 2890 .rates = SNDRV_PCM_RATE_44100, 2891 .rate_min = 44100, 2892 .rate_max = 44100, 2893 .nr_rates = 1, 2894 .rate_table = (unsigned int[]) { 44100 } 2895 } 2896 }, 2897 QUIRK_COMPOSITE_END 2898 } 2899 } 2900 }, 2901 { 2902 /* 2903 * Pioneer DJ DJM-250MK2 2904 * PCM is 8 channels out @ 48 fixed (endpoint 0x01) 2905 * and 8 channels in @ 48 fixed (endpoint 0x82). 2906 * 2907 * Both playback and recording is working, even simultaneously. 2908 * 2909 * Playback channels could be mapped to: 2910 * - CH1 2911 * - CH2 2912 * - AUX 2913 * 2914 * Recording channels could be mapped to: 2915 * - Post CH1 Fader 2916 * - Post CH2 Fader 2917 * - Cross Fader A 2918 * - Cross Fader B 2919 * - MIC 2920 * - AUX 2921 * - REC OUT 2922 * 2923 * There is remaining problem with recording directly from PHONO/LINE. 2924 * If we map a channel to: 2925 * - CH1 Control Tone PHONO 2926 * - CH1 Control Tone LINE 2927 * - CH2 Control Tone PHONO 2928 * - CH2 Control Tone LINE 2929 * it is silent. 2930 * There is no signal even on other operating systems with official drivers. 2931 * The signal appears only when a supported application is started. 2932 * This needs to be investigated yet... 2933 * (there is quite a lot communication on the USB in both directions) 2934 * 2935 * In current version this mixer could be used for playback 2936 * and for recording from vinyls (through Post CH* Fader) 2937 * but not for DVS (Digital Vinyl Systems) like in Mixxx. 2938 */ 2939 USB_DEVICE_VENDOR_SPEC(0x2b73, 0x0017), 2940 QUIRK_DRIVER_INFO { 2941 QUIRK_DATA_COMPOSITE { 2942 { 2943 QUIRK_DATA_AUDIOFORMAT(0) { 2944 .formats = SNDRV_PCM_FMTBIT_S24_3LE, 2945 .channels = 8, // outputs 2946 .iface = 0, 2947 .altsetting = 1, 2948 .altset_idx = 1, 2949 .endpoint = 0x01, 2950 .ep_attr = USB_ENDPOINT_XFER_ISOC| 2951 USB_ENDPOINT_SYNC_ASYNC, 2952 .rates = SNDRV_PCM_RATE_48000, 2953 .rate_min = 48000, 2954 .rate_max = 48000, 2955 .nr_rates = 1, 2956 .rate_table = (unsigned int[]) { 48000 } 2957 } 2958 }, 2959 { 2960 QUIRK_DATA_AUDIOFORMAT(0) { 2961 .formats = SNDRV_PCM_FMTBIT_S24_3LE, 2962 .channels = 8, // inputs 2963 .iface = 0, 2964 .altsetting = 1, 2965 .altset_idx = 1, 2966 .endpoint = 0x82, 2967 .ep_idx = 1, 2968 .ep_attr = USB_ENDPOINT_XFER_ISOC| 2969 USB_ENDPOINT_SYNC_ASYNC| 2970 USB_ENDPOINT_USAGE_IMPLICIT_FB, 2971 .rates = SNDRV_PCM_RATE_48000, 2972 .rate_min = 48000, 2973 .rate_max = 48000, 2974 .nr_rates = 1, 2975 .rate_table = (unsigned int[]) { 48000 } 2976 } 2977 }, 2978 QUIRK_COMPOSITE_END 2979 } 2980 } 2981 }, 2982 { 2983 /* 2984 * PIONEER DJ DDJ-RB 2985 * PCM is 4 channels out, 2 dummy channels in @ 44.1 fixed 2986 * The feedback for the output is the dummy input. 2987 */ 2988 USB_DEVICE_VENDOR_SPEC(0x2b73, 0x000e), 2989 QUIRK_DRIVER_INFO { 2990 QUIRK_DATA_COMPOSITE { 2991 { 2992 QUIRK_DATA_AUDIOFORMAT(0) { 2993 .formats = SNDRV_PCM_FMTBIT_S24_3LE, 2994 .channels = 4, 2995 .iface = 0, 2996 .altsetting = 1, 2997 .altset_idx = 1, 2998 .endpoint = 0x01, 2999 .ep_attr = USB_ENDPOINT_XFER_ISOC| 3000 USB_ENDPOINT_SYNC_ASYNC, 3001 .rates = SNDRV_PCM_RATE_44100, 3002 .rate_min = 44100, 3003 .rate_max = 44100, 3004 .nr_rates = 1, 3005 .rate_table = (unsigned int[]) { 44100 } 3006 } 3007 }, 3008 { 3009 QUIRK_DATA_AUDIOFORMAT(0) { 3010 .formats = SNDRV_PCM_FMTBIT_S24_3LE, 3011 .channels = 2, 3012 .iface = 0, 3013 .altsetting = 1, 3014 .altset_idx = 1, 3015 .endpoint = 0x82, 3016 .ep_idx = 1, 3017 .ep_attr = USB_ENDPOINT_XFER_ISOC| 3018 USB_ENDPOINT_SYNC_ASYNC| 3019 USB_ENDPOINT_USAGE_IMPLICIT_FB, 3020 .rates = SNDRV_PCM_RATE_44100, 3021 .rate_min = 44100, 3022 .rate_max = 44100, 3023 .nr_rates = 1, 3024 .rate_table = (unsigned int[]) { 44100 } 3025 } 3026 }, 3027 QUIRK_COMPOSITE_END 3028 } 3029 } 3030 }, 3031 3032 { 3033 /* 3034 * PIONEER DJ DDJ-RR 3035 * PCM is 6 channels out & 4 channels in @ 44.1 fixed 3036 */ 3037 USB_DEVICE_VENDOR_SPEC(0x2b73, 0x000d), 3038 QUIRK_DRIVER_INFO { 3039 QUIRK_DATA_COMPOSITE { 3040 { 3041 QUIRK_DATA_AUDIOFORMAT(0) { 3042 .formats = SNDRV_PCM_FMTBIT_S24_3LE, 3043 .channels = 6, //Master, Headphones & Booth 3044 .iface = 0, 3045 .altsetting = 1, 3046 .altset_idx = 1, 3047 .endpoint = 0x01, 3048 .ep_attr = USB_ENDPOINT_XFER_ISOC| 3049 USB_ENDPOINT_SYNC_ASYNC, 3050 .rates = SNDRV_PCM_RATE_44100, 3051 .rate_min = 44100, 3052 .rate_max = 44100, 3053 .nr_rates = 1, 3054 .rate_table = (unsigned int[]) { 44100 } 3055 } 3056 }, 3057 { 3058 QUIRK_DATA_AUDIOFORMAT(0) { 3059 .formats = SNDRV_PCM_FMTBIT_S24_3LE, 3060 .channels = 4, //2x RCA inputs (CH1 & CH2) 3061 .iface = 0, 3062 .altsetting = 1, 3063 .altset_idx = 1, 3064 .endpoint = 0x82, 3065 .ep_idx = 1, 3066 .ep_attr = USB_ENDPOINT_XFER_ISOC| 3067 USB_ENDPOINT_SYNC_ASYNC| 3068 USB_ENDPOINT_USAGE_IMPLICIT_FB, 3069 .rates = SNDRV_PCM_RATE_44100, 3070 .rate_min = 44100, 3071 .rate_max = 44100, 3072 .nr_rates = 1, 3073 .rate_table = (unsigned int[]) { 44100 } 3074 } 3075 }, 3076 QUIRK_COMPOSITE_END 3077 } 3078 } 3079 }, 3080 3081 { 3082 /* 3083 * PIONEER DJ DDJ-SR2 3084 * PCM is 4 channels out, 6 channels in @ 44.1 fixed 3085 * The Feedback for the output is the input 3086 */ 3087 USB_DEVICE_VENDOR_SPEC(0x2b73, 0x001e), 3088 QUIRK_DRIVER_INFO { 3089 QUIRK_DATA_COMPOSITE { 3090 { 3091 QUIRK_DATA_AUDIOFORMAT(0) { 3092 .formats = SNDRV_PCM_FMTBIT_S24_3LE, 3093 .channels = 4, 3094 .iface = 0, 3095 .altsetting = 1, 3096 .altset_idx = 1, 3097 .endpoint = 0x01, 3098 .ep_attr = USB_ENDPOINT_XFER_ISOC| 3099 USB_ENDPOINT_SYNC_ASYNC, 3100 .rates = SNDRV_PCM_RATE_44100, 3101 .rate_min = 44100, 3102 .rate_max = 44100, 3103 .nr_rates = 1, 3104 .rate_table = (unsigned int[]) { 44100 } 3105 } 3106 }, 3107 { 3108 QUIRK_DATA_AUDIOFORMAT(0) { 3109 .formats = SNDRV_PCM_FMTBIT_S24_3LE, 3110 .channels = 6, 3111 .iface = 0, 3112 .altsetting = 1, 3113 .altset_idx = 1, 3114 .endpoint = 0x82, 3115 .ep_idx = 1, 3116 .ep_attr = USB_ENDPOINT_XFER_ISOC| 3117 USB_ENDPOINT_SYNC_ASYNC| 3118 USB_ENDPOINT_USAGE_IMPLICIT_FB, 3119 .rates = SNDRV_PCM_RATE_44100, 3120 .rate_min = 44100, 3121 .rate_max = 44100, 3122 .nr_rates = 1, 3123 .rate_table = (unsigned int[]) { 44100 } 3124 } 3125 }, 3126 QUIRK_COMPOSITE_END 3127 } 3128 } 3129 }, 3130 3131 { 3132 /* 3133 * Pioneer DJ DJM-900NXS2 3134 * 10 channels playback & 12 channels capture @ 44.1/48/96kHz S24LE 3135 */ 3136 USB_DEVICE_VENDOR_SPEC(0x2b73, 0x000a), 3137 QUIRK_DRIVER_INFO { 3138 QUIRK_DATA_COMPOSITE { 3139 { 3140 QUIRK_DATA_AUDIOFORMAT(0) { 3141 .formats = SNDRV_PCM_FMTBIT_S24_3LE, 3142 .channels = 10, 3143 .iface = 0, 3144 .altsetting = 1, 3145 .altset_idx = 1, 3146 .endpoint = 0x01, 3147 .ep_attr = USB_ENDPOINT_XFER_ISOC| 3148 USB_ENDPOINT_SYNC_ASYNC, 3149 .rates = SNDRV_PCM_RATE_44100| 3150 SNDRV_PCM_RATE_48000| 3151 SNDRV_PCM_RATE_96000, 3152 .rate_min = 44100, 3153 .rate_max = 96000, 3154 .nr_rates = 3, 3155 .rate_table = (unsigned int[]) { 3156 44100, 48000, 96000 3157 } 3158 } 3159 }, 3160 { 3161 QUIRK_DATA_AUDIOFORMAT(0) { 3162 .formats = SNDRV_PCM_FMTBIT_S24_3LE, 3163 .channels = 12, 3164 .iface = 0, 3165 .altsetting = 1, 3166 .altset_idx = 1, 3167 .endpoint = 0x82, 3168 .ep_idx = 1, 3169 .ep_attr = USB_ENDPOINT_XFER_ISOC| 3170 USB_ENDPOINT_SYNC_ASYNC| 3171 USB_ENDPOINT_USAGE_IMPLICIT_FB, 3172 .rates = SNDRV_PCM_RATE_44100| 3173 SNDRV_PCM_RATE_48000| 3174 SNDRV_PCM_RATE_96000, 3175 .rate_min = 44100, 3176 .rate_max = 96000, 3177 .nr_rates = 3, 3178 .rate_table = (unsigned int[]) { 3179 44100, 48000, 96000 3180 } 3181 } 3182 }, 3183 QUIRK_COMPOSITE_END 3184 } 3185 } 3186 }, 3187 3188 { 3189 /* 3190 * PIONEER DJ DDJ-800 3191 * PCM is 6 channels out, 6 channels in @ 44.1 fixed 3192 * The Feedback for the output is the input 3193 */ 3194 USB_DEVICE_VENDOR_SPEC(0x2b73, 0x0029), 3195 QUIRK_DRIVER_INFO { 3196 QUIRK_DATA_COMPOSITE { 3197 { 3198 QUIRK_DATA_AUDIOFORMAT(0) { 3199 .formats = SNDRV_PCM_FMTBIT_S24_3LE, 3200 .channels = 6, 3201 .iface = 0, 3202 .altsetting = 1, 3203 .altset_idx = 1, 3204 .endpoint = 0x01, 3205 .ep_attr = USB_ENDPOINT_XFER_ISOC| 3206 USB_ENDPOINT_SYNC_ASYNC, 3207 .rates = SNDRV_PCM_RATE_44100, 3208 .rate_min = 44100, 3209 .rate_max = 44100, 3210 .nr_rates = 1, 3211 .rate_table = (unsigned int[]) { 44100 } 3212 } 3213 }, 3214 { 3215 QUIRK_DATA_AUDIOFORMAT(0) { 3216 .formats = SNDRV_PCM_FMTBIT_S24_3LE, 3217 .channels = 6, 3218 .iface = 0, 3219 .altsetting = 1, 3220 .altset_idx = 1, 3221 .endpoint = 0x82, 3222 .ep_idx = 1, 3223 .ep_attr = USB_ENDPOINT_XFER_ISOC| 3224 USB_ENDPOINT_SYNC_ASYNC| 3225 USB_ENDPOINT_USAGE_IMPLICIT_FB, 3226 .rates = SNDRV_PCM_RATE_44100, 3227 .rate_min = 44100, 3228 .rate_max = 44100, 3229 .nr_rates = 1, 3230 .rate_table = (unsigned int[]) { 44100 } 3231 } 3232 }, 3233 QUIRK_COMPOSITE_END 3234 } 3235 } 3236 }, 3237 3238 { 3239 /* 3240 * Pioneer DJ / AlphaTheta DJM-A9 3241 * 10 channels playback & 12 channels capture @ 44.1/48/96kHz S24LE 3242 */ 3243 USB_DEVICE_VENDOR_SPEC(0x2b73, 0x003c), 3244 QUIRK_DRIVER_INFO { 3245 QUIRK_DATA_COMPOSITE { 3246 { 3247 QUIRK_DATA_AUDIOFORMAT(0) { 3248 .formats = SNDRV_PCM_FMTBIT_S24_3LE, 3249 .channels = 10, 3250 .iface = 0, 3251 .altsetting = 1, 3252 .altset_idx = 1, 3253 .endpoint = 0x01, 3254 .ep_attr = USB_ENDPOINT_XFER_ISOC| 3255 USB_ENDPOINT_SYNC_ASYNC, 3256 .rates = SNDRV_PCM_RATE_44100| 3257 SNDRV_PCM_RATE_48000| 3258 SNDRV_PCM_RATE_96000, 3259 .rate_min = 44100, 3260 .rate_max = 96000, 3261 .nr_rates = 3, 3262 .rate_table = (unsigned int[]) { 3263 44100, 48000, 96000 3264 } 3265 } 3266 }, 3267 { 3268 QUIRK_DATA_AUDIOFORMAT(0) { 3269 .formats = SNDRV_PCM_FMTBIT_S24_3LE, 3270 .channels = 12, 3271 .iface = 0, 3272 .altsetting = 1, 3273 .altset_idx = 1, 3274 .endpoint = 0x82, 3275 .ep_idx = 1, 3276 .ep_attr = USB_ENDPOINT_XFER_ISOC| 3277 USB_ENDPOINT_SYNC_ASYNC| 3278 USB_ENDPOINT_USAGE_IMPLICIT_FB, 3279 .rates = SNDRV_PCM_RATE_44100| 3280 SNDRV_PCM_RATE_48000| 3281 SNDRV_PCM_RATE_96000, 3282 .rate_min = 44100, 3283 .rate_max = 96000, 3284 .nr_rates = 3, 3285 .rate_table = (unsigned int[]) { 3286 44100, 48000, 96000 3287 } 3288 } 3289 }, 3290 QUIRK_COMPOSITE_END 3291 } 3292 } 3293 }, 3294 { 3295 /* 3296 * Pioneer DJ DJM-V10 3297 */ 3298 USB_DEVICE_VENDOR_SPEC(0x2b73, 0x0034), 3299 QUIRK_DRIVER_INFO { 3300 QUIRK_DATA_COMPOSITE { 3301 { 3302 QUIRK_DATA_AUDIOFORMAT(0) { 3303 .formats = SNDRV_PCM_FMTBIT_S24_3LE, 3304 .channels = 12, // outputs 3305 .iface = 0, 3306 .altsetting = 1, 3307 .altset_idx = 1, 3308 .endpoint = 0x01, 3309 .ep_attr = USB_ENDPOINT_XFER_ISOC| 3310 USB_ENDPOINT_SYNC_ASYNC, 3311 .rates = SNDRV_PCM_RATE_44100| 3312 SNDRV_PCM_RATE_48000| 3313 SNDRV_PCM_RATE_96000, 3314 .rate_min = 44100, 3315 .rate_max = 96000, 3316 .nr_rates = 3, 3317 .rate_table = (unsigned int[]) { 44100, 48000, 96000 } 3318 } 3319 }, 3320 { 3321 QUIRK_DATA_AUDIOFORMAT(0) { 3322 .formats = SNDRV_PCM_FMTBIT_S24_3LE, 3323 .channels = 12, // inputs 3324 .iface = 0, 3325 .altsetting = 1, 3326 .altset_idx = 1, 3327 .endpoint = 0x82, 3328 .ep_idx = 1, 3329 .ep_attr = USB_ENDPOINT_XFER_ISOC| 3330 USB_ENDPOINT_SYNC_ASYNC| 3331 USB_ENDPOINT_USAGE_IMPLICIT_FB, 3332 .rates = SNDRV_PCM_RATE_44100| 3333 SNDRV_PCM_RATE_48000| 3334 SNDRV_PCM_RATE_96000, 3335 .rate_min = 44100, 3336 .rate_max = 96000, 3337 .nr_rates = 3, 3338 .rate_table = (unsigned int[]) { 44100, 48000, 96000 } 3339 } 3340 }, 3341 QUIRK_COMPOSITE_END 3342 } 3343 } 3344 }, 3345 { 3346 /* 3347 * Pioneer DJ / AlphaTheta DJM-S11 3348 */ 3349 USB_DEVICE(0x2b73, 0x0037), 3350 QUIRK_DRIVER_INFO { 3351 QUIRK_DATA_COMPOSITE { 3352 { 3353 QUIRK_DATA_STANDARD_MIXER(0) 3354 }, 3355 { 3356 QUIRK_DATA_AUDIOFORMAT(1) { 3357 .formats = SNDRV_PCM_FMTBIT_S24_3LE, 3358 .channels = 14, 3359 .iface = 1, 3360 .altsetting = 1, 3361 .altset_idx = 1, 3362 .endpoint = 0x01, 3363 .ep_attr = USB_ENDPOINT_XFER_ISOC | 3364 USB_ENDPOINT_SYNC_ASYNC, 3365 .rates = SNDRV_PCM_RATE_48000, 3366 .rate_min = 48000, 3367 .rate_max = 48000, 3368 .nr_rates = 1, 3369 .rate_table = (unsigned int[]) { 48000 }, 3370 .clock = 1, 3371 .fmt_type = UAC_FORMAT_TYPE_I 3372 } 3373 }, 3374 { 3375 QUIRK_DATA_AUDIOFORMAT(2) { 3376 .formats = SNDRV_PCM_FMTBIT_S24_3LE, 3377 .channels = 10, 3378 .iface = 2, 3379 .altsetting = 1, 3380 .altset_idx = 1, 3381 .endpoint = 0x82, 3382 .ep_attr = USB_ENDPOINT_XFER_ISOC | 3383 USB_ENDPOINT_SYNC_ASYNC | 3384 USB_ENDPOINT_USAGE_IMPLICIT_FB, 3385 .rates = SNDRV_PCM_RATE_48000, 3386 .rate_min = 48000, 3387 .rate_max = 48000, 3388 .nr_rates = 1, 3389 .rate_table = (unsigned int[]) { 48000 }, 3390 .clock = 1, 3391 .fmt_type = UAC_FORMAT_TYPE_I 3392 } 3393 }, 3394 { 3395 /* Audio Control (unknown purpose) */ 3396 .ifnum = 3, 3397 .type = QUIRK_IGNORE_INTERFACE 3398 }, 3399 { 3400 .ifnum = 4, 3401 .type = QUIRK_MIDI_STANDARD_INTERFACE 3402 }, 3403 { 3404 /* HID */ 3405 .ifnum = 5, 3406 .type = QUIRK_IGNORE_INTERFACE 3407 }, 3408 QUIRK_COMPOSITE_END 3409 } 3410 } 3411 }, 3412 3413 /* 3414 * MacroSilicon MS2100/MS2106 based AV capture cards 3415 * 3416 * These claim 96kHz 1ch in the descriptors, but are actually 48kHz 2ch. 3417 * They also need QUIRK_FLAG_ALIGN_TRANSFER, which makes one wonder if 3418 * they pretend to be 96kHz mono as a workaround for stereo being broken 3419 * by that... 3420 * 3421 * They also have an issue with initial stream alignment that causes the 3422 * channels to be swapped and out of phase, which is dealt with in quirks.c. 3423 */ 3424 { 3425 USB_AUDIO_DEVICE(0x534d, 0x0021), 3426 QUIRK_DRIVER_INFO { 3427 .vendor_name = "MacroSilicon", 3428 .product_name = "MS210x", 3429 QUIRK_DATA_COMPOSITE { 3430 { QUIRK_DATA_STANDARD_MIXER(2) }, 3431 { 3432 QUIRK_DATA_AUDIOFORMAT(3) { 3433 .formats = SNDRV_PCM_FMTBIT_S16_LE, 3434 .channels = 2, 3435 .iface = 3, 3436 .altsetting = 1, 3437 .altset_idx = 1, 3438 .attributes = 0, 3439 .endpoint = 0x82, 3440 .ep_attr = USB_ENDPOINT_XFER_ISOC | 3441 USB_ENDPOINT_SYNC_ASYNC, 3442 .rates = SNDRV_PCM_RATE_CONTINUOUS, 3443 .rate_min = 48000, 3444 .rate_max = 48000, 3445 } 3446 }, 3447 QUIRK_COMPOSITE_END 3448 } 3449 } 3450 }, 3451 3452 /* 3453 * MacroSilicon MS2109 based HDMI capture cards 3454 * 3455 * These claim 96kHz 1ch in the descriptors, but are actually 48kHz 2ch. 3456 * They also need QUIRK_FLAG_ALIGN_TRANSFER, which makes one wonder if 3457 * they pretend to be 96kHz mono as a workaround for stereo being broken 3458 * by that... 3459 * 3460 * They also have an issue with initial stream alignment that causes the 3461 * channels to be swapped and out of phase, which is dealt with in quirks.c. 3462 */ 3463 { 3464 USB_AUDIO_DEVICE(0x534d, 0x2109), 3465 QUIRK_DRIVER_INFO { 3466 .vendor_name = "MacroSilicon", 3467 .product_name = "MS2109", 3468 QUIRK_DATA_COMPOSITE { 3469 { QUIRK_DATA_STANDARD_MIXER(2) }, 3470 { 3471 QUIRK_DATA_AUDIOFORMAT(3) { 3472 .formats = SNDRV_PCM_FMTBIT_S16_LE, 3473 .channels = 2, 3474 .iface = 3, 3475 .altsetting = 1, 3476 .altset_idx = 1, 3477 .attributes = 0, 3478 .endpoint = 0x82, 3479 .ep_attr = USB_ENDPOINT_XFER_ISOC | 3480 USB_ENDPOINT_SYNC_ASYNC, 3481 .rates = SNDRV_PCM_RATE_CONTINUOUS, 3482 .rate_min = 48000, 3483 .rate_max = 48000, 3484 } 3485 }, 3486 QUIRK_COMPOSITE_END 3487 } 3488 } 3489 }, 3490 { 3491 /* 3492 * Pioneer DJ DJM-750 3493 * 8 channels playback & 8 channels capture @ 44.1/48/96kHz S24LE 3494 */ 3495 USB_DEVICE_VENDOR_SPEC(0x08e4, 0x017f), 3496 QUIRK_DRIVER_INFO { 3497 QUIRK_DATA_COMPOSITE { 3498 { 3499 QUIRK_DATA_AUDIOFORMAT(0) { 3500 .formats = SNDRV_PCM_FMTBIT_S24_3LE, 3501 .channels = 8, 3502 .iface = 0, 3503 .altsetting = 1, 3504 .altset_idx = 1, 3505 .endpoint = 0x05, 3506 .ep_attr = USB_ENDPOINT_XFER_ISOC| 3507 USB_ENDPOINT_SYNC_ASYNC, 3508 .rates = SNDRV_PCM_RATE_44100| 3509 SNDRV_PCM_RATE_48000| 3510 SNDRV_PCM_RATE_96000, 3511 .rate_min = 44100, 3512 .rate_max = 96000, 3513 .nr_rates = 3, 3514 .rate_table = (unsigned int[]) { 44100, 48000, 96000 } 3515 } 3516 }, 3517 { 3518 QUIRK_DATA_AUDIOFORMAT(0) { 3519 .formats = SNDRV_PCM_FMTBIT_S24_3LE, 3520 .channels = 8, 3521 .iface = 0, 3522 .altsetting = 1, 3523 .altset_idx = 1, 3524 .endpoint = 0x86, 3525 .ep_idx = 1, 3526 .ep_attr = USB_ENDPOINT_XFER_ISOC| 3527 USB_ENDPOINT_SYNC_ASYNC| 3528 USB_ENDPOINT_USAGE_IMPLICIT_FB, 3529 .rates = SNDRV_PCM_RATE_44100| 3530 SNDRV_PCM_RATE_48000| 3531 SNDRV_PCM_RATE_96000, 3532 .rate_min = 44100, 3533 .rate_max = 96000, 3534 .nr_rates = 3, 3535 .rate_table = (unsigned int[]) { 44100, 48000, 96000 } 3536 } 3537 }, 3538 QUIRK_COMPOSITE_END 3539 } 3540 } 3541 }, 3542 { 3543 /* 3544 * Pioneer DJ DJM-750MK2 3545 * 10 channels playback & 12 channels capture @ 48kHz S24LE 3546 */ 3547 USB_DEVICE_VENDOR_SPEC(0x2b73, 0x001b), 3548 QUIRK_DRIVER_INFO { 3549 QUIRK_DATA_COMPOSITE { 3550 { 3551 QUIRK_DATA_AUDIOFORMAT(0) { 3552 .formats = SNDRV_PCM_FMTBIT_S24_3LE, 3553 .channels = 10, 3554 .iface = 0, 3555 .altsetting = 1, 3556 .altset_idx = 1, 3557 .endpoint = 0x01, 3558 .ep_attr = USB_ENDPOINT_XFER_ISOC| 3559 USB_ENDPOINT_SYNC_ASYNC, 3560 .rates = SNDRV_PCM_RATE_48000, 3561 .rate_min = 48000, 3562 .rate_max = 48000, 3563 .nr_rates = 1, 3564 .rate_table = (unsigned int[]) { 3565 48000 3566 } 3567 } 3568 }, 3569 { 3570 QUIRK_DATA_AUDIOFORMAT(0) { 3571 .formats = SNDRV_PCM_FMTBIT_S24_3LE, 3572 .channels = 12, 3573 .iface = 0, 3574 .altsetting = 1, 3575 .altset_idx = 1, 3576 .endpoint = 0x82, 3577 .ep_idx = 1, 3578 .ep_attr = USB_ENDPOINT_XFER_ISOC| 3579 USB_ENDPOINT_SYNC_ASYNC| 3580 USB_ENDPOINT_USAGE_IMPLICIT_FB, 3581 .rates = SNDRV_PCM_RATE_48000, 3582 .rate_min = 48000, 3583 .rate_max = 48000, 3584 .nr_rates = 1, 3585 .rate_table = (unsigned int[]) { 48000 } 3586 } 3587 }, 3588 QUIRK_COMPOSITE_END 3589 } 3590 } 3591 }, 3592 { 3593 /* 3594 * Pioneer DJ DJM-850 3595 * 8 channels playback and 8 channels capture @ 44.1/48/96kHz S24LE 3596 * Playback on EP 0x05 3597 * Capture on EP 0x86 3598 */ 3599 USB_DEVICE_VENDOR_SPEC(0x08e4, 0x0163), 3600 QUIRK_DRIVER_INFO { 3601 QUIRK_DATA_COMPOSITE { 3602 { 3603 QUIRK_DATA_AUDIOFORMAT(0) { 3604 .formats = SNDRV_PCM_FMTBIT_S24_3LE, 3605 .channels = 8, 3606 .iface = 0, 3607 .altsetting = 1, 3608 .altset_idx = 1, 3609 .endpoint = 0x05, 3610 .ep_attr = USB_ENDPOINT_XFER_ISOC| 3611 USB_ENDPOINT_SYNC_ASYNC| 3612 USB_ENDPOINT_USAGE_DATA, 3613 .rates = SNDRV_PCM_RATE_44100| 3614 SNDRV_PCM_RATE_48000| 3615 SNDRV_PCM_RATE_96000, 3616 .rate_min = 44100, 3617 .rate_max = 96000, 3618 .nr_rates = 3, 3619 .rate_table = (unsigned int[]) { 44100, 48000, 96000 } 3620 } 3621 }, 3622 { 3623 QUIRK_DATA_AUDIOFORMAT(0) { 3624 .formats = SNDRV_PCM_FMTBIT_S24_3LE, 3625 .channels = 8, 3626 .iface = 0, 3627 .altsetting = 1, 3628 .altset_idx = 1, 3629 .endpoint = 0x86, 3630 .ep_idx = 1, 3631 .ep_attr = USB_ENDPOINT_XFER_ISOC| 3632 USB_ENDPOINT_SYNC_ASYNC| 3633 USB_ENDPOINT_USAGE_DATA, 3634 .rates = SNDRV_PCM_RATE_44100| 3635 SNDRV_PCM_RATE_48000| 3636 SNDRV_PCM_RATE_96000, 3637 .rate_min = 44100, 3638 .rate_max = 96000, 3639 .nr_rates = 3, 3640 .rate_table = (unsigned int[]) { 44100, 48000, 96000 } 3641 } 3642 }, 3643 QUIRK_COMPOSITE_END 3644 } 3645 } 3646 }, 3647 { 3648 /* 3649 * Pioneer DJ DJM-450 3650 * PCM is 8 channels out @ 48 fixed (endpoint 0x01) 3651 * and 8 channels in @ 48 fixed (endpoint 0x82). 3652 */ 3653 USB_DEVICE_VENDOR_SPEC(0x2b73, 0x0013), 3654 QUIRK_DRIVER_INFO { 3655 QUIRK_DATA_COMPOSITE { 3656 { 3657 QUIRK_DATA_AUDIOFORMAT(0) { 3658 .formats = SNDRV_PCM_FMTBIT_S24_3LE, 3659 .channels = 8, // outputs 3660 .iface = 0, 3661 .altsetting = 1, 3662 .altset_idx = 1, 3663 .endpoint = 0x01, 3664 .ep_attr = USB_ENDPOINT_XFER_ISOC| 3665 USB_ENDPOINT_SYNC_ASYNC, 3666 .rates = SNDRV_PCM_RATE_48000, 3667 .rate_min = 48000, 3668 .rate_max = 48000, 3669 .nr_rates = 1, 3670 .rate_table = (unsigned int[]) { 48000 } 3671 } 3672 }, 3673 { 3674 QUIRK_DATA_AUDIOFORMAT(0) { 3675 .formats = SNDRV_PCM_FMTBIT_S24_3LE, 3676 .channels = 8, // inputs 3677 .iface = 0, 3678 .altsetting = 1, 3679 .altset_idx = 1, 3680 .endpoint = 0x82, 3681 .ep_idx = 1, 3682 .ep_attr = USB_ENDPOINT_XFER_ISOC| 3683 USB_ENDPOINT_SYNC_ASYNC| 3684 USB_ENDPOINT_USAGE_IMPLICIT_FB, 3685 .rates = SNDRV_PCM_RATE_48000, 3686 .rate_min = 48000, 3687 .rate_max = 48000, 3688 .nr_rates = 1, 3689 .rate_table = (unsigned int[]) { 48000 } 3690 } 3691 }, 3692 QUIRK_COMPOSITE_END 3693 } 3694 } 3695 }, 3696 { 3697 /* 3698 * Sennheiser GSP670 3699 * Change order of interfaces loaded 3700 */ 3701 USB_DEVICE(0x1395, 0x0300), 3702 .bInterfaceClass = USB_CLASS_PER_INTERFACE, 3703 QUIRK_DRIVER_INFO { 3704 QUIRK_DATA_COMPOSITE { 3705 // Communication 3706 { QUIRK_DATA_STANDARD_AUDIO(3) }, 3707 // Recording 3708 { QUIRK_DATA_STANDARD_AUDIO(4) }, 3709 // Main 3710 { QUIRK_DATA_STANDARD_AUDIO(1) }, 3711 QUIRK_COMPOSITE_END 3712 } 3713 } 3714 }, 3715 { 3716 /* 3717 * Fiero SC-01 (firmware v1.0.0 @ 48 kHz) 3718 */ 3719 USB_DEVICE(0x2b53, 0x0023), 3720 QUIRK_DRIVER_INFO { 3721 .vendor_name = "Fiero", 3722 .product_name = "SC-01", 3723 QUIRK_DATA_COMPOSITE { 3724 { QUIRK_DATA_STANDARD_AUDIO(0) }, 3725 /* Playback */ 3726 { 3727 QUIRK_DATA_AUDIOFORMAT(1) { 3728 .formats = SNDRV_PCM_FMTBIT_S32_LE, 3729 .channels = 2, 3730 .fmt_bits = 24, 3731 .iface = 1, 3732 .altsetting = 1, 3733 .altset_idx = 1, 3734 .endpoint = 0x01, 3735 .ep_attr = USB_ENDPOINT_XFER_ISOC | 3736 USB_ENDPOINT_SYNC_ASYNC, 3737 .rates = SNDRV_PCM_RATE_48000, 3738 .rate_min = 48000, 3739 .rate_max = 48000, 3740 .nr_rates = 1, 3741 .rate_table = (unsigned int[]) { 48000 }, 3742 .clock = 0x29 3743 } 3744 }, 3745 /* Capture */ 3746 { 3747 QUIRK_DATA_AUDIOFORMAT(2) { 3748 .formats = SNDRV_PCM_FMTBIT_S32_LE, 3749 .channels = 2, 3750 .fmt_bits = 24, 3751 .iface = 2, 3752 .altsetting = 1, 3753 .altset_idx = 1, 3754 .endpoint = 0x82, 3755 .ep_attr = USB_ENDPOINT_XFER_ISOC | 3756 USB_ENDPOINT_SYNC_ASYNC | 3757 USB_ENDPOINT_USAGE_IMPLICIT_FB, 3758 .rates = SNDRV_PCM_RATE_48000, 3759 .rate_min = 48000, 3760 .rate_max = 48000, 3761 .nr_rates = 1, 3762 .rate_table = (unsigned int[]) { 48000 }, 3763 .clock = 0x29 3764 } 3765 }, 3766 QUIRK_COMPOSITE_END 3767 } 3768 } 3769 }, 3770 { 3771 /* 3772 * Fiero SC-01 (firmware v1.0.0 @ 96 kHz) 3773 */ 3774 USB_DEVICE(0x2b53, 0x0024), 3775 QUIRK_DRIVER_INFO { 3776 .vendor_name = "Fiero", 3777 .product_name = "SC-01", 3778 QUIRK_DATA_COMPOSITE { 3779 { QUIRK_DATA_STANDARD_AUDIO(0) }, 3780 /* Playback */ 3781 { 3782 QUIRK_DATA_AUDIOFORMAT(1) { 3783 .formats = SNDRV_PCM_FMTBIT_S32_LE, 3784 .channels = 2, 3785 .fmt_bits = 24, 3786 .iface = 1, 3787 .altsetting = 1, 3788 .altset_idx = 1, 3789 .endpoint = 0x01, 3790 .ep_attr = USB_ENDPOINT_XFER_ISOC | 3791 USB_ENDPOINT_SYNC_ASYNC, 3792 .rates = SNDRV_PCM_RATE_96000, 3793 .rate_min = 96000, 3794 .rate_max = 96000, 3795 .nr_rates = 1, 3796 .rate_table = (unsigned int[]) { 96000 }, 3797 .clock = 0x29 3798 } 3799 }, 3800 /* Capture */ 3801 { 3802 QUIRK_DATA_AUDIOFORMAT(2) { 3803 .formats = SNDRV_PCM_FMTBIT_S32_LE, 3804 .channels = 2, 3805 .fmt_bits = 24, 3806 .iface = 2, 3807 .altsetting = 1, 3808 .altset_idx = 1, 3809 .endpoint = 0x82, 3810 .ep_attr = USB_ENDPOINT_XFER_ISOC | 3811 USB_ENDPOINT_SYNC_ASYNC | 3812 USB_ENDPOINT_USAGE_IMPLICIT_FB, 3813 .rates = SNDRV_PCM_RATE_96000, 3814 .rate_min = 96000, 3815 .rate_max = 96000, 3816 .nr_rates = 1, 3817 .rate_table = (unsigned int[]) { 96000 }, 3818 .clock = 0x29 3819 } 3820 }, 3821 QUIRK_COMPOSITE_END 3822 } 3823 } 3824 }, 3825 { 3826 /* 3827 * Fiero SC-01 (firmware v1.1.0) 3828 */ 3829 USB_DEVICE(0x2b53, 0x0031), 3830 QUIRK_DRIVER_INFO { 3831 .vendor_name = "Fiero", 3832 .product_name = "SC-01", 3833 QUIRK_DATA_COMPOSITE { 3834 { QUIRK_DATA_STANDARD_AUDIO(0) }, 3835 /* Playback */ 3836 { 3837 QUIRK_DATA_AUDIOFORMAT(1) { 3838 .formats = SNDRV_PCM_FMTBIT_S32_LE, 3839 .channels = 2, 3840 .fmt_bits = 24, 3841 .iface = 1, 3842 .altsetting = 1, 3843 .altset_idx = 1, 3844 .endpoint = 0x01, 3845 .ep_attr = USB_ENDPOINT_XFER_ISOC | 3846 USB_ENDPOINT_SYNC_ASYNC, 3847 .rates = SNDRV_PCM_RATE_48000 | 3848 SNDRV_PCM_RATE_96000, 3849 .rate_min = 48000, 3850 .rate_max = 96000, 3851 .nr_rates = 2, 3852 .rate_table = (unsigned int[]) { 48000, 96000 }, 3853 .clock = 0x29 3854 } 3855 }, 3856 /* Capture */ 3857 { 3858 QUIRK_DATA_AUDIOFORMAT(2) { 3859 .formats = SNDRV_PCM_FMTBIT_S32_LE, 3860 .channels = 2, 3861 .fmt_bits = 24, 3862 .iface = 2, 3863 .altsetting = 1, 3864 .altset_idx = 1, 3865 .endpoint = 0x82, 3866 .ep_attr = USB_ENDPOINT_XFER_ISOC | 3867 USB_ENDPOINT_SYNC_ASYNC | 3868 USB_ENDPOINT_USAGE_IMPLICIT_FB, 3869 .rates = SNDRV_PCM_RATE_48000 | 3870 SNDRV_PCM_RATE_96000, 3871 .rate_min = 48000, 3872 .rate_max = 96000, 3873 .nr_rates = 2, 3874 .rate_table = (unsigned int[]) { 48000, 96000 }, 3875 .clock = 0x29 3876 } 3877 }, 3878 QUIRK_COMPOSITE_END 3879 } 3880 } 3881 }, 3882 { 3883 /* Advanced modes of the Mythware XA001AU. 3884 * For the standard mode, Mythware XA001AU has ID ffad:a001 3885 */ 3886 USB_DEVICE_VENDOR_SPEC(0xffad, 0xa001), 3887 QUIRK_DRIVER_INFO { 3888 .vendor_name = "Mythware", 3889 .product_name = "XA001AU", 3890 QUIRK_DATA_COMPOSITE { 3891 { QUIRK_DATA_IGNORE(0) }, 3892 { QUIRK_DATA_STANDARD_AUDIO(1) }, 3893 { QUIRK_DATA_STANDARD_AUDIO(2) }, 3894 QUIRK_COMPOSITE_END 3895 } 3896 } 3897 }, 3898 #define QUIRK_RME_DIGIFACE(pid) \ 3899 { \ 3900 /* Only claim interface 0 */ \ 3901 .match_flags = USB_DEVICE_ID_MATCH_VENDOR | \ 3902 USB_DEVICE_ID_MATCH_PRODUCT | \ 3903 USB_DEVICE_ID_MATCH_INT_CLASS | \ 3904 USB_DEVICE_ID_MATCH_INT_NUMBER, \ 3905 .idVendor = 0x2a39, \ 3906 .idProduct = pid, \ 3907 .bInterfaceClass = USB_CLASS_VENDOR_SPEC, \ 3908 .bInterfaceNumber = 0, \ 3909 QUIRK_DRIVER_INFO { \ 3910 QUIRK_DATA_COMPOSITE { \ 3911 /* 3912 * Three modes depending on sample rate band, 3913 * with different channel counts for in/out 3914 */ \ 3915 { QUIRK_DATA_STANDARD_MIXER(0) }, \ 3916 { \ 3917 QUIRK_DATA_AUDIOFORMAT(0) { \ 3918 .formats = SNDRV_PCM_FMTBIT_S32_LE, \ 3919 .channels = 34, /* outputs */ \ 3920 .fmt_bits = 24, \ 3921 .iface = 0, \ 3922 .altsetting = 1, \ 3923 .altset_idx = 1, \ 3924 .endpoint = 0x02, \ 3925 .ep_idx = 1, \ 3926 .ep_attr = USB_ENDPOINT_XFER_ISOC | \ 3927 USB_ENDPOINT_SYNC_ASYNC, \ 3928 .rates = SNDRV_PCM_RATE_32000 | \ 3929 SNDRV_PCM_RATE_44100 | \ 3930 SNDRV_PCM_RATE_48000, \ 3931 .rate_min = 32000, \ 3932 .rate_max = 48000, \ 3933 .nr_rates = 3, \ 3934 .rate_table = (unsigned int[]) { \ 3935 32000, 44100, 48000, \ 3936 }, \ 3937 .sync_ep = 0x81, \ 3938 .sync_iface = 0, \ 3939 .sync_altsetting = 1, \ 3940 .sync_ep_idx = 0, \ 3941 .implicit_fb = 1, \ 3942 }, \ 3943 }, \ 3944 { \ 3945 QUIRK_DATA_AUDIOFORMAT(0) { \ 3946 .formats = SNDRV_PCM_FMTBIT_S32_LE, \ 3947 .channels = 18, /* outputs */ \ 3948 .fmt_bits = 24, \ 3949 .iface = 0, \ 3950 .altsetting = 1, \ 3951 .altset_idx = 1, \ 3952 .endpoint = 0x02, \ 3953 .ep_idx = 1, \ 3954 .ep_attr = USB_ENDPOINT_XFER_ISOC | \ 3955 USB_ENDPOINT_SYNC_ASYNC, \ 3956 .rates = SNDRV_PCM_RATE_64000 | \ 3957 SNDRV_PCM_RATE_88200 | \ 3958 SNDRV_PCM_RATE_96000, \ 3959 .rate_min = 64000, \ 3960 .rate_max = 96000, \ 3961 .nr_rates = 3, \ 3962 .rate_table = (unsigned int[]) { \ 3963 64000, 88200, 96000, \ 3964 }, \ 3965 .sync_ep = 0x81, \ 3966 .sync_iface = 0, \ 3967 .sync_altsetting = 1, \ 3968 .sync_ep_idx = 0, \ 3969 .implicit_fb = 1, \ 3970 }, \ 3971 }, \ 3972 { \ 3973 QUIRK_DATA_AUDIOFORMAT(0) { \ 3974 .formats = SNDRV_PCM_FMTBIT_S32_LE, \ 3975 .channels = 10, /* outputs */ \ 3976 .fmt_bits = 24, \ 3977 .iface = 0, \ 3978 .altsetting = 1, \ 3979 .altset_idx = 1, \ 3980 .endpoint = 0x02, \ 3981 .ep_idx = 1, \ 3982 .ep_attr = USB_ENDPOINT_XFER_ISOC | \ 3983 USB_ENDPOINT_SYNC_ASYNC, \ 3984 .rates = SNDRV_PCM_RATE_KNOT | \ 3985 SNDRV_PCM_RATE_176400 | \ 3986 SNDRV_PCM_RATE_192000, \ 3987 .rate_min = 128000, \ 3988 .rate_max = 192000, \ 3989 .nr_rates = 3, \ 3990 .rate_table = (unsigned int[]) { \ 3991 128000, 176400, 192000, \ 3992 }, \ 3993 .sync_ep = 0x81, \ 3994 .sync_iface = 0, \ 3995 .sync_altsetting = 1, \ 3996 .sync_ep_idx = 0, \ 3997 .implicit_fb = 1, \ 3998 }, \ 3999 }, \ 4000 { \ 4001 QUIRK_DATA_AUDIOFORMAT(0) { \ 4002 .formats = SNDRV_PCM_FMTBIT_S32_LE, \ 4003 .channels = 32, /* inputs */ \ 4004 .fmt_bits = 24, \ 4005 .iface = 0, \ 4006 .altsetting = 1, \ 4007 .altset_idx = 1, \ 4008 .endpoint = 0x81, \ 4009 .ep_attr = USB_ENDPOINT_XFER_ISOC | \ 4010 USB_ENDPOINT_SYNC_ASYNC, \ 4011 .rates = SNDRV_PCM_RATE_32000 | \ 4012 SNDRV_PCM_RATE_44100 | \ 4013 SNDRV_PCM_RATE_48000, \ 4014 .rate_min = 32000, \ 4015 .rate_max = 48000, \ 4016 .nr_rates = 3, \ 4017 .rate_table = (unsigned int[]) { \ 4018 32000, 44100, 48000, \ 4019 } \ 4020 } \ 4021 }, \ 4022 { \ 4023 QUIRK_DATA_AUDIOFORMAT(0) { \ 4024 .formats = SNDRV_PCM_FMTBIT_S32_LE, \ 4025 .channels = 16, /* inputs */ \ 4026 .fmt_bits = 24, \ 4027 .iface = 0, \ 4028 .altsetting = 1, \ 4029 .altset_idx = 1, \ 4030 .endpoint = 0x81, \ 4031 .ep_attr = USB_ENDPOINT_XFER_ISOC | \ 4032 USB_ENDPOINT_SYNC_ASYNC, \ 4033 .rates = SNDRV_PCM_RATE_64000 | \ 4034 SNDRV_PCM_RATE_88200 | \ 4035 SNDRV_PCM_RATE_96000, \ 4036 .rate_min = 64000, \ 4037 .rate_max = 96000, \ 4038 .nr_rates = 3, \ 4039 .rate_table = (unsigned int[]) { \ 4040 64000, 88200, 96000, \ 4041 } \ 4042 } \ 4043 }, \ 4044 { \ 4045 QUIRK_DATA_AUDIOFORMAT(0) { \ 4046 .formats = SNDRV_PCM_FMTBIT_S32_LE, \ 4047 .channels = 8, /* inputs */ \ 4048 .fmt_bits = 24, \ 4049 .iface = 0, \ 4050 .altsetting = 1, \ 4051 .altset_idx = 1, \ 4052 .endpoint = 0x81, \ 4053 .ep_attr = USB_ENDPOINT_XFER_ISOC | \ 4054 USB_ENDPOINT_SYNC_ASYNC, \ 4055 .rates = SNDRV_PCM_RATE_KNOT | \ 4056 SNDRV_PCM_RATE_176400 | \ 4057 SNDRV_PCM_RATE_192000, \ 4058 .rate_min = 128000, \ 4059 .rate_max = 192000, \ 4060 .nr_rates = 3, \ 4061 .rate_table = (unsigned int[]) { \ 4062 128000, 176400, 192000, \ 4063 } \ 4064 } \ 4065 }, \ 4066 QUIRK_COMPOSITE_END \ 4067 } \ 4068 } \ 4069 } 4070 4071 QUIRK_RME_DIGIFACE(0x3f8c), 4072 QUIRK_RME_DIGIFACE(0x3fa0), 4073 4074 #define QUIRK_AF16RIG(channel_count_, alt_setting_, \ 4075 low_rate_, high_rate_, pack_size_, \ 4076 clock_, interface_, endpoint_) \ 4077 { \ 4078 QUIRK_DATA_AUDIOFORMAT(interface_) { \ 4079 .formats = SNDRV_PCM_FMTBIT_S32_LE, \ 4080 .channels = channel_count_, \ 4081 .fmt_type = UAC_FORMAT_TYPE_I_PCM, \ 4082 .fmt_bits = 24, \ 4083 .fmt_sz = 4, \ 4084 .iface = interface_, \ 4085 .altsetting = alt_setting_, \ 4086 .altset_idx = alt_setting_, \ 4087 .endpoint = endpoint_, \ 4088 .ep_attr = USB_ENDPOINT_XFER_ISOC | \ 4089 USB_ENDPOINT_SYNC_ASYNC, \ 4090 .datainterval = 1, \ 4091 .protocol = UAC_VERSION_2, \ 4092 .maxpacksize = pack_size_, \ 4093 .rates = SNDRV_PCM_RATE_##low_rate_ | \ 4094 SNDRV_PCM_RATE_##high_rate_, \ 4095 .rate_min = low_rate_, \ 4096 .rate_max = high_rate_, \ 4097 .nr_rates = 2, \ 4098 .rate_table = (unsigned int[]) { \ 4099 low_rate_, high_rate_ }, \ 4100 .clock = clock_, \ 4101 } \ 4102 } 4103 4104 #define QUIRK_AF16RIG_CLOCK(clock) \ 4105 QUIRK_AF16RIG(34, 1, 44100, 48000, 0x3b8, clock, 1, 0x01), \ 4106 QUIRK_AF16RIG(34, 1, 44100, 48000, 0x3b8, clock, 2, 0x81), \ 4107 QUIRK_AF16RIG(18, 2, 88200, 96000, 0x3a8, clock, 1, 0x01), \ 4108 QUIRK_AF16RIG(18, 2, 88200, 96000, 0x3a8, clock, 2, 0x81), \ 4109 QUIRK_AF16RIG(10, 3, 176400, 192000, 0x3e8, clock, 1, 0x01), \ 4110 QUIRK_AF16RIG(10, 3, 176400, 192000, 0x3e8, clock, 2, 0x81) 4111 4112 /* Arturia AudioFuse 16Rig Audio */ 4113 /* AF16Rig MIDI has USB PID 0xaf21 and appears to work OK without quirks */ 4114 { 4115 USB_DEVICE(0x1c75, 0xaf20), 4116 QUIRK_DRIVER_INFO { 4117 .vendor_name = "Arturia", 4118 .product_name = "AF16Rig", 4119 QUIRK_DATA_COMPOSITE { 4120 { QUIRK_DATA_STANDARD_MIXER(0) }, 4121 QUIRK_AF16RIG_CLOCK(41), /* Internal clock */ 4122 #if 0 4123 /* These are disabled because I don't have the required hardware to test 4124 * them. I suspect that the ADAT clock might not follow 176400 or 192000 4125 * because the AF16Rig won't accept ADAT audio data at those rates. 4126 */ 4127 QUIRK_AF16RIG_CLOCK(43), /* ADAT clock */ 4128 QUIRK_AF16RIG_CLOCK(44), /* BNC word clock */ 4129 #endif 4130 { QUIRK_DATA_IGNORE(3) }, /* Firmware update */ 4131 QUIRK_COMPOSITE_END 4132 } 4133 } 4134 }, 4135 4136 #undef QUIRK_AF16RIG_CLOCK 4137 #undef QUIRK_AF16RIG 4138 4139 #undef USB_DEVICE_VENDOR_SPEC 4140 #undef USB_AUDIO_DEVICE 4141