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