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 1678 /* UA101 and co are supported by another driver */ 1679 { 1680 USB_DEVICE(0x0582, 0x0044), /* UA-1000 high speed */ 1681 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { 1682 .ifnum = QUIRK_NODEV_INTERFACE 1683 }, 1684 }, 1685 { 1686 USB_DEVICE(0x0582, 0x007d), /* UA-101 high speed */ 1687 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { 1688 .ifnum = QUIRK_NODEV_INTERFACE 1689 }, 1690 }, 1691 { 1692 USB_DEVICE(0x0582, 0x008d), /* UA-101 full speed */ 1693 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { 1694 .ifnum = QUIRK_NODEV_INTERFACE 1695 }, 1696 }, 1697 1698 /* this catches most recent vendor-specific Roland devices */ 1699 { 1700 .match_flags = USB_DEVICE_ID_MATCH_VENDOR | 1701 USB_DEVICE_ID_MATCH_INT_CLASS, 1702 .idVendor = 0x0582, 1703 .bInterfaceClass = USB_CLASS_VENDOR_SPEC, 1704 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) { 1705 .ifnum = QUIRK_ANY_INTERFACE, 1706 .type = QUIRK_AUTODETECT 1707 } 1708 }, 1709 1710 /* Guillemot devices */ 1711 { 1712 /* 1713 * This is for the "Windows Edition" where the external MIDI ports are 1714 * the only MIDI ports; the control data is reported through HID 1715 * interfaces. The "Macintosh Edition" has ID 0xd002 and uses standard 1716 * compliant USB MIDI ports for external MIDI and controls. 1717 */ 1718 USB_DEVICE_VENDOR_SPEC(0x06f8, 0xb000), 1719 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { 1720 .vendor_name = "Hercules", 1721 .product_name = "DJ Console (WE)", 1722 .ifnum = 4, 1723 .type = QUIRK_MIDI_FIXED_ENDPOINT, 1724 .data = & (const struct snd_usb_midi_endpoint_info) { 1725 .out_cables = 0x0001, 1726 .in_cables = 0x0001 1727 } 1728 } 1729 }, 1730 1731 /* Midiman/M-Audio devices */ 1732 { 1733 USB_DEVICE_VENDOR_SPEC(0x0763, 0x1002), 1734 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { 1735 .vendor_name = "M-Audio", 1736 .product_name = "MidiSport 2x2", 1737 .ifnum = QUIRK_ANY_INTERFACE, 1738 .type = QUIRK_MIDI_MIDIMAN, 1739 .data = & (const struct snd_usb_midi_endpoint_info) { 1740 .out_cables = 0x0003, 1741 .in_cables = 0x0003 1742 } 1743 } 1744 }, 1745 { 1746 USB_DEVICE_VENDOR_SPEC(0x0763, 0x1011), 1747 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { 1748 .vendor_name = "M-Audio", 1749 .product_name = "MidiSport 1x1", 1750 .ifnum = QUIRK_ANY_INTERFACE, 1751 .type = QUIRK_MIDI_MIDIMAN, 1752 .data = & (const struct snd_usb_midi_endpoint_info) { 1753 .out_cables = 0x0001, 1754 .in_cables = 0x0001 1755 } 1756 } 1757 }, 1758 { 1759 USB_DEVICE_VENDOR_SPEC(0x0763, 0x1015), 1760 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { 1761 .vendor_name = "M-Audio", 1762 .product_name = "Keystation", 1763 .ifnum = QUIRK_ANY_INTERFACE, 1764 .type = QUIRK_MIDI_MIDIMAN, 1765 .data = & (const struct snd_usb_midi_endpoint_info) { 1766 .out_cables = 0x0001, 1767 .in_cables = 0x0001 1768 } 1769 } 1770 }, 1771 { 1772 USB_DEVICE_VENDOR_SPEC(0x0763, 0x1021), 1773 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { 1774 .vendor_name = "M-Audio", 1775 .product_name = "MidiSport 4x4", 1776 .ifnum = QUIRK_ANY_INTERFACE, 1777 .type = QUIRK_MIDI_MIDIMAN, 1778 .data = & (const struct snd_usb_midi_endpoint_info) { 1779 .out_cables = 0x000f, 1780 .in_cables = 0x000f 1781 } 1782 } 1783 }, 1784 { 1785 /* 1786 * For hardware revision 1.05; in the later revisions (1.10 and 1787 * 1.21), 0x1031 is the ID for the device without firmware. 1788 * Thanks to Olaf Giesbrecht <Olaf_Giesbrecht@yahoo.de> 1789 */ 1790 USB_DEVICE_VER(0x0763, 0x1031, 0x0100, 0x0109), 1791 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { 1792 .vendor_name = "M-Audio", 1793 .product_name = "MidiSport 8x8", 1794 .ifnum = QUIRK_ANY_INTERFACE, 1795 .type = QUIRK_MIDI_MIDIMAN, 1796 .data = & (const struct snd_usb_midi_endpoint_info) { 1797 .out_cables = 0x01ff, 1798 .in_cables = 0x01ff 1799 } 1800 } 1801 }, 1802 { 1803 USB_DEVICE_VENDOR_SPEC(0x0763, 0x1033), 1804 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { 1805 .vendor_name = "M-Audio", 1806 .product_name = "MidiSport 8x8", 1807 .ifnum = QUIRK_ANY_INTERFACE, 1808 .type = QUIRK_MIDI_MIDIMAN, 1809 .data = & (const struct snd_usb_midi_endpoint_info) { 1810 .out_cables = 0x01ff, 1811 .in_cables = 0x01ff 1812 } 1813 } 1814 }, 1815 { 1816 USB_DEVICE_VENDOR_SPEC(0x0763, 0x1041), 1817 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { 1818 .vendor_name = "M-Audio", 1819 .product_name = "MidiSport 2x4", 1820 .ifnum = QUIRK_ANY_INTERFACE, 1821 .type = QUIRK_MIDI_MIDIMAN, 1822 .data = & (const struct snd_usb_midi_endpoint_info) { 1823 .out_cables = 0x000f, 1824 .in_cables = 0x0003 1825 } 1826 } 1827 }, 1828 { 1829 USB_DEVICE_VENDOR_SPEC(0x0763, 0x2001), 1830 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { 1831 .vendor_name = "M-Audio", 1832 .product_name = "Quattro", 1833 .ifnum = QUIRK_ANY_INTERFACE, 1834 .type = QUIRK_COMPOSITE, 1835 .data = & (const struct snd_usb_audio_quirk[]) { 1836 /* 1837 * Interfaces 0-2 are "Windows-compatible", 16-bit only, 1838 * and share endpoints with the other interfaces. 1839 * Ignore them. The other interfaces can do 24 bits, 1840 * but captured samples are big-endian (see usbaudio.c). 1841 */ 1842 { 1843 .ifnum = 0, 1844 .type = QUIRK_IGNORE_INTERFACE 1845 }, 1846 { 1847 .ifnum = 1, 1848 .type = QUIRK_IGNORE_INTERFACE 1849 }, 1850 { 1851 .ifnum = 2, 1852 .type = QUIRK_IGNORE_INTERFACE 1853 }, 1854 { 1855 .ifnum = 3, 1856 .type = QUIRK_IGNORE_INTERFACE 1857 }, 1858 { 1859 .ifnum = 4, 1860 .type = QUIRK_AUDIO_STANDARD_INTERFACE 1861 }, 1862 { 1863 .ifnum = 5, 1864 .type = QUIRK_AUDIO_STANDARD_INTERFACE 1865 }, 1866 { 1867 .ifnum = 6, 1868 .type = QUIRK_IGNORE_INTERFACE 1869 }, 1870 { 1871 .ifnum = 7, 1872 .type = QUIRK_AUDIO_STANDARD_INTERFACE 1873 }, 1874 { 1875 .ifnum = 8, 1876 .type = QUIRK_AUDIO_STANDARD_INTERFACE 1877 }, 1878 { 1879 .ifnum = 9, 1880 .type = QUIRK_MIDI_MIDIMAN, 1881 .data = & (const struct snd_usb_midi_endpoint_info) { 1882 .out_cables = 0x0001, 1883 .in_cables = 0x0001 1884 } 1885 }, 1886 { 1887 .ifnum = -1 1888 } 1889 } 1890 } 1891 }, 1892 { 1893 USB_DEVICE_VENDOR_SPEC(0x0763, 0x2003), 1894 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { 1895 .vendor_name = "M-Audio", 1896 .product_name = "AudioPhile", 1897 .ifnum = 6, 1898 .type = QUIRK_MIDI_MIDIMAN, 1899 .data = & (const struct snd_usb_midi_endpoint_info) { 1900 .out_cables = 0x0001, 1901 .in_cables = 0x0001 1902 } 1903 } 1904 }, 1905 { 1906 USB_DEVICE_VENDOR_SPEC(0x0763, 0x2008), 1907 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { 1908 .vendor_name = "M-Audio", 1909 .product_name = "Ozone", 1910 .ifnum = 3, 1911 .type = QUIRK_MIDI_MIDIMAN, 1912 .data = & (const struct snd_usb_midi_endpoint_info) { 1913 .out_cables = 0x0001, 1914 .in_cables = 0x0001 1915 } 1916 } 1917 }, 1918 { 1919 USB_DEVICE_VENDOR_SPEC(0x0763, 0x200d), 1920 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { 1921 .vendor_name = "M-Audio", 1922 .product_name = "OmniStudio", 1923 .ifnum = QUIRK_ANY_INTERFACE, 1924 .type = QUIRK_COMPOSITE, 1925 .data = & (const struct snd_usb_audio_quirk[]) { 1926 { 1927 .ifnum = 0, 1928 .type = QUIRK_IGNORE_INTERFACE 1929 }, 1930 { 1931 .ifnum = 1, 1932 .type = QUIRK_IGNORE_INTERFACE 1933 }, 1934 { 1935 .ifnum = 2, 1936 .type = QUIRK_IGNORE_INTERFACE 1937 }, 1938 { 1939 .ifnum = 3, 1940 .type = QUIRK_IGNORE_INTERFACE 1941 }, 1942 { 1943 .ifnum = 4, 1944 .type = QUIRK_AUDIO_STANDARD_INTERFACE 1945 }, 1946 { 1947 .ifnum = 5, 1948 .type = QUIRK_AUDIO_STANDARD_INTERFACE 1949 }, 1950 { 1951 .ifnum = 6, 1952 .type = QUIRK_IGNORE_INTERFACE 1953 }, 1954 { 1955 .ifnum = 7, 1956 .type = QUIRK_AUDIO_STANDARD_INTERFACE 1957 }, 1958 { 1959 .ifnum = 8, 1960 .type = QUIRK_AUDIO_STANDARD_INTERFACE 1961 }, 1962 { 1963 .ifnum = 9, 1964 .type = QUIRK_MIDI_MIDIMAN, 1965 .data = & (const struct snd_usb_midi_endpoint_info) { 1966 .out_cables = 0x0001, 1967 .in_cables = 0x0001 1968 } 1969 }, 1970 { 1971 .ifnum = -1 1972 } 1973 } 1974 } 1975 }, 1976 { 1977 USB_DEVICE(0x0763, 0x2019), 1978 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { 1979 /* .vendor_name = "M-Audio", */ 1980 /* .product_name = "Ozone Academic", */ 1981 .ifnum = QUIRK_ANY_INTERFACE, 1982 .type = QUIRK_COMPOSITE, 1983 .data = & (const struct snd_usb_audio_quirk[]) { 1984 { 1985 .ifnum = 0, 1986 .type = QUIRK_AUDIO_STANDARD_INTERFACE 1987 }, 1988 { 1989 .ifnum = 1, 1990 .type = QUIRK_AUDIO_STANDARD_INTERFACE 1991 }, 1992 { 1993 .ifnum = 2, 1994 .type = QUIRK_AUDIO_STANDARD_INTERFACE 1995 }, 1996 { 1997 .ifnum = 3, 1998 .type = QUIRK_MIDI_MIDIMAN, 1999 .data = & (const struct snd_usb_midi_endpoint_info) { 2000 .out_cables = 0x0001, 2001 .in_cables = 0x0001 2002 } 2003 }, 2004 { 2005 .ifnum = -1 2006 } 2007 } 2008 } 2009 }, 2010 { 2011 USB_DEVICE_VENDOR_SPEC(0x0763, 0x2030), 2012 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) { 2013 /* .vendor_name = "M-Audio", */ 2014 /* .product_name = "Fast Track C400", */ 2015 .ifnum = QUIRK_ANY_INTERFACE, 2016 .type = QUIRK_COMPOSITE, 2017 .data = &(const struct snd_usb_audio_quirk[]) { 2018 { 2019 .ifnum = 1, 2020 .type = QUIRK_AUDIO_STANDARD_MIXER, 2021 }, 2022 /* Playback */ 2023 { 2024 .ifnum = 2, 2025 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 2026 .data = &(const struct audioformat) { 2027 .formats = SNDRV_PCM_FMTBIT_S24_3LE, 2028 .channels = 6, 2029 .iface = 2, 2030 .altsetting = 1, 2031 .altset_idx = 1, 2032 .attributes = UAC_EP_CS_ATTR_SAMPLE_RATE, 2033 .endpoint = 0x01, 2034 .ep_attr = 0x09, 2035 .rates = SNDRV_PCM_RATE_44100 | 2036 SNDRV_PCM_RATE_48000 | 2037 SNDRV_PCM_RATE_88200 | 2038 SNDRV_PCM_RATE_96000, 2039 .rate_min = 44100, 2040 .rate_max = 96000, 2041 .nr_rates = 4, 2042 .rate_table = (unsigned int[]) { 2043 44100, 48000, 88200, 96000 2044 }, 2045 .clock = 0x80, 2046 } 2047 }, 2048 /* Capture */ 2049 { 2050 .ifnum = 3, 2051 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 2052 .data = &(const struct audioformat) { 2053 .formats = SNDRV_PCM_FMTBIT_S24_3LE, 2054 .channels = 4, 2055 .iface = 3, 2056 .altsetting = 1, 2057 .altset_idx = 1, 2058 .attributes = UAC_EP_CS_ATTR_SAMPLE_RATE, 2059 .endpoint = 0x81, 2060 .ep_attr = 0x05, 2061 .rates = SNDRV_PCM_RATE_44100 | 2062 SNDRV_PCM_RATE_48000 | 2063 SNDRV_PCM_RATE_88200 | 2064 SNDRV_PCM_RATE_96000, 2065 .rate_min = 44100, 2066 .rate_max = 96000, 2067 .nr_rates = 4, 2068 .rate_table = (unsigned int[]) { 2069 44100, 48000, 88200, 96000 2070 }, 2071 .clock = 0x80, 2072 } 2073 }, 2074 /* MIDI */ 2075 { 2076 .ifnum = -1 /* Interface = 4 */ 2077 } 2078 } 2079 } 2080 }, 2081 { 2082 USB_DEVICE_VENDOR_SPEC(0x0763, 0x2031), 2083 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) { 2084 /* .vendor_name = "M-Audio", */ 2085 /* .product_name = "Fast Track C600", */ 2086 .ifnum = QUIRK_ANY_INTERFACE, 2087 .type = QUIRK_COMPOSITE, 2088 .data = &(const struct snd_usb_audio_quirk[]) { 2089 { 2090 .ifnum = 1, 2091 .type = QUIRK_AUDIO_STANDARD_MIXER, 2092 }, 2093 /* Playback */ 2094 { 2095 .ifnum = 2, 2096 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 2097 .data = &(const struct audioformat) { 2098 .formats = SNDRV_PCM_FMTBIT_S24_3LE, 2099 .channels = 8, 2100 .iface = 2, 2101 .altsetting = 1, 2102 .altset_idx = 1, 2103 .attributes = UAC_EP_CS_ATTR_SAMPLE_RATE, 2104 .endpoint = 0x01, 2105 .ep_attr = 0x09, 2106 .rates = SNDRV_PCM_RATE_44100 | 2107 SNDRV_PCM_RATE_48000 | 2108 SNDRV_PCM_RATE_88200 | 2109 SNDRV_PCM_RATE_96000, 2110 .rate_min = 44100, 2111 .rate_max = 96000, 2112 .nr_rates = 4, 2113 .rate_table = (unsigned int[]) { 2114 44100, 48000, 88200, 96000 2115 }, 2116 .clock = 0x80, 2117 } 2118 }, 2119 /* Capture */ 2120 { 2121 .ifnum = 3, 2122 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 2123 .data = &(const struct audioformat) { 2124 .formats = SNDRV_PCM_FMTBIT_S24_3LE, 2125 .channels = 6, 2126 .iface = 3, 2127 .altsetting = 1, 2128 .altset_idx = 1, 2129 .attributes = UAC_EP_CS_ATTR_SAMPLE_RATE, 2130 .endpoint = 0x81, 2131 .ep_attr = 0x05, 2132 .rates = SNDRV_PCM_RATE_44100 | 2133 SNDRV_PCM_RATE_48000 | 2134 SNDRV_PCM_RATE_88200 | 2135 SNDRV_PCM_RATE_96000, 2136 .rate_min = 44100, 2137 .rate_max = 96000, 2138 .nr_rates = 4, 2139 .rate_table = (unsigned int[]) { 2140 44100, 48000, 88200, 96000 2141 }, 2142 .clock = 0x80, 2143 } 2144 }, 2145 /* MIDI */ 2146 { 2147 .ifnum = -1 /* Interface = 4 */ 2148 } 2149 } 2150 } 2151 }, 2152 { 2153 USB_DEVICE_VENDOR_SPEC(0x0763, 0x2080), 2154 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { 2155 /* .vendor_name = "M-Audio", */ 2156 /* .product_name = "Fast Track Ultra", */ 2157 .ifnum = QUIRK_ANY_INTERFACE, 2158 .type = QUIRK_COMPOSITE, 2159 .data = & (const struct snd_usb_audio_quirk[]) { 2160 { 2161 .ifnum = 0, 2162 .type = QUIRK_AUDIO_STANDARD_MIXER, 2163 }, 2164 { 2165 .ifnum = 1, 2166 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 2167 .data = & (const struct audioformat) { 2168 .formats = SNDRV_PCM_FMTBIT_S24_3LE, 2169 .channels = 8, 2170 .iface = 1, 2171 .altsetting = 1, 2172 .altset_idx = 1, 2173 .attributes = UAC_EP_CS_ATTR_SAMPLE_RATE, 2174 .endpoint = 0x01, 2175 .ep_attr = 0x09, 2176 .rates = SNDRV_PCM_RATE_44100 | 2177 SNDRV_PCM_RATE_48000 | 2178 SNDRV_PCM_RATE_88200 | 2179 SNDRV_PCM_RATE_96000, 2180 .rate_min = 44100, 2181 .rate_max = 96000, 2182 .nr_rates = 4, 2183 .rate_table = (unsigned int[]) { 2184 44100, 48000, 88200, 96000 2185 } 2186 } 2187 }, 2188 { 2189 .ifnum = 2, 2190 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 2191 .data = & (const struct audioformat) { 2192 .formats = SNDRV_PCM_FMTBIT_S24_3LE, 2193 .channels = 8, 2194 .iface = 2, 2195 .altsetting = 1, 2196 .altset_idx = 1, 2197 .attributes = UAC_EP_CS_ATTR_SAMPLE_RATE, 2198 .endpoint = 0x81, 2199 .ep_attr = 0x05, 2200 .rates = SNDRV_PCM_RATE_44100 | 2201 SNDRV_PCM_RATE_48000 | 2202 SNDRV_PCM_RATE_88200 | 2203 SNDRV_PCM_RATE_96000, 2204 .rate_min = 44100, 2205 .rate_max = 96000, 2206 .nr_rates = 4, 2207 .rate_table = (unsigned int[]) { 2208 44100, 48000, 88200, 96000 2209 } 2210 } 2211 }, 2212 /* interface 3 (MIDI) is standard compliant */ 2213 { 2214 .ifnum = -1 2215 } 2216 } 2217 } 2218 }, 2219 { 2220 USB_DEVICE_VENDOR_SPEC(0x0763, 0x2081), 2221 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { 2222 /* .vendor_name = "M-Audio", */ 2223 /* .product_name = "Fast Track Ultra 8R", */ 2224 .ifnum = QUIRK_ANY_INTERFACE, 2225 .type = QUIRK_COMPOSITE, 2226 .data = & (const struct snd_usb_audio_quirk[]) { 2227 { 2228 .ifnum = 0, 2229 .type = QUIRK_AUDIO_STANDARD_MIXER, 2230 }, 2231 { 2232 .ifnum = 1, 2233 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 2234 .data = & (const struct audioformat) { 2235 .formats = SNDRV_PCM_FMTBIT_S24_3LE, 2236 .channels = 8, 2237 .iface = 1, 2238 .altsetting = 1, 2239 .altset_idx = 1, 2240 .attributes = UAC_EP_CS_ATTR_SAMPLE_RATE, 2241 .endpoint = 0x01, 2242 .ep_attr = 0x09, 2243 .rates = SNDRV_PCM_RATE_44100 | 2244 SNDRV_PCM_RATE_48000 | 2245 SNDRV_PCM_RATE_88200 | 2246 SNDRV_PCM_RATE_96000, 2247 .rate_min = 44100, 2248 .rate_max = 96000, 2249 .nr_rates = 4, 2250 .rate_table = (unsigned int[]) { 2251 44100, 48000, 88200, 96000 2252 } 2253 } 2254 }, 2255 { 2256 .ifnum = 2, 2257 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 2258 .data = & (const struct audioformat) { 2259 .formats = SNDRV_PCM_FMTBIT_S24_3LE, 2260 .channels = 8, 2261 .iface = 2, 2262 .altsetting = 1, 2263 .altset_idx = 1, 2264 .attributes = UAC_EP_CS_ATTR_SAMPLE_RATE, 2265 .endpoint = 0x81, 2266 .ep_attr = 0x05, 2267 .rates = SNDRV_PCM_RATE_44100 | 2268 SNDRV_PCM_RATE_48000 | 2269 SNDRV_PCM_RATE_88200 | 2270 SNDRV_PCM_RATE_96000, 2271 .rate_min = 44100, 2272 .rate_max = 96000, 2273 .nr_rates = 4, 2274 .rate_table = (unsigned int[]) { 2275 44100, 48000, 88200, 96000 2276 } 2277 } 2278 }, 2279 /* interface 3 (MIDI) is standard compliant */ 2280 { 2281 .ifnum = -1 2282 } 2283 } 2284 } 2285 }, 2286 2287 /* Casio devices */ 2288 { 2289 USB_DEVICE(0x07cf, 0x6801), 2290 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { 2291 .vendor_name = "Casio", 2292 .product_name = "PL-40R", 2293 .ifnum = 0, 2294 .type = QUIRK_MIDI_YAMAHA 2295 } 2296 }, 2297 { 2298 /* this ID is used by several devices without a product ID */ 2299 USB_DEVICE(0x07cf, 0x6802), 2300 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { 2301 .vendor_name = "Casio", 2302 .product_name = "Keyboard", 2303 .ifnum = 0, 2304 .type = QUIRK_MIDI_YAMAHA 2305 } 2306 }, 2307 2308 /* Mark of the Unicorn devices */ 2309 { 2310 /* thanks to Robert A. Lerche <ral 'at' msbit.com> */ 2311 .match_flags = USB_DEVICE_ID_MATCH_VENDOR | 2312 USB_DEVICE_ID_MATCH_PRODUCT | 2313 USB_DEVICE_ID_MATCH_DEV_SUBCLASS, 2314 .idVendor = 0x07fd, 2315 .idProduct = 0x0001, 2316 .bDeviceSubClass = 2, 2317 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { 2318 .vendor_name = "MOTU", 2319 .product_name = "Fastlane", 2320 .ifnum = QUIRK_ANY_INTERFACE, 2321 .type = QUIRK_COMPOSITE, 2322 .data = & (const struct snd_usb_audio_quirk[]) { 2323 { 2324 .ifnum = 0, 2325 .type = QUIRK_MIDI_RAW_BYTES 2326 }, 2327 { 2328 .ifnum = 1, 2329 .type = QUIRK_IGNORE_INTERFACE 2330 }, 2331 { 2332 .ifnum = -1 2333 } 2334 } 2335 } 2336 }, 2337 2338 /* Emagic devices */ 2339 { 2340 USB_DEVICE(0x086a, 0x0001), 2341 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { 2342 .vendor_name = "Emagic", 2343 .product_name = "Unitor8", 2344 .ifnum = 2, 2345 .type = QUIRK_MIDI_EMAGIC, 2346 .data = & (const struct snd_usb_midi_endpoint_info) { 2347 .out_cables = 0x80ff, 2348 .in_cables = 0x80ff 2349 } 2350 } 2351 }, 2352 { 2353 USB_DEVICE(0x086a, 0x0002), 2354 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { 2355 .vendor_name = "Emagic", 2356 /* .product_name = "AMT8", */ 2357 .ifnum = 2, 2358 .type = QUIRK_MIDI_EMAGIC, 2359 .data = & (const struct snd_usb_midi_endpoint_info) { 2360 .out_cables = 0x80ff, 2361 .in_cables = 0x80ff 2362 } 2363 } 2364 }, 2365 { 2366 USB_DEVICE(0x086a, 0x0003), 2367 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { 2368 .vendor_name = "Emagic", 2369 /* .product_name = "MT4", */ 2370 .ifnum = 2, 2371 .type = QUIRK_MIDI_EMAGIC, 2372 .data = & (const struct snd_usb_midi_endpoint_info) { 2373 .out_cables = 0x800f, 2374 .in_cables = 0x8003 2375 } 2376 } 2377 }, 2378 2379 /* KORG devices */ 2380 { 2381 USB_DEVICE_VENDOR_SPEC(0x0944, 0x0200), 2382 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { 2383 .vendor_name = "KORG, Inc.", 2384 /* .product_name = "PANDORA PX5D", */ 2385 .ifnum = 3, 2386 .type = QUIRK_MIDI_STANDARD_INTERFACE, 2387 } 2388 }, 2389 2390 { 2391 USB_DEVICE_VENDOR_SPEC(0x0944, 0x0201), 2392 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { 2393 .vendor_name = "KORG, Inc.", 2394 /* .product_name = "ToneLab ST", */ 2395 .ifnum = 3, 2396 .type = QUIRK_MIDI_STANDARD_INTERFACE, 2397 } 2398 }, 2399 2400 { 2401 USB_DEVICE_VENDOR_SPEC(0x0944, 0x0204), 2402 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { 2403 .vendor_name = "KORG, Inc.", 2404 /* .product_name = "ToneLab EX", */ 2405 .ifnum = 3, 2406 .type = QUIRK_MIDI_STANDARD_INTERFACE, 2407 } 2408 }, 2409 2410 /* AKAI devices */ 2411 { 2412 USB_DEVICE(0x09e8, 0x0062), 2413 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { 2414 .vendor_name = "AKAI", 2415 .product_name = "MPD16", 2416 .ifnum = 0, 2417 .type = QUIRK_MIDI_AKAI, 2418 } 2419 }, 2420 2421 { 2422 /* Akai MPC Element */ 2423 USB_DEVICE(0x09e8, 0x0021), 2424 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { 2425 .ifnum = QUIRK_ANY_INTERFACE, 2426 .type = QUIRK_COMPOSITE, 2427 .data = & (const struct snd_usb_audio_quirk[]) { 2428 { 2429 .ifnum = 0, 2430 .type = QUIRK_IGNORE_INTERFACE 2431 }, 2432 { 2433 .ifnum = 1, 2434 .type = QUIRK_MIDI_STANDARD_INTERFACE 2435 }, 2436 { 2437 .ifnum = -1 2438 } 2439 } 2440 } 2441 }, 2442 2443 /* Steinberg devices */ 2444 { 2445 /* Steinberg MI2 */ 2446 USB_DEVICE_VENDOR_SPEC(0x0a4e, 0x2040), 2447 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { 2448 .ifnum = QUIRK_ANY_INTERFACE, 2449 .type = QUIRK_COMPOSITE, 2450 .data = & (const struct snd_usb_audio_quirk[]) { 2451 { 2452 .ifnum = 0, 2453 .type = QUIRK_AUDIO_STANDARD_INTERFACE 2454 }, 2455 { 2456 .ifnum = 1, 2457 .type = QUIRK_AUDIO_STANDARD_INTERFACE 2458 }, 2459 { 2460 .ifnum = 2, 2461 .type = QUIRK_AUDIO_STANDARD_INTERFACE 2462 }, 2463 { 2464 .ifnum = 3, 2465 .type = QUIRK_MIDI_FIXED_ENDPOINT, 2466 .data = &(const struct snd_usb_midi_endpoint_info) { 2467 .out_cables = 0x0001, 2468 .in_cables = 0x0001 2469 } 2470 }, 2471 { 2472 .ifnum = -1 2473 } 2474 } 2475 } 2476 }, 2477 { 2478 /* Steinberg MI4 */ 2479 USB_DEVICE_VENDOR_SPEC(0x0a4e, 0x4040), 2480 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { 2481 .ifnum = QUIRK_ANY_INTERFACE, 2482 .type = QUIRK_COMPOSITE, 2483 .data = & (const struct snd_usb_audio_quirk[]) { 2484 { 2485 .ifnum = 0, 2486 .type = QUIRK_AUDIO_STANDARD_INTERFACE 2487 }, 2488 { 2489 .ifnum = 1, 2490 .type = QUIRK_AUDIO_STANDARD_INTERFACE 2491 }, 2492 { 2493 .ifnum = 2, 2494 .type = QUIRK_AUDIO_STANDARD_INTERFACE 2495 }, 2496 { 2497 .ifnum = 3, 2498 .type = QUIRK_MIDI_FIXED_ENDPOINT, 2499 .data = &(const struct snd_usb_midi_endpoint_info) { 2500 .out_cables = 0x0001, 2501 .in_cables = 0x0001 2502 } 2503 }, 2504 { 2505 .ifnum = -1 2506 } 2507 } 2508 } 2509 }, 2510 2511 /* TerraTec devices */ 2512 { 2513 USB_DEVICE_VENDOR_SPEC(0x0ccd, 0x0012), 2514 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { 2515 .vendor_name = "TerraTec", 2516 .product_name = "PHASE 26", 2517 .ifnum = 3, 2518 .type = QUIRK_MIDI_STANDARD_INTERFACE 2519 } 2520 }, 2521 { 2522 USB_DEVICE_VENDOR_SPEC(0x0ccd, 0x0013), 2523 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { 2524 .vendor_name = "TerraTec", 2525 .product_name = "PHASE 26", 2526 .ifnum = 3, 2527 .type = QUIRK_MIDI_STANDARD_INTERFACE 2528 } 2529 }, 2530 { 2531 USB_DEVICE_VENDOR_SPEC(0x0ccd, 0x0014), 2532 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { 2533 .vendor_name = "TerraTec", 2534 .product_name = "PHASE 26", 2535 .ifnum = 3, 2536 .type = QUIRK_MIDI_STANDARD_INTERFACE 2537 } 2538 }, 2539 { 2540 USB_DEVICE(0x0ccd, 0x0035), 2541 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { 2542 .vendor_name = "Miditech", 2543 .product_name = "Play'n Roll", 2544 .ifnum = 0, 2545 .type = QUIRK_MIDI_CME 2546 } 2547 }, 2548 2549 /* Novation EMS devices */ 2550 { 2551 USB_DEVICE_VENDOR_SPEC(0x1235, 0x0001), 2552 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { 2553 .vendor_name = "Novation", 2554 .product_name = "ReMOTE Audio/XStation", 2555 .ifnum = 4, 2556 .type = QUIRK_MIDI_NOVATION 2557 } 2558 }, 2559 { 2560 USB_DEVICE_VENDOR_SPEC(0x1235, 0x0002), 2561 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { 2562 .vendor_name = "Novation", 2563 .product_name = "Speedio", 2564 .ifnum = 3, 2565 .type = QUIRK_MIDI_NOVATION 2566 } 2567 }, 2568 { 2569 USB_DEVICE(0x1235, 0x000a), 2570 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { 2571 /* .vendor_name = "Novation", */ 2572 /* .product_name = "Nocturn", */ 2573 .ifnum = 0, 2574 .type = QUIRK_MIDI_RAW_BYTES 2575 } 2576 }, 2577 { 2578 USB_DEVICE(0x1235, 0x000e), 2579 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { 2580 /* .vendor_name = "Novation", */ 2581 /* .product_name = "Launchpad", */ 2582 .ifnum = 0, 2583 .type = QUIRK_MIDI_RAW_BYTES 2584 } 2585 }, 2586 { 2587 USB_DEVICE(0x1235, 0x0010), 2588 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) { 2589 .vendor_name = "Focusrite", 2590 .product_name = "Saffire 6 USB", 2591 .ifnum = QUIRK_ANY_INTERFACE, 2592 .type = QUIRK_COMPOSITE, 2593 .data = (const struct snd_usb_audio_quirk[]) { 2594 { 2595 .ifnum = 0, 2596 .type = QUIRK_AUDIO_STANDARD_MIXER, 2597 }, 2598 { 2599 .ifnum = 0, 2600 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 2601 .data = &(const struct audioformat) { 2602 .formats = SNDRV_PCM_FMTBIT_S24_3LE, 2603 .channels = 4, 2604 .iface = 0, 2605 .altsetting = 1, 2606 .altset_idx = 1, 2607 .attributes = UAC_EP_CS_ATTR_SAMPLE_RATE, 2608 .endpoint = 0x01, 2609 .ep_attr = USB_ENDPOINT_XFER_ISOC, 2610 .datainterval = 1, 2611 .maxpacksize = 0x024c, 2612 .rates = SNDRV_PCM_RATE_44100 | 2613 SNDRV_PCM_RATE_48000, 2614 .rate_min = 44100, 2615 .rate_max = 48000, 2616 .nr_rates = 2, 2617 .rate_table = (unsigned int[]) { 2618 44100, 48000 2619 } 2620 } 2621 }, 2622 { 2623 .ifnum = 0, 2624 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 2625 .data = &(const struct audioformat) { 2626 .formats = SNDRV_PCM_FMTBIT_S24_3LE, 2627 .channels = 2, 2628 .iface = 0, 2629 .altsetting = 1, 2630 .altset_idx = 1, 2631 .attributes = 0, 2632 .endpoint = 0x82, 2633 .ep_attr = USB_ENDPOINT_XFER_ISOC, 2634 .datainterval = 1, 2635 .maxpacksize = 0x0126, 2636 .rates = SNDRV_PCM_RATE_44100 | 2637 SNDRV_PCM_RATE_48000, 2638 .rate_min = 44100, 2639 .rate_max = 48000, 2640 .nr_rates = 2, 2641 .rate_table = (unsigned int[]) { 2642 44100, 48000 2643 } 2644 } 2645 }, 2646 { 2647 .ifnum = 1, 2648 .type = QUIRK_MIDI_RAW_BYTES 2649 }, 2650 { 2651 .ifnum = -1 2652 } 2653 } 2654 } 2655 }, 2656 { 2657 USB_DEVICE(0x1235, 0x0018), 2658 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { 2659 .vendor_name = "Novation", 2660 .product_name = "Twitch", 2661 .ifnum = QUIRK_ANY_INTERFACE, 2662 .type = QUIRK_COMPOSITE, 2663 .data = (const struct snd_usb_audio_quirk[]) { 2664 { 2665 .ifnum = 0, 2666 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 2667 .data = & (const struct audioformat) { 2668 .formats = SNDRV_PCM_FMTBIT_S24_3LE, 2669 .channels = 4, 2670 .iface = 0, 2671 .altsetting = 1, 2672 .altset_idx = 1, 2673 .attributes = UAC_EP_CS_ATTR_SAMPLE_RATE, 2674 .endpoint = 0x01, 2675 .ep_attr = USB_ENDPOINT_XFER_ISOC, 2676 .rates = SNDRV_PCM_RATE_44100 | 2677 SNDRV_PCM_RATE_48000, 2678 .rate_min = 44100, 2679 .rate_max = 48000, 2680 .nr_rates = 2, 2681 .rate_table = (unsigned int[]) { 2682 44100, 48000 2683 } 2684 } 2685 }, 2686 { 2687 .ifnum = 1, 2688 .type = QUIRK_MIDI_RAW_BYTES 2689 }, 2690 { 2691 .ifnum = -1 2692 } 2693 } 2694 } 2695 }, 2696 { 2697 USB_DEVICE_VENDOR_SPEC(0x1235, 0x4661), 2698 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { 2699 .vendor_name = "Novation", 2700 .product_name = "ReMOTE25", 2701 .ifnum = 0, 2702 .type = QUIRK_MIDI_NOVATION 2703 } 2704 }, 2705 2706 /* Access Music devices */ 2707 { 2708 /* VirusTI Desktop */ 2709 USB_DEVICE_VENDOR_SPEC(0x133e, 0x0815), 2710 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) { 2711 .ifnum = QUIRK_ANY_INTERFACE, 2712 .type = QUIRK_COMPOSITE, 2713 .data = &(const struct snd_usb_audio_quirk[]) { 2714 { 2715 .ifnum = 3, 2716 .type = QUIRK_MIDI_FIXED_ENDPOINT, 2717 .data = &(const struct snd_usb_midi_endpoint_info) { 2718 .out_cables = 0x0003, 2719 .in_cables = 0x0003 2720 } 2721 }, 2722 { 2723 .ifnum = 4, 2724 .type = QUIRK_IGNORE_INTERFACE 2725 }, 2726 { 2727 .ifnum = -1 2728 } 2729 } 2730 } 2731 }, 2732 2733 /* Lenovo ThinkStation P620 Rear Line-in, Line-out and Microphone */ 2734 { 2735 USB_DEVICE(0x17aa, 0x1046), 2736 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { 2737 .ifnum = QUIRK_ANY_INTERFACE, 2738 .type = QUIRK_SETUP_DISABLE_AUTOSUSPEND 2739 } 2740 }, 2741 /* Lenovo ThinkStation P620 Internal Speaker + Front Headset */ 2742 { 2743 USB_DEVICE(0x17aa, 0x104d), 2744 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { 2745 .ifnum = QUIRK_ANY_INTERFACE, 2746 .type = QUIRK_SETUP_DISABLE_AUTOSUSPEND 2747 } 2748 }, 2749 2750 /* Native Instruments MK2 series */ 2751 { 2752 /* Komplete Audio 6 */ 2753 .match_flags = USB_DEVICE_ID_MATCH_DEVICE, 2754 .idVendor = 0x17cc, 2755 .idProduct = 0x1000, 2756 }, 2757 { 2758 /* Traktor Audio 6 */ 2759 .match_flags = USB_DEVICE_ID_MATCH_DEVICE, 2760 .idVendor = 0x17cc, 2761 .idProduct = 0x1010, 2762 }, 2763 { 2764 /* Traktor Audio 10 */ 2765 .match_flags = USB_DEVICE_ID_MATCH_DEVICE, 2766 .idVendor = 0x17cc, 2767 .idProduct = 0x1020, 2768 }, 2769 2770 /* QinHeng devices */ 2771 { 2772 USB_DEVICE(0x1a86, 0x752d), 2773 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) { 2774 .vendor_name = "QinHeng", 2775 .product_name = "CH345", 2776 .ifnum = 1, 2777 .type = QUIRK_MIDI_CH345 2778 } 2779 }, 2780 2781 /* KeithMcMillen Stringport */ 2782 { USB_DEVICE(0x1f38, 0x0001) }, /* FIXME: should be more restrictive matching */ 2783 2784 /* Miditech devices */ 2785 { 2786 USB_DEVICE(0x4752, 0x0011), 2787 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { 2788 .vendor_name = "Miditech", 2789 .product_name = "Midistart-2", 2790 .ifnum = 0, 2791 .type = QUIRK_MIDI_CME 2792 } 2793 }, 2794 2795 /* Central Music devices */ 2796 { 2797 /* this ID used by both Miditech MidiStudio-2 and CME UF-x */ 2798 USB_DEVICE(0x7104, 0x2202), 2799 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { 2800 .ifnum = 0, 2801 .type = QUIRK_MIDI_CME 2802 } 2803 }, 2804 2805 /* 2806 * Auvitek au0828 devices with audio interface. 2807 * This should be kept in sync with drivers/media/usb/au0828/au0828-cards.c 2808 * Please notice that some drivers are DVB only, and don't need to be 2809 * here. That's the case, for example, of DVICO_FUSIONHDTV7. 2810 */ 2811 2812 #define AU0828_DEVICE(vid, pid, vname, pname) { \ 2813 USB_AUDIO_DEVICE(vid, pid), \ 2814 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) { \ 2815 .vendor_name = vname, \ 2816 .product_name = pname, \ 2817 .ifnum = QUIRK_ANY_INTERFACE, \ 2818 .type = QUIRK_AUDIO_ALIGN_TRANSFER, \ 2819 .shares_media_device = 1, \ 2820 } \ 2821 } 2822 2823 AU0828_DEVICE(0x2040, 0x7200, "Hauppauge", "HVR-950Q"), 2824 AU0828_DEVICE(0x2040, 0x7240, "Hauppauge", "HVR-850"), 2825 AU0828_DEVICE(0x2040, 0x7210, "Hauppauge", "HVR-950Q"), 2826 AU0828_DEVICE(0x2040, 0x7217, "Hauppauge", "HVR-950Q"), 2827 AU0828_DEVICE(0x2040, 0x721b, "Hauppauge", "HVR-950Q"), 2828 AU0828_DEVICE(0x2040, 0x721e, "Hauppauge", "HVR-950Q"), 2829 AU0828_DEVICE(0x2040, 0x721f, "Hauppauge", "HVR-950Q"), 2830 AU0828_DEVICE(0x2040, 0x7280, "Hauppauge", "HVR-950Q"), 2831 AU0828_DEVICE(0x0fd9, 0x0008, "Hauppauge", "HVR-950Q"), 2832 AU0828_DEVICE(0x2040, 0x7201, "Hauppauge", "HVR-950Q-MXL"), 2833 AU0828_DEVICE(0x2040, 0x7211, "Hauppauge", "HVR-950Q-MXL"), 2834 AU0828_DEVICE(0x2040, 0x7281, "Hauppauge", "HVR-950Q-MXL"), 2835 AU0828_DEVICE(0x05e1, 0x0480, "Hauppauge", "Woodbury"), 2836 AU0828_DEVICE(0x2040, 0x8200, "Hauppauge", "Woodbury"), 2837 AU0828_DEVICE(0x2040, 0x7260, "Hauppauge", "HVR-950Q"), 2838 AU0828_DEVICE(0x2040, 0x7213, "Hauppauge", "HVR-950Q"), 2839 AU0828_DEVICE(0x2040, 0x7270, "Hauppauge", "HVR-950Q"), 2840 2841 /* Syntek STK1160 */ 2842 { 2843 USB_AUDIO_DEVICE(0x05e1, 0x0408), 2844 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) { 2845 .vendor_name = "Syntek", 2846 .product_name = "STK1160", 2847 .ifnum = QUIRK_ANY_INTERFACE, 2848 .type = QUIRK_AUDIO_ALIGN_TRANSFER 2849 } 2850 }, 2851 2852 /* Digidesign Mbox */ 2853 { 2854 /* Thanks to Clemens Ladisch <clemens@ladisch.de> */ 2855 USB_DEVICE(0x0dba, 0x1000), 2856 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) { 2857 .vendor_name = "Digidesign", 2858 .product_name = "MBox", 2859 .ifnum = QUIRK_ANY_INTERFACE, 2860 .type = QUIRK_COMPOSITE, 2861 .data = (const struct snd_usb_audio_quirk[]){ 2862 { 2863 .ifnum = 0, 2864 .type = QUIRK_AUDIO_STANDARD_MIXER, 2865 }, 2866 { 2867 .ifnum = 1, 2868 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 2869 .data = &(const struct audioformat) { 2870 .formats = SNDRV_PCM_FMTBIT_S24_3BE, 2871 .channels = 2, 2872 .iface = 1, 2873 .altsetting = 1, 2874 .altset_idx = 1, 2875 .attributes = 0x4, 2876 .endpoint = 0x02, 2877 .ep_attr = USB_ENDPOINT_XFER_ISOC | 2878 USB_ENDPOINT_SYNC_SYNC, 2879 .maxpacksize = 0x130, 2880 .rates = SNDRV_PCM_RATE_48000, 2881 .rate_min = 48000, 2882 .rate_max = 48000, 2883 .nr_rates = 1, 2884 .rate_table = (unsigned int[]) { 2885 48000 2886 } 2887 } 2888 }, 2889 { 2890 .ifnum = 1, 2891 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 2892 .data = &(const struct audioformat) { 2893 .formats = SNDRV_PCM_FMTBIT_S24_3BE, 2894 .channels = 2, 2895 .iface = 1, 2896 .altsetting = 1, 2897 .altset_idx = 1, 2898 .attributes = 0x4, 2899 .endpoint = 0x81, 2900 .ep_attr = USB_ENDPOINT_XFER_ISOC | 2901 USB_ENDPOINT_SYNC_ASYNC, 2902 .maxpacksize = 0x130, 2903 .rates = SNDRV_PCM_RATE_48000, 2904 .rate_min = 48000, 2905 .rate_max = 48000, 2906 .nr_rates = 1, 2907 .rate_table = (unsigned int[]) { 2908 48000 2909 } 2910 } 2911 }, 2912 { 2913 .ifnum = -1 2914 } 2915 } 2916 } 2917 }, 2918 2919 /* DIGIDESIGN MBOX 2 */ 2920 { 2921 USB_DEVICE(0x0dba, 0x3000), 2922 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) { 2923 .vendor_name = "Digidesign", 2924 .product_name = "Mbox 2", 2925 .ifnum = QUIRK_ANY_INTERFACE, 2926 .type = QUIRK_COMPOSITE, 2927 .data = (const struct snd_usb_audio_quirk[]) { 2928 { 2929 .ifnum = 0, 2930 .type = QUIRK_IGNORE_INTERFACE 2931 }, 2932 { 2933 .ifnum = 1, 2934 .type = QUIRK_IGNORE_INTERFACE 2935 }, 2936 { 2937 .ifnum = 2, 2938 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 2939 .data = &(const struct audioformat) { 2940 .formats = SNDRV_PCM_FMTBIT_S24_3BE, 2941 .channels = 2, 2942 .iface = 2, 2943 .altsetting = 2, 2944 .altset_idx = 1, 2945 .attributes = 0x00, 2946 .endpoint = 0x03, 2947 .ep_attr = USB_ENDPOINT_SYNC_ASYNC, 2948 .rates = SNDRV_PCM_RATE_48000, 2949 .rate_min = 48000, 2950 .rate_max = 48000, 2951 .nr_rates = 1, 2952 .rate_table = (unsigned int[]) { 2953 48000 2954 } 2955 } 2956 }, 2957 { 2958 .ifnum = 3, 2959 .type = QUIRK_IGNORE_INTERFACE 2960 }, 2961 { 2962 .ifnum = 4, 2963 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 2964 .data = &(const struct audioformat) { 2965 .formats = SNDRV_PCM_FMTBIT_S24_3BE, 2966 .channels = 2, 2967 .iface = 4, 2968 .altsetting = 2, 2969 .altset_idx = 1, 2970 .attributes = UAC_EP_CS_ATTR_SAMPLE_RATE, 2971 .endpoint = 0x85, 2972 .ep_attr = USB_ENDPOINT_SYNC_SYNC, 2973 .rates = SNDRV_PCM_RATE_48000, 2974 .rate_min = 48000, 2975 .rate_max = 48000, 2976 .nr_rates = 1, 2977 .rate_table = (unsigned int[]) { 2978 48000 2979 } 2980 } 2981 }, 2982 { 2983 .ifnum = 5, 2984 .type = QUIRK_IGNORE_INTERFACE 2985 }, 2986 { 2987 .ifnum = 6, 2988 .type = QUIRK_MIDI_MIDIMAN, 2989 .data = &(const struct snd_usb_midi_endpoint_info) { 2990 .out_ep = 0x02, 2991 .out_cables = 0x0001, 2992 .in_ep = 0x81, 2993 .in_interval = 0x01, 2994 .in_cables = 0x0001 2995 } 2996 }, 2997 { 2998 .ifnum = -1 2999 } 3000 } 3001 } 3002 }, 3003 { 3004 /* Tascam US122 MKII - playback-only support */ 3005 USB_DEVICE_VENDOR_SPEC(0x0644, 0x8021), 3006 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) { 3007 .vendor_name = "TASCAM", 3008 .product_name = "US122 MKII", 3009 .ifnum = QUIRK_ANY_INTERFACE, 3010 .type = QUIRK_COMPOSITE, 3011 .data = (const struct snd_usb_audio_quirk[]) { 3012 { 3013 .ifnum = 0, 3014 .type = QUIRK_IGNORE_INTERFACE 3015 }, 3016 { 3017 .ifnum = 1, 3018 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 3019 .data = &(const struct audioformat) { 3020 .formats = SNDRV_PCM_FMTBIT_S24_3LE, 3021 .channels = 2, 3022 .iface = 1, 3023 .altsetting = 1, 3024 .altset_idx = 1, 3025 .attributes = UAC_EP_CS_ATTR_SAMPLE_RATE, 3026 .endpoint = 0x02, 3027 .ep_attr = USB_ENDPOINT_XFER_ISOC, 3028 .rates = SNDRV_PCM_RATE_44100 | 3029 SNDRV_PCM_RATE_48000 | 3030 SNDRV_PCM_RATE_88200 | 3031 SNDRV_PCM_RATE_96000, 3032 .rate_min = 44100, 3033 .rate_max = 96000, 3034 .nr_rates = 4, 3035 .rate_table = (unsigned int[]) { 3036 44100, 48000, 88200, 96000 3037 } 3038 } 3039 }, 3040 { 3041 .ifnum = -1 3042 } 3043 } 3044 } 3045 }, 3046 3047 /* Microsoft XboxLive Headset/Xbox Communicator */ 3048 { 3049 USB_DEVICE(0x045e, 0x0283), 3050 .bInterfaceClass = USB_CLASS_PER_INTERFACE, 3051 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) { 3052 .vendor_name = "Microsoft", 3053 .product_name = "XboxLive Headset/Xbox Communicator", 3054 .ifnum = QUIRK_ANY_INTERFACE, 3055 .type = QUIRK_COMPOSITE, 3056 .data = &(const struct snd_usb_audio_quirk[]) { 3057 { 3058 /* playback */ 3059 .ifnum = 0, 3060 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 3061 .data = &(const struct audioformat) { 3062 .formats = SNDRV_PCM_FMTBIT_S16_LE, 3063 .channels = 1, 3064 .iface = 0, 3065 .altsetting = 0, 3066 .altset_idx = 0, 3067 .attributes = 0, 3068 .endpoint = 0x04, 3069 .ep_attr = 0x05, 3070 .rates = SNDRV_PCM_RATE_CONTINUOUS, 3071 .rate_min = 22050, 3072 .rate_max = 22050 3073 } 3074 }, 3075 { 3076 /* capture */ 3077 .ifnum = 1, 3078 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 3079 .data = &(const struct audioformat) { 3080 .formats = SNDRV_PCM_FMTBIT_S16_LE, 3081 .channels = 1, 3082 .iface = 1, 3083 .altsetting = 0, 3084 .altset_idx = 0, 3085 .attributes = 0, 3086 .endpoint = 0x85, 3087 .ep_attr = 0x05, 3088 .rates = SNDRV_PCM_RATE_CONTINUOUS, 3089 .rate_min = 16000, 3090 .rate_max = 16000 3091 } 3092 }, 3093 { 3094 .ifnum = -1 3095 } 3096 } 3097 } 3098 }, 3099 3100 /* Reloop Play */ 3101 { 3102 USB_DEVICE(0x200c, 0x100b), 3103 .bInterfaceClass = USB_CLASS_PER_INTERFACE, 3104 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) { 3105 .ifnum = QUIRK_ANY_INTERFACE, 3106 .type = QUIRK_COMPOSITE, 3107 .data = &(const struct snd_usb_audio_quirk[]) { 3108 { 3109 .ifnum = 0, 3110 .type = QUIRK_AUDIO_STANDARD_MIXER, 3111 }, 3112 { 3113 .ifnum = 1, 3114 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 3115 .data = &(const struct audioformat) { 3116 .formats = SNDRV_PCM_FMTBIT_S24_3LE, 3117 .channels = 4, 3118 .iface = 1, 3119 .altsetting = 1, 3120 .altset_idx = 1, 3121 .attributes = UAC_EP_CS_ATTR_SAMPLE_RATE, 3122 .endpoint = 0x01, 3123 .ep_attr = USB_ENDPOINT_SYNC_ADAPTIVE, 3124 .rates = SNDRV_PCM_RATE_44100 | 3125 SNDRV_PCM_RATE_48000, 3126 .rate_min = 44100, 3127 .rate_max = 48000, 3128 .nr_rates = 2, 3129 .rate_table = (unsigned int[]) { 3130 44100, 48000 3131 } 3132 } 3133 }, 3134 { 3135 .ifnum = -1 3136 } 3137 } 3138 } 3139 }, 3140 3141 { 3142 /* 3143 * ZOOM R16/24 in audio interface mode. 3144 * Playback requires an extra four byte LE length indicator 3145 * at the start of each isochronous packet. This quirk is 3146 * enabled in create_standard_audio_quirk(). 3147 */ 3148 USB_DEVICE(0x1686, 0x00dd), 3149 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { 3150 .ifnum = QUIRK_ANY_INTERFACE, 3151 .type = QUIRK_COMPOSITE, 3152 .data = (const struct snd_usb_audio_quirk[]) { 3153 { 3154 /* Playback */ 3155 .ifnum = 1, 3156 .type = QUIRK_AUDIO_STANDARD_INTERFACE, 3157 }, 3158 { 3159 /* Capture */ 3160 .ifnum = 2, 3161 .type = QUIRK_AUDIO_STANDARD_INTERFACE, 3162 }, 3163 { 3164 /* Midi */ 3165 .ifnum = 3, 3166 .type = QUIRK_MIDI_STANDARD_INTERFACE 3167 }, 3168 { 3169 .ifnum = -1 3170 }, 3171 } 3172 } 3173 }, 3174 3175 { 3176 /* 3177 * Some USB MIDI devices don't have an audio control interface, 3178 * so we have to grab MIDI streaming interfaces here. 3179 */ 3180 .match_flags = USB_DEVICE_ID_MATCH_INT_CLASS | 3181 USB_DEVICE_ID_MATCH_INT_SUBCLASS, 3182 .bInterfaceClass = USB_CLASS_AUDIO, 3183 .bInterfaceSubClass = USB_SUBCLASS_MIDISTREAMING, 3184 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { 3185 .ifnum = QUIRK_ANY_INTERFACE, 3186 .type = QUIRK_MIDI_STANDARD_INTERFACE 3187 } 3188 }, 3189 3190 /* disabled due to regression for other devices; 3191 * see https://bugzilla.kernel.org/show_bug.cgi?id=199905 3192 */ 3193 #if 0 3194 { 3195 /* 3196 * Nura's first gen headphones use Cambridge Silicon Radio's vendor 3197 * ID, but it looks like the product ID actually is only for Nura. 3198 * The capture interface does not work at all (even on Windows), 3199 * and only the 48 kHz sample rate works for the playback interface. 3200 */ 3201 USB_DEVICE(0x0a12, 0x1243), 3202 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) { 3203 .ifnum = QUIRK_ANY_INTERFACE, 3204 .type = QUIRK_COMPOSITE, 3205 .data = (const struct snd_usb_audio_quirk[]) { 3206 { 3207 .ifnum = 0, 3208 .type = QUIRK_AUDIO_STANDARD_MIXER, 3209 }, 3210 /* Capture */ 3211 { 3212 .ifnum = 1, 3213 .type = QUIRK_IGNORE_INTERFACE, 3214 }, 3215 /* Playback */ 3216 { 3217 .ifnum = 2, 3218 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 3219 .data = &(const struct audioformat) { 3220 .formats = SNDRV_PCM_FMTBIT_S16_LE, 3221 .channels = 2, 3222 .iface = 2, 3223 .altsetting = 1, 3224 .altset_idx = 1, 3225 .attributes = UAC_EP_CS_ATTR_FILL_MAX | 3226 UAC_EP_CS_ATTR_SAMPLE_RATE, 3227 .endpoint = 0x03, 3228 .ep_attr = USB_ENDPOINT_XFER_ISOC, 3229 .rates = SNDRV_PCM_RATE_48000, 3230 .rate_min = 48000, 3231 .rate_max = 48000, 3232 .nr_rates = 1, 3233 .rate_table = (unsigned int[]) { 3234 48000 3235 } 3236 } 3237 }, 3238 { 3239 .ifnum = -1 3240 }, 3241 } 3242 } 3243 }, 3244 #endif /* disabled */ 3245 3246 { 3247 /* 3248 * Bower's & Wilkins PX headphones only support the 48 kHz sample rate 3249 * even though it advertises more. The capture interface doesn't work 3250 * even on windows. 3251 */ 3252 USB_DEVICE(0x19b5, 0x0021), 3253 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) { 3254 .ifnum = QUIRK_ANY_INTERFACE, 3255 .type = QUIRK_COMPOSITE, 3256 .data = (const struct snd_usb_audio_quirk[]) { 3257 { 3258 .ifnum = 0, 3259 .type = QUIRK_AUDIO_STANDARD_MIXER, 3260 }, 3261 /* Playback */ 3262 { 3263 .ifnum = 1, 3264 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 3265 .data = &(const struct audioformat) { 3266 .formats = SNDRV_PCM_FMTBIT_S16_LE, 3267 .channels = 2, 3268 .iface = 1, 3269 .altsetting = 1, 3270 .altset_idx = 1, 3271 .attributes = UAC_EP_CS_ATTR_FILL_MAX | 3272 UAC_EP_CS_ATTR_SAMPLE_RATE, 3273 .endpoint = 0x03, 3274 .ep_attr = USB_ENDPOINT_XFER_ISOC, 3275 .rates = SNDRV_PCM_RATE_48000, 3276 .rate_min = 48000, 3277 .rate_max = 48000, 3278 .nr_rates = 1, 3279 .rate_table = (unsigned int[]) { 3280 48000 3281 } 3282 } 3283 }, 3284 { 3285 .ifnum = -1 3286 }, 3287 } 3288 } 3289 }, 3290 /* MOTU Microbook II */ 3291 { 3292 USB_DEVICE_VENDOR_SPEC(0x07fd, 0x0004), 3293 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) { 3294 .vendor_name = "MOTU", 3295 .product_name = "MicroBookII", 3296 .ifnum = QUIRK_ANY_INTERFACE, 3297 .type = QUIRK_COMPOSITE, 3298 .data = (const struct snd_usb_audio_quirk[]) { 3299 { 3300 .ifnum = 0, 3301 .type = QUIRK_AUDIO_STANDARD_MIXER, 3302 }, 3303 { 3304 .ifnum = 0, 3305 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 3306 .data = &(const struct audioformat) { 3307 .formats = SNDRV_PCM_FMTBIT_S24_3BE, 3308 .channels = 6, 3309 .iface = 0, 3310 .altsetting = 1, 3311 .altset_idx = 1, 3312 .attributes = 0, 3313 .endpoint = 0x84, 3314 .rates = SNDRV_PCM_RATE_96000, 3315 .ep_attr = USB_ENDPOINT_XFER_ISOC | 3316 USB_ENDPOINT_SYNC_ASYNC, 3317 .rate_min = 96000, 3318 .rate_max = 96000, 3319 .nr_rates = 1, 3320 .maxpacksize = 0x00d8, 3321 .rate_table = (unsigned int[]) { 3322 96000 3323 } 3324 } 3325 }, 3326 { 3327 .ifnum = 0, 3328 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 3329 .data = &(const struct audioformat) { 3330 .formats = SNDRV_PCM_FMTBIT_S24_3BE, 3331 .channels = 8, 3332 .iface = 0, 3333 .altsetting = 1, 3334 .altset_idx = 1, 3335 .attributes = 0, 3336 .endpoint = 0x03, 3337 .rates = SNDRV_PCM_RATE_96000, 3338 .ep_attr = USB_ENDPOINT_XFER_ISOC | 3339 USB_ENDPOINT_SYNC_ASYNC, 3340 .rate_min = 96000, 3341 .rate_max = 96000, 3342 .nr_rates = 1, 3343 .maxpacksize = 0x0120, 3344 .rate_table = (unsigned int[]) { 3345 96000 3346 } 3347 } 3348 }, 3349 { 3350 .ifnum = -1 3351 } 3352 } 3353 } 3354 }, 3355 { 3356 /* 3357 * PIONEER DJ DDJ-SX3 3358 * PCM is 12 channels out, 10 channels in @ 44.1 fixed 3359 * interface 0, vendor class alt setting 1 for endpoints 5 and 0x86 3360 * The feedback for the output is the input. 3361 */ 3362 USB_DEVICE_VENDOR_SPEC(0x2b73, 0x0023), 3363 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) { 3364 .ifnum = QUIRK_ANY_INTERFACE, 3365 .type = QUIRK_COMPOSITE, 3366 .data = (const struct snd_usb_audio_quirk[]) { 3367 { 3368 .ifnum = 0, 3369 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 3370 .data = &(const struct audioformat) { 3371 .formats = SNDRV_PCM_FMTBIT_S32_LE, 3372 .channels = 12, 3373 .iface = 0, 3374 .altsetting = 1, 3375 .altset_idx = 1, 3376 .endpoint = 0x05, 3377 .ep_attr = USB_ENDPOINT_XFER_ISOC| 3378 USB_ENDPOINT_SYNC_ASYNC, 3379 .rates = SNDRV_PCM_RATE_44100, 3380 .rate_min = 44100, 3381 .rate_max = 44100, 3382 .nr_rates = 1, 3383 .rate_table = (unsigned int[]) { 44100 } 3384 } 3385 }, 3386 { 3387 .ifnum = 0, 3388 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 3389 .data = &(const struct audioformat) { 3390 .formats = SNDRV_PCM_FMTBIT_S32_LE, 3391 .channels = 10, 3392 .iface = 0, 3393 .altsetting = 1, 3394 .altset_idx = 1, 3395 .endpoint = 0x86, 3396 .ep_idx = 1, 3397 .ep_attr = USB_ENDPOINT_XFER_ISOC| 3398 USB_ENDPOINT_SYNC_ASYNC| 3399 USB_ENDPOINT_USAGE_IMPLICIT_FB, 3400 .rates = SNDRV_PCM_RATE_44100, 3401 .rate_min = 44100, 3402 .rate_max = 44100, 3403 .nr_rates = 1, 3404 .rate_table = (unsigned int[]) { 44100 } 3405 } 3406 }, 3407 { 3408 .ifnum = -1 3409 } 3410 } 3411 } 3412 }, 3413 { 3414 /* 3415 * Pioneer DJ DJM-250MK2 3416 * PCM is 8 channels out @ 48 fixed (endpoint 0x01) 3417 * and 8 channels in @ 48 fixed (endpoint 0x82). 3418 * 3419 * Both playback and recording is working, even simultaneously. 3420 * 3421 * Playback channels could be mapped to: 3422 * - CH1 3423 * - CH2 3424 * - AUX 3425 * 3426 * Recording channels could be mapped to: 3427 * - Post CH1 Fader 3428 * - Post CH2 Fader 3429 * - Cross Fader A 3430 * - Cross Fader B 3431 * - MIC 3432 * - AUX 3433 * - REC OUT 3434 * 3435 * There is remaining problem with recording directly from PHONO/LINE. 3436 * If we map a channel to: 3437 * - CH1 Control Tone PHONO 3438 * - CH1 Control Tone LINE 3439 * - CH2 Control Tone PHONO 3440 * - CH2 Control Tone LINE 3441 * it is silent. 3442 * There is no signal even on other operating systems with official drivers. 3443 * The signal appears only when a supported application is started. 3444 * This needs to be investigated yet... 3445 * (there is quite a lot communication on the USB in both directions) 3446 * 3447 * In current version this mixer could be used for playback 3448 * and for recording from vinyls (through Post CH* Fader) 3449 * but not for DVS (Digital Vinyl Systems) like in Mixxx. 3450 */ 3451 USB_DEVICE_VENDOR_SPEC(0x2b73, 0x0017), 3452 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) { 3453 .ifnum = QUIRK_ANY_INTERFACE, 3454 .type = QUIRK_COMPOSITE, 3455 .data = (const struct snd_usb_audio_quirk[]) { 3456 { 3457 .ifnum = 0, 3458 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 3459 .data = &(const struct audioformat) { 3460 .formats = SNDRV_PCM_FMTBIT_S24_3LE, 3461 .channels = 8, // outputs 3462 .iface = 0, 3463 .altsetting = 1, 3464 .altset_idx = 1, 3465 .endpoint = 0x01, 3466 .ep_attr = USB_ENDPOINT_XFER_ISOC| 3467 USB_ENDPOINT_SYNC_ASYNC, 3468 .rates = SNDRV_PCM_RATE_48000, 3469 .rate_min = 48000, 3470 .rate_max = 48000, 3471 .nr_rates = 1, 3472 .rate_table = (unsigned int[]) { 48000 } 3473 } 3474 }, 3475 { 3476 .ifnum = 0, 3477 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 3478 .data = &(const struct audioformat) { 3479 .formats = SNDRV_PCM_FMTBIT_S24_3LE, 3480 .channels = 8, // inputs 3481 .iface = 0, 3482 .altsetting = 1, 3483 .altset_idx = 1, 3484 .endpoint = 0x82, 3485 .ep_idx = 1, 3486 .ep_attr = USB_ENDPOINT_XFER_ISOC| 3487 USB_ENDPOINT_SYNC_ASYNC| 3488 USB_ENDPOINT_USAGE_IMPLICIT_FB, 3489 .rates = SNDRV_PCM_RATE_48000, 3490 .rate_min = 48000, 3491 .rate_max = 48000, 3492 .nr_rates = 1, 3493 .rate_table = (unsigned int[]) { 48000 } 3494 } 3495 }, 3496 { 3497 .ifnum = -1 3498 } 3499 } 3500 } 3501 }, 3502 { 3503 /* 3504 * PIONEER DJ DDJ-RB 3505 * PCM is 4 channels out, 2 dummy channels in @ 44.1 fixed 3506 * The feedback for the output is the dummy input. 3507 */ 3508 USB_DEVICE_VENDOR_SPEC(0x2b73, 0x000e), 3509 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) { 3510 .ifnum = QUIRK_ANY_INTERFACE, 3511 .type = QUIRK_COMPOSITE, 3512 .data = (const struct snd_usb_audio_quirk[]) { 3513 { 3514 .ifnum = 0, 3515 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 3516 .data = &(const struct audioformat) { 3517 .formats = SNDRV_PCM_FMTBIT_S24_3LE, 3518 .channels = 4, 3519 .iface = 0, 3520 .altsetting = 1, 3521 .altset_idx = 1, 3522 .endpoint = 0x01, 3523 .ep_attr = USB_ENDPOINT_XFER_ISOC| 3524 USB_ENDPOINT_SYNC_ASYNC, 3525 .rates = SNDRV_PCM_RATE_44100, 3526 .rate_min = 44100, 3527 .rate_max = 44100, 3528 .nr_rates = 1, 3529 .rate_table = (unsigned int[]) { 44100 } 3530 } 3531 }, 3532 { 3533 .ifnum = 0, 3534 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 3535 .data = &(const struct audioformat) { 3536 .formats = SNDRV_PCM_FMTBIT_S24_3LE, 3537 .channels = 2, 3538 .iface = 0, 3539 .altsetting = 1, 3540 .altset_idx = 1, 3541 .endpoint = 0x82, 3542 .ep_idx = 1, 3543 .ep_attr = USB_ENDPOINT_XFER_ISOC| 3544 USB_ENDPOINT_SYNC_ASYNC| 3545 USB_ENDPOINT_USAGE_IMPLICIT_FB, 3546 .rates = SNDRV_PCM_RATE_44100, 3547 .rate_min = 44100, 3548 .rate_max = 44100, 3549 .nr_rates = 1, 3550 .rate_table = (unsigned int[]) { 44100 } 3551 } 3552 }, 3553 { 3554 .ifnum = -1 3555 } 3556 } 3557 } 3558 }, 3559 3560 { 3561 /* 3562 * PIONEER DJ DDJ-RR 3563 * PCM is 6 channels out & 4 channels in @ 44.1 fixed 3564 */ 3565 USB_DEVICE_VENDOR_SPEC(0x2b73, 0x000d), 3566 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) { 3567 .ifnum = QUIRK_ANY_INTERFACE, 3568 .type = QUIRK_COMPOSITE, 3569 .data = (const struct snd_usb_audio_quirk[]) { 3570 { 3571 .ifnum = 0, 3572 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 3573 .data = &(const struct audioformat) { 3574 .formats = SNDRV_PCM_FMTBIT_S24_3LE, 3575 .channels = 6, //Master, Headphones & Booth 3576 .iface = 0, 3577 .altsetting = 1, 3578 .altset_idx = 1, 3579 .endpoint = 0x01, 3580 .ep_attr = USB_ENDPOINT_XFER_ISOC| 3581 USB_ENDPOINT_SYNC_ASYNC, 3582 .rates = SNDRV_PCM_RATE_44100, 3583 .rate_min = 44100, 3584 .rate_max = 44100, 3585 .nr_rates = 1, 3586 .rate_table = (unsigned int[]) { 44100 } 3587 } 3588 }, 3589 { 3590 .ifnum = 0, 3591 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 3592 .data = &(const struct audioformat) { 3593 .formats = SNDRV_PCM_FMTBIT_S24_3LE, 3594 .channels = 4, //2x RCA inputs (CH1 & CH2) 3595 .iface = 0, 3596 .altsetting = 1, 3597 .altset_idx = 1, 3598 .endpoint = 0x82, 3599 .ep_idx = 1, 3600 .ep_attr = USB_ENDPOINT_XFER_ISOC| 3601 USB_ENDPOINT_SYNC_ASYNC| 3602 USB_ENDPOINT_USAGE_IMPLICIT_FB, 3603 .rates = SNDRV_PCM_RATE_44100, 3604 .rate_min = 44100, 3605 .rate_max = 44100, 3606 .nr_rates = 1, 3607 .rate_table = (unsigned int[]) { 44100 } 3608 } 3609 }, 3610 { 3611 .ifnum = -1 3612 } 3613 } 3614 } 3615 }, 3616 3617 { 3618 /* 3619 * PIONEER DJ DDJ-SR2 3620 * PCM is 4 channels out, 6 channels in @ 44.1 fixed 3621 * The Feedback for the output is the input 3622 */ 3623 USB_DEVICE_VENDOR_SPEC(0x2b73, 0x001e), 3624 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) { 3625 .ifnum = QUIRK_ANY_INTERFACE, 3626 .type = QUIRK_COMPOSITE, 3627 .data = (const struct snd_usb_audio_quirk[]) { 3628 { 3629 .ifnum = 0, 3630 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 3631 .data = &(const struct audioformat) { 3632 .formats = SNDRV_PCM_FMTBIT_S24_3LE, 3633 .channels = 4, 3634 .iface = 0, 3635 .altsetting = 1, 3636 .altset_idx = 1, 3637 .endpoint = 0x01, 3638 .ep_attr = USB_ENDPOINT_XFER_ISOC| 3639 USB_ENDPOINT_SYNC_ASYNC, 3640 .rates = SNDRV_PCM_RATE_44100, 3641 .rate_min = 44100, 3642 .rate_max = 44100, 3643 .nr_rates = 1, 3644 .rate_table = (unsigned int[]) { 44100 } 3645 } 3646 }, 3647 { 3648 .ifnum = 0, 3649 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 3650 .data = &(const struct audioformat) { 3651 .formats = SNDRV_PCM_FMTBIT_S24_3LE, 3652 .channels = 6, 3653 .iface = 0, 3654 .altsetting = 1, 3655 .altset_idx = 1, 3656 .endpoint = 0x82, 3657 .ep_idx = 1, 3658 .ep_attr = USB_ENDPOINT_XFER_ISOC| 3659 USB_ENDPOINT_SYNC_ASYNC| 3660 USB_ENDPOINT_USAGE_IMPLICIT_FB, 3661 .rates = SNDRV_PCM_RATE_44100, 3662 .rate_min = 44100, 3663 .rate_max = 44100, 3664 .nr_rates = 1, 3665 .rate_table = (unsigned int[]) { 44100 } 3666 } 3667 }, 3668 { 3669 .ifnum = -1 3670 } 3671 } 3672 } 3673 }, 3674 3675 { 3676 /* 3677 * Pioneer DJ DJM-900NXS2 3678 * 10 channels playback & 12 channels capture @ 44.1/48/96kHz S24LE 3679 */ 3680 USB_DEVICE_VENDOR_SPEC(0x2b73, 0x000a), 3681 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) { 3682 .ifnum = QUIRK_ANY_INTERFACE, 3683 .type = QUIRK_COMPOSITE, 3684 .data = (const struct snd_usb_audio_quirk[]) { 3685 { 3686 .ifnum = 0, 3687 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 3688 .data = &(const struct audioformat) { 3689 .formats = SNDRV_PCM_FMTBIT_S24_3LE, 3690 .channels = 10, 3691 .iface = 0, 3692 .altsetting = 1, 3693 .altset_idx = 1, 3694 .endpoint = 0x01, 3695 .ep_attr = USB_ENDPOINT_XFER_ISOC| 3696 USB_ENDPOINT_SYNC_ASYNC, 3697 .rates = SNDRV_PCM_RATE_44100| 3698 SNDRV_PCM_RATE_48000| 3699 SNDRV_PCM_RATE_96000, 3700 .rate_min = 44100, 3701 .rate_max = 96000, 3702 .nr_rates = 3, 3703 .rate_table = (unsigned int[]) { 3704 44100, 48000, 96000 3705 } 3706 } 3707 }, 3708 { 3709 .ifnum = 0, 3710 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 3711 .data = &(const struct audioformat) { 3712 .formats = SNDRV_PCM_FMTBIT_S24_3LE, 3713 .channels = 12, 3714 .iface = 0, 3715 .altsetting = 1, 3716 .altset_idx = 1, 3717 .endpoint = 0x82, 3718 .ep_idx = 1, 3719 .ep_attr = USB_ENDPOINT_XFER_ISOC| 3720 USB_ENDPOINT_SYNC_ASYNC| 3721 USB_ENDPOINT_USAGE_IMPLICIT_FB, 3722 .rates = SNDRV_PCM_RATE_44100| 3723 SNDRV_PCM_RATE_48000| 3724 SNDRV_PCM_RATE_96000, 3725 .rate_min = 44100, 3726 .rate_max = 96000, 3727 .nr_rates = 3, 3728 .rate_table = (unsigned int[]) { 3729 44100, 48000, 96000 3730 } 3731 } 3732 }, 3733 { 3734 .ifnum = -1 3735 } 3736 } 3737 } 3738 }, 3739 3740 /* 3741 * MacroSilicon MS2109 based HDMI capture cards 3742 * 3743 * These claim 96kHz 1ch in the descriptors, but are actually 48kHz 2ch. 3744 * They also need QUIRK_AUDIO_ALIGN_TRANSFER, which makes one wonder if 3745 * they pretend to be 96kHz mono as a workaround for stereo being broken 3746 * by that... 3747 * 3748 * They also have an issue with initial stream alignment that causes the 3749 * channels to be swapped and out of phase, which is dealt with in quirks.c. 3750 */ 3751 { 3752 USB_AUDIO_DEVICE(0x534d, 0x2109), 3753 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) { 3754 .vendor_name = "MacroSilicon", 3755 .product_name = "MS2109", 3756 .ifnum = QUIRK_ANY_INTERFACE, 3757 .type = QUIRK_COMPOSITE, 3758 .data = &(const struct snd_usb_audio_quirk[]) { 3759 { 3760 .ifnum = 2, 3761 .type = QUIRK_AUDIO_ALIGN_TRANSFER, 3762 }, 3763 { 3764 .ifnum = 2, 3765 .type = QUIRK_AUDIO_STANDARD_MIXER, 3766 }, 3767 { 3768 .ifnum = 3, 3769 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 3770 .data = &(const struct audioformat) { 3771 .formats = SNDRV_PCM_FMTBIT_S16_LE, 3772 .channels = 2, 3773 .iface = 3, 3774 .altsetting = 1, 3775 .altset_idx = 1, 3776 .attributes = 0, 3777 .endpoint = 0x82, 3778 .ep_attr = USB_ENDPOINT_XFER_ISOC | 3779 USB_ENDPOINT_SYNC_ASYNC, 3780 .rates = SNDRV_PCM_RATE_CONTINUOUS, 3781 .rate_min = 48000, 3782 .rate_max = 48000, 3783 } 3784 }, 3785 { 3786 .ifnum = -1 3787 } 3788 } 3789 } 3790 }, 3791 { 3792 /* 3793 * Pioneer DJ DJM-750 3794 * 8 channels playback & 8 channels capture @ 44.1/48/96kHz S24LE 3795 */ 3796 USB_DEVICE_VENDOR_SPEC(0x08e4, 0x017f), 3797 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) { 3798 .ifnum = QUIRK_ANY_INTERFACE, 3799 .type = QUIRK_COMPOSITE, 3800 .data = (const struct snd_usb_audio_quirk[]) { 3801 { 3802 .ifnum = 0, 3803 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 3804 .data = &(const struct audioformat) { 3805 .formats = SNDRV_PCM_FMTBIT_S24_3LE, 3806 .channels = 8, 3807 .iface = 0, 3808 .altsetting = 1, 3809 .altset_idx = 1, 3810 .endpoint = 0x05, 3811 .ep_attr = USB_ENDPOINT_XFER_ISOC| 3812 USB_ENDPOINT_SYNC_ASYNC, 3813 .rates = SNDRV_PCM_RATE_44100| 3814 SNDRV_PCM_RATE_48000| 3815 SNDRV_PCM_RATE_96000, 3816 .rate_min = 44100, 3817 .rate_max = 96000, 3818 .nr_rates = 3, 3819 .rate_table = (unsigned int[]) { 44100, 48000, 96000 } 3820 } 3821 }, 3822 { 3823 .ifnum = 0, 3824 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 3825 .data = &(const struct audioformat) { 3826 .formats = SNDRV_PCM_FMTBIT_S24_3LE, 3827 .channels = 8, 3828 .iface = 0, 3829 .altsetting = 1, 3830 .altset_idx = 1, 3831 .endpoint = 0x86, 3832 .ep_idx = 1, 3833 .ep_attr = USB_ENDPOINT_XFER_ISOC| 3834 USB_ENDPOINT_SYNC_ASYNC| 3835 USB_ENDPOINT_USAGE_IMPLICIT_FB, 3836 .rates = SNDRV_PCM_RATE_44100| 3837 SNDRV_PCM_RATE_48000| 3838 SNDRV_PCM_RATE_96000, 3839 .rate_min = 44100, 3840 .rate_max = 96000, 3841 .nr_rates = 3, 3842 .rate_table = (unsigned int[]) { 44100, 48000, 96000 } 3843 } 3844 }, 3845 { 3846 .ifnum = -1 3847 } 3848 } 3849 } 3850 }, 3851 { 3852 /* 3853 * Pioneer DJ DJM-850 3854 * 8 channels playback and 8 channels capture @ 44.1/48/96kHz S24LE 3855 * Playback on EP 0x05 3856 * Capture on EP 0x86 3857 */ 3858 USB_DEVICE_VENDOR_SPEC(0x08e4, 0x0163), 3859 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) { 3860 .ifnum = QUIRK_ANY_INTERFACE, 3861 .type = QUIRK_COMPOSITE, 3862 .data = (const struct snd_usb_audio_quirk[]) { 3863 { 3864 .ifnum = 0, 3865 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 3866 .data = &(const struct audioformat) { 3867 .formats = SNDRV_PCM_FMTBIT_S24_3LE, 3868 .channels = 8, 3869 .iface = 0, 3870 .altsetting = 1, 3871 .altset_idx = 1, 3872 .endpoint = 0x05, 3873 .ep_attr = USB_ENDPOINT_XFER_ISOC| 3874 USB_ENDPOINT_SYNC_ASYNC| 3875 USB_ENDPOINT_USAGE_DATA, 3876 .rates = SNDRV_PCM_RATE_44100| 3877 SNDRV_PCM_RATE_48000| 3878 SNDRV_PCM_RATE_96000, 3879 .rate_min = 44100, 3880 .rate_max = 96000, 3881 .nr_rates = 3, 3882 .rate_table = (unsigned int[]) { 44100, 48000, 96000 } 3883 } 3884 }, 3885 { 3886 .ifnum = 0, 3887 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 3888 .data = &(const struct audioformat) { 3889 .formats = SNDRV_PCM_FMTBIT_S24_3LE, 3890 .channels = 8, 3891 .iface = 0, 3892 .altsetting = 1, 3893 .altset_idx = 1, 3894 .endpoint = 0x86, 3895 .ep_idx = 1, 3896 .ep_attr = USB_ENDPOINT_XFER_ISOC| 3897 USB_ENDPOINT_SYNC_ASYNC| 3898 USB_ENDPOINT_USAGE_DATA, 3899 .rates = SNDRV_PCM_RATE_44100| 3900 SNDRV_PCM_RATE_48000| 3901 SNDRV_PCM_RATE_96000, 3902 .rate_min = 44100, 3903 .rate_max = 96000, 3904 .nr_rates = 3, 3905 .rate_table = (unsigned int[]) { 44100, 48000, 96000 } 3906 } 3907 }, 3908 { 3909 .ifnum = -1 3910 } 3911 } 3912 } 3913 }, 3914 { 3915 /* 3916 * Pioneer DJ DJM-450 3917 * PCM is 8 channels out @ 48 fixed (endpoint 0x01) 3918 * and 8 channels in @ 48 fixed (endpoint 0x82). 3919 */ 3920 USB_DEVICE_VENDOR_SPEC(0x2b73, 0x0013), 3921 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) { 3922 .ifnum = QUIRK_ANY_INTERFACE, 3923 .type = QUIRK_COMPOSITE, 3924 .data = (const struct snd_usb_audio_quirk[]) { 3925 { 3926 .ifnum = 0, 3927 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 3928 .data = &(const struct audioformat) { 3929 .formats = SNDRV_PCM_FMTBIT_S24_3LE, 3930 .channels = 8, // outputs 3931 .iface = 0, 3932 .altsetting = 1, 3933 .altset_idx = 1, 3934 .endpoint = 0x01, 3935 .ep_attr = USB_ENDPOINT_XFER_ISOC| 3936 USB_ENDPOINT_SYNC_ASYNC, 3937 .rates = SNDRV_PCM_RATE_48000, 3938 .rate_min = 48000, 3939 .rate_max = 48000, 3940 .nr_rates = 1, 3941 .rate_table = (unsigned int[]) { 48000 } 3942 } 3943 }, 3944 { 3945 .ifnum = 0, 3946 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 3947 .data = &(const struct audioformat) { 3948 .formats = SNDRV_PCM_FMTBIT_S24_3LE, 3949 .channels = 8, // inputs 3950 .iface = 0, 3951 .altsetting = 1, 3952 .altset_idx = 1, 3953 .endpoint = 0x82, 3954 .ep_idx = 1, 3955 .ep_attr = USB_ENDPOINT_XFER_ISOC| 3956 USB_ENDPOINT_SYNC_ASYNC| 3957 USB_ENDPOINT_USAGE_IMPLICIT_FB, 3958 .rates = SNDRV_PCM_RATE_48000, 3959 .rate_min = 48000, 3960 .rate_max = 48000, 3961 .nr_rates = 1, 3962 .rate_table = (unsigned int[]) { 48000 } 3963 } 3964 }, 3965 { 3966 .ifnum = -1 3967 } 3968 } 3969 } 3970 }, 3971 3972 #undef USB_DEVICE_VENDOR_SPEC 3973 #undef USB_AUDIO_DEVICE 3974