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