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 /* Native Instruments MK2 series */ 2734 { 2735 /* Komplete Audio 6 */ 2736 .match_flags = USB_DEVICE_ID_MATCH_DEVICE, 2737 .idVendor = 0x17cc, 2738 .idProduct = 0x1000, 2739 }, 2740 { 2741 /* Traktor Audio 6 */ 2742 .match_flags = USB_DEVICE_ID_MATCH_DEVICE, 2743 .idVendor = 0x17cc, 2744 .idProduct = 0x1010, 2745 }, 2746 { 2747 /* Traktor Audio 10 */ 2748 .match_flags = USB_DEVICE_ID_MATCH_DEVICE, 2749 .idVendor = 0x17cc, 2750 .idProduct = 0x1020, 2751 }, 2752 2753 /* QinHeng devices */ 2754 { 2755 USB_DEVICE(0x1a86, 0x752d), 2756 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) { 2757 .vendor_name = "QinHeng", 2758 .product_name = "CH345", 2759 .ifnum = 1, 2760 .type = QUIRK_MIDI_CH345 2761 } 2762 }, 2763 2764 /* KeithMcMillen Stringport */ 2765 { USB_DEVICE(0x1f38, 0x0001) }, /* FIXME: should be more restrictive matching */ 2766 2767 /* Miditech devices */ 2768 { 2769 USB_DEVICE(0x4752, 0x0011), 2770 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { 2771 .vendor_name = "Miditech", 2772 .product_name = "Midistart-2", 2773 .ifnum = 0, 2774 .type = QUIRK_MIDI_CME 2775 } 2776 }, 2777 2778 /* Central Music devices */ 2779 { 2780 /* this ID used by both Miditech MidiStudio-2 and CME UF-x */ 2781 USB_DEVICE(0x7104, 0x2202), 2782 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { 2783 .ifnum = 0, 2784 .type = QUIRK_MIDI_CME 2785 } 2786 }, 2787 2788 /* Digidesign Mbox */ 2789 { 2790 /* Thanks to Clemens Ladisch <clemens@ladisch.de> */ 2791 USB_DEVICE(0x0dba, 0x1000), 2792 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) { 2793 .vendor_name = "Digidesign", 2794 .product_name = "MBox", 2795 .ifnum = QUIRK_ANY_INTERFACE, 2796 .type = QUIRK_COMPOSITE, 2797 .data = (const struct snd_usb_audio_quirk[]){ 2798 { 2799 .ifnum = 0, 2800 .type = QUIRK_AUDIO_STANDARD_MIXER, 2801 }, 2802 { 2803 .ifnum = 1, 2804 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 2805 .data = &(const struct audioformat) { 2806 .formats = SNDRV_PCM_FMTBIT_S24_3BE, 2807 .channels = 2, 2808 .iface = 1, 2809 .altsetting = 1, 2810 .altset_idx = 1, 2811 .attributes = 0x4, 2812 .endpoint = 0x02, 2813 .ep_attr = USB_ENDPOINT_XFER_ISOC | 2814 USB_ENDPOINT_SYNC_SYNC, 2815 .maxpacksize = 0x130, 2816 .rates = SNDRV_PCM_RATE_48000, 2817 .rate_min = 48000, 2818 .rate_max = 48000, 2819 .nr_rates = 1, 2820 .rate_table = (unsigned int[]) { 2821 48000 2822 } 2823 } 2824 }, 2825 { 2826 .ifnum = 1, 2827 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 2828 .data = &(const struct audioformat) { 2829 .formats = SNDRV_PCM_FMTBIT_S24_3BE, 2830 .channels = 2, 2831 .iface = 1, 2832 .altsetting = 1, 2833 .altset_idx = 1, 2834 .attributes = 0x4, 2835 .endpoint = 0x81, 2836 .ep_attr = USB_ENDPOINT_XFER_ISOC | 2837 USB_ENDPOINT_SYNC_ASYNC, 2838 .maxpacksize = 0x130, 2839 .rates = SNDRV_PCM_RATE_48000, 2840 .rate_min = 48000, 2841 .rate_max = 48000, 2842 .nr_rates = 1, 2843 .rate_table = (unsigned int[]) { 2844 48000 2845 } 2846 } 2847 }, 2848 { 2849 .ifnum = -1 2850 } 2851 } 2852 } 2853 }, 2854 2855 /* DIGIDESIGN MBOX 2 */ 2856 { 2857 USB_DEVICE(0x0dba, 0x3000), 2858 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) { 2859 .vendor_name = "Digidesign", 2860 .product_name = "Mbox 2", 2861 .ifnum = QUIRK_ANY_INTERFACE, 2862 .type = QUIRK_COMPOSITE, 2863 .data = (const struct snd_usb_audio_quirk[]) { 2864 { 2865 .ifnum = 0, 2866 .type = QUIRK_IGNORE_INTERFACE 2867 }, 2868 { 2869 .ifnum = 1, 2870 .type = QUIRK_IGNORE_INTERFACE 2871 }, 2872 { 2873 .ifnum = 2, 2874 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 2875 .data = &(const struct audioformat) { 2876 .formats = SNDRV_PCM_FMTBIT_S24_3BE, 2877 .channels = 2, 2878 .iface = 2, 2879 .altsetting = 2, 2880 .altset_idx = 1, 2881 .attributes = 0x00, 2882 .endpoint = 0x03, 2883 .ep_attr = USB_ENDPOINT_SYNC_ASYNC, 2884 .rates = SNDRV_PCM_RATE_48000, 2885 .rate_min = 48000, 2886 .rate_max = 48000, 2887 .nr_rates = 1, 2888 .rate_table = (unsigned int[]) { 2889 48000 2890 } 2891 } 2892 }, 2893 { 2894 .ifnum = 3, 2895 .type = QUIRK_IGNORE_INTERFACE 2896 }, 2897 { 2898 .ifnum = 4, 2899 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 2900 .data = &(const struct audioformat) { 2901 .formats = SNDRV_PCM_FMTBIT_S24_3BE, 2902 .channels = 2, 2903 .iface = 4, 2904 .altsetting = 2, 2905 .altset_idx = 1, 2906 .attributes = UAC_EP_CS_ATTR_SAMPLE_RATE, 2907 .endpoint = 0x85, 2908 .ep_attr = USB_ENDPOINT_SYNC_SYNC, 2909 .rates = SNDRV_PCM_RATE_48000, 2910 .rate_min = 48000, 2911 .rate_max = 48000, 2912 .nr_rates = 1, 2913 .rate_table = (unsigned int[]) { 2914 48000 2915 } 2916 } 2917 }, 2918 { 2919 .ifnum = 5, 2920 .type = QUIRK_IGNORE_INTERFACE 2921 }, 2922 { 2923 .ifnum = 6, 2924 .type = QUIRK_MIDI_MIDIMAN, 2925 .data = &(const struct snd_usb_midi_endpoint_info) { 2926 .out_ep = 0x02, 2927 .out_cables = 0x0001, 2928 .in_ep = 0x81, 2929 .in_interval = 0x01, 2930 .in_cables = 0x0001 2931 } 2932 }, 2933 { 2934 .ifnum = -1 2935 } 2936 } 2937 } 2938 }, 2939 { 2940 /* Tascam US122 MKII - playback-only support */ 2941 USB_DEVICE_VENDOR_SPEC(0x0644, 0x8021), 2942 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) { 2943 .vendor_name = "TASCAM", 2944 .product_name = "US122 MKII", 2945 .ifnum = QUIRK_ANY_INTERFACE, 2946 .type = QUIRK_COMPOSITE, 2947 .data = (const struct snd_usb_audio_quirk[]) { 2948 { 2949 .ifnum = 0, 2950 .type = QUIRK_IGNORE_INTERFACE 2951 }, 2952 { 2953 .ifnum = 1, 2954 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 2955 .data = &(const struct audioformat) { 2956 .formats = SNDRV_PCM_FMTBIT_S24_3LE, 2957 .channels = 2, 2958 .iface = 1, 2959 .altsetting = 1, 2960 .altset_idx = 1, 2961 .attributes = UAC_EP_CS_ATTR_SAMPLE_RATE, 2962 .endpoint = 0x02, 2963 .ep_attr = USB_ENDPOINT_XFER_ISOC, 2964 .rates = SNDRV_PCM_RATE_44100 | 2965 SNDRV_PCM_RATE_48000 | 2966 SNDRV_PCM_RATE_88200 | 2967 SNDRV_PCM_RATE_96000, 2968 .rate_min = 44100, 2969 .rate_max = 96000, 2970 .nr_rates = 4, 2971 .rate_table = (unsigned int[]) { 2972 44100, 48000, 88200, 96000 2973 } 2974 } 2975 }, 2976 { 2977 .ifnum = -1 2978 } 2979 } 2980 } 2981 }, 2982 2983 /* Denon DN-X1600 */ 2984 { 2985 USB_AUDIO_DEVICE(0x154e, 0x500e), 2986 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) { 2987 .vendor_name = "Denon", 2988 .product_name = "DN-X1600", 2989 .ifnum = QUIRK_ANY_INTERFACE, 2990 .type = QUIRK_COMPOSITE, 2991 .data = (const struct snd_usb_audio_quirk[]){ 2992 { 2993 .ifnum = 0, 2994 .type = QUIRK_IGNORE_INTERFACE, 2995 }, 2996 { 2997 .ifnum = 1, 2998 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 2999 .data = &(const struct audioformat) { 3000 .formats = SNDRV_PCM_FMTBIT_S24_3LE, 3001 .channels = 8, 3002 .iface = 1, 3003 .altsetting = 1, 3004 .altset_idx = 1, 3005 .attributes = 0x0, 3006 .endpoint = 0x01, 3007 .ep_attr = USB_ENDPOINT_XFER_ISOC | 3008 USB_ENDPOINT_SYNC_ADAPTIVE, 3009 .maxpacksize = 0x138, 3010 .rates = SNDRV_PCM_RATE_48000, 3011 .rate_min = 48000, 3012 .rate_max = 48000, 3013 .nr_rates = 1, 3014 .rate_table = (unsigned int[]) { 3015 48000 3016 } 3017 } 3018 }, 3019 { 3020 .ifnum = 2, 3021 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 3022 .data = &(const struct audioformat) { 3023 .formats = SNDRV_PCM_FMTBIT_S24_3LE, 3024 .channels = 8, 3025 .iface = 2, 3026 .altsetting = 1, 3027 .altset_idx = 1, 3028 .attributes = 0x0, 3029 .endpoint = 0x85, 3030 .ep_attr = USB_ENDPOINT_XFER_ISOC | 3031 USB_ENDPOINT_SYNC_ADAPTIVE, 3032 .maxpacksize = 0x138, 3033 .rates = SNDRV_PCM_RATE_48000, 3034 .rate_min = 48000, 3035 .rate_max = 48000, 3036 .nr_rates = 1, 3037 .rate_table = (unsigned int[]) { 3038 48000 3039 } 3040 } 3041 }, 3042 { 3043 .ifnum = 4, 3044 .type = QUIRK_MIDI_STANDARD_INTERFACE, 3045 }, 3046 { 3047 .ifnum = -1 3048 } 3049 } 3050 } 3051 }, 3052 3053 /* Microsoft XboxLive Headset/Xbox Communicator */ 3054 { 3055 USB_DEVICE(0x045e, 0x0283), 3056 .bInterfaceClass = USB_CLASS_PER_INTERFACE, 3057 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) { 3058 .vendor_name = "Microsoft", 3059 .product_name = "XboxLive Headset/Xbox Communicator", 3060 .ifnum = QUIRK_ANY_INTERFACE, 3061 .type = QUIRK_COMPOSITE, 3062 .data = &(const struct snd_usb_audio_quirk[]) { 3063 { 3064 /* playback */ 3065 .ifnum = 0, 3066 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 3067 .data = &(const struct audioformat) { 3068 .formats = SNDRV_PCM_FMTBIT_S16_LE, 3069 .channels = 1, 3070 .iface = 0, 3071 .altsetting = 0, 3072 .altset_idx = 0, 3073 .attributes = 0, 3074 .endpoint = 0x04, 3075 .ep_attr = 0x05, 3076 .rates = SNDRV_PCM_RATE_CONTINUOUS, 3077 .rate_min = 22050, 3078 .rate_max = 22050 3079 } 3080 }, 3081 { 3082 /* capture */ 3083 .ifnum = 1, 3084 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 3085 .data = &(const struct audioformat) { 3086 .formats = SNDRV_PCM_FMTBIT_S16_LE, 3087 .channels = 1, 3088 .iface = 1, 3089 .altsetting = 0, 3090 .altset_idx = 0, 3091 .attributes = 0, 3092 .endpoint = 0x85, 3093 .ep_attr = 0x05, 3094 .rates = SNDRV_PCM_RATE_CONTINUOUS, 3095 .rate_min = 16000, 3096 .rate_max = 16000 3097 } 3098 }, 3099 { 3100 .ifnum = -1 3101 } 3102 } 3103 } 3104 }, 3105 3106 /* Reloop Play */ 3107 { 3108 USB_DEVICE(0x200c, 0x100b), 3109 .bInterfaceClass = USB_CLASS_PER_INTERFACE, 3110 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) { 3111 .ifnum = QUIRK_ANY_INTERFACE, 3112 .type = QUIRK_COMPOSITE, 3113 .data = &(const struct snd_usb_audio_quirk[]) { 3114 { 3115 .ifnum = 0, 3116 .type = QUIRK_AUDIO_STANDARD_MIXER, 3117 }, 3118 { 3119 .ifnum = 1, 3120 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 3121 .data = &(const struct audioformat) { 3122 .formats = SNDRV_PCM_FMTBIT_S24_3LE, 3123 .channels = 4, 3124 .iface = 1, 3125 .altsetting = 1, 3126 .altset_idx = 1, 3127 .attributes = UAC_EP_CS_ATTR_SAMPLE_RATE, 3128 .endpoint = 0x01, 3129 .ep_attr = USB_ENDPOINT_SYNC_ADAPTIVE, 3130 .rates = SNDRV_PCM_RATE_44100 | 3131 SNDRV_PCM_RATE_48000, 3132 .rate_min = 44100, 3133 .rate_max = 48000, 3134 .nr_rates = 2, 3135 .rate_table = (unsigned int[]) { 3136 44100, 48000 3137 } 3138 } 3139 }, 3140 { 3141 .ifnum = -1 3142 } 3143 } 3144 } 3145 }, 3146 3147 { 3148 /* 3149 * ZOOM R16/24 in audio interface mode. 3150 * Playback requires an extra four byte LE length indicator 3151 * at the start of each isochronous packet. This quirk is 3152 * enabled in create_standard_audio_quirk(). 3153 */ 3154 USB_DEVICE(0x1686, 0x00dd), 3155 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { 3156 .ifnum = QUIRK_ANY_INTERFACE, 3157 .type = QUIRK_COMPOSITE, 3158 .data = (const struct snd_usb_audio_quirk[]) { 3159 { 3160 /* Playback */ 3161 .ifnum = 1, 3162 .type = QUIRK_AUDIO_STANDARD_INTERFACE, 3163 }, 3164 { 3165 /* Capture */ 3166 .ifnum = 2, 3167 .type = QUIRK_AUDIO_STANDARD_INTERFACE, 3168 }, 3169 { 3170 /* Midi */ 3171 .ifnum = 3, 3172 .type = QUIRK_MIDI_STANDARD_INTERFACE 3173 }, 3174 { 3175 .ifnum = -1 3176 }, 3177 } 3178 } 3179 }, 3180 3181 { 3182 /* 3183 * Some USB MIDI devices don't have an audio control interface, 3184 * so we have to grab MIDI streaming interfaces here. 3185 */ 3186 .match_flags = USB_DEVICE_ID_MATCH_INT_CLASS | 3187 USB_DEVICE_ID_MATCH_INT_SUBCLASS, 3188 .bInterfaceClass = USB_CLASS_AUDIO, 3189 .bInterfaceSubClass = USB_SUBCLASS_MIDISTREAMING, 3190 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { 3191 .ifnum = QUIRK_ANY_INTERFACE, 3192 .type = QUIRK_MIDI_STANDARD_INTERFACE 3193 } 3194 }, 3195 3196 /* disabled due to regression for other devices; 3197 * see https://bugzilla.kernel.org/show_bug.cgi?id=199905 3198 */ 3199 #if 0 3200 { 3201 /* 3202 * Nura's first gen headphones use Cambridge Silicon Radio's vendor 3203 * ID, but it looks like the product ID actually is only for Nura. 3204 * The capture interface does not work at all (even on Windows), 3205 * and only the 48 kHz sample rate works for the playback interface. 3206 */ 3207 USB_DEVICE(0x0a12, 0x1243), 3208 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) { 3209 .ifnum = QUIRK_ANY_INTERFACE, 3210 .type = QUIRK_COMPOSITE, 3211 .data = (const struct snd_usb_audio_quirk[]) { 3212 { 3213 .ifnum = 0, 3214 .type = QUIRK_AUDIO_STANDARD_MIXER, 3215 }, 3216 /* Capture */ 3217 { 3218 .ifnum = 1, 3219 .type = QUIRK_IGNORE_INTERFACE, 3220 }, 3221 /* Playback */ 3222 { 3223 .ifnum = 2, 3224 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 3225 .data = &(const struct audioformat) { 3226 .formats = SNDRV_PCM_FMTBIT_S16_LE, 3227 .channels = 2, 3228 .iface = 2, 3229 .altsetting = 1, 3230 .altset_idx = 1, 3231 .attributes = UAC_EP_CS_ATTR_FILL_MAX | 3232 UAC_EP_CS_ATTR_SAMPLE_RATE, 3233 .endpoint = 0x03, 3234 .ep_attr = USB_ENDPOINT_XFER_ISOC, 3235 .rates = SNDRV_PCM_RATE_48000, 3236 .rate_min = 48000, 3237 .rate_max = 48000, 3238 .nr_rates = 1, 3239 .rate_table = (unsigned int[]) { 3240 48000 3241 } 3242 } 3243 }, 3244 { 3245 .ifnum = -1 3246 }, 3247 } 3248 } 3249 }, 3250 #endif /* disabled */ 3251 3252 { 3253 /* 3254 * Bower's & Wilkins PX headphones only support the 48 kHz sample rate 3255 * even though it advertises more. The capture interface doesn't work 3256 * even on windows. 3257 */ 3258 USB_DEVICE(0x19b5, 0x0021), 3259 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) { 3260 .ifnum = QUIRK_ANY_INTERFACE, 3261 .type = QUIRK_COMPOSITE, 3262 .data = (const struct snd_usb_audio_quirk[]) { 3263 { 3264 .ifnum = 0, 3265 .type = QUIRK_AUDIO_STANDARD_MIXER, 3266 }, 3267 /* Playback */ 3268 { 3269 .ifnum = 1, 3270 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 3271 .data = &(const struct audioformat) { 3272 .formats = SNDRV_PCM_FMTBIT_S16_LE, 3273 .channels = 2, 3274 .iface = 1, 3275 .altsetting = 1, 3276 .altset_idx = 1, 3277 .attributes = UAC_EP_CS_ATTR_FILL_MAX | 3278 UAC_EP_CS_ATTR_SAMPLE_RATE, 3279 .endpoint = 0x03, 3280 .ep_attr = USB_ENDPOINT_XFER_ISOC, 3281 .rates = SNDRV_PCM_RATE_48000, 3282 .rate_min = 48000, 3283 .rate_max = 48000, 3284 .nr_rates = 1, 3285 .rate_table = (unsigned int[]) { 3286 48000 3287 } 3288 } 3289 }, 3290 { 3291 .ifnum = -1 3292 }, 3293 } 3294 } 3295 }, 3296 /* MOTU Microbook II */ 3297 { 3298 USB_DEVICE_VENDOR_SPEC(0x07fd, 0x0004), 3299 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) { 3300 .vendor_name = "MOTU", 3301 .product_name = "MicroBookII", 3302 .ifnum = QUIRK_ANY_INTERFACE, 3303 .type = QUIRK_COMPOSITE, 3304 .data = (const struct snd_usb_audio_quirk[]) { 3305 { 3306 .ifnum = 0, 3307 .type = QUIRK_AUDIO_STANDARD_MIXER, 3308 }, 3309 { 3310 .ifnum = 0, 3311 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 3312 .data = &(const struct audioformat) { 3313 .formats = SNDRV_PCM_FMTBIT_S24_3BE, 3314 .channels = 6, 3315 .iface = 0, 3316 .altsetting = 1, 3317 .altset_idx = 1, 3318 .attributes = 0, 3319 .endpoint = 0x84, 3320 .rates = SNDRV_PCM_RATE_96000, 3321 .ep_attr = USB_ENDPOINT_XFER_ISOC | 3322 USB_ENDPOINT_SYNC_ASYNC, 3323 .rate_min = 96000, 3324 .rate_max = 96000, 3325 .nr_rates = 1, 3326 .maxpacksize = 0x00d8, 3327 .rate_table = (unsigned int[]) { 3328 96000 3329 } 3330 } 3331 }, 3332 { 3333 .ifnum = 0, 3334 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 3335 .data = &(const struct audioformat) { 3336 .formats = SNDRV_PCM_FMTBIT_S24_3BE, 3337 .channels = 8, 3338 .iface = 0, 3339 .altsetting = 1, 3340 .altset_idx = 1, 3341 .attributes = 0, 3342 .endpoint = 0x03, 3343 .rates = SNDRV_PCM_RATE_96000, 3344 .ep_attr = USB_ENDPOINT_XFER_ISOC | 3345 USB_ENDPOINT_SYNC_ASYNC, 3346 .rate_min = 96000, 3347 .rate_max = 96000, 3348 .nr_rates = 1, 3349 .maxpacksize = 0x0120, 3350 .rate_table = (unsigned int[]) { 3351 96000 3352 } 3353 } 3354 }, 3355 { 3356 .ifnum = -1 3357 } 3358 } 3359 } 3360 }, 3361 { 3362 /* 3363 * PIONEER DJ DDJ-SX3 3364 * PCM is 12 channels out, 10 channels in @ 44.1 fixed 3365 * interface 0, vendor class alt setting 1 for endpoints 5 and 0x86 3366 * The feedback for the output is the input. 3367 */ 3368 USB_DEVICE_VENDOR_SPEC(0x2b73, 0x0023), 3369 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) { 3370 .ifnum = QUIRK_ANY_INTERFACE, 3371 .type = QUIRK_COMPOSITE, 3372 .data = (const struct snd_usb_audio_quirk[]) { 3373 { 3374 .ifnum = 0, 3375 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 3376 .data = &(const struct audioformat) { 3377 .formats = SNDRV_PCM_FMTBIT_S32_LE, 3378 .channels = 12, 3379 .iface = 0, 3380 .altsetting = 1, 3381 .altset_idx = 1, 3382 .endpoint = 0x05, 3383 .ep_attr = USB_ENDPOINT_XFER_ISOC| 3384 USB_ENDPOINT_SYNC_ASYNC, 3385 .rates = SNDRV_PCM_RATE_44100, 3386 .rate_min = 44100, 3387 .rate_max = 44100, 3388 .nr_rates = 1, 3389 .rate_table = (unsigned int[]) { 44100 } 3390 } 3391 }, 3392 { 3393 .ifnum = 0, 3394 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 3395 .data = &(const struct audioformat) { 3396 .formats = SNDRV_PCM_FMTBIT_S32_LE, 3397 .channels = 10, 3398 .iface = 0, 3399 .altsetting = 1, 3400 .altset_idx = 1, 3401 .endpoint = 0x86, 3402 .ep_idx = 1, 3403 .ep_attr = USB_ENDPOINT_XFER_ISOC| 3404 USB_ENDPOINT_SYNC_ASYNC| 3405 USB_ENDPOINT_USAGE_IMPLICIT_FB, 3406 .rates = SNDRV_PCM_RATE_44100, 3407 .rate_min = 44100, 3408 .rate_max = 44100, 3409 .nr_rates = 1, 3410 .rate_table = (unsigned int[]) { 44100 } 3411 } 3412 }, 3413 { 3414 .ifnum = -1 3415 } 3416 } 3417 } 3418 }, 3419 { 3420 /* 3421 * Pioneer DJ DJM-250MK2 3422 * PCM is 8 channels out @ 48 fixed (endpoint 0x01) 3423 * and 8 channels in @ 48 fixed (endpoint 0x82). 3424 * 3425 * Both playback and recording is working, even simultaneously. 3426 * 3427 * Playback channels could be mapped to: 3428 * - CH1 3429 * - CH2 3430 * - AUX 3431 * 3432 * Recording channels could be mapped to: 3433 * - Post CH1 Fader 3434 * - Post CH2 Fader 3435 * - Cross Fader A 3436 * - Cross Fader B 3437 * - MIC 3438 * - AUX 3439 * - REC OUT 3440 * 3441 * There is remaining problem with recording directly from PHONO/LINE. 3442 * If we map a channel to: 3443 * - CH1 Control Tone PHONO 3444 * - CH1 Control Tone LINE 3445 * - CH2 Control Tone PHONO 3446 * - CH2 Control Tone LINE 3447 * it is silent. 3448 * There is no signal even on other operating systems with official drivers. 3449 * The signal appears only when a supported application is started. 3450 * This needs to be investigated yet... 3451 * (there is quite a lot communication on the USB in both directions) 3452 * 3453 * In current version this mixer could be used for playback 3454 * and for recording from vinyls (through Post CH* Fader) 3455 * but not for DVS (Digital Vinyl Systems) like in Mixxx. 3456 */ 3457 USB_DEVICE_VENDOR_SPEC(0x2b73, 0x0017), 3458 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) { 3459 .ifnum = QUIRK_ANY_INTERFACE, 3460 .type = QUIRK_COMPOSITE, 3461 .data = (const struct snd_usb_audio_quirk[]) { 3462 { 3463 .ifnum = 0, 3464 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 3465 .data = &(const struct audioformat) { 3466 .formats = SNDRV_PCM_FMTBIT_S24_3LE, 3467 .channels = 8, // outputs 3468 .iface = 0, 3469 .altsetting = 1, 3470 .altset_idx = 1, 3471 .endpoint = 0x01, 3472 .ep_attr = USB_ENDPOINT_XFER_ISOC| 3473 USB_ENDPOINT_SYNC_ASYNC, 3474 .rates = SNDRV_PCM_RATE_48000, 3475 .rate_min = 48000, 3476 .rate_max = 48000, 3477 .nr_rates = 1, 3478 .rate_table = (unsigned int[]) { 48000 } 3479 } 3480 }, 3481 { 3482 .ifnum = 0, 3483 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 3484 .data = &(const struct audioformat) { 3485 .formats = SNDRV_PCM_FMTBIT_S24_3LE, 3486 .channels = 8, // inputs 3487 .iface = 0, 3488 .altsetting = 1, 3489 .altset_idx = 1, 3490 .endpoint = 0x82, 3491 .ep_idx = 1, 3492 .ep_attr = USB_ENDPOINT_XFER_ISOC| 3493 USB_ENDPOINT_SYNC_ASYNC| 3494 USB_ENDPOINT_USAGE_IMPLICIT_FB, 3495 .rates = SNDRV_PCM_RATE_48000, 3496 .rate_min = 48000, 3497 .rate_max = 48000, 3498 .nr_rates = 1, 3499 .rate_table = (unsigned int[]) { 48000 } 3500 } 3501 }, 3502 { 3503 .ifnum = -1 3504 } 3505 } 3506 } 3507 }, 3508 { 3509 /* 3510 * PIONEER DJ DDJ-RB 3511 * PCM is 4 channels out, 2 dummy channels in @ 44.1 fixed 3512 * The feedback for the output is the dummy input. 3513 */ 3514 USB_DEVICE_VENDOR_SPEC(0x2b73, 0x000e), 3515 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) { 3516 .ifnum = QUIRK_ANY_INTERFACE, 3517 .type = QUIRK_COMPOSITE, 3518 .data = (const struct snd_usb_audio_quirk[]) { 3519 { 3520 .ifnum = 0, 3521 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 3522 .data = &(const struct audioformat) { 3523 .formats = SNDRV_PCM_FMTBIT_S24_3LE, 3524 .channels = 4, 3525 .iface = 0, 3526 .altsetting = 1, 3527 .altset_idx = 1, 3528 .endpoint = 0x01, 3529 .ep_attr = USB_ENDPOINT_XFER_ISOC| 3530 USB_ENDPOINT_SYNC_ASYNC, 3531 .rates = SNDRV_PCM_RATE_44100, 3532 .rate_min = 44100, 3533 .rate_max = 44100, 3534 .nr_rates = 1, 3535 .rate_table = (unsigned int[]) { 44100 } 3536 } 3537 }, 3538 { 3539 .ifnum = 0, 3540 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 3541 .data = &(const struct audioformat) { 3542 .formats = SNDRV_PCM_FMTBIT_S24_3LE, 3543 .channels = 2, 3544 .iface = 0, 3545 .altsetting = 1, 3546 .altset_idx = 1, 3547 .endpoint = 0x82, 3548 .ep_idx = 1, 3549 .ep_attr = USB_ENDPOINT_XFER_ISOC| 3550 USB_ENDPOINT_SYNC_ASYNC| 3551 USB_ENDPOINT_USAGE_IMPLICIT_FB, 3552 .rates = SNDRV_PCM_RATE_44100, 3553 .rate_min = 44100, 3554 .rate_max = 44100, 3555 .nr_rates = 1, 3556 .rate_table = (unsigned int[]) { 44100 } 3557 } 3558 }, 3559 { 3560 .ifnum = -1 3561 } 3562 } 3563 } 3564 }, 3565 3566 { 3567 /* 3568 * PIONEER DJ DDJ-RR 3569 * PCM is 6 channels out & 4 channels in @ 44.1 fixed 3570 */ 3571 USB_DEVICE_VENDOR_SPEC(0x2b73, 0x000d), 3572 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) { 3573 .ifnum = QUIRK_ANY_INTERFACE, 3574 .type = QUIRK_COMPOSITE, 3575 .data = (const struct snd_usb_audio_quirk[]) { 3576 { 3577 .ifnum = 0, 3578 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 3579 .data = &(const struct audioformat) { 3580 .formats = SNDRV_PCM_FMTBIT_S24_3LE, 3581 .channels = 6, //Master, Headphones & Booth 3582 .iface = 0, 3583 .altsetting = 1, 3584 .altset_idx = 1, 3585 .endpoint = 0x01, 3586 .ep_attr = USB_ENDPOINT_XFER_ISOC| 3587 USB_ENDPOINT_SYNC_ASYNC, 3588 .rates = SNDRV_PCM_RATE_44100, 3589 .rate_min = 44100, 3590 .rate_max = 44100, 3591 .nr_rates = 1, 3592 .rate_table = (unsigned int[]) { 44100 } 3593 } 3594 }, 3595 { 3596 .ifnum = 0, 3597 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 3598 .data = &(const struct audioformat) { 3599 .formats = SNDRV_PCM_FMTBIT_S24_3LE, 3600 .channels = 4, //2x RCA inputs (CH1 & CH2) 3601 .iface = 0, 3602 .altsetting = 1, 3603 .altset_idx = 1, 3604 .endpoint = 0x82, 3605 .ep_idx = 1, 3606 .ep_attr = USB_ENDPOINT_XFER_ISOC| 3607 USB_ENDPOINT_SYNC_ASYNC| 3608 USB_ENDPOINT_USAGE_IMPLICIT_FB, 3609 .rates = SNDRV_PCM_RATE_44100, 3610 .rate_min = 44100, 3611 .rate_max = 44100, 3612 .nr_rates = 1, 3613 .rate_table = (unsigned int[]) { 44100 } 3614 } 3615 }, 3616 { 3617 .ifnum = -1 3618 } 3619 } 3620 } 3621 }, 3622 3623 { 3624 /* 3625 * PIONEER DJ DDJ-SR2 3626 * PCM is 4 channels out, 6 channels in @ 44.1 fixed 3627 * The Feedback for the output is the input 3628 */ 3629 USB_DEVICE_VENDOR_SPEC(0x2b73, 0x001e), 3630 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) { 3631 .ifnum = QUIRK_ANY_INTERFACE, 3632 .type = QUIRK_COMPOSITE, 3633 .data = (const struct snd_usb_audio_quirk[]) { 3634 { 3635 .ifnum = 0, 3636 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 3637 .data = &(const struct audioformat) { 3638 .formats = SNDRV_PCM_FMTBIT_S24_3LE, 3639 .channels = 4, 3640 .iface = 0, 3641 .altsetting = 1, 3642 .altset_idx = 1, 3643 .endpoint = 0x01, 3644 .ep_attr = USB_ENDPOINT_XFER_ISOC| 3645 USB_ENDPOINT_SYNC_ASYNC, 3646 .rates = SNDRV_PCM_RATE_44100, 3647 .rate_min = 44100, 3648 .rate_max = 44100, 3649 .nr_rates = 1, 3650 .rate_table = (unsigned int[]) { 44100 } 3651 } 3652 }, 3653 { 3654 .ifnum = 0, 3655 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 3656 .data = &(const struct audioformat) { 3657 .formats = SNDRV_PCM_FMTBIT_S24_3LE, 3658 .channels = 6, 3659 .iface = 0, 3660 .altsetting = 1, 3661 .altset_idx = 1, 3662 .endpoint = 0x82, 3663 .ep_idx = 1, 3664 .ep_attr = USB_ENDPOINT_XFER_ISOC| 3665 USB_ENDPOINT_SYNC_ASYNC| 3666 USB_ENDPOINT_USAGE_IMPLICIT_FB, 3667 .rates = SNDRV_PCM_RATE_44100, 3668 .rate_min = 44100, 3669 .rate_max = 44100, 3670 .nr_rates = 1, 3671 .rate_table = (unsigned int[]) { 44100 } 3672 } 3673 }, 3674 { 3675 .ifnum = -1 3676 } 3677 } 3678 } 3679 }, 3680 3681 { 3682 /* 3683 * Pioneer DJ DJM-900NXS2 3684 * 10 channels playback & 12 channels capture @ 44.1/48/96kHz S24LE 3685 */ 3686 USB_DEVICE_VENDOR_SPEC(0x2b73, 0x000a), 3687 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) { 3688 .ifnum = QUIRK_ANY_INTERFACE, 3689 .type = QUIRK_COMPOSITE, 3690 .data = (const struct snd_usb_audio_quirk[]) { 3691 { 3692 .ifnum = 0, 3693 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 3694 .data = &(const struct audioformat) { 3695 .formats = SNDRV_PCM_FMTBIT_S24_3LE, 3696 .channels = 10, 3697 .iface = 0, 3698 .altsetting = 1, 3699 .altset_idx = 1, 3700 .endpoint = 0x01, 3701 .ep_attr = USB_ENDPOINT_XFER_ISOC| 3702 USB_ENDPOINT_SYNC_ASYNC, 3703 .rates = SNDRV_PCM_RATE_44100| 3704 SNDRV_PCM_RATE_48000| 3705 SNDRV_PCM_RATE_96000, 3706 .rate_min = 44100, 3707 .rate_max = 96000, 3708 .nr_rates = 3, 3709 .rate_table = (unsigned int[]) { 3710 44100, 48000, 96000 3711 } 3712 } 3713 }, 3714 { 3715 .ifnum = 0, 3716 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 3717 .data = &(const struct audioformat) { 3718 .formats = SNDRV_PCM_FMTBIT_S24_3LE, 3719 .channels = 12, 3720 .iface = 0, 3721 .altsetting = 1, 3722 .altset_idx = 1, 3723 .endpoint = 0x82, 3724 .ep_idx = 1, 3725 .ep_attr = USB_ENDPOINT_XFER_ISOC| 3726 USB_ENDPOINT_SYNC_ASYNC| 3727 USB_ENDPOINT_USAGE_IMPLICIT_FB, 3728 .rates = SNDRV_PCM_RATE_44100| 3729 SNDRV_PCM_RATE_48000| 3730 SNDRV_PCM_RATE_96000, 3731 .rate_min = 44100, 3732 .rate_max = 96000, 3733 .nr_rates = 3, 3734 .rate_table = (unsigned int[]) { 3735 44100, 48000, 96000 3736 } 3737 } 3738 }, 3739 { 3740 .ifnum = -1 3741 } 3742 } 3743 } 3744 }, 3745 3746 /* 3747 * MacroSilicon MS2109 based HDMI capture cards 3748 * 3749 * These claim 96kHz 1ch in the descriptors, but are actually 48kHz 2ch. 3750 * They also need QUIRK_FLAG_ALIGN_TRANSFER, which makes one wonder if 3751 * they pretend to be 96kHz mono as a workaround for stereo being broken 3752 * by that... 3753 * 3754 * They also have an issue with initial stream alignment that causes the 3755 * channels to be swapped and out of phase, which is dealt with in quirks.c. 3756 */ 3757 { 3758 USB_AUDIO_DEVICE(0x534d, 0x2109), 3759 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) { 3760 .vendor_name = "MacroSilicon", 3761 .product_name = "MS2109", 3762 .ifnum = QUIRK_ANY_INTERFACE, 3763 .type = QUIRK_COMPOSITE, 3764 .data = &(const struct snd_usb_audio_quirk[]) { 3765 { 3766 .ifnum = 2, 3767 .type = QUIRK_AUDIO_STANDARD_MIXER, 3768 }, 3769 { 3770 .ifnum = 3, 3771 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 3772 .data = &(const struct audioformat) { 3773 .formats = SNDRV_PCM_FMTBIT_S16_LE, 3774 .channels = 2, 3775 .iface = 3, 3776 .altsetting = 1, 3777 .altset_idx = 1, 3778 .attributes = 0, 3779 .endpoint = 0x82, 3780 .ep_attr = USB_ENDPOINT_XFER_ISOC | 3781 USB_ENDPOINT_SYNC_ASYNC, 3782 .rates = SNDRV_PCM_RATE_CONTINUOUS, 3783 .rate_min = 48000, 3784 .rate_max = 48000, 3785 } 3786 }, 3787 { 3788 .ifnum = -1 3789 } 3790 } 3791 } 3792 }, 3793 { 3794 /* 3795 * Pioneer DJ DJM-750 3796 * 8 channels playback & 8 channels capture @ 44.1/48/96kHz S24LE 3797 */ 3798 USB_DEVICE_VENDOR_SPEC(0x08e4, 0x017f), 3799 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) { 3800 .ifnum = QUIRK_ANY_INTERFACE, 3801 .type = QUIRK_COMPOSITE, 3802 .data = (const struct snd_usb_audio_quirk[]) { 3803 { 3804 .ifnum = 0, 3805 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 3806 .data = &(const struct audioformat) { 3807 .formats = SNDRV_PCM_FMTBIT_S24_3LE, 3808 .channels = 8, 3809 .iface = 0, 3810 .altsetting = 1, 3811 .altset_idx = 1, 3812 .endpoint = 0x05, 3813 .ep_attr = USB_ENDPOINT_XFER_ISOC| 3814 USB_ENDPOINT_SYNC_ASYNC, 3815 .rates = SNDRV_PCM_RATE_44100| 3816 SNDRV_PCM_RATE_48000| 3817 SNDRV_PCM_RATE_96000, 3818 .rate_min = 44100, 3819 .rate_max = 96000, 3820 .nr_rates = 3, 3821 .rate_table = (unsigned int[]) { 44100, 48000, 96000 } 3822 } 3823 }, 3824 { 3825 .ifnum = 0, 3826 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 3827 .data = &(const struct audioformat) { 3828 .formats = SNDRV_PCM_FMTBIT_S24_3LE, 3829 .channels = 8, 3830 .iface = 0, 3831 .altsetting = 1, 3832 .altset_idx = 1, 3833 .endpoint = 0x86, 3834 .ep_idx = 1, 3835 .ep_attr = USB_ENDPOINT_XFER_ISOC| 3836 USB_ENDPOINT_SYNC_ASYNC| 3837 USB_ENDPOINT_USAGE_IMPLICIT_FB, 3838 .rates = SNDRV_PCM_RATE_44100| 3839 SNDRV_PCM_RATE_48000| 3840 SNDRV_PCM_RATE_96000, 3841 .rate_min = 44100, 3842 .rate_max = 96000, 3843 .nr_rates = 3, 3844 .rate_table = (unsigned int[]) { 44100, 48000, 96000 } 3845 } 3846 }, 3847 { 3848 .ifnum = -1 3849 } 3850 } 3851 } 3852 }, 3853 { 3854 /* 3855 * Pioneer DJ DJM-850 3856 * 8 channels playback and 8 channels capture @ 44.1/48/96kHz S24LE 3857 * Playback on EP 0x05 3858 * Capture on EP 0x86 3859 */ 3860 USB_DEVICE_VENDOR_SPEC(0x08e4, 0x0163), 3861 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) { 3862 .ifnum = QUIRK_ANY_INTERFACE, 3863 .type = QUIRK_COMPOSITE, 3864 .data = (const struct snd_usb_audio_quirk[]) { 3865 { 3866 .ifnum = 0, 3867 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 3868 .data = &(const struct audioformat) { 3869 .formats = SNDRV_PCM_FMTBIT_S24_3LE, 3870 .channels = 8, 3871 .iface = 0, 3872 .altsetting = 1, 3873 .altset_idx = 1, 3874 .endpoint = 0x05, 3875 .ep_attr = USB_ENDPOINT_XFER_ISOC| 3876 USB_ENDPOINT_SYNC_ASYNC| 3877 USB_ENDPOINT_USAGE_DATA, 3878 .rates = SNDRV_PCM_RATE_44100| 3879 SNDRV_PCM_RATE_48000| 3880 SNDRV_PCM_RATE_96000, 3881 .rate_min = 44100, 3882 .rate_max = 96000, 3883 .nr_rates = 3, 3884 .rate_table = (unsigned int[]) { 44100, 48000, 96000 } 3885 } 3886 }, 3887 { 3888 .ifnum = 0, 3889 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 3890 .data = &(const struct audioformat) { 3891 .formats = SNDRV_PCM_FMTBIT_S24_3LE, 3892 .channels = 8, 3893 .iface = 0, 3894 .altsetting = 1, 3895 .altset_idx = 1, 3896 .endpoint = 0x86, 3897 .ep_idx = 1, 3898 .ep_attr = USB_ENDPOINT_XFER_ISOC| 3899 USB_ENDPOINT_SYNC_ASYNC| 3900 USB_ENDPOINT_USAGE_DATA, 3901 .rates = SNDRV_PCM_RATE_44100| 3902 SNDRV_PCM_RATE_48000| 3903 SNDRV_PCM_RATE_96000, 3904 .rate_min = 44100, 3905 .rate_max = 96000, 3906 .nr_rates = 3, 3907 .rate_table = (unsigned int[]) { 44100, 48000, 96000 } 3908 } 3909 }, 3910 { 3911 .ifnum = -1 3912 } 3913 } 3914 } 3915 }, 3916 { 3917 /* 3918 * Pioneer DJ DJM-450 3919 * PCM is 8 channels out @ 48 fixed (endpoint 0x01) 3920 * and 8 channels in @ 48 fixed (endpoint 0x82). 3921 */ 3922 USB_DEVICE_VENDOR_SPEC(0x2b73, 0x0013), 3923 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) { 3924 .ifnum = QUIRK_ANY_INTERFACE, 3925 .type = QUIRK_COMPOSITE, 3926 .data = (const struct snd_usb_audio_quirk[]) { 3927 { 3928 .ifnum = 0, 3929 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 3930 .data = &(const struct audioformat) { 3931 .formats = SNDRV_PCM_FMTBIT_S24_3LE, 3932 .channels = 8, // outputs 3933 .iface = 0, 3934 .altsetting = 1, 3935 .altset_idx = 1, 3936 .endpoint = 0x01, 3937 .ep_attr = USB_ENDPOINT_XFER_ISOC| 3938 USB_ENDPOINT_SYNC_ASYNC, 3939 .rates = SNDRV_PCM_RATE_48000, 3940 .rate_min = 48000, 3941 .rate_max = 48000, 3942 .nr_rates = 1, 3943 .rate_table = (unsigned int[]) { 48000 } 3944 } 3945 }, 3946 { 3947 .ifnum = 0, 3948 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 3949 .data = &(const struct audioformat) { 3950 .formats = SNDRV_PCM_FMTBIT_S24_3LE, 3951 .channels = 8, // inputs 3952 .iface = 0, 3953 .altsetting = 1, 3954 .altset_idx = 1, 3955 .endpoint = 0x82, 3956 .ep_idx = 1, 3957 .ep_attr = USB_ENDPOINT_XFER_ISOC| 3958 USB_ENDPOINT_SYNC_ASYNC| 3959 USB_ENDPOINT_USAGE_IMPLICIT_FB, 3960 .rates = SNDRV_PCM_RATE_48000, 3961 .rate_min = 48000, 3962 .rate_max = 48000, 3963 .nr_rates = 1, 3964 .rate_table = (unsigned int[]) { 48000 } 3965 } 3966 }, 3967 { 3968 .ifnum = -1 3969 } 3970 } 3971 } 3972 }, 3973 3974 #undef USB_DEVICE_VENDOR_SPEC 3975 #undef USB_AUDIO_DEVICE 3976