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