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