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