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