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