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 .fmt_bits = 24, 2349 .channels = 4, 2350 .iface = 2, 2351 .altsetting = 1, 2352 .altset_idx = 1, 2353 .attributes = 0x00, 2354 .endpoint = USB_RECIP_INTERFACE | USB_DIR_OUT, 2355 .ep_attr = USB_ENDPOINT_XFER_ISOC | 2356 USB_ENDPOINT_SYNC_ASYNC, 2357 .rates = SNDRV_PCM_RATE_44100 | SNDRV_PCM_RATE_48000 | 2358 SNDRV_PCM_RATE_88200 | SNDRV_PCM_RATE_96000, 2359 .rate_min = 44100, 2360 .rate_max = 96000, 2361 .nr_rates = 4, 2362 .rate_table = (unsigned int[]) { 2363 44100, 48000, 88200, 96000 2364 }, 2365 .sync_ep = USB_RECIP_INTERFACE | USB_DIR_IN, 2366 .sync_iface = 3, 2367 .sync_altsetting = 1, 2368 .sync_ep_idx = 1, 2369 .implicit_fb = 1, 2370 } 2371 }, 2372 { 2373 QUIRK_DATA_AUDIOFORMAT(3) { 2374 .formats = SNDRV_PCM_FMTBIT_S24_3LE, 2375 .fmt_bits = 24, 2376 .channels = 4, 2377 .iface = 3, 2378 .altsetting = 1, 2379 .altset_idx = 1, 2380 .attributes = 0x00, 2381 .endpoint = USB_RECIP_INTERFACE | USB_DIR_IN, 2382 .ep_attr = USB_ENDPOINT_XFER_ISOC | 2383 USB_ENDPOINT_SYNC_ASYNC, 2384 .maxpacksize = 0x009c, 2385 .rates = SNDRV_PCM_RATE_44100 | SNDRV_PCM_RATE_48000 | 2386 SNDRV_PCM_RATE_88200 | SNDRV_PCM_RATE_96000, 2387 .rate_min = 44100, 2388 .rate_max = 96000, 2389 .nr_rates = 4, 2390 .rate_table = (unsigned int[]) { 2391 44100, 48000, 88200, 96000 2392 }, 2393 .implicit_fb = 0, 2394 } 2395 }, 2396 { 2397 QUIRK_DATA_MIDI_FIXED_ENDPOINT(4) { 2398 .out_cables = 0x0001, 2399 .in_cables = 0x0001 2400 } 2401 }, 2402 QUIRK_COMPOSITE_END 2403 } 2404 } 2405 }, 2406 { 2407 /* Tascam US122 MKII - playback-only support */ 2408 USB_DEVICE_VENDOR_SPEC(0x0644, 0x8021), 2409 QUIRK_DRIVER_INFO { 2410 .vendor_name = "TASCAM", 2411 .product_name = "US122 MKII", 2412 QUIRK_DATA_COMPOSITE { 2413 { QUIRK_DATA_IGNORE(0) }, 2414 { 2415 QUIRK_DATA_AUDIOFORMAT(1) { 2416 .formats = SNDRV_PCM_FMTBIT_S24_3LE, 2417 .channels = 2, 2418 .iface = 1, 2419 .altsetting = 1, 2420 .altset_idx = 1, 2421 .attributes = UAC_EP_CS_ATTR_SAMPLE_RATE, 2422 .endpoint = 0x02, 2423 .ep_attr = USB_ENDPOINT_XFER_ISOC, 2424 .rates = SNDRV_PCM_RATE_44100 | 2425 SNDRV_PCM_RATE_48000 | 2426 SNDRV_PCM_RATE_88200 | 2427 SNDRV_PCM_RATE_96000, 2428 .rate_min = 44100, 2429 .rate_max = 96000, 2430 .nr_rates = 4, 2431 .rate_table = (unsigned int[]) { 2432 44100, 48000, 88200, 96000 2433 } 2434 } 2435 }, 2436 QUIRK_COMPOSITE_END 2437 } 2438 } 2439 }, 2440 2441 /* Denon DN-X1600 */ 2442 { 2443 USB_AUDIO_DEVICE(0x154e, 0x500e), 2444 QUIRK_DRIVER_INFO { 2445 .vendor_name = "Denon", 2446 .product_name = "DN-X1600", 2447 QUIRK_DATA_COMPOSITE{ 2448 { QUIRK_DATA_IGNORE(0) }, 2449 { 2450 QUIRK_DATA_AUDIOFORMAT(1) { 2451 .formats = SNDRV_PCM_FMTBIT_S24_3LE, 2452 .channels = 8, 2453 .iface = 1, 2454 .altsetting = 1, 2455 .altset_idx = 1, 2456 .attributes = 0x0, 2457 .endpoint = 0x01, 2458 .ep_attr = USB_ENDPOINT_XFER_ISOC | 2459 USB_ENDPOINT_SYNC_ADAPTIVE, 2460 .maxpacksize = 0x138, 2461 .rates = SNDRV_PCM_RATE_48000, 2462 .rate_min = 48000, 2463 .rate_max = 48000, 2464 .nr_rates = 1, 2465 .rate_table = (unsigned int[]) { 2466 48000 2467 } 2468 } 2469 }, 2470 { 2471 QUIRK_DATA_AUDIOFORMAT(2) { 2472 .formats = SNDRV_PCM_FMTBIT_S24_3LE, 2473 .channels = 8, 2474 .iface = 2, 2475 .altsetting = 1, 2476 .altset_idx = 1, 2477 .attributes = 0x0, 2478 .endpoint = 0x85, 2479 .ep_attr = USB_ENDPOINT_XFER_ISOC | 2480 USB_ENDPOINT_SYNC_ADAPTIVE, 2481 .maxpacksize = 0x138, 2482 .rates = SNDRV_PCM_RATE_48000, 2483 .rate_min = 48000, 2484 .rate_max = 48000, 2485 .nr_rates = 1, 2486 .rate_table = (unsigned int[]) { 2487 48000 2488 } 2489 } 2490 }, 2491 { QUIRK_DATA_STANDARD_MIDI(4) }, 2492 QUIRK_COMPOSITE_END 2493 } 2494 } 2495 }, 2496 2497 /* Microsoft XboxLive Headset/Xbox Communicator */ 2498 { 2499 USB_DEVICE(0x045e, 0x0283), 2500 .bInterfaceClass = USB_CLASS_PER_INTERFACE, 2501 QUIRK_DRIVER_INFO { 2502 .vendor_name = "Microsoft", 2503 .product_name = "XboxLive Headset/Xbox Communicator", 2504 QUIRK_DATA_COMPOSITE { 2505 { 2506 /* playback */ 2507 QUIRK_DATA_AUDIOFORMAT(0) { 2508 .formats = SNDRV_PCM_FMTBIT_S16_LE, 2509 .channels = 1, 2510 .iface = 0, 2511 .altsetting = 0, 2512 .altset_idx = 0, 2513 .attributes = 0, 2514 .endpoint = 0x04, 2515 .ep_attr = 0x05, 2516 .rates = SNDRV_PCM_RATE_CONTINUOUS, 2517 .rate_min = 22050, 2518 .rate_max = 22050 2519 } 2520 }, 2521 { 2522 /* capture */ 2523 QUIRK_DATA_AUDIOFORMAT(1) { 2524 .formats = SNDRV_PCM_FMTBIT_S16_LE, 2525 .channels = 1, 2526 .iface = 1, 2527 .altsetting = 0, 2528 .altset_idx = 0, 2529 .attributes = 0, 2530 .endpoint = 0x85, 2531 .ep_attr = 0x05, 2532 .rates = SNDRV_PCM_RATE_CONTINUOUS, 2533 .rate_min = 16000, 2534 .rate_max = 16000 2535 } 2536 }, 2537 QUIRK_COMPOSITE_END 2538 } 2539 } 2540 }, 2541 2542 /* Reloop Play */ 2543 { 2544 USB_DEVICE(0x200c, 0x100b), 2545 .bInterfaceClass = USB_CLASS_PER_INTERFACE, 2546 QUIRK_DRIVER_INFO { 2547 QUIRK_DATA_COMPOSITE { 2548 { QUIRK_DATA_STANDARD_MIXER(0) }, 2549 { 2550 QUIRK_DATA_AUDIOFORMAT(1) { 2551 .formats = SNDRV_PCM_FMTBIT_S24_3LE, 2552 .channels = 4, 2553 .iface = 1, 2554 .altsetting = 1, 2555 .altset_idx = 1, 2556 .attributes = UAC_EP_CS_ATTR_SAMPLE_RATE, 2557 .endpoint = 0x01, 2558 .ep_attr = USB_ENDPOINT_SYNC_ADAPTIVE, 2559 .rates = SNDRV_PCM_RATE_44100 | 2560 SNDRV_PCM_RATE_48000, 2561 .rate_min = 44100, 2562 .rate_max = 48000, 2563 .nr_rates = 2, 2564 .rate_table = (unsigned int[]) { 2565 44100, 48000 2566 } 2567 } 2568 }, 2569 QUIRK_COMPOSITE_END 2570 } 2571 } 2572 }, 2573 2574 { 2575 /* 2576 * ZOOM R16/24 in audio interface mode. 2577 * Playback requires an extra four byte LE length indicator 2578 * at the start of each isochronous packet. This quirk is 2579 * enabled in create_standard_audio_quirk(). 2580 */ 2581 USB_DEVICE(0x1686, 0x00dd), 2582 QUIRK_DRIVER_INFO { 2583 QUIRK_DATA_COMPOSITE { 2584 { QUIRK_DATA_STANDARD_AUDIO(1) }, /* Playback */ 2585 { QUIRK_DATA_STANDARD_AUDIO(2) }, /* Capture */ 2586 { QUIRK_DATA_STANDARD_MIDI(3) }, /* Midi */ 2587 QUIRK_COMPOSITE_END 2588 } 2589 } 2590 }, 2591 2592 { 2593 /* 2594 * Some USB MIDI devices don't have an audio control interface, 2595 * so we have to grab MIDI streaming interfaces here. 2596 */ 2597 .match_flags = USB_DEVICE_ID_MATCH_INT_CLASS | 2598 USB_DEVICE_ID_MATCH_INT_SUBCLASS, 2599 .bInterfaceClass = USB_CLASS_AUDIO, 2600 .bInterfaceSubClass = USB_SUBCLASS_MIDISTREAMING, 2601 QUIRK_DRIVER_INFO { 2602 QUIRK_DATA_STANDARD_MIDI(QUIRK_ANY_INTERFACE) 2603 } 2604 }, 2605 2606 /* Rane SL-1 */ 2607 { 2608 USB_DEVICE(0x13e5, 0x0001), 2609 QUIRK_DRIVER_INFO { 2610 QUIRK_DATA_STANDARD_AUDIO(QUIRK_ANY_INTERFACE) 2611 } 2612 }, 2613 2614 /* disabled due to regression for other devices; 2615 * see https://bugzilla.kernel.org/show_bug.cgi?id=199905 2616 */ 2617 #if 0 2618 { 2619 /* 2620 * Nura's first gen headphones use Cambridge Silicon Radio's vendor 2621 * ID, but it looks like the product ID actually is only for Nura. 2622 * The capture interface does not work at all (even on Windows), 2623 * and only the 48 kHz sample rate works for the playback interface. 2624 */ 2625 USB_DEVICE(0x0a12, 0x1243), 2626 QUIRK_DRIVER_INFO { 2627 QUIRK_DATA_COMPOSITE { 2628 { QUIRK_DATA_STANDARD_MIXER(0) }, 2629 { QUIRK_DATA_IGNORE(1) }, /* Capture */ 2630 /* Playback */ 2631 { 2632 QUIRK_DATA_AUDIOFORMAT(2) { 2633 .formats = SNDRV_PCM_FMTBIT_S16_LE, 2634 .channels = 2, 2635 .iface = 2, 2636 .altsetting = 1, 2637 .altset_idx = 1, 2638 .attributes = UAC_EP_CS_ATTR_FILL_MAX | 2639 UAC_EP_CS_ATTR_SAMPLE_RATE, 2640 .endpoint = 0x03, 2641 .ep_attr = USB_ENDPOINT_XFER_ISOC, 2642 .rates = SNDRV_PCM_RATE_48000, 2643 .rate_min = 48000, 2644 .rate_max = 48000, 2645 .nr_rates = 1, 2646 .rate_table = (unsigned int[]) { 2647 48000 2648 } 2649 } 2650 }, 2651 QUIRK_COMPOSITE_END 2652 } 2653 } 2654 }, 2655 { 2656 /* 2657 * The AudioBox USB advertises S24_3LE as the only supported format 2658 * for both playback and capture. It does not support S16_LE despite 2659 * being a USB full-speed device. 2660 */ 2661 USB_DEVICE(0x194f, 0x0301), 2662 QUIRK_DRIVER_INFO { 2663 .vendor_name = "PreSonus", 2664 .product_name = "AudioBox USB", 2665 QUIRK_DATA_COMPOSITE { 2666 { QUIRK_DATA_IGNORE(0) }, 2667 { 2668 QUIRK_DATA_AUDIOFORMAT(2) { 2669 .formats = SNDRV_PCM_FMTBIT_S24_3LE, 2670 .channels = 2, 2671 .iface = 2, 2672 .altsetting = 1, 2673 .altset_idx = 1, 2674 .attributes = 0, 2675 .endpoint = 0x01, 2676 .ep_attr = USB_ENDPOINT_XFER_ISOC, 2677 .rates = SNDRV_PCM_RATE_44100 | 2678 SNDRV_PCM_RATE_48000, 2679 .rate_min = 44100, 2680 .rate_max = 48000, 2681 } 2682 }, 2683 { 2684 QUIRK_DATA_AUDIOFORMAT(3) { 2685 .formats = SNDRV_PCM_FMTBIT_S24_3LE, 2686 .channels = 2, 2687 .iface = 3, 2688 .altsetting = 1, 2689 .altset_idx = 1, 2690 .attributes = 0, 2691 .endpoint = 0x82, 2692 .ep_attr = USB_ENDPOINT_XFER_ISOC, 2693 .rates = SNDRV_PCM_RATE_44100 | 2694 SNDRV_PCM_RATE_48000, 2695 .rate_min = 44100, 2696 .rate_max = 48000, 2697 } 2698 }, 2699 QUIRK_COMPOSITE_END 2700 } 2701 } 2702 }, 2703 #endif /* disabled */ 2704 2705 { 2706 /* 2707 * Bower's & Wilkins PX headphones only support the 48 kHz sample rate 2708 * even though it advertises more. The capture interface doesn't work 2709 * even on windows. 2710 */ 2711 USB_DEVICE(0x19b5, 0x0021), 2712 QUIRK_DRIVER_INFO { 2713 QUIRK_DATA_COMPOSITE { 2714 { QUIRK_DATA_STANDARD_MIXER(0) }, 2715 /* Playback */ 2716 { 2717 QUIRK_DATA_AUDIOFORMAT(1) { 2718 .formats = SNDRV_PCM_FMTBIT_S16_LE, 2719 .channels = 2, 2720 .iface = 1, 2721 .altsetting = 1, 2722 .altset_idx = 1, 2723 .attributes = UAC_EP_CS_ATTR_FILL_MAX | 2724 UAC_EP_CS_ATTR_SAMPLE_RATE, 2725 .endpoint = 0x03, 2726 .ep_attr = USB_ENDPOINT_XFER_ISOC, 2727 .rates = SNDRV_PCM_RATE_48000, 2728 .rate_min = 48000, 2729 .rate_max = 48000, 2730 .nr_rates = 1, 2731 .rate_table = (unsigned int[]) { 2732 48000 2733 } 2734 } 2735 }, 2736 QUIRK_COMPOSITE_END 2737 } 2738 } 2739 }, 2740 /* MOTU Microbook II */ 2741 { 2742 USB_DEVICE_VENDOR_SPEC(0x07fd, 0x0004), 2743 QUIRK_DRIVER_INFO { 2744 .vendor_name = "MOTU", 2745 .product_name = "MicroBookII", 2746 QUIRK_DATA_COMPOSITE { 2747 { QUIRK_DATA_STANDARD_MIXER(0) }, 2748 { 2749 QUIRK_DATA_AUDIOFORMAT(0) { 2750 .formats = SNDRV_PCM_FMTBIT_S24_3BE, 2751 .channels = 6, 2752 .iface = 0, 2753 .altsetting = 1, 2754 .altset_idx = 1, 2755 .attributes = 0, 2756 .endpoint = 0x84, 2757 .rates = SNDRV_PCM_RATE_96000, 2758 .ep_attr = USB_ENDPOINT_XFER_ISOC | 2759 USB_ENDPOINT_SYNC_ASYNC, 2760 .rate_min = 96000, 2761 .rate_max = 96000, 2762 .nr_rates = 1, 2763 .maxpacksize = 0x00d8, 2764 .rate_table = (unsigned int[]) { 2765 96000 2766 } 2767 } 2768 }, 2769 { 2770 QUIRK_DATA_AUDIOFORMAT(0) { 2771 .formats = SNDRV_PCM_FMTBIT_S24_3BE, 2772 .channels = 8, 2773 .iface = 0, 2774 .altsetting = 1, 2775 .altset_idx = 1, 2776 .attributes = 0, 2777 .endpoint = 0x03, 2778 .ep_idx = 1, 2779 .rates = SNDRV_PCM_RATE_96000, 2780 .ep_attr = USB_ENDPOINT_XFER_ISOC | 2781 USB_ENDPOINT_SYNC_ASYNC, 2782 .rate_min = 96000, 2783 .rate_max = 96000, 2784 .nr_rates = 1, 2785 .maxpacksize = 0x0120, 2786 .rate_table = (unsigned int[]) { 2787 96000 2788 } 2789 } 2790 }, 2791 QUIRK_COMPOSITE_END 2792 } 2793 } 2794 }, 2795 { 2796 /* 2797 * PIONEER DJ DDJ-SX3 2798 * PCM is 12 channels out, 10 channels in @ 44.1 fixed 2799 * interface 0, vendor class alt setting 1 for endpoints 5 and 0x86 2800 * The feedback for the output is the input. 2801 */ 2802 USB_DEVICE_VENDOR_SPEC(0x2b73, 0x0023), 2803 QUIRK_DRIVER_INFO { 2804 QUIRK_DATA_COMPOSITE { 2805 { 2806 QUIRK_DATA_AUDIOFORMAT(0) { 2807 .formats = SNDRV_PCM_FMTBIT_S32_LE, 2808 .channels = 12, 2809 .iface = 0, 2810 .altsetting = 1, 2811 .altset_idx = 1, 2812 .endpoint = 0x05, 2813 .ep_attr = USB_ENDPOINT_XFER_ISOC| 2814 USB_ENDPOINT_SYNC_ASYNC, 2815 .rates = SNDRV_PCM_RATE_44100, 2816 .rate_min = 44100, 2817 .rate_max = 44100, 2818 .nr_rates = 1, 2819 .rate_table = (unsigned int[]) { 44100 } 2820 } 2821 }, 2822 { 2823 QUIRK_DATA_AUDIOFORMAT(0) { 2824 .formats = SNDRV_PCM_FMTBIT_S32_LE, 2825 .channels = 10, 2826 .iface = 0, 2827 .altsetting = 1, 2828 .altset_idx = 1, 2829 .endpoint = 0x86, 2830 .ep_idx = 1, 2831 .ep_attr = USB_ENDPOINT_XFER_ISOC| 2832 USB_ENDPOINT_SYNC_ASYNC| 2833 USB_ENDPOINT_USAGE_IMPLICIT_FB, 2834 .rates = SNDRV_PCM_RATE_44100, 2835 .rate_min = 44100, 2836 .rate_max = 44100, 2837 .nr_rates = 1, 2838 .rate_table = (unsigned int[]) { 44100 } 2839 } 2840 }, 2841 QUIRK_COMPOSITE_END 2842 } 2843 } 2844 }, 2845 { 2846 /* 2847 * Pioneer DJ DJM-250MK2 2848 * PCM is 8 channels out @ 48 fixed (endpoint 0x01) 2849 * and 8 channels in @ 48 fixed (endpoint 0x82). 2850 * 2851 * Both playback and recording is working, even simultaneously. 2852 * 2853 * Playback channels could be mapped to: 2854 * - CH1 2855 * - CH2 2856 * - AUX 2857 * 2858 * Recording channels could be mapped to: 2859 * - Post CH1 Fader 2860 * - Post CH2 Fader 2861 * - Cross Fader A 2862 * - Cross Fader B 2863 * - MIC 2864 * - AUX 2865 * - REC OUT 2866 * 2867 * There is remaining problem with recording directly from PHONO/LINE. 2868 * If we map a channel to: 2869 * - CH1 Control Tone PHONO 2870 * - CH1 Control Tone LINE 2871 * - CH2 Control Tone PHONO 2872 * - CH2 Control Tone LINE 2873 * it is silent. 2874 * There is no signal even on other operating systems with official drivers. 2875 * The signal appears only when a supported application is started. 2876 * This needs to be investigated yet... 2877 * (there is quite a lot communication on the USB in both directions) 2878 * 2879 * In current version this mixer could be used for playback 2880 * and for recording from vinyls (through Post CH* Fader) 2881 * but not for DVS (Digital Vinyl Systems) like in Mixxx. 2882 */ 2883 USB_DEVICE_VENDOR_SPEC(0x2b73, 0x0017), 2884 QUIRK_DRIVER_INFO { 2885 QUIRK_DATA_COMPOSITE { 2886 { 2887 QUIRK_DATA_AUDIOFORMAT(0) { 2888 .formats = SNDRV_PCM_FMTBIT_S24_3LE, 2889 .channels = 8, // outputs 2890 .iface = 0, 2891 .altsetting = 1, 2892 .altset_idx = 1, 2893 .endpoint = 0x01, 2894 .ep_attr = USB_ENDPOINT_XFER_ISOC| 2895 USB_ENDPOINT_SYNC_ASYNC, 2896 .rates = SNDRV_PCM_RATE_48000, 2897 .rate_min = 48000, 2898 .rate_max = 48000, 2899 .nr_rates = 1, 2900 .rate_table = (unsigned int[]) { 48000 } 2901 } 2902 }, 2903 { 2904 QUIRK_DATA_AUDIOFORMAT(0) { 2905 .formats = SNDRV_PCM_FMTBIT_S24_3LE, 2906 .channels = 8, // inputs 2907 .iface = 0, 2908 .altsetting = 1, 2909 .altset_idx = 1, 2910 .endpoint = 0x82, 2911 .ep_idx = 1, 2912 .ep_attr = USB_ENDPOINT_XFER_ISOC| 2913 USB_ENDPOINT_SYNC_ASYNC| 2914 USB_ENDPOINT_USAGE_IMPLICIT_FB, 2915 .rates = SNDRV_PCM_RATE_48000, 2916 .rate_min = 48000, 2917 .rate_max = 48000, 2918 .nr_rates = 1, 2919 .rate_table = (unsigned int[]) { 48000 } 2920 } 2921 }, 2922 QUIRK_COMPOSITE_END 2923 } 2924 } 2925 }, 2926 { 2927 /* 2928 * PIONEER DJ DDJ-RB 2929 * PCM is 4 channels out, 2 dummy channels in @ 44.1 fixed 2930 * The feedback for the output is the dummy input. 2931 */ 2932 USB_DEVICE_VENDOR_SPEC(0x2b73, 0x000e), 2933 QUIRK_DRIVER_INFO { 2934 QUIRK_DATA_COMPOSITE { 2935 { 2936 QUIRK_DATA_AUDIOFORMAT(0) { 2937 .formats = SNDRV_PCM_FMTBIT_S24_3LE, 2938 .channels = 4, 2939 .iface = 0, 2940 .altsetting = 1, 2941 .altset_idx = 1, 2942 .endpoint = 0x01, 2943 .ep_attr = USB_ENDPOINT_XFER_ISOC| 2944 USB_ENDPOINT_SYNC_ASYNC, 2945 .rates = SNDRV_PCM_RATE_44100, 2946 .rate_min = 44100, 2947 .rate_max = 44100, 2948 .nr_rates = 1, 2949 .rate_table = (unsigned int[]) { 44100 } 2950 } 2951 }, 2952 { 2953 QUIRK_DATA_AUDIOFORMAT(0) { 2954 .formats = SNDRV_PCM_FMTBIT_S24_3LE, 2955 .channels = 2, 2956 .iface = 0, 2957 .altsetting = 1, 2958 .altset_idx = 1, 2959 .endpoint = 0x82, 2960 .ep_idx = 1, 2961 .ep_attr = USB_ENDPOINT_XFER_ISOC| 2962 USB_ENDPOINT_SYNC_ASYNC| 2963 USB_ENDPOINT_USAGE_IMPLICIT_FB, 2964 .rates = SNDRV_PCM_RATE_44100, 2965 .rate_min = 44100, 2966 .rate_max = 44100, 2967 .nr_rates = 1, 2968 .rate_table = (unsigned int[]) { 44100 } 2969 } 2970 }, 2971 QUIRK_COMPOSITE_END 2972 } 2973 } 2974 }, 2975 2976 { 2977 /* 2978 * PIONEER DJ DDJ-RR 2979 * PCM is 6 channels out & 4 channels in @ 44.1 fixed 2980 */ 2981 USB_DEVICE_VENDOR_SPEC(0x2b73, 0x000d), 2982 QUIRK_DRIVER_INFO { 2983 QUIRK_DATA_COMPOSITE { 2984 { 2985 QUIRK_DATA_AUDIOFORMAT(0) { 2986 .formats = SNDRV_PCM_FMTBIT_S24_3LE, 2987 .channels = 6, //Master, Headphones & Booth 2988 .iface = 0, 2989 .altsetting = 1, 2990 .altset_idx = 1, 2991 .endpoint = 0x01, 2992 .ep_attr = USB_ENDPOINT_XFER_ISOC| 2993 USB_ENDPOINT_SYNC_ASYNC, 2994 .rates = SNDRV_PCM_RATE_44100, 2995 .rate_min = 44100, 2996 .rate_max = 44100, 2997 .nr_rates = 1, 2998 .rate_table = (unsigned int[]) { 44100 } 2999 } 3000 }, 3001 { 3002 QUIRK_DATA_AUDIOFORMAT(0) { 3003 .formats = SNDRV_PCM_FMTBIT_S24_3LE, 3004 .channels = 4, //2x RCA inputs (CH1 & CH2) 3005 .iface = 0, 3006 .altsetting = 1, 3007 .altset_idx = 1, 3008 .endpoint = 0x82, 3009 .ep_idx = 1, 3010 .ep_attr = USB_ENDPOINT_XFER_ISOC| 3011 USB_ENDPOINT_SYNC_ASYNC| 3012 USB_ENDPOINT_USAGE_IMPLICIT_FB, 3013 .rates = SNDRV_PCM_RATE_44100, 3014 .rate_min = 44100, 3015 .rate_max = 44100, 3016 .nr_rates = 1, 3017 .rate_table = (unsigned int[]) { 44100 } 3018 } 3019 }, 3020 QUIRK_COMPOSITE_END 3021 } 3022 } 3023 }, 3024 3025 { 3026 /* 3027 * PIONEER DJ DDJ-SR2 3028 * PCM is 4 channels out, 6 channels in @ 44.1 fixed 3029 * The Feedback for the output is the input 3030 */ 3031 USB_DEVICE_VENDOR_SPEC(0x2b73, 0x001e), 3032 QUIRK_DRIVER_INFO { 3033 QUIRK_DATA_COMPOSITE { 3034 { 3035 QUIRK_DATA_AUDIOFORMAT(0) { 3036 .formats = SNDRV_PCM_FMTBIT_S24_3LE, 3037 .channels = 4, 3038 .iface = 0, 3039 .altsetting = 1, 3040 .altset_idx = 1, 3041 .endpoint = 0x01, 3042 .ep_attr = USB_ENDPOINT_XFER_ISOC| 3043 USB_ENDPOINT_SYNC_ASYNC, 3044 .rates = SNDRV_PCM_RATE_44100, 3045 .rate_min = 44100, 3046 .rate_max = 44100, 3047 .nr_rates = 1, 3048 .rate_table = (unsigned int[]) { 44100 } 3049 } 3050 }, 3051 { 3052 QUIRK_DATA_AUDIOFORMAT(0) { 3053 .formats = SNDRV_PCM_FMTBIT_S24_3LE, 3054 .channels = 6, 3055 .iface = 0, 3056 .altsetting = 1, 3057 .altset_idx = 1, 3058 .endpoint = 0x82, 3059 .ep_idx = 1, 3060 .ep_attr = USB_ENDPOINT_XFER_ISOC| 3061 USB_ENDPOINT_SYNC_ASYNC| 3062 USB_ENDPOINT_USAGE_IMPLICIT_FB, 3063 .rates = SNDRV_PCM_RATE_44100, 3064 .rate_min = 44100, 3065 .rate_max = 44100, 3066 .nr_rates = 1, 3067 .rate_table = (unsigned int[]) { 44100 } 3068 } 3069 }, 3070 QUIRK_COMPOSITE_END 3071 } 3072 } 3073 }, 3074 3075 { 3076 /* 3077 * Pioneer DJ DJM-900NXS2 3078 * 10 channels playback & 12 channels capture @ 44.1/48/96kHz S24LE 3079 */ 3080 USB_DEVICE_VENDOR_SPEC(0x2b73, 0x000a), 3081 QUIRK_DRIVER_INFO { 3082 QUIRK_DATA_COMPOSITE { 3083 { 3084 QUIRK_DATA_AUDIOFORMAT(0) { 3085 .formats = SNDRV_PCM_FMTBIT_S24_3LE, 3086 .channels = 10, 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 SNDRV_PCM_RATE_48000| 3095 SNDRV_PCM_RATE_96000, 3096 .rate_min = 44100, 3097 .rate_max = 96000, 3098 .nr_rates = 3, 3099 .rate_table = (unsigned int[]) { 3100 44100, 48000, 96000 3101 } 3102 } 3103 }, 3104 { 3105 QUIRK_DATA_AUDIOFORMAT(0) { 3106 .formats = SNDRV_PCM_FMTBIT_S24_3LE, 3107 .channels = 12, 3108 .iface = 0, 3109 .altsetting = 1, 3110 .altset_idx = 1, 3111 .endpoint = 0x82, 3112 .ep_idx = 1, 3113 .ep_attr = USB_ENDPOINT_XFER_ISOC| 3114 USB_ENDPOINT_SYNC_ASYNC| 3115 USB_ENDPOINT_USAGE_IMPLICIT_FB, 3116 .rates = SNDRV_PCM_RATE_44100| 3117 SNDRV_PCM_RATE_48000| 3118 SNDRV_PCM_RATE_96000, 3119 .rate_min = 44100, 3120 .rate_max = 96000, 3121 .nr_rates = 3, 3122 .rate_table = (unsigned int[]) { 3123 44100, 48000, 96000 3124 } 3125 } 3126 }, 3127 QUIRK_COMPOSITE_END 3128 } 3129 } 3130 }, 3131 3132 { 3133 /* 3134 * PIONEER DJ DDJ-800 3135 * PCM is 6 channels out, 6 channels in @ 44.1 fixed 3136 * The Feedback for the output is the input 3137 */ 3138 USB_DEVICE_VENDOR_SPEC(0x2b73, 0x0029), 3139 QUIRK_DRIVER_INFO { 3140 QUIRK_DATA_COMPOSITE { 3141 { 3142 QUIRK_DATA_AUDIOFORMAT(0) { 3143 .formats = SNDRV_PCM_FMTBIT_S24_3LE, 3144 .channels = 6, 3145 .iface = 0, 3146 .altsetting = 1, 3147 .altset_idx = 1, 3148 .endpoint = 0x01, 3149 .ep_attr = USB_ENDPOINT_XFER_ISOC| 3150 USB_ENDPOINT_SYNC_ASYNC, 3151 .rates = SNDRV_PCM_RATE_44100, 3152 .rate_min = 44100, 3153 .rate_max = 44100, 3154 .nr_rates = 1, 3155 .rate_table = (unsigned int[]) { 44100 } 3156 } 3157 }, 3158 { 3159 QUIRK_DATA_AUDIOFORMAT(0) { 3160 .formats = SNDRV_PCM_FMTBIT_S24_3LE, 3161 .channels = 6, 3162 .iface = 0, 3163 .altsetting = 1, 3164 .altset_idx = 1, 3165 .endpoint = 0x82, 3166 .ep_idx = 1, 3167 .ep_attr = USB_ENDPOINT_XFER_ISOC| 3168 USB_ENDPOINT_SYNC_ASYNC| 3169 USB_ENDPOINT_USAGE_IMPLICIT_FB, 3170 .rates = SNDRV_PCM_RATE_44100, 3171 .rate_min = 44100, 3172 .rate_max = 44100, 3173 .nr_rates = 1, 3174 .rate_table = (unsigned int[]) { 44100 } 3175 } 3176 }, 3177 QUIRK_COMPOSITE_END 3178 } 3179 } 3180 }, 3181 3182 { 3183 /* 3184 * Pioneer DJ / AlphaTheta DJM-A9 3185 * 10 channels playback & 12 channels capture @ 44.1/48/96kHz S24LE 3186 */ 3187 USB_DEVICE_VENDOR_SPEC(0x2b73, 0x003c), 3188 QUIRK_DRIVER_INFO { 3189 QUIRK_DATA_COMPOSITE { 3190 { 3191 QUIRK_DATA_AUDIOFORMAT(0) { 3192 .formats = SNDRV_PCM_FMTBIT_S24_3LE, 3193 .channels = 10, 3194 .iface = 0, 3195 .altsetting = 1, 3196 .altset_idx = 1, 3197 .endpoint = 0x01, 3198 .ep_attr = USB_ENDPOINT_XFER_ISOC| 3199 USB_ENDPOINT_SYNC_ASYNC, 3200 .rates = SNDRV_PCM_RATE_44100| 3201 SNDRV_PCM_RATE_48000| 3202 SNDRV_PCM_RATE_96000, 3203 .rate_min = 44100, 3204 .rate_max = 96000, 3205 .nr_rates = 3, 3206 .rate_table = (unsigned int[]) { 3207 44100, 48000, 96000 3208 } 3209 } 3210 }, 3211 { 3212 QUIRK_DATA_AUDIOFORMAT(0) { 3213 .formats = SNDRV_PCM_FMTBIT_S24_3LE, 3214 .channels = 12, 3215 .iface = 0, 3216 .altsetting = 1, 3217 .altset_idx = 1, 3218 .endpoint = 0x82, 3219 .ep_idx = 1, 3220 .ep_attr = USB_ENDPOINT_XFER_ISOC| 3221 USB_ENDPOINT_SYNC_ASYNC| 3222 USB_ENDPOINT_USAGE_IMPLICIT_FB, 3223 .rates = SNDRV_PCM_RATE_44100| 3224 SNDRV_PCM_RATE_48000| 3225 SNDRV_PCM_RATE_96000, 3226 .rate_min = 44100, 3227 .rate_max = 96000, 3228 .nr_rates = 3, 3229 .rate_table = (unsigned int[]) { 3230 44100, 48000, 96000 3231 } 3232 } 3233 }, 3234 QUIRK_COMPOSITE_END 3235 } 3236 } 3237 }, 3238 { 3239 /* 3240 * Pioneer DJ DJM-V10 3241 */ 3242 USB_DEVICE_VENDOR_SPEC(0x2b73, 0x0034), 3243 QUIRK_DRIVER_INFO { 3244 QUIRK_DATA_COMPOSITE { 3245 { 3246 QUIRK_DATA_AUDIOFORMAT(0) { 3247 .formats = SNDRV_PCM_FMTBIT_S24_3LE, 3248 .channels = 12, // outputs 3249 .iface = 0, 3250 .altsetting = 1, 3251 .altset_idx = 1, 3252 .endpoint = 0x01, 3253 .ep_attr = USB_ENDPOINT_XFER_ISOC| 3254 USB_ENDPOINT_SYNC_ASYNC, 3255 .rates = SNDRV_PCM_RATE_44100| 3256 SNDRV_PCM_RATE_48000| 3257 SNDRV_PCM_RATE_96000, 3258 .rate_min = 44100, 3259 .rate_max = 96000, 3260 .nr_rates = 3, 3261 .rate_table = (unsigned int[]) { 44100, 48000, 96000 } 3262 } 3263 }, 3264 { 3265 QUIRK_DATA_AUDIOFORMAT(0) { 3266 .formats = SNDRV_PCM_FMTBIT_S24_3LE, 3267 .channels = 12, // inputs 3268 .iface = 0, 3269 .altsetting = 1, 3270 .altset_idx = 1, 3271 .endpoint = 0x82, 3272 .ep_idx = 1, 3273 .ep_attr = USB_ENDPOINT_XFER_ISOC| 3274 USB_ENDPOINT_SYNC_ASYNC| 3275 USB_ENDPOINT_USAGE_IMPLICIT_FB, 3276 .rates = SNDRV_PCM_RATE_44100| 3277 SNDRV_PCM_RATE_48000| 3278 SNDRV_PCM_RATE_96000, 3279 .rate_min = 44100, 3280 .rate_max = 96000, 3281 .nr_rates = 3, 3282 .rate_table = (unsigned int[]) { 44100, 48000, 96000 } 3283 } 3284 }, 3285 QUIRK_COMPOSITE_END 3286 } 3287 } 3288 }, 3289 3290 /* 3291 * MacroSilicon MS2100/MS2106 based AV capture cards 3292 * 3293 * These claim 96kHz 1ch in the descriptors, but are actually 48kHz 2ch. 3294 * They also need QUIRK_FLAG_ALIGN_TRANSFER, which makes one wonder if 3295 * they pretend to be 96kHz mono as a workaround for stereo being broken 3296 * by that... 3297 * 3298 * They also have an issue with initial stream alignment that causes the 3299 * channels to be swapped and out of phase, which is dealt with in quirks.c. 3300 */ 3301 { 3302 USB_AUDIO_DEVICE(0x534d, 0x0021), 3303 QUIRK_DRIVER_INFO { 3304 .vendor_name = "MacroSilicon", 3305 .product_name = "MS210x", 3306 QUIRK_DATA_COMPOSITE { 3307 { QUIRK_DATA_STANDARD_MIXER(2) }, 3308 { 3309 QUIRK_DATA_AUDIOFORMAT(3) { 3310 .formats = SNDRV_PCM_FMTBIT_S16_LE, 3311 .channels = 2, 3312 .iface = 3, 3313 .altsetting = 1, 3314 .altset_idx = 1, 3315 .attributes = 0, 3316 .endpoint = 0x82, 3317 .ep_attr = USB_ENDPOINT_XFER_ISOC | 3318 USB_ENDPOINT_SYNC_ASYNC, 3319 .rates = SNDRV_PCM_RATE_CONTINUOUS, 3320 .rate_min = 48000, 3321 .rate_max = 48000, 3322 } 3323 }, 3324 QUIRK_COMPOSITE_END 3325 } 3326 } 3327 }, 3328 3329 /* 3330 * MacroSilicon MS2109 based HDMI capture cards 3331 * 3332 * These claim 96kHz 1ch in the descriptors, but are actually 48kHz 2ch. 3333 * They also need QUIRK_FLAG_ALIGN_TRANSFER, which makes one wonder if 3334 * they pretend to be 96kHz mono as a workaround for stereo being broken 3335 * by that... 3336 * 3337 * They also have an issue with initial stream alignment that causes the 3338 * channels to be swapped and out of phase, which is dealt with in quirks.c. 3339 */ 3340 { 3341 USB_AUDIO_DEVICE(0x534d, 0x2109), 3342 QUIRK_DRIVER_INFO { 3343 .vendor_name = "MacroSilicon", 3344 .product_name = "MS2109", 3345 QUIRK_DATA_COMPOSITE { 3346 { QUIRK_DATA_STANDARD_MIXER(2) }, 3347 { 3348 QUIRK_DATA_AUDIOFORMAT(3) { 3349 .formats = SNDRV_PCM_FMTBIT_S16_LE, 3350 .channels = 2, 3351 .iface = 3, 3352 .altsetting = 1, 3353 .altset_idx = 1, 3354 .attributes = 0, 3355 .endpoint = 0x82, 3356 .ep_attr = USB_ENDPOINT_XFER_ISOC | 3357 USB_ENDPOINT_SYNC_ASYNC, 3358 .rates = SNDRV_PCM_RATE_CONTINUOUS, 3359 .rate_min = 48000, 3360 .rate_max = 48000, 3361 } 3362 }, 3363 QUIRK_COMPOSITE_END 3364 } 3365 } 3366 }, 3367 { 3368 /* 3369 * Pioneer DJ DJM-750 3370 * 8 channels playback & 8 channels capture @ 44.1/48/96kHz S24LE 3371 */ 3372 USB_DEVICE_VENDOR_SPEC(0x08e4, 0x017f), 3373 QUIRK_DRIVER_INFO { 3374 QUIRK_DATA_COMPOSITE { 3375 { 3376 QUIRK_DATA_AUDIOFORMAT(0) { 3377 .formats = SNDRV_PCM_FMTBIT_S24_3LE, 3378 .channels = 8, 3379 .iface = 0, 3380 .altsetting = 1, 3381 .altset_idx = 1, 3382 .endpoint = 0x05, 3383 .ep_attr = USB_ENDPOINT_XFER_ISOC| 3384 USB_ENDPOINT_SYNC_ASYNC, 3385 .rates = SNDRV_PCM_RATE_44100| 3386 SNDRV_PCM_RATE_48000| 3387 SNDRV_PCM_RATE_96000, 3388 .rate_min = 44100, 3389 .rate_max = 96000, 3390 .nr_rates = 3, 3391 .rate_table = (unsigned int[]) { 44100, 48000, 96000 } 3392 } 3393 }, 3394 { 3395 QUIRK_DATA_AUDIOFORMAT(0) { 3396 .formats = SNDRV_PCM_FMTBIT_S24_3LE, 3397 .channels = 8, 3398 .iface = 0, 3399 .altsetting = 1, 3400 .altset_idx = 1, 3401 .endpoint = 0x86, 3402 .ep_idx = 1, 3403 .ep_attr = USB_ENDPOINT_XFER_ISOC| 3404 USB_ENDPOINT_SYNC_ASYNC| 3405 USB_ENDPOINT_USAGE_IMPLICIT_FB, 3406 .rates = SNDRV_PCM_RATE_44100| 3407 SNDRV_PCM_RATE_48000| 3408 SNDRV_PCM_RATE_96000, 3409 .rate_min = 44100, 3410 .rate_max = 96000, 3411 .nr_rates = 3, 3412 .rate_table = (unsigned int[]) { 44100, 48000, 96000 } 3413 } 3414 }, 3415 QUIRK_COMPOSITE_END 3416 } 3417 } 3418 }, 3419 { 3420 /* 3421 * Pioneer DJ DJM-750MK2 3422 * 10 channels playback & 12 channels capture @ 48kHz S24LE 3423 */ 3424 USB_DEVICE_VENDOR_SPEC(0x2b73, 0x001b), 3425 QUIRK_DRIVER_INFO { 3426 QUIRK_DATA_COMPOSITE { 3427 { 3428 QUIRK_DATA_AUDIOFORMAT(0) { 3429 .formats = SNDRV_PCM_FMTBIT_S24_3LE, 3430 .channels = 10, 3431 .iface = 0, 3432 .altsetting = 1, 3433 .altset_idx = 1, 3434 .endpoint = 0x01, 3435 .ep_attr = USB_ENDPOINT_XFER_ISOC| 3436 USB_ENDPOINT_SYNC_ASYNC, 3437 .rates = SNDRV_PCM_RATE_48000, 3438 .rate_min = 48000, 3439 .rate_max = 48000, 3440 .nr_rates = 1, 3441 .rate_table = (unsigned int[]) { 3442 48000 3443 } 3444 } 3445 }, 3446 { 3447 QUIRK_DATA_AUDIOFORMAT(0) { 3448 .formats = SNDRV_PCM_FMTBIT_S24_3LE, 3449 .channels = 12, 3450 .iface = 0, 3451 .altsetting = 1, 3452 .altset_idx = 1, 3453 .endpoint = 0x82, 3454 .ep_idx = 1, 3455 .ep_attr = USB_ENDPOINT_XFER_ISOC| 3456 USB_ENDPOINT_SYNC_ASYNC| 3457 USB_ENDPOINT_USAGE_IMPLICIT_FB, 3458 .rates = SNDRV_PCM_RATE_48000, 3459 .rate_min = 48000, 3460 .rate_max = 48000, 3461 .nr_rates = 1, 3462 .rate_table = (unsigned int[]) { 48000 } 3463 } 3464 }, 3465 QUIRK_COMPOSITE_END 3466 } 3467 } 3468 }, 3469 { 3470 /* 3471 * Pioneer DJ DJM-850 3472 * 8 channels playback and 8 channels capture @ 44.1/48/96kHz S24LE 3473 * Playback on EP 0x05 3474 * Capture on EP 0x86 3475 */ 3476 USB_DEVICE_VENDOR_SPEC(0x08e4, 0x0163), 3477 QUIRK_DRIVER_INFO { 3478 QUIRK_DATA_COMPOSITE { 3479 { 3480 QUIRK_DATA_AUDIOFORMAT(0) { 3481 .formats = SNDRV_PCM_FMTBIT_S24_3LE, 3482 .channels = 8, 3483 .iface = 0, 3484 .altsetting = 1, 3485 .altset_idx = 1, 3486 .endpoint = 0x05, 3487 .ep_attr = USB_ENDPOINT_XFER_ISOC| 3488 USB_ENDPOINT_SYNC_ASYNC| 3489 USB_ENDPOINT_USAGE_DATA, 3490 .rates = SNDRV_PCM_RATE_44100| 3491 SNDRV_PCM_RATE_48000| 3492 SNDRV_PCM_RATE_96000, 3493 .rate_min = 44100, 3494 .rate_max = 96000, 3495 .nr_rates = 3, 3496 .rate_table = (unsigned int[]) { 44100, 48000, 96000 } 3497 } 3498 }, 3499 { 3500 QUIRK_DATA_AUDIOFORMAT(0) { 3501 .formats = SNDRV_PCM_FMTBIT_S24_3LE, 3502 .channels = 8, 3503 .iface = 0, 3504 .altsetting = 1, 3505 .altset_idx = 1, 3506 .endpoint = 0x86, 3507 .ep_idx = 1, 3508 .ep_attr = USB_ENDPOINT_XFER_ISOC| 3509 USB_ENDPOINT_SYNC_ASYNC| 3510 USB_ENDPOINT_USAGE_DATA, 3511 .rates = SNDRV_PCM_RATE_44100| 3512 SNDRV_PCM_RATE_48000| 3513 SNDRV_PCM_RATE_96000, 3514 .rate_min = 44100, 3515 .rate_max = 96000, 3516 .nr_rates = 3, 3517 .rate_table = (unsigned int[]) { 44100, 48000, 96000 } 3518 } 3519 }, 3520 QUIRK_COMPOSITE_END 3521 } 3522 } 3523 }, 3524 { 3525 /* 3526 * Pioneer DJ DJM-450 3527 * PCM is 8 channels out @ 48 fixed (endpoint 0x01) 3528 * and 8 channels in @ 48 fixed (endpoint 0x82). 3529 */ 3530 USB_DEVICE_VENDOR_SPEC(0x2b73, 0x0013), 3531 QUIRK_DRIVER_INFO { 3532 QUIRK_DATA_COMPOSITE { 3533 { 3534 QUIRK_DATA_AUDIOFORMAT(0) { 3535 .formats = SNDRV_PCM_FMTBIT_S24_3LE, 3536 .channels = 8, // outputs 3537 .iface = 0, 3538 .altsetting = 1, 3539 .altset_idx = 1, 3540 .endpoint = 0x01, 3541 .ep_attr = USB_ENDPOINT_XFER_ISOC| 3542 USB_ENDPOINT_SYNC_ASYNC, 3543 .rates = SNDRV_PCM_RATE_48000, 3544 .rate_min = 48000, 3545 .rate_max = 48000, 3546 .nr_rates = 1, 3547 .rate_table = (unsigned int[]) { 48000 } 3548 } 3549 }, 3550 { 3551 QUIRK_DATA_AUDIOFORMAT(0) { 3552 .formats = SNDRV_PCM_FMTBIT_S24_3LE, 3553 .channels = 8, // inputs 3554 .iface = 0, 3555 .altsetting = 1, 3556 .altset_idx = 1, 3557 .endpoint = 0x82, 3558 .ep_idx = 1, 3559 .ep_attr = USB_ENDPOINT_XFER_ISOC| 3560 USB_ENDPOINT_SYNC_ASYNC| 3561 USB_ENDPOINT_USAGE_IMPLICIT_FB, 3562 .rates = SNDRV_PCM_RATE_48000, 3563 .rate_min = 48000, 3564 .rate_max = 48000, 3565 .nr_rates = 1, 3566 .rate_table = (unsigned int[]) { 48000 } 3567 } 3568 }, 3569 QUIRK_COMPOSITE_END 3570 } 3571 } 3572 }, 3573 { 3574 /* 3575 * Sennheiser GSP670 3576 * Change order of interfaces loaded 3577 */ 3578 USB_DEVICE(0x1395, 0x0300), 3579 .bInterfaceClass = USB_CLASS_PER_INTERFACE, 3580 QUIRK_DRIVER_INFO { 3581 QUIRK_DATA_COMPOSITE { 3582 // Communication 3583 { QUIRK_DATA_STANDARD_AUDIO(3) }, 3584 // Recording 3585 { QUIRK_DATA_STANDARD_AUDIO(4) }, 3586 // Main 3587 { QUIRK_DATA_STANDARD_AUDIO(1) }, 3588 QUIRK_COMPOSITE_END 3589 } 3590 } 3591 }, 3592 { 3593 /* 3594 * Fiero SC-01 (firmware v1.0.0 @ 48 kHz) 3595 */ 3596 USB_DEVICE(0x2b53, 0x0023), 3597 QUIRK_DRIVER_INFO { 3598 .vendor_name = "Fiero", 3599 .product_name = "SC-01", 3600 QUIRK_DATA_COMPOSITE { 3601 { QUIRK_DATA_STANDARD_AUDIO(0) }, 3602 /* Playback */ 3603 { 3604 QUIRK_DATA_AUDIOFORMAT(1) { 3605 .formats = SNDRV_PCM_FMTBIT_S32_LE, 3606 .channels = 2, 3607 .fmt_bits = 24, 3608 .iface = 1, 3609 .altsetting = 1, 3610 .altset_idx = 1, 3611 .endpoint = 0x01, 3612 .ep_attr = USB_ENDPOINT_XFER_ISOC | 3613 USB_ENDPOINT_SYNC_ASYNC, 3614 .rates = SNDRV_PCM_RATE_48000, 3615 .rate_min = 48000, 3616 .rate_max = 48000, 3617 .nr_rates = 1, 3618 .rate_table = (unsigned int[]) { 48000 }, 3619 .clock = 0x29 3620 } 3621 }, 3622 /* Capture */ 3623 { 3624 QUIRK_DATA_AUDIOFORMAT(2) { 3625 .formats = SNDRV_PCM_FMTBIT_S32_LE, 3626 .channels = 2, 3627 .fmt_bits = 24, 3628 .iface = 2, 3629 .altsetting = 1, 3630 .altset_idx = 1, 3631 .endpoint = 0x82, 3632 .ep_attr = USB_ENDPOINT_XFER_ISOC | 3633 USB_ENDPOINT_SYNC_ASYNC | 3634 USB_ENDPOINT_USAGE_IMPLICIT_FB, 3635 .rates = SNDRV_PCM_RATE_48000, 3636 .rate_min = 48000, 3637 .rate_max = 48000, 3638 .nr_rates = 1, 3639 .rate_table = (unsigned int[]) { 48000 }, 3640 .clock = 0x29 3641 } 3642 }, 3643 QUIRK_COMPOSITE_END 3644 } 3645 } 3646 }, 3647 { 3648 /* 3649 * Fiero SC-01 (firmware v1.0.0 @ 96 kHz) 3650 */ 3651 USB_DEVICE(0x2b53, 0x0024), 3652 QUIRK_DRIVER_INFO { 3653 .vendor_name = "Fiero", 3654 .product_name = "SC-01", 3655 QUIRK_DATA_COMPOSITE { 3656 { QUIRK_DATA_STANDARD_AUDIO(0) }, 3657 /* Playback */ 3658 { 3659 QUIRK_DATA_AUDIOFORMAT(1) { 3660 .formats = SNDRV_PCM_FMTBIT_S32_LE, 3661 .channels = 2, 3662 .fmt_bits = 24, 3663 .iface = 1, 3664 .altsetting = 1, 3665 .altset_idx = 1, 3666 .endpoint = 0x01, 3667 .ep_attr = USB_ENDPOINT_XFER_ISOC | 3668 USB_ENDPOINT_SYNC_ASYNC, 3669 .rates = SNDRV_PCM_RATE_96000, 3670 .rate_min = 96000, 3671 .rate_max = 96000, 3672 .nr_rates = 1, 3673 .rate_table = (unsigned int[]) { 96000 }, 3674 .clock = 0x29 3675 } 3676 }, 3677 /* Capture */ 3678 { 3679 QUIRK_DATA_AUDIOFORMAT(2) { 3680 .formats = SNDRV_PCM_FMTBIT_S32_LE, 3681 .channels = 2, 3682 .fmt_bits = 24, 3683 .iface = 2, 3684 .altsetting = 1, 3685 .altset_idx = 1, 3686 .endpoint = 0x82, 3687 .ep_attr = USB_ENDPOINT_XFER_ISOC | 3688 USB_ENDPOINT_SYNC_ASYNC | 3689 USB_ENDPOINT_USAGE_IMPLICIT_FB, 3690 .rates = SNDRV_PCM_RATE_96000, 3691 .rate_min = 96000, 3692 .rate_max = 96000, 3693 .nr_rates = 1, 3694 .rate_table = (unsigned int[]) { 96000 }, 3695 .clock = 0x29 3696 } 3697 }, 3698 QUIRK_COMPOSITE_END 3699 } 3700 } 3701 }, 3702 { 3703 /* 3704 * Fiero SC-01 (firmware v1.1.0) 3705 */ 3706 USB_DEVICE(0x2b53, 0x0031), 3707 QUIRK_DRIVER_INFO { 3708 .vendor_name = "Fiero", 3709 .product_name = "SC-01", 3710 QUIRK_DATA_COMPOSITE { 3711 { QUIRK_DATA_STANDARD_AUDIO(0) }, 3712 /* Playback */ 3713 { 3714 QUIRK_DATA_AUDIOFORMAT(1) { 3715 .formats = SNDRV_PCM_FMTBIT_S32_LE, 3716 .channels = 2, 3717 .fmt_bits = 24, 3718 .iface = 1, 3719 .altsetting = 1, 3720 .altset_idx = 1, 3721 .endpoint = 0x01, 3722 .ep_attr = USB_ENDPOINT_XFER_ISOC | 3723 USB_ENDPOINT_SYNC_ASYNC, 3724 .rates = SNDRV_PCM_RATE_48000 | 3725 SNDRV_PCM_RATE_96000, 3726 .rate_min = 48000, 3727 .rate_max = 96000, 3728 .nr_rates = 2, 3729 .rate_table = (unsigned int[]) { 48000, 96000 }, 3730 .clock = 0x29 3731 } 3732 }, 3733 /* Capture */ 3734 { 3735 QUIRK_DATA_AUDIOFORMAT(2) { 3736 .formats = SNDRV_PCM_FMTBIT_S32_LE, 3737 .channels = 2, 3738 .fmt_bits = 24, 3739 .iface = 2, 3740 .altsetting = 1, 3741 .altset_idx = 1, 3742 .endpoint = 0x82, 3743 .ep_attr = USB_ENDPOINT_XFER_ISOC | 3744 USB_ENDPOINT_SYNC_ASYNC | 3745 USB_ENDPOINT_USAGE_IMPLICIT_FB, 3746 .rates = SNDRV_PCM_RATE_48000 | 3747 SNDRV_PCM_RATE_96000, 3748 .rate_min = 48000, 3749 .rate_max = 96000, 3750 .nr_rates = 2, 3751 .rate_table = (unsigned int[]) { 48000, 96000 }, 3752 .clock = 0x29 3753 } 3754 }, 3755 QUIRK_COMPOSITE_END 3756 } 3757 } 3758 }, 3759 { 3760 /* Advanced modes of the Mythware XA001AU. 3761 * For the standard mode, Mythware XA001AU has ID ffad:a001 3762 */ 3763 USB_DEVICE_VENDOR_SPEC(0xffad, 0xa001), 3764 QUIRK_DRIVER_INFO { 3765 .vendor_name = "Mythware", 3766 .product_name = "XA001AU", 3767 QUIRK_DATA_COMPOSITE { 3768 { QUIRK_DATA_IGNORE(0) }, 3769 { QUIRK_DATA_STANDARD_AUDIO(1) }, 3770 { QUIRK_DATA_STANDARD_AUDIO(2) }, 3771 QUIRK_COMPOSITE_END 3772 } 3773 } 3774 }, 3775 #define QUIRK_RME_DIGIFACE(pid) \ 3776 { \ 3777 /* Only claim interface 0 */ \ 3778 .match_flags = USB_DEVICE_ID_MATCH_VENDOR | \ 3779 USB_DEVICE_ID_MATCH_PRODUCT | \ 3780 USB_DEVICE_ID_MATCH_INT_CLASS | \ 3781 USB_DEVICE_ID_MATCH_INT_NUMBER, \ 3782 .idVendor = 0x2a39, \ 3783 .idProduct = pid, \ 3784 .bInterfaceClass = USB_CLASS_VENDOR_SPEC, \ 3785 .bInterfaceNumber = 0, \ 3786 QUIRK_DRIVER_INFO { \ 3787 QUIRK_DATA_COMPOSITE { \ 3788 /* 3789 * Three modes depending on sample rate band, 3790 * with different channel counts for in/out 3791 */ \ 3792 { QUIRK_DATA_STANDARD_MIXER(0) }, \ 3793 { \ 3794 QUIRK_DATA_AUDIOFORMAT(0) { \ 3795 .formats = SNDRV_PCM_FMTBIT_S32_LE, \ 3796 .channels = 34, /* outputs */ \ 3797 .fmt_bits = 24, \ 3798 .iface = 0, \ 3799 .altsetting = 1, \ 3800 .altset_idx = 1, \ 3801 .endpoint = 0x02, \ 3802 .ep_idx = 1, \ 3803 .ep_attr = USB_ENDPOINT_XFER_ISOC | \ 3804 USB_ENDPOINT_SYNC_ASYNC, \ 3805 .rates = SNDRV_PCM_RATE_32000 | \ 3806 SNDRV_PCM_RATE_44100 | \ 3807 SNDRV_PCM_RATE_48000, \ 3808 .rate_min = 32000, \ 3809 .rate_max = 48000, \ 3810 .nr_rates = 3, \ 3811 .rate_table = (unsigned int[]) { \ 3812 32000, 44100, 48000, \ 3813 }, \ 3814 .sync_ep = 0x81, \ 3815 .sync_iface = 0, \ 3816 .sync_altsetting = 1, \ 3817 .sync_ep_idx = 0, \ 3818 .implicit_fb = 1, \ 3819 }, \ 3820 }, \ 3821 { \ 3822 QUIRK_DATA_AUDIOFORMAT(0) { \ 3823 .formats = SNDRV_PCM_FMTBIT_S32_LE, \ 3824 .channels = 18, /* outputs */ \ 3825 .fmt_bits = 24, \ 3826 .iface = 0, \ 3827 .altsetting = 1, \ 3828 .altset_idx = 1, \ 3829 .endpoint = 0x02, \ 3830 .ep_idx = 1, \ 3831 .ep_attr = USB_ENDPOINT_XFER_ISOC | \ 3832 USB_ENDPOINT_SYNC_ASYNC, \ 3833 .rates = SNDRV_PCM_RATE_64000 | \ 3834 SNDRV_PCM_RATE_88200 | \ 3835 SNDRV_PCM_RATE_96000, \ 3836 .rate_min = 64000, \ 3837 .rate_max = 96000, \ 3838 .nr_rates = 3, \ 3839 .rate_table = (unsigned int[]) { \ 3840 64000, 88200, 96000, \ 3841 }, \ 3842 .sync_ep = 0x81, \ 3843 .sync_iface = 0, \ 3844 .sync_altsetting = 1, \ 3845 .sync_ep_idx = 0, \ 3846 .implicit_fb = 1, \ 3847 }, \ 3848 }, \ 3849 { \ 3850 QUIRK_DATA_AUDIOFORMAT(0) { \ 3851 .formats = SNDRV_PCM_FMTBIT_S32_LE, \ 3852 .channels = 10, /* outputs */ \ 3853 .fmt_bits = 24, \ 3854 .iface = 0, \ 3855 .altsetting = 1, \ 3856 .altset_idx = 1, \ 3857 .endpoint = 0x02, \ 3858 .ep_idx = 1, \ 3859 .ep_attr = USB_ENDPOINT_XFER_ISOC | \ 3860 USB_ENDPOINT_SYNC_ASYNC, \ 3861 .rates = SNDRV_PCM_RATE_KNOT | \ 3862 SNDRV_PCM_RATE_176400 | \ 3863 SNDRV_PCM_RATE_192000, \ 3864 .rate_min = 128000, \ 3865 .rate_max = 192000, \ 3866 .nr_rates = 3, \ 3867 .rate_table = (unsigned int[]) { \ 3868 128000, 176400, 192000, \ 3869 }, \ 3870 .sync_ep = 0x81, \ 3871 .sync_iface = 0, \ 3872 .sync_altsetting = 1, \ 3873 .sync_ep_idx = 0, \ 3874 .implicit_fb = 1, \ 3875 }, \ 3876 }, \ 3877 { \ 3878 QUIRK_DATA_AUDIOFORMAT(0) { \ 3879 .formats = SNDRV_PCM_FMTBIT_S32_LE, \ 3880 .channels = 32, /* inputs */ \ 3881 .fmt_bits = 24, \ 3882 .iface = 0, \ 3883 .altsetting = 1, \ 3884 .altset_idx = 1, \ 3885 .endpoint = 0x81, \ 3886 .ep_attr = USB_ENDPOINT_XFER_ISOC | \ 3887 USB_ENDPOINT_SYNC_ASYNC, \ 3888 .rates = SNDRV_PCM_RATE_32000 | \ 3889 SNDRV_PCM_RATE_44100 | \ 3890 SNDRV_PCM_RATE_48000, \ 3891 .rate_min = 32000, \ 3892 .rate_max = 48000, \ 3893 .nr_rates = 3, \ 3894 .rate_table = (unsigned int[]) { \ 3895 32000, 44100, 48000, \ 3896 } \ 3897 } \ 3898 }, \ 3899 { \ 3900 QUIRK_DATA_AUDIOFORMAT(0) { \ 3901 .formats = SNDRV_PCM_FMTBIT_S32_LE, \ 3902 .channels = 16, /* inputs */ \ 3903 .fmt_bits = 24, \ 3904 .iface = 0, \ 3905 .altsetting = 1, \ 3906 .altset_idx = 1, \ 3907 .endpoint = 0x81, \ 3908 .ep_attr = USB_ENDPOINT_XFER_ISOC | \ 3909 USB_ENDPOINT_SYNC_ASYNC, \ 3910 .rates = SNDRV_PCM_RATE_64000 | \ 3911 SNDRV_PCM_RATE_88200 | \ 3912 SNDRV_PCM_RATE_96000, \ 3913 .rate_min = 64000, \ 3914 .rate_max = 96000, \ 3915 .nr_rates = 3, \ 3916 .rate_table = (unsigned int[]) { \ 3917 64000, 88200, 96000, \ 3918 } \ 3919 } \ 3920 }, \ 3921 { \ 3922 QUIRK_DATA_AUDIOFORMAT(0) { \ 3923 .formats = SNDRV_PCM_FMTBIT_S32_LE, \ 3924 .channels = 8, /* inputs */ \ 3925 .fmt_bits = 24, \ 3926 .iface = 0, \ 3927 .altsetting = 1, \ 3928 .altset_idx = 1, \ 3929 .endpoint = 0x81, \ 3930 .ep_attr = USB_ENDPOINT_XFER_ISOC | \ 3931 USB_ENDPOINT_SYNC_ASYNC, \ 3932 .rates = SNDRV_PCM_RATE_KNOT | \ 3933 SNDRV_PCM_RATE_176400 | \ 3934 SNDRV_PCM_RATE_192000, \ 3935 .rate_min = 128000, \ 3936 .rate_max = 192000, \ 3937 .nr_rates = 3, \ 3938 .rate_table = (unsigned int[]) { \ 3939 128000, 176400, 192000, \ 3940 } \ 3941 } \ 3942 }, \ 3943 QUIRK_COMPOSITE_END \ 3944 } \ 3945 } \ 3946 } 3947 3948 QUIRK_RME_DIGIFACE(0x3f8c), 3949 QUIRK_RME_DIGIFACE(0x3fa0), 3950 3951 #define QUIRK_AF16RIG(channel_count_, alt_setting_, \ 3952 low_rate_, high_rate_, pack_size_, \ 3953 clock_, interface_, endpoint_) \ 3954 { \ 3955 QUIRK_DATA_AUDIOFORMAT(interface_) { \ 3956 .formats = SNDRV_PCM_FMTBIT_S32_LE, \ 3957 .channels = channel_count_, \ 3958 .fmt_type = UAC_FORMAT_TYPE_I_PCM, \ 3959 .fmt_bits = 24, \ 3960 .fmt_sz = 4, \ 3961 .iface = interface_, \ 3962 .altsetting = alt_setting_, \ 3963 .altset_idx = alt_setting_, \ 3964 .endpoint = endpoint_, \ 3965 .ep_attr = USB_ENDPOINT_XFER_ISOC | \ 3966 USB_ENDPOINT_SYNC_ASYNC, \ 3967 .datainterval = 1, \ 3968 .protocol = UAC_VERSION_2, \ 3969 .maxpacksize = pack_size_, \ 3970 .rates = SNDRV_PCM_RATE_##low_rate_ | \ 3971 SNDRV_PCM_RATE_##high_rate_, \ 3972 .rate_min = low_rate_, \ 3973 .rate_max = high_rate_, \ 3974 .nr_rates = 2, \ 3975 .rate_table = (unsigned int[]) { \ 3976 low_rate_, high_rate_ }, \ 3977 .clock = clock_, \ 3978 } \ 3979 } 3980 3981 #define QUIRK_AF16RIG_CLOCK(clock) \ 3982 QUIRK_AF16RIG(34, 1, 44100, 48000, 0x3b8, clock, 1, 0x01), \ 3983 QUIRK_AF16RIG(34, 1, 44100, 48000, 0x3b8, clock, 2, 0x81), \ 3984 QUIRK_AF16RIG(18, 2, 88200, 96000, 0x3a8, clock, 1, 0x01), \ 3985 QUIRK_AF16RIG(18, 2, 88200, 96000, 0x3a8, clock, 2, 0x81), \ 3986 QUIRK_AF16RIG(10, 3, 176400, 192000, 0x3e8, clock, 1, 0x01), \ 3987 QUIRK_AF16RIG(10, 3, 176400, 192000, 0x3e8, clock, 2, 0x81) 3988 3989 /* Arturia AudioFuse 16Rig Audio */ 3990 /* AF16Rig MIDI has USB PID 0xaf21 and appears to work OK without quirks */ 3991 { 3992 USB_DEVICE(0x1c75, 0xaf20), 3993 QUIRK_DRIVER_INFO { 3994 .vendor_name = "Arturia", 3995 .product_name = "AF16Rig", 3996 QUIRK_DATA_COMPOSITE { 3997 { QUIRK_DATA_STANDARD_MIXER(0) }, 3998 QUIRK_AF16RIG_CLOCK(41), /* Internal clock */ 3999 #if 0 4000 /* These are disabled because I don't have the required hardware to test 4001 * them. I suspect that the ADAT clock might not follow 176400 or 192000 4002 * because the AF16Rig won't accept ADAT audio data at those rates. 4003 */ 4004 QUIRK_AF16RIG_CLOCK(43), /* ADAT clock */ 4005 QUIRK_AF16RIG_CLOCK(44), /* BNC word clock */ 4006 #endif 4007 { QUIRK_DATA_IGNORE(3) }, /* Firmware update */ 4008 QUIRK_COMPOSITE_END 4009 } 4010 } 4011 }, 4012 4013 #undef QUIRK_AF16RIG_CLOCK 4014 #undef QUIRK_AF16RIG 4015 4016 #undef USB_DEVICE_VENDOR_SPEC 4017 #undef USB_AUDIO_DEVICE 4018