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