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 * skip 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 /* Lenovo ThinkStation P620 Rear Line-in, Line-out and Microphone */ 2798 { 2799 USB_DEVICE(0x17aa, 0x1046), 2800 QUIRK_DEVICE_PROFILE("Lenovo", "ThinkStation P620 Rear", 2801 "Lenovo-ThinkStation-P620-Rear"), 2802 }, 2803 /* Lenovo ThinkStation P620 Internal Speaker + Front Headset */ 2804 { 2805 USB_DEVICE(0x17aa, 0x104d), 2806 QUIRK_DEVICE_PROFILE("Lenovo", "ThinkStation P620 Main", 2807 "Lenovo-ThinkStation-P620-Main"), 2808 }, 2809 2810 /* Native Instruments MK2 series */ 2811 { 2812 /* Komplete Audio 6 */ 2813 .match_flags = USB_DEVICE_ID_MATCH_DEVICE, 2814 .idVendor = 0x17cc, 2815 .idProduct = 0x1000, 2816 }, 2817 { 2818 /* Traktor Audio 6 */ 2819 .match_flags = USB_DEVICE_ID_MATCH_DEVICE, 2820 .idVendor = 0x17cc, 2821 .idProduct = 0x1010, 2822 }, 2823 { 2824 /* Traktor Audio 10 */ 2825 .match_flags = USB_DEVICE_ID_MATCH_DEVICE, 2826 .idVendor = 0x17cc, 2827 .idProduct = 0x1020, 2828 }, 2829 2830 /* QinHeng devices */ 2831 { 2832 USB_DEVICE(0x1a86, 0x752d), 2833 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) { 2834 .vendor_name = "QinHeng", 2835 .product_name = "CH345", 2836 .ifnum = 1, 2837 .type = QUIRK_MIDI_CH345 2838 } 2839 }, 2840 2841 /* KeithMcMillen Stringport */ 2842 { 2843 USB_DEVICE(0x1f38, 0x0001), 2844 .bInterfaceClass = USB_CLASS_AUDIO, 2845 }, 2846 2847 /* Miditech devices */ 2848 { 2849 USB_DEVICE(0x4752, 0x0011), 2850 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { 2851 .vendor_name = "Miditech", 2852 .product_name = "Midistart-2", 2853 .ifnum = 0, 2854 .type = QUIRK_MIDI_CME 2855 } 2856 }, 2857 2858 /* Central Music devices */ 2859 { 2860 /* this ID used by both Miditech MidiStudio-2 and CME UF-x */ 2861 USB_DEVICE(0x7104, 0x2202), 2862 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { 2863 .ifnum = 0, 2864 .type = QUIRK_MIDI_CME 2865 } 2866 }, 2867 2868 /* 2869 * Auvitek au0828 devices with audio interface. 2870 * This should be kept in sync with drivers/media/usb/au0828/au0828-cards.c 2871 * Please notice that some drivers are DVB only, and don't need to be 2872 * here. That's the case, for example, of DVICO_FUSIONHDTV7. 2873 */ 2874 2875 #define AU0828_DEVICE(vid, pid, vname, pname) { \ 2876 .idVendor = vid, \ 2877 .idProduct = pid, \ 2878 .match_flags = USB_DEVICE_ID_MATCH_DEVICE | \ 2879 USB_DEVICE_ID_MATCH_INT_CLASS | \ 2880 USB_DEVICE_ID_MATCH_INT_SUBCLASS, \ 2881 .bInterfaceClass = USB_CLASS_AUDIO, \ 2882 .bInterfaceSubClass = USB_SUBCLASS_AUDIOCONTROL, \ 2883 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) { \ 2884 .vendor_name = vname, \ 2885 .product_name = pname, \ 2886 .ifnum = QUIRK_ANY_INTERFACE, \ 2887 .type = QUIRK_AUDIO_ALIGN_TRANSFER, \ 2888 .shares_media_device = 1, \ 2889 } \ 2890 } 2891 2892 AU0828_DEVICE(0x2040, 0x7200, "Hauppauge", "HVR-950Q"), 2893 AU0828_DEVICE(0x2040, 0x7240, "Hauppauge", "HVR-850"), 2894 AU0828_DEVICE(0x2040, 0x7210, "Hauppauge", "HVR-950Q"), 2895 AU0828_DEVICE(0x2040, 0x7217, "Hauppauge", "HVR-950Q"), 2896 AU0828_DEVICE(0x2040, 0x721b, "Hauppauge", "HVR-950Q"), 2897 AU0828_DEVICE(0x2040, 0x721e, "Hauppauge", "HVR-950Q"), 2898 AU0828_DEVICE(0x2040, 0x721f, "Hauppauge", "HVR-950Q"), 2899 AU0828_DEVICE(0x2040, 0x7280, "Hauppauge", "HVR-950Q"), 2900 AU0828_DEVICE(0x0fd9, 0x0008, "Hauppauge", "HVR-950Q"), 2901 AU0828_DEVICE(0x2040, 0x7201, "Hauppauge", "HVR-950Q-MXL"), 2902 AU0828_DEVICE(0x2040, 0x7211, "Hauppauge", "HVR-950Q-MXL"), 2903 AU0828_DEVICE(0x2040, 0x7281, "Hauppauge", "HVR-950Q-MXL"), 2904 AU0828_DEVICE(0x05e1, 0x0480, "Hauppauge", "Woodbury"), 2905 AU0828_DEVICE(0x2040, 0x8200, "Hauppauge", "Woodbury"), 2906 AU0828_DEVICE(0x2040, 0x7260, "Hauppauge", "HVR-950Q"), 2907 AU0828_DEVICE(0x2040, 0x7213, "Hauppauge", "HVR-950Q"), 2908 AU0828_DEVICE(0x2040, 0x7270, "Hauppauge", "HVR-950Q"), 2909 2910 /* Syntek STK1160 */ 2911 { 2912 .match_flags = USB_DEVICE_ID_MATCH_DEVICE | 2913 USB_DEVICE_ID_MATCH_INT_CLASS | 2914 USB_DEVICE_ID_MATCH_INT_SUBCLASS, 2915 .idVendor = 0x05e1, 2916 .idProduct = 0x0408, 2917 .bInterfaceClass = USB_CLASS_AUDIO, 2918 .bInterfaceSubClass = USB_SUBCLASS_AUDIOCONTROL, 2919 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) { 2920 .vendor_name = "Syntek", 2921 .product_name = "STK1160", 2922 .ifnum = QUIRK_ANY_INTERFACE, 2923 .type = QUIRK_AUDIO_ALIGN_TRANSFER 2924 } 2925 }, 2926 2927 /* Digidesign Mbox */ 2928 { 2929 /* Thanks to Clemens Ladisch <clemens@ladisch.de> */ 2930 USB_DEVICE(0x0dba, 0x1000), 2931 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) { 2932 .vendor_name = "Digidesign", 2933 .product_name = "MBox", 2934 .ifnum = QUIRK_ANY_INTERFACE, 2935 .type = QUIRK_COMPOSITE, 2936 .data = (const struct snd_usb_audio_quirk[]){ 2937 { 2938 .ifnum = 0, 2939 .type = QUIRK_AUDIO_STANDARD_MIXER, 2940 }, 2941 { 2942 .ifnum = 1, 2943 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 2944 .data = &(const struct audioformat) { 2945 .formats = SNDRV_PCM_FMTBIT_S24_3BE, 2946 .channels = 2, 2947 .iface = 1, 2948 .altsetting = 1, 2949 .altset_idx = 1, 2950 .attributes = 0x4, 2951 .endpoint = 0x02, 2952 .ep_attr = USB_ENDPOINT_XFER_ISOC | 2953 USB_ENDPOINT_SYNC_SYNC, 2954 .maxpacksize = 0x130, 2955 .rates = SNDRV_PCM_RATE_48000, 2956 .rate_min = 48000, 2957 .rate_max = 48000, 2958 .nr_rates = 1, 2959 .rate_table = (unsigned int[]) { 2960 48000 2961 } 2962 } 2963 }, 2964 { 2965 .ifnum = 1, 2966 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 2967 .data = &(const struct audioformat) { 2968 .formats = SNDRV_PCM_FMTBIT_S24_3BE, 2969 .channels = 2, 2970 .iface = 1, 2971 .altsetting = 1, 2972 .altset_idx = 1, 2973 .attributes = 0x4, 2974 .endpoint = 0x81, 2975 .ep_attr = USB_ENDPOINT_XFER_ISOC | 2976 USB_ENDPOINT_SYNC_ASYNC, 2977 .maxpacksize = 0x130, 2978 .rates = SNDRV_PCM_RATE_48000, 2979 .rate_min = 48000, 2980 .rate_max = 48000, 2981 .nr_rates = 1, 2982 .rate_table = (unsigned int[]) { 2983 48000 2984 } 2985 } 2986 }, 2987 { 2988 .ifnum = -1 2989 } 2990 } 2991 } 2992 }, 2993 2994 /* DIGIDESIGN MBOX 2 */ 2995 { 2996 USB_DEVICE(0x0dba, 0x3000), 2997 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) { 2998 .vendor_name = "Digidesign", 2999 .product_name = "Mbox 2", 3000 .ifnum = QUIRK_ANY_INTERFACE, 3001 .type = QUIRK_COMPOSITE, 3002 .data = (const struct snd_usb_audio_quirk[]) { 3003 { 3004 .ifnum = 0, 3005 .type = QUIRK_IGNORE_INTERFACE 3006 }, 3007 { 3008 .ifnum = 1, 3009 .type = QUIRK_IGNORE_INTERFACE 3010 }, 3011 { 3012 .ifnum = 2, 3013 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 3014 .data = &(const struct audioformat) { 3015 .formats = SNDRV_PCM_FMTBIT_S24_3BE, 3016 .channels = 2, 3017 .iface = 2, 3018 .altsetting = 2, 3019 .altset_idx = 1, 3020 .attributes = 0x00, 3021 .endpoint = 0x03, 3022 .ep_attr = USB_ENDPOINT_SYNC_ASYNC, 3023 .rates = SNDRV_PCM_RATE_48000, 3024 .rate_min = 48000, 3025 .rate_max = 48000, 3026 .nr_rates = 1, 3027 .rate_table = (unsigned int[]) { 3028 48000 3029 } 3030 } 3031 }, 3032 { 3033 .ifnum = 3, 3034 .type = QUIRK_IGNORE_INTERFACE 3035 }, 3036 { 3037 .ifnum = 4, 3038 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 3039 .data = &(const struct audioformat) { 3040 .formats = SNDRV_PCM_FMTBIT_S24_3BE, 3041 .channels = 2, 3042 .iface = 4, 3043 .altsetting = 2, 3044 .altset_idx = 1, 3045 .attributes = UAC_EP_CS_ATTR_SAMPLE_RATE, 3046 .endpoint = 0x85, 3047 .ep_attr = USB_ENDPOINT_SYNC_SYNC, 3048 .rates = SNDRV_PCM_RATE_48000, 3049 .rate_min = 48000, 3050 .rate_max = 48000, 3051 .nr_rates = 1, 3052 .rate_table = (unsigned int[]) { 3053 48000 3054 } 3055 } 3056 }, 3057 { 3058 .ifnum = 5, 3059 .type = QUIRK_IGNORE_INTERFACE 3060 }, 3061 { 3062 .ifnum = 6, 3063 .type = QUIRK_MIDI_MIDIMAN, 3064 .data = &(const struct snd_usb_midi_endpoint_info) { 3065 .out_ep = 0x02, 3066 .out_cables = 0x0001, 3067 .in_ep = 0x81, 3068 .in_interval = 0x01, 3069 .in_cables = 0x0001 3070 } 3071 }, 3072 { 3073 .ifnum = -1 3074 } 3075 } 3076 } 3077 }, 3078 { 3079 /* Tascam US122 MKII - playback-only support */ 3080 .match_flags = USB_DEVICE_ID_MATCH_DEVICE, 3081 .idVendor = 0x0644, 3082 .idProduct = 0x8021, 3083 .bInterfaceClass = USB_CLASS_AUDIO, 3084 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) { 3085 .vendor_name = "TASCAM", 3086 .product_name = "US122 MKII", 3087 .ifnum = QUIRK_ANY_INTERFACE, 3088 .type = QUIRK_COMPOSITE, 3089 .data = (const struct snd_usb_audio_quirk[]) { 3090 { 3091 .ifnum = 0, 3092 .type = QUIRK_IGNORE_INTERFACE 3093 }, 3094 { 3095 .ifnum = 1, 3096 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 3097 .data = &(const struct audioformat) { 3098 .formats = SNDRV_PCM_FMTBIT_S24_3LE, 3099 .channels = 2, 3100 .iface = 1, 3101 .altsetting = 1, 3102 .altset_idx = 1, 3103 .attributes = UAC_EP_CS_ATTR_SAMPLE_RATE, 3104 .endpoint = 0x02, 3105 .ep_attr = USB_ENDPOINT_XFER_ISOC, 3106 .rates = SNDRV_PCM_RATE_44100 | 3107 SNDRV_PCM_RATE_48000 | 3108 SNDRV_PCM_RATE_88200 | 3109 SNDRV_PCM_RATE_96000, 3110 .rate_min = 44100, 3111 .rate_max = 96000, 3112 .nr_rates = 4, 3113 .rate_table = (unsigned int[]) { 3114 44100, 48000, 88200, 96000 3115 } 3116 } 3117 }, 3118 { 3119 .ifnum = -1 3120 } 3121 } 3122 } 3123 }, 3124 3125 /* Microsoft XboxLive Headset/Xbox Communicator */ 3126 { 3127 USB_DEVICE(0x045e, 0x0283), 3128 .bInterfaceClass = USB_CLASS_PER_INTERFACE, 3129 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) { 3130 .vendor_name = "Microsoft", 3131 .product_name = "XboxLive Headset/Xbox Communicator", 3132 .ifnum = QUIRK_ANY_INTERFACE, 3133 .type = QUIRK_COMPOSITE, 3134 .data = &(const struct snd_usb_audio_quirk[]) { 3135 { 3136 /* playback */ 3137 .ifnum = 0, 3138 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 3139 .data = &(const struct audioformat) { 3140 .formats = SNDRV_PCM_FMTBIT_S16_LE, 3141 .channels = 1, 3142 .iface = 0, 3143 .altsetting = 0, 3144 .altset_idx = 0, 3145 .attributes = 0, 3146 .endpoint = 0x04, 3147 .ep_attr = 0x05, 3148 .rates = SNDRV_PCM_RATE_CONTINUOUS, 3149 .rate_min = 22050, 3150 .rate_max = 22050 3151 } 3152 }, 3153 { 3154 /* capture */ 3155 .ifnum = 1, 3156 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 3157 .data = &(const struct audioformat) { 3158 .formats = SNDRV_PCM_FMTBIT_S16_LE, 3159 .channels = 1, 3160 .iface = 1, 3161 .altsetting = 0, 3162 .altset_idx = 0, 3163 .attributes = 0, 3164 .endpoint = 0x85, 3165 .ep_attr = 0x05, 3166 .rates = SNDRV_PCM_RATE_CONTINUOUS, 3167 .rate_min = 16000, 3168 .rate_max = 16000 3169 } 3170 }, 3171 { 3172 .ifnum = -1 3173 } 3174 } 3175 } 3176 }, 3177 3178 /* Reloop Play */ 3179 { 3180 USB_DEVICE(0x200c, 0x100b), 3181 .bInterfaceClass = USB_CLASS_PER_INTERFACE, 3182 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) { 3183 .ifnum = QUIRK_ANY_INTERFACE, 3184 .type = QUIRK_COMPOSITE, 3185 .data = &(const struct snd_usb_audio_quirk[]) { 3186 { 3187 .ifnum = 0, 3188 .type = QUIRK_AUDIO_STANDARD_MIXER, 3189 }, 3190 { 3191 .ifnum = 1, 3192 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 3193 .data = &(const struct audioformat) { 3194 .formats = SNDRV_PCM_FMTBIT_S24_3LE, 3195 .channels = 4, 3196 .iface = 1, 3197 .altsetting = 1, 3198 .altset_idx = 1, 3199 .attributes = UAC_EP_CS_ATTR_SAMPLE_RATE, 3200 .endpoint = 0x01, 3201 .ep_attr = USB_ENDPOINT_SYNC_ADAPTIVE, 3202 .rates = SNDRV_PCM_RATE_44100 | 3203 SNDRV_PCM_RATE_48000, 3204 .rate_min = 44100, 3205 .rate_max = 48000, 3206 .nr_rates = 2, 3207 .rate_table = (unsigned int[]) { 3208 44100, 48000 3209 } 3210 } 3211 }, 3212 { 3213 .ifnum = -1 3214 } 3215 } 3216 } 3217 }, 3218 3219 { 3220 /* 3221 * ZOOM R16/24 in audio interface mode. 3222 * Playback requires an extra four byte LE length indicator 3223 * at the start of each isochronous packet. This quirk is 3224 * enabled in create_standard_audio_quirk(). 3225 */ 3226 USB_DEVICE(0x1686, 0x00dd), 3227 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { 3228 .ifnum = QUIRK_ANY_INTERFACE, 3229 .type = QUIRK_COMPOSITE, 3230 .data = (const struct snd_usb_audio_quirk[]) { 3231 { 3232 /* Playback */ 3233 .ifnum = 1, 3234 .type = QUIRK_AUDIO_STANDARD_INTERFACE, 3235 }, 3236 { 3237 /* Capture */ 3238 .ifnum = 2, 3239 .type = QUIRK_AUDIO_STANDARD_INTERFACE, 3240 }, 3241 { 3242 /* Midi */ 3243 .ifnum = 3, 3244 .type = QUIRK_MIDI_STANDARD_INTERFACE 3245 }, 3246 { 3247 .ifnum = -1 3248 }, 3249 } 3250 } 3251 }, 3252 3253 { 3254 /* 3255 * Some USB MIDI devices don't have an audio control interface, 3256 * so we have to grab MIDI streaming interfaces here. 3257 */ 3258 .match_flags = USB_DEVICE_ID_MATCH_INT_CLASS | 3259 USB_DEVICE_ID_MATCH_INT_SUBCLASS, 3260 .bInterfaceClass = USB_CLASS_AUDIO, 3261 .bInterfaceSubClass = USB_SUBCLASS_MIDISTREAMING, 3262 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { 3263 .ifnum = QUIRK_ANY_INTERFACE, 3264 .type = QUIRK_MIDI_STANDARD_INTERFACE 3265 } 3266 }, 3267 3268 /* 3269 * The original product_name is "USB Sound Device", however this name 3270 * is also used by the CM106 based cards, so make it unique. 3271 */ 3272 { 3273 USB_DEVICE(0x0d8c, 0x0102), 3274 QUIRK_RENAME_DEVICE(NULL, "ICUSBAUDIO7D") 3275 }, 3276 { 3277 USB_DEVICE(0x0d8c, 0x0103), 3278 QUIRK_RENAME_DEVICE(NULL, "Audio Advantage MicroII") 3279 }, 3280 3281 /* disabled due to regression for other devices; 3282 * see https://bugzilla.kernel.org/show_bug.cgi?id=199905 3283 */ 3284 #if 0 3285 { 3286 /* 3287 * Nura's first gen headphones use Cambridge Silicon Radio's vendor 3288 * ID, but it looks like the product ID actually is only for Nura. 3289 * The capture interface does not work at all (even on Windows), 3290 * and only the 48 kHz sample rate works for the playback interface. 3291 */ 3292 USB_DEVICE(0x0a12, 0x1243), 3293 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) { 3294 .ifnum = QUIRK_ANY_INTERFACE, 3295 .type = QUIRK_COMPOSITE, 3296 .data = (const struct snd_usb_audio_quirk[]) { 3297 { 3298 .ifnum = 0, 3299 .type = QUIRK_AUDIO_STANDARD_MIXER, 3300 }, 3301 /* Capture */ 3302 { 3303 .ifnum = 1, 3304 .type = QUIRK_IGNORE_INTERFACE, 3305 }, 3306 /* Playback */ 3307 { 3308 .ifnum = 2, 3309 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 3310 .data = &(const struct audioformat) { 3311 .formats = SNDRV_PCM_FMTBIT_S16_LE, 3312 .channels = 2, 3313 .iface = 2, 3314 .altsetting = 1, 3315 .altset_idx = 1, 3316 .attributes = UAC_EP_CS_ATTR_FILL_MAX | 3317 UAC_EP_CS_ATTR_SAMPLE_RATE, 3318 .endpoint = 0x03, 3319 .ep_attr = USB_ENDPOINT_XFER_ISOC, 3320 .rates = SNDRV_PCM_RATE_48000, 3321 .rate_min = 48000, 3322 .rate_max = 48000, 3323 .nr_rates = 1, 3324 .rate_table = (unsigned int[]) { 3325 48000 3326 } 3327 } 3328 }, 3329 { 3330 .ifnum = -1 3331 }, 3332 } 3333 } 3334 }, 3335 #endif /* disabled */ 3336 3337 { 3338 /* 3339 * Bower's & Wilkins PX headphones only support the 48 kHz sample rate 3340 * even though it advertises more. The capture interface doesn't work 3341 * even on windows. 3342 */ 3343 USB_DEVICE(0x19b5, 0x0021), 3344 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) { 3345 .ifnum = QUIRK_ANY_INTERFACE, 3346 .type = QUIRK_COMPOSITE, 3347 .data = (const struct snd_usb_audio_quirk[]) { 3348 { 3349 .ifnum = 0, 3350 .type = QUIRK_AUDIO_STANDARD_MIXER, 3351 }, 3352 /* Playback */ 3353 { 3354 .ifnum = 1, 3355 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 3356 .data = &(const struct audioformat) { 3357 .formats = SNDRV_PCM_FMTBIT_S16_LE, 3358 .channels = 2, 3359 .iface = 1, 3360 .altsetting = 1, 3361 .altset_idx = 1, 3362 .attributes = UAC_EP_CS_ATTR_FILL_MAX | 3363 UAC_EP_CS_ATTR_SAMPLE_RATE, 3364 .endpoint = 0x03, 3365 .ep_attr = USB_ENDPOINT_XFER_ISOC, 3366 .rates = SNDRV_PCM_RATE_48000, 3367 .rate_min = 48000, 3368 .rate_max = 48000, 3369 .nr_rates = 1, 3370 .rate_table = (unsigned int[]) { 3371 48000 3372 } 3373 } 3374 }, 3375 { 3376 .ifnum = -1 3377 }, 3378 } 3379 } 3380 }, 3381 /* Dell WD15 Dock */ 3382 { 3383 USB_DEVICE(0x0bda, 0x4014), 3384 QUIRK_DEVICE_PROFILE("Dell", "WD15 Dock", "Dell-WD15-Dock") 3385 }, 3386 /* Dell WD19 Dock */ 3387 { 3388 USB_DEVICE(0x0bda, 0x402e), 3389 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { 3390 .vendor_name = "Dell", 3391 .product_name = "WD19 Dock", 3392 .profile_name = "Dell-WD15-Dock", 3393 .ifnum = QUIRK_ANY_INTERFACE, 3394 .type = QUIRK_SETUP_FMT_AFTER_RESUME 3395 } 3396 }, 3397 /* MOTU Microbook II */ 3398 { 3399 USB_DEVICE_VENDOR_SPEC(0x07fd, 0x0004), 3400 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) { 3401 .vendor_name = "MOTU", 3402 .product_name = "MicroBookII", 3403 .ifnum = QUIRK_ANY_INTERFACE, 3404 .type = QUIRK_COMPOSITE, 3405 .data = (const struct snd_usb_audio_quirk[]) { 3406 { 3407 .ifnum = 0, 3408 .type = QUIRK_AUDIO_STANDARD_MIXER, 3409 }, 3410 { 3411 .ifnum = 0, 3412 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 3413 .data = &(const struct audioformat) { 3414 .formats = SNDRV_PCM_FMTBIT_S24_3BE, 3415 .channels = 6, 3416 .iface = 0, 3417 .altsetting = 1, 3418 .altset_idx = 1, 3419 .attributes = 0, 3420 .endpoint = 0x84, 3421 .rates = SNDRV_PCM_RATE_96000, 3422 .ep_attr = USB_ENDPOINT_XFER_ISOC | 3423 USB_ENDPOINT_SYNC_ASYNC, 3424 .rate_min = 96000, 3425 .rate_max = 96000, 3426 .nr_rates = 1, 3427 .maxpacksize = 0x00d8, 3428 .rate_table = (unsigned int[]) { 3429 96000 3430 } 3431 } 3432 }, 3433 { 3434 .ifnum = 0, 3435 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 3436 .data = &(const struct audioformat) { 3437 .formats = SNDRV_PCM_FMTBIT_S24_3BE, 3438 .channels = 8, 3439 .iface = 0, 3440 .altsetting = 1, 3441 .altset_idx = 1, 3442 .attributes = 0, 3443 .endpoint = 0x03, 3444 .rates = SNDRV_PCM_RATE_96000, 3445 .ep_attr = USB_ENDPOINT_XFER_ISOC | 3446 USB_ENDPOINT_SYNC_ASYNC, 3447 .rate_min = 96000, 3448 .rate_max = 96000, 3449 .nr_rates = 1, 3450 .maxpacksize = 0x0120, 3451 .rate_table = (unsigned int[]) { 3452 96000 3453 } 3454 } 3455 }, 3456 { 3457 .ifnum = -1 3458 } 3459 } 3460 } 3461 }, 3462 { 3463 /* 3464 * PIONEER DJ DDJ-SX3 3465 * PCM is 12 channels out, 10 channels in @ 44.1 fixed 3466 * interface 0, vendor class alt setting 1 for endpoints 5 and 0x86 3467 * The feedback for the output is the input. 3468 */ 3469 USB_DEVICE_VENDOR_SPEC(0x2b73, 0x0023), 3470 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) { 3471 .ifnum = QUIRK_ANY_INTERFACE, 3472 .type = QUIRK_COMPOSITE, 3473 .data = (const struct snd_usb_audio_quirk[]) { 3474 { 3475 .ifnum = 0, 3476 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 3477 .data = &(const struct audioformat) { 3478 .formats = SNDRV_PCM_FMTBIT_S32_LE, 3479 .channels = 12, 3480 .iface = 0, 3481 .altsetting = 1, 3482 .altset_idx = 1, 3483 .endpoint = 0x05, 3484 .ep_attr = USB_ENDPOINT_XFER_ISOC| 3485 USB_ENDPOINT_SYNC_ASYNC, 3486 .rates = SNDRV_PCM_RATE_44100, 3487 .rate_min = 44100, 3488 .rate_max = 44100, 3489 .nr_rates = 1, 3490 .rate_table = (unsigned int[]) { 44100 } 3491 } 3492 }, 3493 { 3494 .ifnum = 0, 3495 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 3496 .data = &(const struct audioformat) { 3497 .formats = SNDRV_PCM_FMTBIT_S32_LE, 3498 .channels = 10, 3499 .iface = 0, 3500 .altsetting = 1, 3501 .altset_idx = 1, 3502 .endpoint = 0x86, 3503 .ep_attr = USB_ENDPOINT_XFER_ISOC| 3504 USB_ENDPOINT_SYNC_ASYNC| 3505 USB_ENDPOINT_USAGE_IMPLICIT_FB, 3506 .rates = SNDRV_PCM_RATE_44100, 3507 .rate_min = 44100, 3508 .rate_max = 44100, 3509 .nr_rates = 1, 3510 .rate_table = (unsigned int[]) { 44100 } 3511 } 3512 }, 3513 { 3514 .ifnum = -1 3515 } 3516 } 3517 } 3518 }, 3519 { 3520 /* 3521 * Pioneer DJ DJM-250MK2 3522 * PCM is 8 channels out @ 48 fixed (endpoints 0x01). 3523 * The output from computer to the mixer is usable. 3524 * 3525 * The input (phono or line to computer) is not working. 3526 * It should be at endpoint 0x82 and probably also 8 channels, 3527 * but it seems that it works only with Pioneer proprietary software. 3528 * Even on officially supported OS, the Audacity was unable to record 3529 * and Mixxx to recognize the control vinyls. 3530 */ 3531 USB_DEVICE_VENDOR_SPEC(0x2b73, 0x0017), 3532 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) { 3533 .ifnum = QUIRK_ANY_INTERFACE, 3534 .type = QUIRK_COMPOSITE, 3535 .data = (const struct snd_usb_audio_quirk[]) { 3536 { 3537 .ifnum = 0, 3538 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 3539 .data = &(const struct audioformat) { 3540 .formats = SNDRV_PCM_FMTBIT_S24_3LE, 3541 .channels = 8, // outputs 3542 .iface = 0, 3543 .altsetting = 1, 3544 .altset_idx = 1, 3545 .endpoint = 0x01, 3546 .ep_attr = USB_ENDPOINT_XFER_ISOC| 3547 USB_ENDPOINT_SYNC_ASYNC, 3548 .rates = SNDRV_PCM_RATE_48000, 3549 .rate_min = 48000, 3550 .rate_max = 48000, 3551 .nr_rates = 1, 3552 .rate_table = (unsigned int[]) { 48000 } 3553 } 3554 }, 3555 { 3556 .ifnum = -1 3557 } 3558 } 3559 } 3560 }, 3561 { 3562 /* 3563 * PIONEER DJ DDJ-RB 3564 * PCM is 4 channels out, 2 dummy channels in @ 44.1 fixed 3565 * The feedback for the output is the dummy input. 3566 */ 3567 USB_DEVICE_VENDOR_SPEC(0x2b73, 0x000e), 3568 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) { 3569 .ifnum = QUIRK_ANY_INTERFACE, 3570 .type = QUIRK_COMPOSITE, 3571 .data = (const struct snd_usb_audio_quirk[]) { 3572 { 3573 .ifnum = 0, 3574 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 3575 .data = &(const struct audioformat) { 3576 .formats = SNDRV_PCM_FMTBIT_S24_3LE, 3577 .channels = 4, 3578 .iface = 0, 3579 .altsetting = 1, 3580 .altset_idx = 1, 3581 .endpoint = 0x01, 3582 .ep_attr = USB_ENDPOINT_XFER_ISOC| 3583 USB_ENDPOINT_SYNC_ASYNC, 3584 .rates = SNDRV_PCM_RATE_44100, 3585 .rate_min = 44100, 3586 .rate_max = 44100, 3587 .nr_rates = 1, 3588 .rate_table = (unsigned int[]) { 44100 } 3589 } 3590 }, 3591 { 3592 .ifnum = 0, 3593 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 3594 .data = &(const struct audioformat) { 3595 .formats = SNDRV_PCM_FMTBIT_S24_3LE, 3596 .channels = 2, 3597 .iface = 0, 3598 .altsetting = 1, 3599 .altset_idx = 1, 3600 .endpoint = 0x82, 3601 .ep_attr = USB_ENDPOINT_XFER_ISOC| 3602 USB_ENDPOINT_SYNC_ASYNC| 3603 USB_ENDPOINT_USAGE_IMPLICIT_FB, 3604 .rates = SNDRV_PCM_RATE_44100, 3605 .rate_min = 44100, 3606 .rate_max = 44100, 3607 .nr_rates = 1, 3608 .rate_table = (unsigned int[]) { 44100 } 3609 } 3610 }, 3611 { 3612 .ifnum = -1 3613 } 3614 } 3615 } 3616 }, 3617 3618 #define ALC1220_VB_DESKTOP(vend, prod) { \ 3619 USB_DEVICE(vend, prod), \ 3620 QUIRK_DEVICE_PROFILE("Realtek", "ALC1220-VB-DT", \ 3621 "Realtek-ALC1220-VB-Desktop") \ 3622 } 3623 ALC1220_VB_DESKTOP(0x0414, 0xa002), /* Gigabyte TRX40 Aorus Pro WiFi */ 3624 ALC1220_VB_DESKTOP(0x0db0, 0x0d64), /* MSI TRX40 Creator */ 3625 ALC1220_VB_DESKTOP(0x0db0, 0x543d), /* MSI TRX40 */ 3626 ALC1220_VB_DESKTOP(0x26ce, 0x0a01), /* Asrock TRX40 Creator */ 3627 #undef ALC1220_VB_DESKTOP 3628 3629 /* Two entries for Gigabyte TRX40 Aorus Master: 3630 * TRX40 Aorus Master has two USB-audio devices, one for the front headphone 3631 * with ESS SABRE9218 DAC chip, while another for the rest I/O (the rear 3632 * panel and the front mic) with Realtek ALC1220-VB. 3633 * Here we provide two distinct names for making UCM profiles easier. 3634 */ 3635 { 3636 USB_DEVICE(0x0414, 0xa000), 3637 QUIRK_DEVICE_PROFILE("Gigabyte", "Aorus Master Front Headphone", 3638 "Gigabyte-Aorus-Master-Front-Headphone") 3639 }, 3640 { 3641 USB_DEVICE(0x0414, 0xa001), 3642 QUIRK_DEVICE_PROFILE("Gigabyte", "Aorus Master Main Audio", 3643 "Gigabyte-Aorus-Master-Main-Audio") 3644 }, 3645 { 3646 /* 3647 * Pioneer DJ DJM-900NXS2 3648 * 10 channels playback & 12 channels capture @ 44.1/48/96kHz S24LE 3649 */ 3650 USB_DEVICE_VENDOR_SPEC(0x2b73, 0x000a), 3651 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) { 3652 .ifnum = QUIRK_ANY_INTERFACE, 3653 .type = QUIRK_COMPOSITE, 3654 .data = (const struct snd_usb_audio_quirk[]) { 3655 { 3656 .ifnum = 0, 3657 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 3658 .data = &(const struct audioformat) { 3659 .formats = SNDRV_PCM_FMTBIT_S24_3LE, 3660 .channels = 10, 3661 .iface = 0, 3662 .altsetting = 1, 3663 .altset_idx = 1, 3664 .endpoint = 0x01, 3665 .ep_attr = USB_ENDPOINT_XFER_ISOC| 3666 USB_ENDPOINT_SYNC_ASYNC, 3667 .rates = SNDRV_PCM_RATE_44100| 3668 SNDRV_PCM_RATE_48000| 3669 SNDRV_PCM_RATE_96000, 3670 .rate_min = 44100, 3671 .rate_max = 96000, 3672 .nr_rates = 3, 3673 .rate_table = (unsigned int[]) { 3674 44100, 48000, 96000 3675 } 3676 } 3677 }, 3678 { 3679 .ifnum = 0, 3680 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 3681 .data = &(const struct audioformat) { 3682 .formats = SNDRV_PCM_FMTBIT_S24_3LE, 3683 .channels = 12, 3684 .iface = 0, 3685 .altsetting = 1, 3686 .altset_idx = 1, 3687 .endpoint = 0x82, 3688 .ep_attr = USB_ENDPOINT_XFER_ISOC| 3689 USB_ENDPOINT_SYNC_ASYNC| 3690 USB_ENDPOINT_USAGE_IMPLICIT_FB, 3691 .rates = SNDRV_PCM_RATE_44100| 3692 SNDRV_PCM_RATE_48000| 3693 SNDRV_PCM_RATE_96000, 3694 .rate_min = 44100, 3695 .rate_max = 96000, 3696 .nr_rates = 3, 3697 .rate_table = (unsigned int[]) { 3698 44100, 48000, 96000 3699 } 3700 } 3701 }, 3702 { 3703 .ifnum = -1 3704 } 3705 } 3706 } 3707 }, 3708 3709 /* 3710 * MacroSilicon MS2109 based HDMI capture cards 3711 * 3712 * These claim 96kHz 1ch in the descriptors, but are actually 48kHz 2ch. 3713 * They also need QUIRK_AUDIO_ALIGN_TRANSFER, which makes one wonder if 3714 * they pretend to be 96kHz mono as a workaround for stereo being broken 3715 * by that... 3716 * 3717 * They also have swapped L-R channels, but that's for userspace to deal 3718 * with. 3719 */ 3720 { 3721 .match_flags = USB_DEVICE_ID_MATCH_DEVICE | 3722 USB_DEVICE_ID_MATCH_INT_CLASS | 3723 USB_DEVICE_ID_MATCH_INT_SUBCLASS, 3724 .idVendor = 0x534d, 3725 .idProduct = 0x2109, 3726 .bInterfaceClass = USB_CLASS_AUDIO, 3727 .bInterfaceSubClass = USB_SUBCLASS_AUDIOCONTROL, 3728 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) { 3729 .vendor_name = "MacroSilicon", 3730 .product_name = "MS2109", 3731 .ifnum = QUIRK_ANY_INTERFACE, 3732 .type = QUIRK_COMPOSITE, 3733 .data = &(const struct snd_usb_audio_quirk[]) { 3734 { 3735 .ifnum = 2, 3736 .type = QUIRK_AUDIO_ALIGN_TRANSFER, 3737 }, 3738 { 3739 .ifnum = 2, 3740 .type = QUIRK_AUDIO_STANDARD_MIXER, 3741 }, 3742 { 3743 .ifnum = 3, 3744 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 3745 .data = &(const struct audioformat) { 3746 .formats = SNDRV_PCM_FMTBIT_S16_LE, 3747 .channels = 2, 3748 .iface = 3, 3749 .altsetting = 1, 3750 .altset_idx = 1, 3751 .attributes = 0, 3752 .endpoint = 0x82, 3753 .ep_attr = USB_ENDPOINT_XFER_ISOC | 3754 USB_ENDPOINT_SYNC_ASYNC, 3755 .rates = SNDRV_PCM_RATE_CONTINUOUS, 3756 .rate_min = 48000, 3757 .rate_max = 48000, 3758 } 3759 }, 3760 { 3761 .ifnum = -1 3762 } 3763 } 3764 } 3765 }, 3766 3767 #undef USB_DEVICE_VENDOR_SPEC 3768