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