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