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 /* Stanton ScratchAmp */ 2598 { USB_DEVICE(0x103d, 0x0100) }, 2599 { USB_DEVICE(0x103d, 0x0101) }, 2600 2601 /* Novation EMS devices */ 2602 { 2603 USB_DEVICE_VENDOR_SPEC(0x1235, 0x0001), 2604 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { 2605 .vendor_name = "Novation", 2606 .product_name = "ReMOTE Audio/XStation", 2607 .ifnum = 4, 2608 .type = QUIRK_MIDI_NOVATION 2609 } 2610 }, 2611 { 2612 USB_DEVICE_VENDOR_SPEC(0x1235, 0x0002), 2613 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { 2614 .vendor_name = "Novation", 2615 .product_name = "Speedio", 2616 .ifnum = 3, 2617 .type = QUIRK_MIDI_NOVATION 2618 } 2619 }, 2620 { 2621 USB_DEVICE(0x1235, 0x000a), 2622 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { 2623 /* .vendor_name = "Novation", */ 2624 /* .product_name = "Nocturn", */ 2625 .ifnum = 0, 2626 .type = QUIRK_MIDI_RAW_BYTES 2627 } 2628 }, 2629 { 2630 USB_DEVICE(0x1235, 0x000e), 2631 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { 2632 /* .vendor_name = "Novation", */ 2633 /* .product_name = "Launchpad", */ 2634 .ifnum = 0, 2635 .type = QUIRK_MIDI_RAW_BYTES 2636 } 2637 }, 2638 { 2639 USB_DEVICE(0x1235, 0x0010), 2640 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) { 2641 .vendor_name = "Focusrite", 2642 .product_name = "Saffire 6 USB", 2643 .ifnum = QUIRK_ANY_INTERFACE, 2644 .type = QUIRK_COMPOSITE, 2645 .data = (const struct snd_usb_audio_quirk[]) { 2646 { 2647 .ifnum = 0, 2648 .type = QUIRK_AUDIO_STANDARD_MIXER, 2649 }, 2650 { 2651 .ifnum = 0, 2652 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 2653 .data = &(const struct audioformat) { 2654 .formats = SNDRV_PCM_FMTBIT_S24_3LE, 2655 .channels = 4, 2656 .iface = 0, 2657 .altsetting = 1, 2658 .altset_idx = 1, 2659 .attributes = UAC_EP_CS_ATTR_SAMPLE_RATE, 2660 .endpoint = 0x01, 2661 .ep_attr = USB_ENDPOINT_XFER_ISOC, 2662 .datainterval = 1, 2663 .maxpacksize = 0x024c, 2664 .rates = SNDRV_PCM_RATE_44100 | 2665 SNDRV_PCM_RATE_48000, 2666 .rate_min = 44100, 2667 .rate_max = 48000, 2668 .nr_rates = 2, 2669 .rate_table = (unsigned int[]) { 2670 44100, 48000 2671 }, 2672 .sync_ep = 0x82, 2673 .sync_iface = 0, 2674 .sync_altsetting = 1, 2675 .sync_ep_idx = 1, 2676 .implicit_fb = 1, 2677 } 2678 }, 2679 { 2680 .ifnum = 0, 2681 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 2682 .data = &(const struct audioformat) { 2683 .formats = SNDRV_PCM_FMTBIT_S24_3LE, 2684 .channels = 2, 2685 .iface = 0, 2686 .altsetting = 1, 2687 .altset_idx = 1, 2688 .attributes = 0, 2689 .endpoint = 0x82, 2690 .ep_idx = 1, 2691 .ep_attr = USB_ENDPOINT_XFER_ISOC, 2692 .datainterval = 1, 2693 .maxpacksize = 0x0126, 2694 .rates = SNDRV_PCM_RATE_44100 | 2695 SNDRV_PCM_RATE_48000, 2696 .rate_min = 44100, 2697 .rate_max = 48000, 2698 .nr_rates = 2, 2699 .rate_table = (unsigned int[]) { 2700 44100, 48000 2701 } 2702 } 2703 }, 2704 { 2705 .ifnum = 1, 2706 .type = QUIRK_MIDI_RAW_BYTES 2707 }, 2708 { 2709 .ifnum = -1 2710 } 2711 } 2712 } 2713 }, 2714 { 2715 USB_DEVICE(0x1235, 0x0018), 2716 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { 2717 .vendor_name = "Novation", 2718 .product_name = "Twitch", 2719 .ifnum = QUIRK_ANY_INTERFACE, 2720 .type = QUIRK_COMPOSITE, 2721 .data = (const struct snd_usb_audio_quirk[]) { 2722 { 2723 .ifnum = 0, 2724 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 2725 .data = & (const struct audioformat) { 2726 .formats = SNDRV_PCM_FMTBIT_S24_3LE, 2727 .channels = 4, 2728 .iface = 0, 2729 .altsetting = 1, 2730 .altset_idx = 1, 2731 .attributes = UAC_EP_CS_ATTR_SAMPLE_RATE, 2732 .endpoint = 0x01, 2733 .ep_attr = USB_ENDPOINT_XFER_ISOC, 2734 .rates = SNDRV_PCM_RATE_44100 | 2735 SNDRV_PCM_RATE_48000, 2736 .rate_min = 44100, 2737 .rate_max = 48000, 2738 .nr_rates = 2, 2739 .rate_table = (unsigned int[]) { 2740 44100, 48000 2741 } 2742 } 2743 }, 2744 { 2745 .ifnum = 1, 2746 .type = QUIRK_MIDI_RAW_BYTES 2747 }, 2748 { 2749 .ifnum = -1 2750 } 2751 } 2752 } 2753 }, 2754 { 2755 USB_DEVICE_VENDOR_SPEC(0x1235, 0x4661), 2756 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { 2757 .vendor_name = "Novation", 2758 .product_name = "ReMOTE25", 2759 .ifnum = 0, 2760 .type = QUIRK_MIDI_NOVATION 2761 } 2762 }, 2763 2764 /* Access Music devices */ 2765 { 2766 /* VirusTI Desktop */ 2767 USB_DEVICE_VENDOR_SPEC(0x133e, 0x0815), 2768 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) { 2769 .ifnum = QUIRK_ANY_INTERFACE, 2770 .type = QUIRK_COMPOSITE, 2771 .data = &(const struct snd_usb_audio_quirk[]) { 2772 { 2773 .ifnum = 3, 2774 .type = QUIRK_MIDI_FIXED_ENDPOINT, 2775 .data = &(const struct snd_usb_midi_endpoint_info) { 2776 .out_cables = 0x0003, 2777 .in_cables = 0x0003 2778 } 2779 }, 2780 { 2781 .ifnum = 4, 2782 .type = QUIRK_IGNORE_INTERFACE 2783 }, 2784 { 2785 .ifnum = -1 2786 } 2787 } 2788 } 2789 }, 2790 2791 /* Native Instruments MK2 series */ 2792 { 2793 /* Komplete Audio 6 */ 2794 .match_flags = USB_DEVICE_ID_MATCH_DEVICE, 2795 .idVendor = 0x17cc, 2796 .idProduct = 0x1000, 2797 }, 2798 { 2799 /* Traktor Audio 6 */ 2800 .match_flags = USB_DEVICE_ID_MATCH_DEVICE, 2801 .idVendor = 0x17cc, 2802 .idProduct = 0x1010, 2803 }, 2804 { 2805 /* Traktor Audio 10 */ 2806 .match_flags = USB_DEVICE_ID_MATCH_DEVICE, 2807 .idVendor = 0x17cc, 2808 .idProduct = 0x1020, 2809 }, 2810 2811 /* QinHeng devices */ 2812 { 2813 USB_DEVICE(0x1a86, 0x752d), 2814 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) { 2815 .vendor_name = "QinHeng", 2816 .product_name = "CH345", 2817 .ifnum = 1, 2818 .type = QUIRK_MIDI_CH345 2819 } 2820 }, 2821 2822 /* KeithMcMillen Stringport */ 2823 { USB_DEVICE(0x1f38, 0x0001) }, /* FIXME: should be more restrictive matching */ 2824 2825 /* Miditech devices */ 2826 { 2827 USB_DEVICE(0x4752, 0x0011), 2828 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { 2829 .vendor_name = "Miditech", 2830 .product_name = "Midistart-2", 2831 .ifnum = 0, 2832 .type = QUIRK_MIDI_CME 2833 } 2834 }, 2835 2836 /* Central Music devices */ 2837 { 2838 /* this ID used by both Miditech MidiStudio-2 and CME UF-x */ 2839 USB_DEVICE(0x7104, 0x2202), 2840 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { 2841 .ifnum = 0, 2842 .type = QUIRK_MIDI_CME 2843 } 2844 }, 2845 2846 /* Digidesign Mbox */ 2847 { 2848 /* Thanks to Clemens Ladisch <clemens@ladisch.de> */ 2849 USB_DEVICE(0x0dba, 0x1000), 2850 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) { 2851 .vendor_name = "Digidesign", 2852 .product_name = "MBox", 2853 .ifnum = QUIRK_ANY_INTERFACE, 2854 .type = QUIRK_COMPOSITE, 2855 .data = (const struct snd_usb_audio_quirk[]){ 2856 { 2857 .ifnum = 0, 2858 .type = QUIRK_AUDIO_STANDARD_MIXER, 2859 }, 2860 { 2861 .ifnum = 1, 2862 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 2863 .data = &(const struct audioformat) { 2864 .formats = SNDRV_PCM_FMTBIT_S24_3BE, 2865 .channels = 2, 2866 .iface = 1, 2867 .altsetting = 1, 2868 .altset_idx = 1, 2869 .attributes = 0x4, 2870 .endpoint = 0x02, 2871 .ep_attr = USB_ENDPOINT_XFER_ISOC | 2872 USB_ENDPOINT_SYNC_SYNC, 2873 .maxpacksize = 0x130, 2874 .rates = SNDRV_PCM_RATE_48000, 2875 .rate_min = 48000, 2876 .rate_max = 48000, 2877 .nr_rates = 1, 2878 .rate_table = (unsigned int[]) { 2879 48000 2880 } 2881 } 2882 }, 2883 { 2884 .ifnum = 1, 2885 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 2886 .data = &(const struct audioformat) { 2887 .formats = SNDRV_PCM_FMTBIT_S24_3BE, 2888 .channels = 2, 2889 .iface = 1, 2890 .altsetting = 1, 2891 .altset_idx = 1, 2892 .attributes = 0x4, 2893 .endpoint = 0x81, 2894 .ep_idx = 1, 2895 .ep_attr = USB_ENDPOINT_XFER_ISOC | 2896 USB_ENDPOINT_SYNC_ASYNC, 2897 .maxpacksize = 0x130, 2898 .rates = SNDRV_PCM_RATE_48000, 2899 .rate_min = 48000, 2900 .rate_max = 48000, 2901 .nr_rates = 1, 2902 .rate_table = (unsigned int[]) { 2903 48000 2904 } 2905 } 2906 }, 2907 { 2908 .ifnum = -1 2909 } 2910 } 2911 } 2912 }, 2913 2914 /* DIGIDESIGN MBOX 2 */ 2915 { 2916 USB_DEVICE(0x0dba, 0x3000), 2917 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) { 2918 .vendor_name = "Digidesign", 2919 .product_name = "Mbox 2", 2920 .ifnum = QUIRK_ANY_INTERFACE, 2921 .type = QUIRK_COMPOSITE, 2922 .data = (const struct snd_usb_audio_quirk[]) { 2923 { 2924 .ifnum = 0, 2925 .type = QUIRK_IGNORE_INTERFACE 2926 }, 2927 { 2928 .ifnum = 1, 2929 .type = QUIRK_IGNORE_INTERFACE 2930 }, 2931 { 2932 .ifnum = 2, 2933 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 2934 .data = &(const struct audioformat) { 2935 .formats = SNDRV_PCM_FMTBIT_S24_3BE, 2936 .channels = 2, 2937 .iface = 2, 2938 .altsetting = 2, 2939 .altset_idx = 1, 2940 .attributes = 0x00, 2941 .endpoint = 0x03, 2942 .ep_attr = USB_ENDPOINT_SYNC_ASYNC, 2943 .rates = SNDRV_PCM_RATE_48000, 2944 .rate_min = 48000, 2945 .rate_max = 48000, 2946 .nr_rates = 1, 2947 .rate_table = (unsigned int[]) { 2948 48000 2949 } 2950 } 2951 }, 2952 { 2953 .ifnum = 3, 2954 .type = QUIRK_IGNORE_INTERFACE 2955 }, 2956 { 2957 .ifnum = 4, 2958 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 2959 .data = &(const struct audioformat) { 2960 .formats = SNDRV_PCM_FMTBIT_S24_3BE, 2961 .channels = 2, 2962 .iface = 4, 2963 .altsetting = 2, 2964 .altset_idx = 1, 2965 .attributes = UAC_EP_CS_ATTR_SAMPLE_RATE, 2966 .endpoint = 0x85, 2967 .ep_attr = USB_ENDPOINT_SYNC_SYNC, 2968 .rates = SNDRV_PCM_RATE_48000, 2969 .rate_min = 48000, 2970 .rate_max = 48000, 2971 .nr_rates = 1, 2972 .rate_table = (unsigned int[]) { 2973 48000 2974 } 2975 } 2976 }, 2977 { 2978 .ifnum = 5, 2979 .type = QUIRK_IGNORE_INTERFACE 2980 }, 2981 { 2982 .ifnum = 6, 2983 .type = QUIRK_MIDI_MIDIMAN, 2984 .data = &(const struct snd_usb_midi_endpoint_info) { 2985 .out_ep = 0x02, 2986 .out_cables = 0x0001, 2987 .in_ep = 0x81, 2988 .in_interval = 0x01, 2989 .in_cables = 0x0001 2990 } 2991 }, 2992 { 2993 .ifnum = -1 2994 } 2995 } 2996 } 2997 }, 2998 /* DIGIDESIGN MBOX 3 */ 2999 { 3000 USB_DEVICE(0x0dba, 0x5000), 3001 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) { 3002 .vendor_name = "Digidesign", 3003 .product_name = "Mbox 3", 3004 .ifnum = QUIRK_ANY_INTERFACE, 3005 .type = QUIRK_COMPOSITE, 3006 .data = (const struct snd_usb_audio_quirk[]) { 3007 { 3008 .ifnum = 0, 3009 .type = QUIRK_IGNORE_INTERFACE 3010 }, 3011 { 3012 .ifnum = 1, 3013 .type = QUIRK_IGNORE_INTERFACE 3014 }, 3015 { 3016 .ifnum = 2, 3017 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 3018 .data = &(const struct audioformat) { 3019 .formats = SNDRV_PCM_FMTBIT_S24_3LE, 3020 .channels = 4, 3021 .iface = 2, 3022 .altsetting = 1, 3023 .altset_idx = 1, 3024 .attributes = 0x00, 3025 .endpoint = 0x01, 3026 .ep_attr = USB_ENDPOINT_XFER_ISOC | 3027 USB_ENDPOINT_SYNC_ASYNC, 3028 .rates = SNDRV_PCM_RATE_48000, 3029 .rate_min = 48000, 3030 .rate_max = 48000, 3031 .nr_rates = 1, 3032 .rate_table = (unsigned int[]) { 3033 48000 3034 } 3035 } 3036 }, 3037 { 3038 .ifnum = 3, 3039 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 3040 .data = &(const struct audioformat) { 3041 .formats = SNDRV_PCM_FMTBIT_S24_3LE, 3042 .channels = 4, 3043 .iface = 3, 3044 .altsetting = 1, 3045 .altset_idx = 1, 3046 .endpoint = 0x81, 3047 .attributes = 0x00, 3048 .ep_attr = USB_ENDPOINT_XFER_ISOC | 3049 USB_ENDPOINT_SYNC_ASYNC, 3050 .maxpacksize = 0x009c, 3051 .rates = SNDRV_PCM_RATE_48000, 3052 .rate_min = 48000, 3053 .rate_max = 48000, 3054 .nr_rates = 1, 3055 .rate_table = (unsigned int[]) { 3056 48000 3057 } 3058 } 3059 }, 3060 { 3061 .ifnum = 4, 3062 .type = QUIRK_MIDI_FIXED_ENDPOINT, 3063 .data = &(const struct snd_usb_midi_endpoint_info) { 3064 .out_cables = 0x0001, 3065 .in_cables = 0x0001 3066 } 3067 }, 3068 { 3069 .ifnum = -1 3070 } 3071 } 3072 } 3073 }, 3074 { 3075 /* Tascam US122 MKII - playback-only support */ 3076 USB_DEVICE_VENDOR_SPEC(0x0644, 0x8021), 3077 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) { 3078 .vendor_name = "TASCAM", 3079 .product_name = "US122 MKII", 3080 .ifnum = QUIRK_ANY_INTERFACE, 3081 .type = QUIRK_COMPOSITE, 3082 .data = (const struct snd_usb_audio_quirk[]) { 3083 { 3084 .ifnum = 0, 3085 .type = QUIRK_IGNORE_INTERFACE 3086 }, 3087 { 3088 .ifnum = 1, 3089 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 3090 .data = &(const struct audioformat) { 3091 .formats = SNDRV_PCM_FMTBIT_S24_3LE, 3092 .channels = 2, 3093 .iface = 1, 3094 .altsetting = 1, 3095 .altset_idx = 1, 3096 .attributes = UAC_EP_CS_ATTR_SAMPLE_RATE, 3097 .endpoint = 0x02, 3098 .ep_attr = USB_ENDPOINT_XFER_ISOC, 3099 .rates = SNDRV_PCM_RATE_44100 | 3100 SNDRV_PCM_RATE_48000 | 3101 SNDRV_PCM_RATE_88200 | 3102 SNDRV_PCM_RATE_96000, 3103 .rate_min = 44100, 3104 .rate_max = 96000, 3105 .nr_rates = 4, 3106 .rate_table = (unsigned int[]) { 3107 44100, 48000, 88200, 96000 3108 } 3109 } 3110 }, 3111 { 3112 .ifnum = -1 3113 } 3114 } 3115 } 3116 }, 3117 3118 /* Denon DN-X1600 */ 3119 { 3120 USB_AUDIO_DEVICE(0x154e, 0x500e), 3121 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) { 3122 .vendor_name = "Denon", 3123 .product_name = "DN-X1600", 3124 .ifnum = QUIRK_ANY_INTERFACE, 3125 .type = QUIRK_COMPOSITE, 3126 .data = (const struct snd_usb_audio_quirk[]){ 3127 { 3128 .ifnum = 0, 3129 .type = QUIRK_IGNORE_INTERFACE, 3130 }, 3131 { 3132 .ifnum = 1, 3133 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 3134 .data = &(const struct audioformat) { 3135 .formats = SNDRV_PCM_FMTBIT_S24_3LE, 3136 .channels = 8, 3137 .iface = 1, 3138 .altsetting = 1, 3139 .altset_idx = 1, 3140 .attributes = 0x0, 3141 .endpoint = 0x01, 3142 .ep_attr = USB_ENDPOINT_XFER_ISOC | 3143 USB_ENDPOINT_SYNC_ADAPTIVE, 3144 .maxpacksize = 0x138, 3145 .rates = SNDRV_PCM_RATE_48000, 3146 .rate_min = 48000, 3147 .rate_max = 48000, 3148 .nr_rates = 1, 3149 .rate_table = (unsigned int[]) { 3150 48000 3151 } 3152 } 3153 }, 3154 { 3155 .ifnum = 2, 3156 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 3157 .data = &(const struct audioformat) { 3158 .formats = SNDRV_PCM_FMTBIT_S24_3LE, 3159 .channels = 8, 3160 .iface = 2, 3161 .altsetting = 1, 3162 .altset_idx = 1, 3163 .attributes = 0x0, 3164 .endpoint = 0x85, 3165 .ep_attr = USB_ENDPOINT_XFER_ISOC | 3166 USB_ENDPOINT_SYNC_ADAPTIVE, 3167 .maxpacksize = 0x138, 3168 .rates = SNDRV_PCM_RATE_48000, 3169 .rate_min = 48000, 3170 .rate_max = 48000, 3171 .nr_rates = 1, 3172 .rate_table = (unsigned int[]) { 3173 48000 3174 } 3175 } 3176 }, 3177 { 3178 .ifnum = 4, 3179 .type = QUIRK_MIDI_STANDARD_INTERFACE, 3180 }, 3181 { 3182 .ifnum = -1 3183 } 3184 } 3185 } 3186 }, 3187 3188 /* Microsoft XboxLive Headset/Xbox Communicator */ 3189 { 3190 USB_DEVICE(0x045e, 0x0283), 3191 .bInterfaceClass = USB_CLASS_PER_INTERFACE, 3192 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) { 3193 .vendor_name = "Microsoft", 3194 .product_name = "XboxLive Headset/Xbox Communicator", 3195 .ifnum = QUIRK_ANY_INTERFACE, 3196 .type = QUIRK_COMPOSITE, 3197 .data = &(const struct snd_usb_audio_quirk[]) { 3198 { 3199 /* playback */ 3200 .ifnum = 0, 3201 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 3202 .data = &(const struct audioformat) { 3203 .formats = SNDRV_PCM_FMTBIT_S16_LE, 3204 .channels = 1, 3205 .iface = 0, 3206 .altsetting = 0, 3207 .altset_idx = 0, 3208 .attributes = 0, 3209 .endpoint = 0x04, 3210 .ep_attr = 0x05, 3211 .rates = SNDRV_PCM_RATE_CONTINUOUS, 3212 .rate_min = 22050, 3213 .rate_max = 22050 3214 } 3215 }, 3216 { 3217 /* capture */ 3218 .ifnum = 1, 3219 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 3220 .data = &(const struct audioformat) { 3221 .formats = SNDRV_PCM_FMTBIT_S16_LE, 3222 .channels = 1, 3223 .iface = 1, 3224 .altsetting = 0, 3225 .altset_idx = 0, 3226 .attributes = 0, 3227 .endpoint = 0x85, 3228 .ep_attr = 0x05, 3229 .rates = SNDRV_PCM_RATE_CONTINUOUS, 3230 .rate_min = 16000, 3231 .rate_max = 16000 3232 } 3233 }, 3234 { 3235 .ifnum = -1 3236 } 3237 } 3238 } 3239 }, 3240 3241 /* Reloop Play */ 3242 { 3243 USB_DEVICE(0x200c, 0x100b), 3244 .bInterfaceClass = USB_CLASS_PER_INTERFACE, 3245 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) { 3246 .ifnum = QUIRK_ANY_INTERFACE, 3247 .type = QUIRK_COMPOSITE, 3248 .data = &(const struct snd_usb_audio_quirk[]) { 3249 { 3250 .ifnum = 0, 3251 .type = QUIRK_AUDIO_STANDARD_MIXER, 3252 }, 3253 { 3254 .ifnum = 1, 3255 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 3256 .data = &(const struct audioformat) { 3257 .formats = SNDRV_PCM_FMTBIT_S24_3LE, 3258 .channels = 4, 3259 .iface = 1, 3260 .altsetting = 1, 3261 .altset_idx = 1, 3262 .attributes = UAC_EP_CS_ATTR_SAMPLE_RATE, 3263 .endpoint = 0x01, 3264 .ep_attr = USB_ENDPOINT_SYNC_ADAPTIVE, 3265 .rates = SNDRV_PCM_RATE_44100 | 3266 SNDRV_PCM_RATE_48000, 3267 .rate_min = 44100, 3268 .rate_max = 48000, 3269 .nr_rates = 2, 3270 .rate_table = (unsigned int[]) { 3271 44100, 48000 3272 } 3273 } 3274 }, 3275 { 3276 .ifnum = -1 3277 } 3278 } 3279 } 3280 }, 3281 3282 { 3283 /* 3284 * ZOOM R16/24 in audio interface mode. 3285 * Playback requires an extra four byte LE length indicator 3286 * at the start of each isochronous packet. This quirk is 3287 * enabled in create_standard_audio_quirk(). 3288 */ 3289 USB_DEVICE(0x1686, 0x00dd), 3290 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { 3291 .ifnum = QUIRK_ANY_INTERFACE, 3292 .type = QUIRK_COMPOSITE, 3293 .data = (const struct snd_usb_audio_quirk[]) { 3294 { 3295 /* Playback */ 3296 .ifnum = 1, 3297 .type = QUIRK_AUDIO_STANDARD_INTERFACE, 3298 }, 3299 { 3300 /* Capture */ 3301 .ifnum = 2, 3302 .type = QUIRK_AUDIO_STANDARD_INTERFACE, 3303 }, 3304 { 3305 /* Midi */ 3306 .ifnum = 3, 3307 .type = QUIRK_MIDI_STANDARD_INTERFACE 3308 }, 3309 { 3310 .ifnum = -1 3311 }, 3312 } 3313 } 3314 }, 3315 3316 { 3317 /* 3318 * Some USB MIDI devices don't have an audio control interface, 3319 * so we have to grab MIDI streaming interfaces here. 3320 */ 3321 .match_flags = USB_DEVICE_ID_MATCH_INT_CLASS | 3322 USB_DEVICE_ID_MATCH_INT_SUBCLASS, 3323 .bInterfaceClass = USB_CLASS_AUDIO, 3324 .bInterfaceSubClass = USB_SUBCLASS_MIDISTREAMING, 3325 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { 3326 .ifnum = QUIRK_ANY_INTERFACE, 3327 .type = QUIRK_MIDI_STANDARD_INTERFACE 3328 } 3329 }, 3330 3331 /* Rane SL-1 */ 3332 { 3333 USB_DEVICE(0x13e5, 0x0001), 3334 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { 3335 .ifnum = QUIRK_ANY_INTERFACE, 3336 .type = QUIRK_AUDIO_STANDARD_INTERFACE 3337 } 3338 }, 3339 3340 /* disabled due to regression for other devices; 3341 * see https://bugzilla.kernel.org/show_bug.cgi?id=199905 3342 */ 3343 #if 0 3344 { 3345 /* 3346 * Nura's first gen headphones use Cambridge Silicon Radio's vendor 3347 * ID, but it looks like the product ID actually is only for Nura. 3348 * The capture interface does not work at all (even on Windows), 3349 * and only the 48 kHz sample rate works for the playback interface. 3350 */ 3351 USB_DEVICE(0x0a12, 0x1243), 3352 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) { 3353 .ifnum = QUIRK_ANY_INTERFACE, 3354 .type = QUIRK_COMPOSITE, 3355 .data = (const struct snd_usb_audio_quirk[]) { 3356 { 3357 .ifnum = 0, 3358 .type = QUIRK_AUDIO_STANDARD_MIXER, 3359 }, 3360 /* Capture */ 3361 { 3362 .ifnum = 1, 3363 .type = QUIRK_IGNORE_INTERFACE, 3364 }, 3365 /* Playback */ 3366 { 3367 .ifnum = 2, 3368 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 3369 .data = &(const struct audioformat) { 3370 .formats = SNDRV_PCM_FMTBIT_S16_LE, 3371 .channels = 2, 3372 .iface = 2, 3373 .altsetting = 1, 3374 .altset_idx = 1, 3375 .attributes = UAC_EP_CS_ATTR_FILL_MAX | 3376 UAC_EP_CS_ATTR_SAMPLE_RATE, 3377 .endpoint = 0x03, 3378 .ep_attr = USB_ENDPOINT_XFER_ISOC, 3379 .rates = SNDRV_PCM_RATE_48000, 3380 .rate_min = 48000, 3381 .rate_max = 48000, 3382 .nr_rates = 1, 3383 .rate_table = (unsigned int[]) { 3384 48000 3385 } 3386 } 3387 }, 3388 { 3389 .ifnum = -1 3390 }, 3391 } 3392 } 3393 }, 3394 #endif /* disabled */ 3395 3396 { 3397 /* 3398 * Bower's & Wilkins PX headphones only support the 48 kHz sample rate 3399 * even though it advertises more. The capture interface doesn't work 3400 * even on windows. 3401 */ 3402 USB_DEVICE(0x19b5, 0x0021), 3403 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) { 3404 .ifnum = QUIRK_ANY_INTERFACE, 3405 .type = QUIRK_COMPOSITE, 3406 .data = (const struct snd_usb_audio_quirk[]) { 3407 { 3408 .ifnum = 0, 3409 .type = QUIRK_AUDIO_STANDARD_MIXER, 3410 }, 3411 /* Playback */ 3412 { 3413 .ifnum = 1, 3414 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 3415 .data = &(const struct audioformat) { 3416 .formats = SNDRV_PCM_FMTBIT_S16_LE, 3417 .channels = 2, 3418 .iface = 1, 3419 .altsetting = 1, 3420 .altset_idx = 1, 3421 .attributes = UAC_EP_CS_ATTR_FILL_MAX | 3422 UAC_EP_CS_ATTR_SAMPLE_RATE, 3423 .endpoint = 0x03, 3424 .ep_attr = USB_ENDPOINT_XFER_ISOC, 3425 .rates = SNDRV_PCM_RATE_48000, 3426 .rate_min = 48000, 3427 .rate_max = 48000, 3428 .nr_rates = 1, 3429 .rate_table = (unsigned int[]) { 3430 48000 3431 } 3432 } 3433 }, 3434 { 3435 .ifnum = -1 3436 }, 3437 } 3438 } 3439 }, 3440 /* MOTU Microbook II */ 3441 { 3442 USB_DEVICE_VENDOR_SPEC(0x07fd, 0x0004), 3443 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) { 3444 .vendor_name = "MOTU", 3445 .product_name = "MicroBookII", 3446 .ifnum = QUIRK_ANY_INTERFACE, 3447 .type = QUIRK_COMPOSITE, 3448 .data = (const struct snd_usb_audio_quirk[]) { 3449 { 3450 .ifnum = 0, 3451 .type = QUIRK_AUDIO_STANDARD_MIXER, 3452 }, 3453 { 3454 .ifnum = 0, 3455 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 3456 .data = &(const struct audioformat) { 3457 .formats = SNDRV_PCM_FMTBIT_S24_3BE, 3458 .channels = 6, 3459 .iface = 0, 3460 .altsetting = 1, 3461 .altset_idx = 1, 3462 .attributes = 0, 3463 .endpoint = 0x84, 3464 .rates = SNDRV_PCM_RATE_96000, 3465 .ep_attr = USB_ENDPOINT_XFER_ISOC | 3466 USB_ENDPOINT_SYNC_ASYNC, 3467 .rate_min = 96000, 3468 .rate_max = 96000, 3469 .nr_rates = 1, 3470 .maxpacksize = 0x00d8, 3471 .rate_table = (unsigned int[]) { 3472 96000 3473 } 3474 } 3475 }, 3476 { 3477 .ifnum = 0, 3478 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 3479 .data = &(const struct audioformat) { 3480 .formats = SNDRV_PCM_FMTBIT_S24_3BE, 3481 .channels = 8, 3482 .iface = 0, 3483 .altsetting = 1, 3484 .altset_idx = 1, 3485 .attributes = 0, 3486 .endpoint = 0x03, 3487 .ep_idx = 1, 3488 .rates = SNDRV_PCM_RATE_96000, 3489 .ep_attr = USB_ENDPOINT_XFER_ISOC | 3490 USB_ENDPOINT_SYNC_ASYNC, 3491 .rate_min = 96000, 3492 .rate_max = 96000, 3493 .nr_rates = 1, 3494 .maxpacksize = 0x0120, 3495 .rate_table = (unsigned int[]) { 3496 96000 3497 } 3498 } 3499 }, 3500 { 3501 .ifnum = -1 3502 } 3503 } 3504 } 3505 }, 3506 { 3507 /* 3508 * PIONEER DJ DDJ-SX3 3509 * PCM is 12 channels out, 10 channels in @ 44.1 fixed 3510 * interface 0, vendor class alt setting 1 for endpoints 5 and 0x86 3511 * The feedback for the output is the input. 3512 */ 3513 USB_DEVICE_VENDOR_SPEC(0x2b73, 0x0023), 3514 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) { 3515 .ifnum = QUIRK_ANY_INTERFACE, 3516 .type = QUIRK_COMPOSITE, 3517 .data = (const struct snd_usb_audio_quirk[]) { 3518 { 3519 .ifnum = 0, 3520 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 3521 .data = &(const struct audioformat) { 3522 .formats = SNDRV_PCM_FMTBIT_S32_LE, 3523 .channels = 12, 3524 .iface = 0, 3525 .altsetting = 1, 3526 .altset_idx = 1, 3527 .endpoint = 0x05, 3528 .ep_attr = USB_ENDPOINT_XFER_ISOC| 3529 USB_ENDPOINT_SYNC_ASYNC, 3530 .rates = SNDRV_PCM_RATE_44100, 3531 .rate_min = 44100, 3532 .rate_max = 44100, 3533 .nr_rates = 1, 3534 .rate_table = (unsigned int[]) { 44100 } 3535 } 3536 }, 3537 { 3538 .ifnum = 0, 3539 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 3540 .data = &(const struct audioformat) { 3541 .formats = SNDRV_PCM_FMTBIT_S32_LE, 3542 .channels = 10, 3543 .iface = 0, 3544 .altsetting = 1, 3545 .altset_idx = 1, 3546 .endpoint = 0x86, 3547 .ep_idx = 1, 3548 .ep_attr = USB_ENDPOINT_XFER_ISOC| 3549 USB_ENDPOINT_SYNC_ASYNC| 3550 USB_ENDPOINT_USAGE_IMPLICIT_FB, 3551 .rates = SNDRV_PCM_RATE_44100, 3552 .rate_min = 44100, 3553 .rate_max = 44100, 3554 .nr_rates = 1, 3555 .rate_table = (unsigned int[]) { 44100 } 3556 } 3557 }, 3558 { 3559 .ifnum = -1 3560 } 3561 } 3562 } 3563 }, 3564 { 3565 /* 3566 * Pioneer DJ DJM-250MK2 3567 * PCM is 8 channels out @ 48 fixed (endpoint 0x01) 3568 * and 8 channels in @ 48 fixed (endpoint 0x82). 3569 * 3570 * Both playback and recording is working, even simultaneously. 3571 * 3572 * Playback channels could be mapped to: 3573 * - CH1 3574 * - CH2 3575 * - AUX 3576 * 3577 * Recording channels could be mapped to: 3578 * - Post CH1 Fader 3579 * - Post CH2 Fader 3580 * - Cross Fader A 3581 * - Cross Fader B 3582 * - MIC 3583 * - AUX 3584 * - REC OUT 3585 * 3586 * There is remaining problem with recording directly from PHONO/LINE. 3587 * If we map a channel to: 3588 * - CH1 Control Tone PHONO 3589 * - CH1 Control Tone LINE 3590 * - CH2 Control Tone PHONO 3591 * - CH2 Control Tone LINE 3592 * it is silent. 3593 * There is no signal even on other operating systems with official drivers. 3594 * The signal appears only when a supported application is started. 3595 * This needs to be investigated yet... 3596 * (there is quite a lot communication on the USB in both directions) 3597 * 3598 * In current version this mixer could be used for playback 3599 * and for recording from vinyls (through Post CH* Fader) 3600 * but not for DVS (Digital Vinyl Systems) like in Mixxx. 3601 */ 3602 USB_DEVICE_VENDOR_SPEC(0x2b73, 0x0017), 3603 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) { 3604 .ifnum = QUIRK_ANY_INTERFACE, 3605 .type = QUIRK_COMPOSITE, 3606 .data = (const struct snd_usb_audio_quirk[]) { 3607 { 3608 .ifnum = 0, 3609 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 3610 .data = &(const struct audioformat) { 3611 .formats = SNDRV_PCM_FMTBIT_S24_3LE, 3612 .channels = 8, // outputs 3613 .iface = 0, 3614 .altsetting = 1, 3615 .altset_idx = 1, 3616 .endpoint = 0x01, 3617 .ep_attr = USB_ENDPOINT_XFER_ISOC| 3618 USB_ENDPOINT_SYNC_ASYNC, 3619 .rates = SNDRV_PCM_RATE_48000, 3620 .rate_min = 48000, 3621 .rate_max = 48000, 3622 .nr_rates = 1, 3623 .rate_table = (unsigned int[]) { 48000 } 3624 } 3625 }, 3626 { 3627 .ifnum = 0, 3628 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 3629 .data = &(const struct audioformat) { 3630 .formats = SNDRV_PCM_FMTBIT_S24_3LE, 3631 .channels = 8, // inputs 3632 .iface = 0, 3633 .altsetting = 1, 3634 .altset_idx = 1, 3635 .endpoint = 0x82, 3636 .ep_idx = 1, 3637 .ep_attr = USB_ENDPOINT_XFER_ISOC| 3638 USB_ENDPOINT_SYNC_ASYNC| 3639 USB_ENDPOINT_USAGE_IMPLICIT_FB, 3640 .rates = SNDRV_PCM_RATE_48000, 3641 .rate_min = 48000, 3642 .rate_max = 48000, 3643 .nr_rates = 1, 3644 .rate_table = (unsigned int[]) { 48000 } 3645 } 3646 }, 3647 { 3648 .ifnum = -1 3649 } 3650 } 3651 } 3652 }, 3653 { 3654 /* 3655 * PIONEER DJ DDJ-RB 3656 * PCM is 4 channels out, 2 dummy channels in @ 44.1 fixed 3657 * The feedback for the output is the dummy input. 3658 */ 3659 USB_DEVICE_VENDOR_SPEC(0x2b73, 0x000e), 3660 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) { 3661 .ifnum = QUIRK_ANY_INTERFACE, 3662 .type = QUIRK_COMPOSITE, 3663 .data = (const struct snd_usb_audio_quirk[]) { 3664 { 3665 .ifnum = 0, 3666 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 3667 .data = &(const struct audioformat) { 3668 .formats = SNDRV_PCM_FMTBIT_S24_3LE, 3669 .channels = 4, 3670 .iface = 0, 3671 .altsetting = 1, 3672 .altset_idx = 1, 3673 .endpoint = 0x01, 3674 .ep_attr = USB_ENDPOINT_XFER_ISOC| 3675 USB_ENDPOINT_SYNC_ASYNC, 3676 .rates = SNDRV_PCM_RATE_44100, 3677 .rate_min = 44100, 3678 .rate_max = 44100, 3679 .nr_rates = 1, 3680 .rate_table = (unsigned int[]) { 44100 } 3681 } 3682 }, 3683 { 3684 .ifnum = 0, 3685 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 3686 .data = &(const struct audioformat) { 3687 .formats = SNDRV_PCM_FMTBIT_S24_3LE, 3688 .channels = 2, 3689 .iface = 0, 3690 .altsetting = 1, 3691 .altset_idx = 1, 3692 .endpoint = 0x82, 3693 .ep_idx = 1, 3694 .ep_attr = USB_ENDPOINT_XFER_ISOC| 3695 USB_ENDPOINT_SYNC_ASYNC| 3696 USB_ENDPOINT_USAGE_IMPLICIT_FB, 3697 .rates = SNDRV_PCM_RATE_44100, 3698 .rate_min = 44100, 3699 .rate_max = 44100, 3700 .nr_rates = 1, 3701 .rate_table = (unsigned int[]) { 44100 } 3702 } 3703 }, 3704 { 3705 .ifnum = -1 3706 } 3707 } 3708 } 3709 }, 3710 3711 { 3712 /* 3713 * PIONEER DJ DDJ-RR 3714 * PCM is 6 channels out & 4 channels in @ 44.1 fixed 3715 */ 3716 USB_DEVICE_VENDOR_SPEC(0x2b73, 0x000d), 3717 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) { 3718 .ifnum = QUIRK_ANY_INTERFACE, 3719 .type = QUIRK_COMPOSITE, 3720 .data = (const struct snd_usb_audio_quirk[]) { 3721 { 3722 .ifnum = 0, 3723 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 3724 .data = &(const struct audioformat) { 3725 .formats = SNDRV_PCM_FMTBIT_S24_3LE, 3726 .channels = 6, //Master, Headphones & Booth 3727 .iface = 0, 3728 .altsetting = 1, 3729 .altset_idx = 1, 3730 .endpoint = 0x01, 3731 .ep_attr = USB_ENDPOINT_XFER_ISOC| 3732 USB_ENDPOINT_SYNC_ASYNC, 3733 .rates = SNDRV_PCM_RATE_44100, 3734 .rate_min = 44100, 3735 .rate_max = 44100, 3736 .nr_rates = 1, 3737 .rate_table = (unsigned int[]) { 44100 } 3738 } 3739 }, 3740 { 3741 .ifnum = 0, 3742 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 3743 .data = &(const struct audioformat) { 3744 .formats = SNDRV_PCM_FMTBIT_S24_3LE, 3745 .channels = 4, //2x RCA inputs (CH1 & CH2) 3746 .iface = 0, 3747 .altsetting = 1, 3748 .altset_idx = 1, 3749 .endpoint = 0x82, 3750 .ep_idx = 1, 3751 .ep_attr = USB_ENDPOINT_XFER_ISOC| 3752 USB_ENDPOINT_SYNC_ASYNC| 3753 USB_ENDPOINT_USAGE_IMPLICIT_FB, 3754 .rates = SNDRV_PCM_RATE_44100, 3755 .rate_min = 44100, 3756 .rate_max = 44100, 3757 .nr_rates = 1, 3758 .rate_table = (unsigned int[]) { 44100 } 3759 } 3760 }, 3761 { 3762 .ifnum = -1 3763 } 3764 } 3765 } 3766 }, 3767 3768 { 3769 /* 3770 * PIONEER DJ DDJ-SR2 3771 * PCM is 4 channels out, 6 channels in @ 44.1 fixed 3772 * The Feedback for the output is the input 3773 */ 3774 USB_DEVICE_VENDOR_SPEC(0x2b73, 0x001e), 3775 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) { 3776 .ifnum = QUIRK_ANY_INTERFACE, 3777 .type = QUIRK_COMPOSITE, 3778 .data = (const struct snd_usb_audio_quirk[]) { 3779 { 3780 .ifnum = 0, 3781 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 3782 .data = &(const struct audioformat) { 3783 .formats = SNDRV_PCM_FMTBIT_S24_3LE, 3784 .channels = 4, 3785 .iface = 0, 3786 .altsetting = 1, 3787 .altset_idx = 1, 3788 .endpoint = 0x01, 3789 .ep_attr = USB_ENDPOINT_XFER_ISOC| 3790 USB_ENDPOINT_SYNC_ASYNC, 3791 .rates = SNDRV_PCM_RATE_44100, 3792 .rate_min = 44100, 3793 .rate_max = 44100, 3794 .nr_rates = 1, 3795 .rate_table = (unsigned int[]) { 44100 } 3796 } 3797 }, 3798 { 3799 .ifnum = 0, 3800 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 3801 .data = &(const struct audioformat) { 3802 .formats = SNDRV_PCM_FMTBIT_S24_3LE, 3803 .channels = 6, 3804 .iface = 0, 3805 .altsetting = 1, 3806 .altset_idx = 1, 3807 .endpoint = 0x82, 3808 .ep_idx = 1, 3809 .ep_attr = USB_ENDPOINT_XFER_ISOC| 3810 USB_ENDPOINT_SYNC_ASYNC| 3811 USB_ENDPOINT_USAGE_IMPLICIT_FB, 3812 .rates = SNDRV_PCM_RATE_44100, 3813 .rate_min = 44100, 3814 .rate_max = 44100, 3815 .nr_rates = 1, 3816 .rate_table = (unsigned int[]) { 44100 } 3817 } 3818 }, 3819 { 3820 .ifnum = -1 3821 } 3822 } 3823 } 3824 }, 3825 3826 { 3827 /* 3828 * Pioneer DJ DJM-900NXS2 3829 * 10 channels playback & 12 channels capture @ 44.1/48/96kHz S24LE 3830 */ 3831 USB_DEVICE_VENDOR_SPEC(0x2b73, 0x000a), 3832 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) { 3833 .ifnum = QUIRK_ANY_INTERFACE, 3834 .type = QUIRK_COMPOSITE, 3835 .data = (const struct snd_usb_audio_quirk[]) { 3836 { 3837 .ifnum = 0, 3838 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 3839 .data = &(const struct audioformat) { 3840 .formats = SNDRV_PCM_FMTBIT_S24_3LE, 3841 .channels = 10, 3842 .iface = 0, 3843 .altsetting = 1, 3844 .altset_idx = 1, 3845 .endpoint = 0x01, 3846 .ep_attr = USB_ENDPOINT_XFER_ISOC| 3847 USB_ENDPOINT_SYNC_ASYNC, 3848 .rates = SNDRV_PCM_RATE_44100| 3849 SNDRV_PCM_RATE_48000| 3850 SNDRV_PCM_RATE_96000, 3851 .rate_min = 44100, 3852 .rate_max = 96000, 3853 .nr_rates = 3, 3854 .rate_table = (unsigned int[]) { 3855 44100, 48000, 96000 3856 } 3857 } 3858 }, 3859 { 3860 .ifnum = 0, 3861 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 3862 .data = &(const struct audioformat) { 3863 .formats = SNDRV_PCM_FMTBIT_S24_3LE, 3864 .channels = 12, 3865 .iface = 0, 3866 .altsetting = 1, 3867 .altset_idx = 1, 3868 .endpoint = 0x82, 3869 .ep_idx = 1, 3870 .ep_attr = USB_ENDPOINT_XFER_ISOC| 3871 USB_ENDPOINT_SYNC_ASYNC| 3872 USB_ENDPOINT_USAGE_IMPLICIT_FB, 3873 .rates = SNDRV_PCM_RATE_44100| 3874 SNDRV_PCM_RATE_48000| 3875 SNDRV_PCM_RATE_96000, 3876 .rate_min = 44100, 3877 .rate_max = 96000, 3878 .nr_rates = 3, 3879 .rate_table = (unsigned int[]) { 3880 44100, 48000, 96000 3881 } 3882 } 3883 }, 3884 { 3885 .ifnum = -1 3886 } 3887 } 3888 } 3889 }, 3890 3891 { 3892 /* 3893 * PIONEER DJ DDJ-800 3894 * PCM is 6 channels out, 6 channels in @ 44.1 fixed 3895 * The Feedback for the output is the input 3896 */ 3897 USB_DEVICE_VENDOR_SPEC(0x2b73, 0x0029), 3898 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) { 3899 .ifnum = QUIRK_ANY_INTERFACE, 3900 .type = QUIRK_COMPOSITE, 3901 .data = (const struct snd_usb_audio_quirk[]) { 3902 { 3903 .ifnum = 0, 3904 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 3905 .data = &(const struct audioformat) { 3906 .formats = SNDRV_PCM_FMTBIT_S24_3LE, 3907 .channels = 6, 3908 .iface = 0, 3909 .altsetting = 1, 3910 .altset_idx = 1, 3911 .endpoint = 0x01, 3912 .ep_attr = USB_ENDPOINT_XFER_ISOC| 3913 USB_ENDPOINT_SYNC_ASYNC, 3914 .rates = SNDRV_PCM_RATE_44100, 3915 .rate_min = 44100, 3916 .rate_max = 44100, 3917 .nr_rates = 1, 3918 .rate_table = (unsigned int[]) { 44100 } 3919 } 3920 }, 3921 { 3922 .ifnum = 0, 3923 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 3924 .data = &(const struct audioformat) { 3925 .formats = SNDRV_PCM_FMTBIT_S24_3LE, 3926 .channels = 6, 3927 .iface = 0, 3928 .altsetting = 1, 3929 .altset_idx = 1, 3930 .endpoint = 0x82, 3931 .ep_idx = 1, 3932 .ep_attr = USB_ENDPOINT_XFER_ISOC| 3933 USB_ENDPOINT_SYNC_ASYNC| 3934 USB_ENDPOINT_USAGE_IMPLICIT_FB, 3935 .rates = SNDRV_PCM_RATE_44100, 3936 .rate_min = 44100, 3937 .rate_max = 44100, 3938 .nr_rates = 1, 3939 .rate_table = (unsigned int[]) { 44100 } 3940 } 3941 }, 3942 { 3943 .ifnum = -1 3944 } 3945 } 3946 } 3947 }, 3948 3949 /* 3950 * MacroSilicon MS2100/MS2106 based AV capture cards 3951 * 3952 * These claim 96kHz 1ch in the descriptors, but are actually 48kHz 2ch. 3953 * They also need QUIRK_FLAG_ALIGN_TRANSFER, which makes one wonder if 3954 * they pretend to be 96kHz mono as a workaround for stereo being broken 3955 * by that... 3956 * 3957 * They also have an issue with initial stream alignment that causes the 3958 * channels to be swapped and out of phase, which is dealt with in quirks.c. 3959 */ 3960 { 3961 USB_AUDIO_DEVICE(0x534d, 0x0021), 3962 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) { 3963 .vendor_name = "MacroSilicon", 3964 .product_name = "MS210x", 3965 .ifnum = QUIRK_ANY_INTERFACE, 3966 .type = QUIRK_COMPOSITE, 3967 .data = &(const struct snd_usb_audio_quirk[]) { 3968 { 3969 .ifnum = 2, 3970 .type = QUIRK_AUDIO_STANDARD_MIXER, 3971 }, 3972 { 3973 .ifnum = 3, 3974 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 3975 .data = &(const struct audioformat) { 3976 .formats = SNDRV_PCM_FMTBIT_S16_LE, 3977 .channels = 2, 3978 .iface = 3, 3979 .altsetting = 1, 3980 .altset_idx = 1, 3981 .attributes = 0, 3982 .endpoint = 0x82, 3983 .ep_attr = USB_ENDPOINT_XFER_ISOC | 3984 USB_ENDPOINT_SYNC_ASYNC, 3985 .rates = SNDRV_PCM_RATE_CONTINUOUS, 3986 .rate_min = 48000, 3987 .rate_max = 48000, 3988 } 3989 }, 3990 { 3991 .ifnum = -1 3992 } 3993 } 3994 } 3995 }, 3996 3997 /* 3998 * MacroSilicon MS2109 based HDMI capture cards 3999 * 4000 * These claim 96kHz 1ch in the descriptors, but are actually 48kHz 2ch. 4001 * They also need QUIRK_FLAG_ALIGN_TRANSFER, which makes one wonder if 4002 * they pretend to be 96kHz mono as a workaround for stereo being broken 4003 * by that... 4004 * 4005 * They also have an issue with initial stream alignment that causes the 4006 * channels to be swapped and out of phase, which is dealt with in quirks.c. 4007 */ 4008 { 4009 USB_AUDIO_DEVICE(0x534d, 0x2109), 4010 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) { 4011 .vendor_name = "MacroSilicon", 4012 .product_name = "MS2109", 4013 .ifnum = QUIRK_ANY_INTERFACE, 4014 .type = QUIRK_COMPOSITE, 4015 .data = &(const struct snd_usb_audio_quirk[]) { 4016 { 4017 .ifnum = 2, 4018 .type = QUIRK_AUDIO_STANDARD_MIXER, 4019 }, 4020 { 4021 .ifnum = 3, 4022 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 4023 .data = &(const struct audioformat) { 4024 .formats = SNDRV_PCM_FMTBIT_S16_LE, 4025 .channels = 2, 4026 .iface = 3, 4027 .altsetting = 1, 4028 .altset_idx = 1, 4029 .attributes = 0, 4030 .endpoint = 0x82, 4031 .ep_attr = USB_ENDPOINT_XFER_ISOC | 4032 USB_ENDPOINT_SYNC_ASYNC, 4033 .rates = SNDRV_PCM_RATE_CONTINUOUS, 4034 .rate_min = 48000, 4035 .rate_max = 48000, 4036 } 4037 }, 4038 { 4039 .ifnum = -1 4040 } 4041 } 4042 } 4043 }, 4044 { 4045 /* 4046 * Pioneer DJ DJM-750 4047 * 8 channels playback & 8 channels capture @ 44.1/48/96kHz S24LE 4048 */ 4049 USB_DEVICE_VENDOR_SPEC(0x08e4, 0x017f), 4050 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) { 4051 .ifnum = QUIRK_ANY_INTERFACE, 4052 .type = QUIRK_COMPOSITE, 4053 .data = (const struct snd_usb_audio_quirk[]) { 4054 { 4055 .ifnum = 0, 4056 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 4057 .data = &(const struct audioformat) { 4058 .formats = SNDRV_PCM_FMTBIT_S24_3LE, 4059 .channels = 8, 4060 .iface = 0, 4061 .altsetting = 1, 4062 .altset_idx = 1, 4063 .endpoint = 0x05, 4064 .ep_attr = USB_ENDPOINT_XFER_ISOC| 4065 USB_ENDPOINT_SYNC_ASYNC, 4066 .rates = SNDRV_PCM_RATE_44100| 4067 SNDRV_PCM_RATE_48000| 4068 SNDRV_PCM_RATE_96000, 4069 .rate_min = 44100, 4070 .rate_max = 96000, 4071 .nr_rates = 3, 4072 .rate_table = (unsigned int[]) { 44100, 48000, 96000 } 4073 } 4074 }, 4075 { 4076 .ifnum = 0, 4077 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 4078 .data = &(const struct audioformat) { 4079 .formats = SNDRV_PCM_FMTBIT_S24_3LE, 4080 .channels = 8, 4081 .iface = 0, 4082 .altsetting = 1, 4083 .altset_idx = 1, 4084 .endpoint = 0x86, 4085 .ep_idx = 1, 4086 .ep_attr = USB_ENDPOINT_XFER_ISOC| 4087 USB_ENDPOINT_SYNC_ASYNC| 4088 USB_ENDPOINT_USAGE_IMPLICIT_FB, 4089 .rates = SNDRV_PCM_RATE_44100| 4090 SNDRV_PCM_RATE_48000| 4091 SNDRV_PCM_RATE_96000, 4092 .rate_min = 44100, 4093 .rate_max = 96000, 4094 .nr_rates = 3, 4095 .rate_table = (unsigned int[]) { 44100, 48000, 96000 } 4096 } 4097 }, 4098 { 4099 .ifnum = -1 4100 } 4101 } 4102 } 4103 }, 4104 { 4105 /* 4106 * Pioneer DJ DJM-750MK2 4107 * 10 channels playback & 12 channels capture @ 48kHz S24LE 4108 */ 4109 USB_DEVICE_VENDOR_SPEC(0x2b73, 0x001b), 4110 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) { 4111 .ifnum = QUIRK_ANY_INTERFACE, 4112 .type = QUIRK_COMPOSITE, 4113 .data = (const struct snd_usb_audio_quirk[]) { 4114 { 4115 .ifnum = 0, 4116 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 4117 .data = &(const struct audioformat) { 4118 .formats = SNDRV_PCM_FMTBIT_S24_3LE, 4119 .channels = 10, 4120 .iface = 0, 4121 .altsetting = 1, 4122 .altset_idx = 1, 4123 .endpoint = 0x01, 4124 .ep_attr = USB_ENDPOINT_XFER_ISOC| 4125 USB_ENDPOINT_SYNC_ASYNC, 4126 .rates = SNDRV_PCM_RATE_48000, 4127 .rate_min = 48000, 4128 .rate_max = 48000, 4129 .nr_rates = 1, 4130 .rate_table = (unsigned int[]) { 4131 48000 4132 } 4133 } 4134 }, 4135 { 4136 .ifnum = 0, 4137 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 4138 .data = &(const struct audioformat) { 4139 .formats = SNDRV_PCM_FMTBIT_S24_3LE, 4140 .channels = 12, 4141 .iface = 0, 4142 .altsetting = 1, 4143 .altset_idx = 1, 4144 .endpoint = 0x82, 4145 .ep_idx = 1, 4146 .ep_attr = USB_ENDPOINT_XFER_ISOC| 4147 USB_ENDPOINT_SYNC_ASYNC| 4148 USB_ENDPOINT_USAGE_IMPLICIT_FB, 4149 .rates = SNDRV_PCM_RATE_48000, 4150 .rate_min = 48000, 4151 .rate_max = 48000, 4152 .nr_rates = 1, 4153 .rate_table = (unsigned int[]) { 48000 } 4154 } 4155 }, 4156 { 4157 .ifnum = -1 4158 } 4159 } 4160 } 4161 }, 4162 { 4163 /* 4164 * Pioneer DJ DJM-850 4165 * 8 channels playback and 8 channels capture @ 44.1/48/96kHz S24LE 4166 * Playback on EP 0x05 4167 * Capture on EP 0x86 4168 */ 4169 USB_DEVICE_VENDOR_SPEC(0x08e4, 0x0163), 4170 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) { 4171 .ifnum = QUIRK_ANY_INTERFACE, 4172 .type = QUIRK_COMPOSITE, 4173 .data = (const struct snd_usb_audio_quirk[]) { 4174 { 4175 .ifnum = 0, 4176 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 4177 .data = &(const struct audioformat) { 4178 .formats = SNDRV_PCM_FMTBIT_S24_3LE, 4179 .channels = 8, 4180 .iface = 0, 4181 .altsetting = 1, 4182 .altset_idx = 1, 4183 .endpoint = 0x05, 4184 .ep_attr = USB_ENDPOINT_XFER_ISOC| 4185 USB_ENDPOINT_SYNC_ASYNC| 4186 USB_ENDPOINT_USAGE_DATA, 4187 .rates = SNDRV_PCM_RATE_44100| 4188 SNDRV_PCM_RATE_48000| 4189 SNDRV_PCM_RATE_96000, 4190 .rate_min = 44100, 4191 .rate_max = 96000, 4192 .nr_rates = 3, 4193 .rate_table = (unsigned int[]) { 44100, 48000, 96000 } 4194 } 4195 }, 4196 { 4197 .ifnum = 0, 4198 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 4199 .data = &(const struct audioformat) { 4200 .formats = SNDRV_PCM_FMTBIT_S24_3LE, 4201 .channels = 8, 4202 .iface = 0, 4203 .altsetting = 1, 4204 .altset_idx = 1, 4205 .endpoint = 0x86, 4206 .ep_idx = 1, 4207 .ep_attr = USB_ENDPOINT_XFER_ISOC| 4208 USB_ENDPOINT_SYNC_ASYNC| 4209 USB_ENDPOINT_USAGE_DATA, 4210 .rates = SNDRV_PCM_RATE_44100| 4211 SNDRV_PCM_RATE_48000| 4212 SNDRV_PCM_RATE_96000, 4213 .rate_min = 44100, 4214 .rate_max = 96000, 4215 .nr_rates = 3, 4216 .rate_table = (unsigned int[]) { 44100, 48000, 96000 } 4217 } 4218 }, 4219 { 4220 .ifnum = -1 4221 } 4222 } 4223 } 4224 }, 4225 { 4226 /* 4227 * Pioneer DJ DJM-450 4228 * PCM is 8 channels out @ 48 fixed (endpoint 0x01) 4229 * and 8 channels in @ 48 fixed (endpoint 0x82). 4230 */ 4231 USB_DEVICE_VENDOR_SPEC(0x2b73, 0x0013), 4232 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) { 4233 .ifnum = QUIRK_ANY_INTERFACE, 4234 .type = QUIRK_COMPOSITE, 4235 .data = (const struct snd_usb_audio_quirk[]) { 4236 { 4237 .ifnum = 0, 4238 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 4239 .data = &(const struct audioformat) { 4240 .formats = SNDRV_PCM_FMTBIT_S24_3LE, 4241 .channels = 8, // outputs 4242 .iface = 0, 4243 .altsetting = 1, 4244 .altset_idx = 1, 4245 .endpoint = 0x01, 4246 .ep_attr = USB_ENDPOINT_XFER_ISOC| 4247 USB_ENDPOINT_SYNC_ASYNC, 4248 .rates = SNDRV_PCM_RATE_48000, 4249 .rate_min = 48000, 4250 .rate_max = 48000, 4251 .nr_rates = 1, 4252 .rate_table = (unsigned int[]) { 48000 } 4253 } 4254 }, 4255 { 4256 .ifnum = 0, 4257 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 4258 .data = &(const struct audioformat) { 4259 .formats = SNDRV_PCM_FMTBIT_S24_3LE, 4260 .channels = 8, // inputs 4261 .iface = 0, 4262 .altsetting = 1, 4263 .altset_idx = 1, 4264 .endpoint = 0x82, 4265 .ep_idx = 1, 4266 .ep_attr = USB_ENDPOINT_XFER_ISOC| 4267 USB_ENDPOINT_SYNC_ASYNC| 4268 USB_ENDPOINT_USAGE_IMPLICIT_FB, 4269 .rates = SNDRV_PCM_RATE_48000, 4270 .rate_min = 48000, 4271 .rate_max = 48000, 4272 .nr_rates = 1, 4273 .rate_table = (unsigned int[]) { 48000 } 4274 } 4275 }, 4276 { 4277 .ifnum = -1 4278 } 4279 } 4280 } 4281 }, 4282 { 4283 /* 4284 * Sennheiser GSP670 4285 * Change order of interfaces loaded 4286 */ 4287 USB_DEVICE(0x1395, 0x0300), 4288 .bInterfaceClass = USB_CLASS_PER_INTERFACE, 4289 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) { 4290 .ifnum = QUIRK_ANY_INTERFACE, 4291 .type = QUIRK_COMPOSITE, 4292 .data = &(const struct snd_usb_audio_quirk[]) { 4293 // Communication 4294 { 4295 .ifnum = 3, 4296 .type = QUIRK_AUDIO_STANDARD_INTERFACE 4297 }, 4298 // Recording 4299 { 4300 .ifnum = 4, 4301 .type = QUIRK_AUDIO_STANDARD_INTERFACE 4302 }, 4303 // Main 4304 { 4305 .ifnum = 1, 4306 .type = QUIRK_AUDIO_STANDARD_INTERFACE 4307 }, 4308 { 4309 .ifnum = -1 4310 } 4311 } 4312 } 4313 }, 4314 { 4315 /* 4316 * Fiero SC-01 (firmware v1.0.0 @ 48 kHz) 4317 */ 4318 USB_DEVICE(0x2b53, 0x0023), 4319 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) { 4320 .vendor_name = "Fiero", 4321 .product_name = "SC-01", 4322 .ifnum = QUIRK_ANY_INTERFACE, 4323 .type = QUIRK_COMPOSITE, 4324 .data = &(const struct snd_usb_audio_quirk[]) { 4325 { 4326 .ifnum = 0, 4327 .type = QUIRK_AUDIO_STANDARD_INTERFACE 4328 }, 4329 /* Playback */ 4330 { 4331 .ifnum = 1, 4332 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 4333 .data = &(const struct audioformat) { 4334 .formats = SNDRV_PCM_FMTBIT_S32_LE, 4335 .channels = 2, 4336 .fmt_bits = 24, 4337 .iface = 1, 4338 .altsetting = 1, 4339 .altset_idx = 1, 4340 .endpoint = 0x01, 4341 .ep_attr = USB_ENDPOINT_XFER_ISOC | 4342 USB_ENDPOINT_SYNC_ASYNC, 4343 .rates = SNDRV_PCM_RATE_48000, 4344 .rate_min = 48000, 4345 .rate_max = 48000, 4346 .nr_rates = 1, 4347 .rate_table = (unsigned int[]) { 48000 }, 4348 .clock = 0x29 4349 } 4350 }, 4351 /* Capture */ 4352 { 4353 .ifnum = 2, 4354 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 4355 .data = &(const struct audioformat) { 4356 .formats = SNDRV_PCM_FMTBIT_S32_LE, 4357 .channels = 2, 4358 .fmt_bits = 24, 4359 .iface = 2, 4360 .altsetting = 1, 4361 .altset_idx = 1, 4362 .endpoint = 0x82, 4363 .ep_attr = USB_ENDPOINT_XFER_ISOC | 4364 USB_ENDPOINT_SYNC_ASYNC | 4365 USB_ENDPOINT_USAGE_IMPLICIT_FB, 4366 .rates = SNDRV_PCM_RATE_48000, 4367 .rate_min = 48000, 4368 .rate_max = 48000, 4369 .nr_rates = 1, 4370 .rate_table = (unsigned int[]) { 48000 }, 4371 .clock = 0x29 4372 } 4373 }, 4374 { 4375 .ifnum = -1 4376 } 4377 } 4378 } 4379 }, 4380 { 4381 /* 4382 * Fiero SC-01 (firmware v1.0.0 @ 96 kHz) 4383 */ 4384 USB_DEVICE(0x2b53, 0x0024), 4385 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) { 4386 .vendor_name = "Fiero", 4387 .product_name = "SC-01", 4388 .ifnum = QUIRK_ANY_INTERFACE, 4389 .type = QUIRK_COMPOSITE, 4390 .data = &(const struct snd_usb_audio_quirk[]) { 4391 { 4392 .ifnum = 0, 4393 .type = QUIRK_AUDIO_STANDARD_INTERFACE 4394 }, 4395 /* Playback */ 4396 { 4397 .ifnum = 1, 4398 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 4399 .data = &(const struct audioformat) { 4400 .formats = SNDRV_PCM_FMTBIT_S32_LE, 4401 .channels = 2, 4402 .fmt_bits = 24, 4403 .iface = 1, 4404 .altsetting = 1, 4405 .altset_idx = 1, 4406 .endpoint = 0x01, 4407 .ep_attr = USB_ENDPOINT_XFER_ISOC | 4408 USB_ENDPOINT_SYNC_ASYNC, 4409 .rates = SNDRV_PCM_RATE_96000, 4410 .rate_min = 96000, 4411 .rate_max = 96000, 4412 .nr_rates = 1, 4413 .rate_table = (unsigned int[]) { 96000 }, 4414 .clock = 0x29 4415 } 4416 }, 4417 /* Capture */ 4418 { 4419 .ifnum = 2, 4420 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 4421 .data = &(const struct audioformat) { 4422 .formats = SNDRV_PCM_FMTBIT_S32_LE, 4423 .channels = 2, 4424 .fmt_bits = 24, 4425 .iface = 2, 4426 .altsetting = 1, 4427 .altset_idx = 1, 4428 .endpoint = 0x82, 4429 .ep_attr = USB_ENDPOINT_XFER_ISOC | 4430 USB_ENDPOINT_SYNC_ASYNC | 4431 USB_ENDPOINT_USAGE_IMPLICIT_FB, 4432 .rates = SNDRV_PCM_RATE_96000, 4433 .rate_min = 96000, 4434 .rate_max = 96000, 4435 .nr_rates = 1, 4436 .rate_table = (unsigned int[]) { 96000 }, 4437 .clock = 0x29 4438 } 4439 }, 4440 { 4441 .ifnum = -1 4442 } 4443 } 4444 } 4445 }, 4446 { 4447 /* 4448 * Fiero SC-01 (firmware v1.1.0) 4449 */ 4450 USB_DEVICE(0x2b53, 0x0031), 4451 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) { 4452 .vendor_name = "Fiero", 4453 .product_name = "SC-01", 4454 .ifnum = QUIRK_ANY_INTERFACE, 4455 .type = QUIRK_COMPOSITE, 4456 .data = &(const struct snd_usb_audio_quirk[]) { 4457 { 4458 .ifnum = 0, 4459 .type = QUIRK_AUDIO_STANDARD_INTERFACE 4460 }, 4461 /* Playback */ 4462 { 4463 .ifnum = 1, 4464 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 4465 .data = &(const struct audioformat) { 4466 .formats = SNDRV_PCM_FMTBIT_S32_LE, 4467 .channels = 2, 4468 .fmt_bits = 24, 4469 .iface = 1, 4470 .altsetting = 1, 4471 .altset_idx = 1, 4472 .endpoint = 0x01, 4473 .ep_attr = USB_ENDPOINT_XFER_ISOC | 4474 USB_ENDPOINT_SYNC_ASYNC, 4475 .rates = SNDRV_PCM_RATE_48000 | 4476 SNDRV_PCM_RATE_96000, 4477 .rate_min = 48000, 4478 .rate_max = 96000, 4479 .nr_rates = 2, 4480 .rate_table = (unsigned int[]) { 48000, 96000 }, 4481 .clock = 0x29 4482 } 4483 }, 4484 /* Capture */ 4485 { 4486 .ifnum = 2, 4487 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 4488 .data = &(const struct audioformat) { 4489 .formats = SNDRV_PCM_FMTBIT_S32_LE, 4490 .channels = 2, 4491 .fmt_bits = 24, 4492 .iface = 2, 4493 .altsetting = 1, 4494 .altset_idx = 1, 4495 .endpoint = 0x82, 4496 .ep_attr = USB_ENDPOINT_XFER_ISOC | 4497 USB_ENDPOINT_SYNC_ASYNC | 4498 USB_ENDPOINT_USAGE_IMPLICIT_FB, 4499 .rates = SNDRV_PCM_RATE_48000 | 4500 SNDRV_PCM_RATE_96000, 4501 .rate_min = 48000, 4502 .rate_max = 96000, 4503 .nr_rates = 2, 4504 .rate_table = (unsigned int[]) { 48000, 96000 }, 4505 .clock = 0x29 4506 } 4507 }, 4508 { 4509 .ifnum = -1 4510 } 4511 } 4512 } 4513 }, 4514 { 4515 /* Advanced modes of the Mythware XA001AU. 4516 * For the standard mode, Mythware XA001AU has ID ffad:a001 4517 */ 4518 USB_DEVICE_VENDOR_SPEC(0xffad, 0xa001), 4519 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) { 4520 .vendor_name = "Mythware", 4521 .product_name = "XA001AU", 4522 .ifnum = QUIRK_ANY_INTERFACE, 4523 .type = QUIRK_COMPOSITE, 4524 .data = (const struct snd_usb_audio_quirk[]) { 4525 { 4526 .ifnum = 0, 4527 .type = QUIRK_IGNORE_INTERFACE, 4528 }, 4529 { 4530 .ifnum = 1, 4531 .type = QUIRK_AUDIO_STANDARD_INTERFACE, 4532 }, 4533 { 4534 .ifnum = 2, 4535 .type = QUIRK_AUDIO_STANDARD_INTERFACE, 4536 }, 4537 { 4538 .ifnum = -1 4539 } 4540 } 4541 } 4542 }, 4543 4544 #undef USB_DEVICE_VENDOR_SPEC 4545 #undef USB_AUDIO_DEVICE 4546