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 .fmt_bits = 24, 3021 .channels = 4, 3022 .iface = 2, 3023 .altsetting = 1, 3024 .altset_idx = 1, 3025 .attributes = 0x00, 3026 .endpoint = USB_RECIP_INTERFACE | USB_DIR_OUT, 3027 .ep_attr = USB_ENDPOINT_XFER_ISOC | 3028 USB_ENDPOINT_SYNC_ASYNC, 3029 .rates = SNDRV_PCM_RATE_44100 | SNDRV_PCM_RATE_48000 | 3030 SNDRV_PCM_RATE_88200 | SNDRV_PCM_RATE_96000, 3031 .rate_min = 44100, 3032 .rate_max = 96000, 3033 .nr_rates = 4, 3034 .rate_table = (unsigned int[]) { 3035 44100, 48000, 88200, 96000 3036 }, 3037 .sync_ep = USB_RECIP_INTERFACE | USB_DIR_IN, 3038 .sync_iface = 3, 3039 .sync_altsetting = 1, 3040 .sync_ep_idx = 1, 3041 .implicit_fb = 1, 3042 } 3043 }, 3044 { 3045 .ifnum = 3, 3046 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 3047 .data = &(const struct audioformat) { 3048 .formats = SNDRV_PCM_FMTBIT_S24_3LE, 3049 .fmt_bits = 24, 3050 .channels = 4, 3051 .iface = 3, 3052 .altsetting = 1, 3053 .altset_idx = 1, 3054 .attributes = 0x00, 3055 .endpoint = USB_RECIP_INTERFACE | USB_DIR_IN, 3056 .ep_attr = USB_ENDPOINT_XFER_ISOC | 3057 USB_ENDPOINT_SYNC_ASYNC, 3058 .maxpacksize = 0x009c, 3059 .rates = SNDRV_PCM_RATE_44100 | SNDRV_PCM_RATE_48000 | 3060 SNDRV_PCM_RATE_88200 | SNDRV_PCM_RATE_96000, 3061 .rate_min = 44100, 3062 .rate_max = 96000, 3063 .nr_rates = 4, 3064 .rate_table = (unsigned int[]) { 3065 44100, 48000, 88200, 96000 3066 }, 3067 .implicit_fb = 0, 3068 } 3069 }, 3070 { 3071 .ifnum = 4, 3072 .type = QUIRK_MIDI_FIXED_ENDPOINT, 3073 .data = &(const struct snd_usb_midi_endpoint_info) { 3074 .out_cables = 0x0001, 3075 .in_cables = 0x0001 3076 } 3077 }, 3078 { 3079 .ifnum = -1 3080 } 3081 } 3082 } 3083 }, 3084 { 3085 /* Tascam US122 MKII - playback-only support */ 3086 USB_DEVICE_VENDOR_SPEC(0x0644, 0x8021), 3087 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) { 3088 .vendor_name = "TASCAM", 3089 .product_name = "US122 MKII", 3090 .ifnum = QUIRK_ANY_INTERFACE, 3091 .type = QUIRK_COMPOSITE, 3092 .data = (const struct snd_usb_audio_quirk[]) { 3093 { 3094 .ifnum = 0, 3095 .type = QUIRK_IGNORE_INTERFACE 3096 }, 3097 { 3098 .ifnum = 1, 3099 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 3100 .data = &(const struct audioformat) { 3101 .formats = SNDRV_PCM_FMTBIT_S24_3LE, 3102 .channels = 2, 3103 .iface = 1, 3104 .altsetting = 1, 3105 .altset_idx = 1, 3106 .attributes = UAC_EP_CS_ATTR_SAMPLE_RATE, 3107 .endpoint = 0x02, 3108 .ep_attr = USB_ENDPOINT_XFER_ISOC, 3109 .rates = SNDRV_PCM_RATE_44100 | 3110 SNDRV_PCM_RATE_48000 | 3111 SNDRV_PCM_RATE_88200 | 3112 SNDRV_PCM_RATE_96000, 3113 .rate_min = 44100, 3114 .rate_max = 96000, 3115 .nr_rates = 4, 3116 .rate_table = (unsigned int[]) { 3117 44100, 48000, 88200, 96000 3118 } 3119 } 3120 }, 3121 { 3122 .ifnum = -1 3123 } 3124 } 3125 } 3126 }, 3127 3128 /* Denon DN-X1600 */ 3129 { 3130 USB_AUDIO_DEVICE(0x154e, 0x500e), 3131 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) { 3132 .vendor_name = "Denon", 3133 .product_name = "DN-X1600", 3134 .ifnum = QUIRK_ANY_INTERFACE, 3135 .type = QUIRK_COMPOSITE, 3136 .data = (const struct snd_usb_audio_quirk[]){ 3137 { 3138 .ifnum = 0, 3139 .type = QUIRK_IGNORE_INTERFACE, 3140 }, 3141 { 3142 .ifnum = 1, 3143 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 3144 .data = &(const struct audioformat) { 3145 .formats = SNDRV_PCM_FMTBIT_S24_3LE, 3146 .channels = 8, 3147 .iface = 1, 3148 .altsetting = 1, 3149 .altset_idx = 1, 3150 .attributes = 0x0, 3151 .endpoint = 0x01, 3152 .ep_attr = USB_ENDPOINT_XFER_ISOC | 3153 USB_ENDPOINT_SYNC_ADAPTIVE, 3154 .maxpacksize = 0x138, 3155 .rates = SNDRV_PCM_RATE_48000, 3156 .rate_min = 48000, 3157 .rate_max = 48000, 3158 .nr_rates = 1, 3159 .rate_table = (unsigned int[]) { 3160 48000 3161 } 3162 } 3163 }, 3164 { 3165 .ifnum = 2, 3166 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 3167 .data = &(const struct audioformat) { 3168 .formats = SNDRV_PCM_FMTBIT_S24_3LE, 3169 .channels = 8, 3170 .iface = 2, 3171 .altsetting = 1, 3172 .altset_idx = 1, 3173 .attributes = 0x0, 3174 .endpoint = 0x85, 3175 .ep_attr = USB_ENDPOINT_XFER_ISOC | 3176 USB_ENDPOINT_SYNC_ADAPTIVE, 3177 .maxpacksize = 0x138, 3178 .rates = SNDRV_PCM_RATE_48000, 3179 .rate_min = 48000, 3180 .rate_max = 48000, 3181 .nr_rates = 1, 3182 .rate_table = (unsigned int[]) { 3183 48000 3184 } 3185 } 3186 }, 3187 { 3188 .ifnum = 4, 3189 .type = QUIRK_MIDI_STANDARD_INTERFACE, 3190 }, 3191 { 3192 .ifnum = -1 3193 } 3194 } 3195 } 3196 }, 3197 3198 /* Microsoft XboxLive Headset/Xbox Communicator */ 3199 { 3200 USB_DEVICE(0x045e, 0x0283), 3201 .bInterfaceClass = USB_CLASS_PER_INTERFACE, 3202 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) { 3203 .vendor_name = "Microsoft", 3204 .product_name = "XboxLive Headset/Xbox Communicator", 3205 .ifnum = QUIRK_ANY_INTERFACE, 3206 .type = QUIRK_COMPOSITE, 3207 .data = &(const struct snd_usb_audio_quirk[]) { 3208 { 3209 /* playback */ 3210 .ifnum = 0, 3211 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 3212 .data = &(const struct audioformat) { 3213 .formats = SNDRV_PCM_FMTBIT_S16_LE, 3214 .channels = 1, 3215 .iface = 0, 3216 .altsetting = 0, 3217 .altset_idx = 0, 3218 .attributes = 0, 3219 .endpoint = 0x04, 3220 .ep_attr = 0x05, 3221 .rates = SNDRV_PCM_RATE_CONTINUOUS, 3222 .rate_min = 22050, 3223 .rate_max = 22050 3224 } 3225 }, 3226 { 3227 /* capture */ 3228 .ifnum = 1, 3229 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 3230 .data = &(const struct audioformat) { 3231 .formats = SNDRV_PCM_FMTBIT_S16_LE, 3232 .channels = 1, 3233 .iface = 1, 3234 .altsetting = 0, 3235 .altset_idx = 0, 3236 .attributes = 0, 3237 .endpoint = 0x85, 3238 .ep_attr = 0x05, 3239 .rates = SNDRV_PCM_RATE_CONTINUOUS, 3240 .rate_min = 16000, 3241 .rate_max = 16000 3242 } 3243 }, 3244 { 3245 .ifnum = -1 3246 } 3247 } 3248 } 3249 }, 3250 3251 /* Reloop Play */ 3252 { 3253 USB_DEVICE(0x200c, 0x100b), 3254 .bInterfaceClass = USB_CLASS_PER_INTERFACE, 3255 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) { 3256 .ifnum = QUIRK_ANY_INTERFACE, 3257 .type = QUIRK_COMPOSITE, 3258 .data = &(const struct snd_usb_audio_quirk[]) { 3259 { 3260 .ifnum = 0, 3261 .type = QUIRK_AUDIO_STANDARD_MIXER, 3262 }, 3263 { 3264 .ifnum = 1, 3265 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 3266 .data = &(const struct audioformat) { 3267 .formats = SNDRV_PCM_FMTBIT_S24_3LE, 3268 .channels = 4, 3269 .iface = 1, 3270 .altsetting = 1, 3271 .altset_idx = 1, 3272 .attributes = UAC_EP_CS_ATTR_SAMPLE_RATE, 3273 .endpoint = 0x01, 3274 .ep_attr = USB_ENDPOINT_SYNC_ADAPTIVE, 3275 .rates = SNDRV_PCM_RATE_44100 | 3276 SNDRV_PCM_RATE_48000, 3277 .rate_min = 44100, 3278 .rate_max = 48000, 3279 .nr_rates = 2, 3280 .rate_table = (unsigned int[]) { 3281 44100, 48000 3282 } 3283 } 3284 }, 3285 { 3286 .ifnum = -1 3287 } 3288 } 3289 } 3290 }, 3291 3292 { 3293 /* 3294 * ZOOM R16/24 in audio interface mode. 3295 * Playback requires an extra four byte LE length indicator 3296 * at the start of each isochronous packet. This quirk is 3297 * enabled in create_standard_audio_quirk(). 3298 */ 3299 USB_DEVICE(0x1686, 0x00dd), 3300 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { 3301 .ifnum = QUIRK_ANY_INTERFACE, 3302 .type = QUIRK_COMPOSITE, 3303 .data = (const struct snd_usb_audio_quirk[]) { 3304 { 3305 /* Playback */ 3306 .ifnum = 1, 3307 .type = QUIRK_AUDIO_STANDARD_INTERFACE, 3308 }, 3309 { 3310 /* Capture */ 3311 .ifnum = 2, 3312 .type = QUIRK_AUDIO_STANDARD_INTERFACE, 3313 }, 3314 { 3315 /* Midi */ 3316 .ifnum = 3, 3317 .type = QUIRK_MIDI_STANDARD_INTERFACE 3318 }, 3319 { 3320 .ifnum = -1 3321 }, 3322 } 3323 } 3324 }, 3325 3326 { 3327 /* 3328 * Some USB MIDI devices don't have an audio control interface, 3329 * so we have to grab MIDI streaming interfaces here. 3330 */ 3331 .match_flags = USB_DEVICE_ID_MATCH_INT_CLASS | 3332 USB_DEVICE_ID_MATCH_INT_SUBCLASS, 3333 .bInterfaceClass = USB_CLASS_AUDIO, 3334 .bInterfaceSubClass = USB_SUBCLASS_MIDISTREAMING, 3335 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { 3336 .ifnum = QUIRK_ANY_INTERFACE, 3337 .type = QUIRK_MIDI_STANDARD_INTERFACE 3338 } 3339 }, 3340 3341 /* Rane SL-1 */ 3342 { 3343 USB_DEVICE(0x13e5, 0x0001), 3344 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { 3345 .ifnum = QUIRK_ANY_INTERFACE, 3346 .type = QUIRK_AUDIO_STANDARD_INTERFACE 3347 } 3348 }, 3349 3350 /* disabled due to regression for other devices; 3351 * see https://bugzilla.kernel.org/show_bug.cgi?id=199905 3352 */ 3353 #if 0 3354 { 3355 /* 3356 * Nura's first gen headphones use Cambridge Silicon Radio's vendor 3357 * ID, but it looks like the product ID actually is only for Nura. 3358 * The capture interface does not work at all (even on Windows), 3359 * and only the 48 kHz sample rate works for the playback interface. 3360 */ 3361 USB_DEVICE(0x0a12, 0x1243), 3362 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) { 3363 .ifnum = QUIRK_ANY_INTERFACE, 3364 .type = QUIRK_COMPOSITE, 3365 .data = (const struct snd_usb_audio_quirk[]) { 3366 { 3367 .ifnum = 0, 3368 .type = QUIRK_AUDIO_STANDARD_MIXER, 3369 }, 3370 /* Capture */ 3371 { 3372 .ifnum = 1, 3373 .type = QUIRK_IGNORE_INTERFACE, 3374 }, 3375 /* Playback */ 3376 { 3377 .ifnum = 2, 3378 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 3379 .data = &(const struct audioformat) { 3380 .formats = SNDRV_PCM_FMTBIT_S16_LE, 3381 .channels = 2, 3382 .iface = 2, 3383 .altsetting = 1, 3384 .altset_idx = 1, 3385 .attributes = UAC_EP_CS_ATTR_FILL_MAX | 3386 UAC_EP_CS_ATTR_SAMPLE_RATE, 3387 .endpoint = 0x03, 3388 .ep_attr = USB_ENDPOINT_XFER_ISOC, 3389 .rates = SNDRV_PCM_RATE_48000, 3390 .rate_min = 48000, 3391 .rate_max = 48000, 3392 .nr_rates = 1, 3393 .rate_table = (unsigned int[]) { 3394 48000 3395 } 3396 } 3397 }, 3398 { 3399 .ifnum = -1 3400 }, 3401 } 3402 } 3403 }, 3404 #endif /* disabled */ 3405 3406 { 3407 /* 3408 * Bower's & Wilkins PX headphones only support the 48 kHz sample rate 3409 * even though it advertises more. The capture interface doesn't work 3410 * even on windows. 3411 */ 3412 USB_DEVICE(0x19b5, 0x0021), 3413 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) { 3414 .ifnum = QUIRK_ANY_INTERFACE, 3415 .type = QUIRK_COMPOSITE, 3416 .data = (const struct snd_usb_audio_quirk[]) { 3417 { 3418 .ifnum = 0, 3419 .type = QUIRK_AUDIO_STANDARD_MIXER, 3420 }, 3421 /* Playback */ 3422 { 3423 .ifnum = 1, 3424 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 3425 .data = &(const struct audioformat) { 3426 .formats = SNDRV_PCM_FMTBIT_S16_LE, 3427 .channels = 2, 3428 .iface = 1, 3429 .altsetting = 1, 3430 .altset_idx = 1, 3431 .attributes = UAC_EP_CS_ATTR_FILL_MAX | 3432 UAC_EP_CS_ATTR_SAMPLE_RATE, 3433 .endpoint = 0x03, 3434 .ep_attr = USB_ENDPOINT_XFER_ISOC, 3435 .rates = SNDRV_PCM_RATE_48000, 3436 .rate_min = 48000, 3437 .rate_max = 48000, 3438 .nr_rates = 1, 3439 .rate_table = (unsigned int[]) { 3440 48000 3441 } 3442 } 3443 }, 3444 { 3445 .ifnum = -1 3446 }, 3447 } 3448 } 3449 }, 3450 /* MOTU Microbook II */ 3451 { 3452 USB_DEVICE_VENDOR_SPEC(0x07fd, 0x0004), 3453 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) { 3454 .vendor_name = "MOTU", 3455 .product_name = "MicroBookII", 3456 .ifnum = QUIRK_ANY_INTERFACE, 3457 .type = QUIRK_COMPOSITE, 3458 .data = (const struct snd_usb_audio_quirk[]) { 3459 { 3460 .ifnum = 0, 3461 .type = QUIRK_AUDIO_STANDARD_MIXER, 3462 }, 3463 { 3464 .ifnum = 0, 3465 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 3466 .data = &(const struct audioformat) { 3467 .formats = SNDRV_PCM_FMTBIT_S24_3BE, 3468 .channels = 6, 3469 .iface = 0, 3470 .altsetting = 1, 3471 .altset_idx = 1, 3472 .attributes = 0, 3473 .endpoint = 0x84, 3474 .rates = SNDRV_PCM_RATE_96000, 3475 .ep_attr = USB_ENDPOINT_XFER_ISOC | 3476 USB_ENDPOINT_SYNC_ASYNC, 3477 .rate_min = 96000, 3478 .rate_max = 96000, 3479 .nr_rates = 1, 3480 .maxpacksize = 0x00d8, 3481 .rate_table = (unsigned int[]) { 3482 96000 3483 } 3484 } 3485 }, 3486 { 3487 .ifnum = 0, 3488 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 3489 .data = &(const struct audioformat) { 3490 .formats = SNDRV_PCM_FMTBIT_S24_3BE, 3491 .channels = 8, 3492 .iface = 0, 3493 .altsetting = 1, 3494 .altset_idx = 1, 3495 .attributes = 0, 3496 .endpoint = 0x03, 3497 .ep_idx = 1, 3498 .rates = SNDRV_PCM_RATE_96000, 3499 .ep_attr = USB_ENDPOINT_XFER_ISOC | 3500 USB_ENDPOINT_SYNC_ASYNC, 3501 .rate_min = 96000, 3502 .rate_max = 96000, 3503 .nr_rates = 1, 3504 .maxpacksize = 0x0120, 3505 .rate_table = (unsigned int[]) { 3506 96000 3507 } 3508 } 3509 }, 3510 { 3511 .ifnum = -1 3512 } 3513 } 3514 } 3515 }, 3516 { 3517 /* 3518 * PIONEER DJ DDJ-SX3 3519 * PCM is 12 channels out, 10 channels in @ 44.1 fixed 3520 * interface 0, vendor class alt setting 1 for endpoints 5 and 0x86 3521 * The feedback for the output is the input. 3522 */ 3523 USB_DEVICE_VENDOR_SPEC(0x2b73, 0x0023), 3524 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) { 3525 .ifnum = QUIRK_ANY_INTERFACE, 3526 .type = QUIRK_COMPOSITE, 3527 .data = (const struct snd_usb_audio_quirk[]) { 3528 { 3529 .ifnum = 0, 3530 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 3531 .data = &(const struct audioformat) { 3532 .formats = SNDRV_PCM_FMTBIT_S32_LE, 3533 .channels = 12, 3534 .iface = 0, 3535 .altsetting = 1, 3536 .altset_idx = 1, 3537 .endpoint = 0x05, 3538 .ep_attr = USB_ENDPOINT_XFER_ISOC| 3539 USB_ENDPOINT_SYNC_ASYNC, 3540 .rates = SNDRV_PCM_RATE_44100, 3541 .rate_min = 44100, 3542 .rate_max = 44100, 3543 .nr_rates = 1, 3544 .rate_table = (unsigned int[]) { 44100 } 3545 } 3546 }, 3547 { 3548 .ifnum = 0, 3549 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 3550 .data = &(const struct audioformat) { 3551 .formats = SNDRV_PCM_FMTBIT_S32_LE, 3552 .channels = 10, 3553 .iface = 0, 3554 .altsetting = 1, 3555 .altset_idx = 1, 3556 .endpoint = 0x86, 3557 .ep_idx = 1, 3558 .ep_attr = USB_ENDPOINT_XFER_ISOC| 3559 USB_ENDPOINT_SYNC_ASYNC| 3560 USB_ENDPOINT_USAGE_IMPLICIT_FB, 3561 .rates = SNDRV_PCM_RATE_44100, 3562 .rate_min = 44100, 3563 .rate_max = 44100, 3564 .nr_rates = 1, 3565 .rate_table = (unsigned int[]) { 44100 } 3566 } 3567 }, 3568 { 3569 .ifnum = -1 3570 } 3571 } 3572 } 3573 }, 3574 { 3575 /* 3576 * Pioneer DJ DJM-250MK2 3577 * PCM is 8 channels out @ 48 fixed (endpoint 0x01) 3578 * and 8 channels in @ 48 fixed (endpoint 0x82). 3579 * 3580 * Both playback and recording is working, even simultaneously. 3581 * 3582 * Playback channels could be mapped to: 3583 * - CH1 3584 * - CH2 3585 * - AUX 3586 * 3587 * Recording channels could be mapped to: 3588 * - Post CH1 Fader 3589 * - Post CH2 Fader 3590 * - Cross Fader A 3591 * - Cross Fader B 3592 * - MIC 3593 * - AUX 3594 * - REC OUT 3595 * 3596 * There is remaining problem with recording directly from PHONO/LINE. 3597 * If we map a channel to: 3598 * - CH1 Control Tone PHONO 3599 * - CH1 Control Tone LINE 3600 * - CH2 Control Tone PHONO 3601 * - CH2 Control Tone LINE 3602 * it is silent. 3603 * There is no signal even on other operating systems with official drivers. 3604 * The signal appears only when a supported application is started. 3605 * This needs to be investigated yet... 3606 * (there is quite a lot communication on the USB in both directions) 3607 * 3608 * In current version this mixer could be used for playback 3609 * and for recording from vinyls (through Post CH* Fader) 3610 * but not for DVS (Digital Vinyl Systems) like in Mixxx. 3611 */ 3612 USB_DEVICE_VENDOR_SPEC(0x2b73, 0x0017), 3613 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) { 3614 .ifnum = QUIRK_ANY_INTERFACE, 3615 .type = QUIRK_COMPOSITE, 3616 .data = (const struct snd_usb_audio_quirk[]) { 3617 { 3618 .ifnum = 0, 3619 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 3620 .data = &(const struct audioformat) { 3621 .formats = SNDRV_PCM_FMTBIT_S24_3LE, 3622 .channels = 8, // outputs 3623 .iface = 0, 3624 .altsetting = 1, 3625 .altset_idx = 1, 3626 .endpoint = 0x01, 3627 .ep_attr = USB_ENDPOINT_XFER_ISOC| 3628 USB_ENDPOINT_SYNC_ASYNC, 3629 .rates = SNDRV_PCM_RATE_48000, 3630 .rate_min = 48000, 3631 .rate_max = 48000, 3632 .nr_rates = 1, 3633 .rate_table = (unsigned int[]) { 48000 } 3634 } 3635 }, 3636 { 3637 .ifnum = 0, 3638 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 3639 .data = &(const struct audioformat) { 3640 .formats = SNDRV_PCM_FMTBIT_S24_3LE, 3641 .channels = 8, // inputs 3642 .iface = 0, 3643 .altsetting = 1, 3644 .altset_idx = 1, 3645 .endpoint = 0x82, 3646 .ep_idx = 1, 3647 .ep_attr = USB_ENDPOINT_XFER_ISOC| 3648 USB_ENDPOINT_SYNC_ASYNC| 3649 USB_ENDPOINT_USAGE_IMPLICIT_FB, 3650 .rates = SNDRV_PCM_RATE_48000, 3651 .rate_min = 48000, 3652 .rate_max = 48000, 3653 .nr_rates = 1, 3654 .rate_table = (unsigned int[]) { 48000 } 3655 } 3656 }, 3657 { 3658 .ifnum = -1 3659 } 3660 } 3661 } 3662 }, 3663 { 3664 /* 3665 * PIONEER DJ DDJ-RB 3666 * PCM is 4 channels out, 2 dummy channels in @ 44.1 fixed 3667 * The feedback for the output is the dummy input. 3668 */ 3669 USB_DEVICE_VENDOR_SPEC(0x2b73, 0x000e), 3670 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) { 3671 .ifnum = QUIRK_ANY_INTERFACE, 3672 .type = QUIRK_COMPOSITE, 3673 .data = (const struct snd_usb_audio_quirk[]) { 3674 { 3675 .ifnum = 0, 3676 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 3677 .data = &(const struct audioformat) { 3678 .formats = SNDRV_PCM_FMTBIT_S24_3LE, 3679 .channels = 4, 3680 .iface = 0, 3681 .altsetting = 1, 3682 .altset_idx = 1, 3683 .endpoint = 0x01, 3684 .ep_attr = USB_ENDPOINT_XFER_ISOC| 3685 USB_ENDPOINT_SYNC_ASYNC, 3686 .rates = SNDRV_PCM_RATE_44100, 3687 .rate_min = 44100, 3688 .rate_max = 44100, 3689 .nr_rates = 1, 3690 .rate_table = (unsigned int[]) { 44100 } 3691 } 3692 }, 3693 { 3694 .ifnum = 0, 3695 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 3696 .data = &(const struct audioformat) { 3697 .formats = SNDRV_PCM_FMTBIT_S24_3LE, 3698 .channels = 2, 3699 .iface = 0, 3700 .altsetting = 1, 3701 .altset_idx = 1, 3702 .endpoint = 0x82, 3703 .ep_idx = 1, 3704 .ep_attr = USB_ENDPOINT_XFER_ISOC| 3705 USB_ENDPOINT_SYNC_ASYNC| 3706 USB_ENDPOINT_USAGE_IMPLICIT_FB, 3707 .rates = SNDRV_PCM_RATE_44100, 3708 .rate_min = 44100, 3709 .rate_max = 44100, 3710 .nr_rates = 1, 3711 .rate_table = (unsigned int[]) { 44100 } 3712 } 3713 }, 3714 { 3715 .ifnum = -1 3716 } 3717 } 3718 } 3719 }, 3720 3721 { 3722 /* 3723 * PIONEER DJ DDJ-RR 3724 * PCM is 6 channels out & 4 channels in @ 44.1 fixed 3725 */ 3726 USB_DEVICE_VENDOR_SPEC(0x2b73, 0x000d), 3727 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) { 3728 .ifnum = QUIRK_ANY_INTERFACE, 3729 .type = QUIRK_COMPOSITE, 3730 .data = (const struct snd_usb_audio_quirk[]) { 3731 { 3732 .ifnum = 0, 3733 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 3734 .data = &(const struct audioformat) { 3735 .formats = SNDRV_PCM_FMTBIT_S24_3LE, 3736 .channels = 6, //Master, Headphones & Booth 3737 .iface = 0, 3738 .altsetting = 1, 3739 .altset_idx = 1, 3740 .endpoint = 0x01, 3741 .ep_attr = USB_ENDPOINT_XFER_ISOC| 3742 USB_ENDPOINT_SYNC_ASYNC, 3743 .rates = SNDRV_PCM_RATE_44100, 3744 .rate_min = 44100, 3745 .rate_max = 44100, 3746 .nr_rates = 1, 3747 .rate_table = (unsigned int[]) { 44100 } 3748 } 3749 }, 3750 { 3751 .ifnum = 0, 3752 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 3753 .data = &(const struct audioformat) { 3754 .formats = SNDRV_PCM_FMTBIT_S24_3LE, 3755 .channels = 4, //2x RCA inputs (CH1 & CH2) 3756 .iface = 0, 3757 .altsetting = 1, 3758 .altset_idx = 1, 3759 .endpoint = 0x82, 3760 .ep_idx = 1, 3761 .ep_attr = USB_ENDPOINT_XFER_ISOC| 3762 USB_ENDPOINT_SYNC_ASYNC| 3763 USB_ENDPOINT_USAGE_IMPLICIT_FB, 3764 .rates = SNDRV_PCM_RATE_44100, 3765 .rate_min = 44100, 3766 .rate_max = 44100, 3767 .nr_rates = 1, 3768 .rate_table = (unsigned int[]) { 44100 } 3769 } 3770 }, 3771 { 3772 .ifnum = -1 3773 } 3774 } 3775 } 3776 }, 3777 3778 { 3779 /* 3780 * PIONEER DJ DDJ-SR2 3781 * PCM is 4 channels out, 6 channels in @ 44.1 fixed 3782 * The Feedback for the output is the input 3783 */ 3784 USB_DEVICE_VENDOR_SPEC(0x2b73, 0x001e), 3785 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) { 3786 .ifnum = QUIRK_ANY_INTERFACE, 3787 .type = QUIRK_COMPOSITE, 3788 .data = (const struct snd_usb_audio_quirk[]) { 3789 { 3790 .ifnum = 0, 3791 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 3792 .data = &(const struct audioformat) { 3793 .formats = SNDRV_PCM_FMTBIT_S24_3LE, 3794 .channels = 4, 3795 .iface = 0, 3796 .altsetting = 1, 3797 .altset_idx = 1, 3798 .endpoint = 0x01, 3799 .ep_attr = USB_ENDPOINT_XFER_ISOC| 3800 USB_ENDPOINT_SYNC_ASYNC, 3801 .rates = SNDRV_PCM_RATE_44100, 3802 .rate_min = 44100, 3803 .rate_max = 44100, 3804 .nr_rates = 1, 3805 .rate_table = (unsigned int[]) { 44100 } 3806 } 3807 }, 3808 { 3809 .ifnum = 0, 3810 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 3811 .data = &(const struct audioformat) { 3812 .formats = SNDRV_PCM_FMTBIT_S24_3LE, 3813 .channels = 6, 3814 .iface = 0, 3815 .altsetting = 1, 3816 .altset_idx = 1, 3817 .endpoint = 0x82, 3818 .ep_idx = 1, 3819 .ep_attr = USB_ENDPOINT_XFER_ISOC| 3820 USB_ENDPOINT_SYNC_ASYNC| 3821 USB_ENDPOINT_USAGE_IMPLICIT_FB, 3822 .rates = SNDRV_PCM_RATE_44100, 3823 .rate_min = 44100, 3824 .rate_max = 44100, 3825 .nr_rates = 1, 3826 .rate_table = (unsigned int[]) { 44100 } 3827 } 3828 }, 3829 { 3830 .ifnum = -1 3831 } 3832 } 3833 } 3834 }, 3835 3836 { 3837 /* 3838 * Pioneer DJ DJM-900NXS2 3839 * 10 channels playback & 12 channels capture @ 44.1/48/96kHz S24LE 3840 */ 3841 USB_DEVICE_VENDOR_SPEC(0x2b73, 0x000a), 3842 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) { 3843 .ifnum = QUIRK_ANY_INTERFACE, 3844 .type = QUIRK_COMPOSITE, 3845 .data = (const struct snd_usb_audio_quirk[]) { 3846 { 3847 .ifnum = 0, 3848 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 3849 .data = &(const struct audioformat) { 3850 .formats = SNDRV_PCM_FMTBIT_S24_3LE, 3851 .channels = 10, 3852 .iface = 0, 3853 .altsetting = 1, 3854 .altset_idx = 1, 3855 .endpoint = 0x01, 3856 .ep_attr = USB_ENDPOINT_XFER_ISOC| 3857 USB_ENDPOINT_SYNC_ASYNC, 3858 .rates = SNDRV_PCM_RATE_44100| 3859 SNDRV_PCM_RATE_48000| 3860 SNDRV_PCM_RATE_96000, 3861 .rate_min = 44100, 3862 .rate_max = 96000, 3863 .nr_rates = 3, 3864 .rate_table = (unsigned int[]) { 3865 44100, 48000, 96000 3866 } 3867 } 3868 }, 3869 { 3870 .ifnum = 0, 3871 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 3872 .data = &(const struct audioformat) { 3873 .formats = SNDRV_PCM_FMTBIT_S24_3LE, 3874 .channels = 12, 3875 .iface = 0, 3876 .altsetting = 1, 3877 .altset_idx = 1, 3878 .endpoint = 0x82, 3879 .ep_idx = 1, 3880 .ep_attr = USB_ENDPOINT_XFER_ISOC| 3881 USB_ENDPOINT_SYNC_ASYNC| 3882 USB_ENDPOINT_USAGE_IMPLICIT_FB, 3883 .rates = SNDRV_PCM_RATE_44100| 3884 SNDRV_PCM_RATE_48000| 3885 SNDRV_PCM_RATE_96000, 3886 .rate_min = 44100, 3887 .rate_max = 96000, 3888 .nr_rates = 3, 3889 .rate_table = (unsigned int[]) { 3890 44100, 48000, 96000 3891 } 3892 } 3893 }, 3894 { 3895 .ifnum = -1 3896 } 3897 } 3898 } 3899 }, 3900 3901 { 3902 /* 3903 * PIONEER DJ DDJ-800 3904 * PCM is 6 channels out, 6 channels in @ 44.1 fixed 3905 * The Feedback for the output is the input 3906 */ 3907 USB_DEVICE_VENDOR_SPEC(0x2b73, 0x0029), 3908 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) { 3909 .ifnum = QUIRK_ANY_INTERFACE, 3910 .type = QUIRK_COMPOSITE, 3911 .data = (const struct snd_usb_audio_quirk[]) { 3912 { 3913 .ifnum = 0, 3914 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 3915 .data = &(const struct audioformat) { 3916 .formats = SNDRV_PCM_FMTBIT_S24_3LE, 3917 .channels = 6, 3918 .iface = 0, 3919 .altsetting = 1, 3920 .altset_idx = 1, 3921 .endpoint = 0x01, 3922 .ep_attr = USB_ENDPOINT_XFER_ISOC| 3923 USB_ENDPOINT_SYNC_ASYNC, 3924 .rates = SNDRV_PCM_RATE_44100, 3925 .rate_min = 44100, 3926 .rate_max = 44100, 3927 .nr_rates = 1, 3928 .rate_table = (unsigned int[]) { 44100 } 3929 } 3930 }, 3931 { 3932 .ifnum = 0, 3933 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 3934 .data = &(const struct audioformat) { 3935 .formats = SNDRV_PCM_FMTBIT_S24_3LE, 3936 .channels = 6, 3937 .iface = 0, 3938 .altsetting = 1, 3939 .altset_idx = 1, 3940 .endpoint = 0x82, 3941 .ep_idx = 1, 3942 .ep_attr = USB_ENDPOINT_XFER_ISOC| 3943 USB_ENDPOINT_SYNC_ASYNC| 3944 USB_ENDPOINT_USAGE_IMPLICIT_FB, 3945 .rates = SNDRV_PCM_RATE_44100, 3946 .rate_min = 44100, 3947 .rate_max = 44100, 3948 .nr_rates = 1, 3949 .rate_table = (unsigned int[]) { 44100 } 3950 } 3951 }, 3952 { 3953 .ifnum = -1 3954 } 3955 } 3956 } 3957 }, 3958 3959 /* 3960 * MacroSilicon MS2100/MS2106 based AV capture cards 3961 * 3962 * These claim 96kHz 1ch in the descriptors, but are actually 48kHz 2ch. 3963 * They also need QUIRK_FLAG_ALIGN_TRANSFER, which makes one wonder if 3964 * they pretend to be 96kHz mono as a workaround for stereo being broken 3965 * by that... 3966 * 3967 * They also have an issue with initial stream alignment that causes the 3968 * channels to be swapped and out of phase, which is dealt with in quirks.c. 3969 */ 3970 { 3971 USB_AUDIO_DEVICE(0x534d, 0x0021), 3972 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) { 3973 .vendor_name = "MacroSilicon", 3974 .product_name = "MS210x", 3975 .ifnum = QUIRK_ANY_INTERFACE, 3976 .type = QUIRK_COMPOSITE, 3977 .data = &(const struct snd_usb_audio_quirk[]) { 3978 { 3979 .ifnum = 2, 3980 .type = QUIRK_AUDIO_STANDARD_MIXER, 3981 }, 3982 { 3983 .ifnum = 3, 3984 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 3985 .data = &(const struct audioformat) { 3986 .formats = SNDRV_PCM_FMTBIT_S16_LE, 3987 .channels = 2, 3988 .iface = 3, 3989 .altsetting = 1, 3990 .altset_idx = 1, 3991 .attributes = 0, 3992 .endpoint = 0x82, 3993 .ep_attr = USB_ENDPOINT_XFER_ISOC | 3994 USB_ENDPOINT_SYNC_ASYNC, 3995 .rates = SNDRV_PCM_RATE_CONTINUOUS, 3996 .rate_min = 48000, 3997 .rate_max = 48000, 3998 } 3999 }, 4000 { 4001 .ifnum = -1 4002 } 4003 } 4004 } 4005 }, 4006 4007 /* 4008 * MacroSilicon MS2109 based HDMI capture cards 4009 * 4010 * These claim 96kHz 1ch in the descriptors, but are actually 48kHz 2ch. 4011 * They also need QUIRK_FLAG_ALIGN_TRANSFER, which makes one wonder if 4012 * they pretend to be 96kHz mono as a workaround for stereo being broken 4013 * by that... 4014 * 4015 * They also have an issue with initial stream alignment that causes the 4016 * channels to be swapped and out of phase, which is dealt with in quirks.c. 4017 */ 4018 { 4019 USB_AUDIO_DEVICE(0x534d, 0x2109), 4020 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) { 4021 .vendor_name = "MacroSilicon", 4022 .product_name = "MS2109", 4023 .ifnum = QUIRK_ANY_INTERFACE, 4024 .type = QUIRK_COMPOSITE, 4025 .data = &(const struct snd_usb_audio_quirk[]) { 4026 { 4027 .ifnum = 2, 4028 .type = QUIRK_AUDIO_STANDARD_MIXER, 4029 }, 4030 { 4031 .ifnum = 3, 4032 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 4033 .data = &(const struct audioformat) { 4034 .formats = SNDRV_PCM_FMTBIT_S16_LE, 4035 .channels = 2, 4036 .iface = 3, 4037 .altsetting = 1, 4038 .altset_idx = 1, 4039 .attributes = 0, 4040 .endpoint = 0x82, 4041 .ep_attr = USB_ENDPOINT_XFER_ISOC | 4042 USB_ENDPOINT_SYNC_ASYNC, 4043 .rates = SNDRV_PCM_RATE_CONTINUOUS, 4044 .rate_min = 48000, 4045 .rate_max = 48000, 4046 } 4047 }, 4048 { 4049 .ifnum = -1 4050 } 4051 } 4052 } 4053 }, 4054 { 4055 /* 4056 * Pioneer DJ DJM-750 4057 * 8 channels playback & 8 channels capture @ 44.1/48/96kHz S24LE 4058 */ 4059 USB_DEVICE_VENDOR_SPEC(0x08e4, 0x017f), 4060 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) { 4061 .ifnum = QUIRK_ANY_INTERFACE, 4062 .type = QUIRK_COMPOSITE, 4063 .data = (const struct snd_usb_audio_quirk[]) { 4064 { 4065 .ifnum = 0, 4066 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 4067 .data = &(const struct audioformat) { 4068 .formats = SNDRV_PCM_FMTBIT_S24_3LE, 4069 .channels = 8, 4070 .iface = 0, 4071 .altsetting = 1, 4072 .altset_idx = 1, 4073 .endpoint = 0x05, 4074 .ep_attr = USB_ENDPOINT_XFER_ISOC| 4075 USB_ENDPOINT_SYNC_ASYNC, 4076 .rates = SNDRV_PCM_RATE_44100| 4077 SNDRV_PCM_RATE_48000| 4078 SNDRV_PCM_RATE_96000, 4079 .rate_min = 44100, 4080 .rate_max = 96000, 4081 .nr_rates = 3, 4082 .rate_table = (unsigned int[]) { 44100, 48000, 96000 } 4083 } 4084 }, 4085 { 4086 .ifnum = 0, 4087 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 4088 .data = &(const struct audioformat) { 4089 .formats = SNDRV_PCM_FMTBIT_S24_3LE, 4090 .channels = 8, 4091 .iface = 0, 4092 .altsetting = 1, 4093 .altset_idx = 1, 4094 .endpoint = 0x86, 4095 .ep_idx = 1, 4096 .ep_attr = USB_ENDPOINT_XFER_ISOC| 4097 USB_ENDPOINT_SYNC_ASYNC| 4098 USB_ENDPOINT_USAGE_IMPLICIT_FB, 4099 .rates = SNDRV_PCM_RATE_44100| 4100 SNDRV_PCM_RATE_48000| 4101 SNDRV_PCM_RATE_96000, 4102 .rate_min = 44100, 4103 .rate_max = 96000, 4104 .nr_rates = 3, 4105 .rate_table = (unsigned int[]) { 44100, 48000, 96000 } 4106 } 4107 }, 4108 { 4109 .ifnum = -1 4110 } 4111 } 4112 } 4113 }, 4114 { 4115 /* 4116 * Pioneer DJ DJM-750MK2 4117 * 10 channels playback & 12 channels capture @ 48kHz S24LE 4118 */ 4119 USB_DEVICE_VENDOR_SPEC(0x2b73, 0x001b), 4120 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) { 4121 .ifnum = QUIRK_ANY_INTERFACE, 4122 .type = QUIRK_COMPOSITE, 4123 .data = (const struct snd_usb_audio_quirk[]) { 4124 { 4125 .ifnum = 0, 4126 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 4127 .data = &(const struct audioformat) { 4128 .formats = SNDRV_PCM_FMTBIT_S24_3LE, 4129 .channels = 10, 4130 .iface = 0, 4131 .altsetting = 1, 4132 .altset_idx = 1, 4133 .endpoint = 0x01, 4134 .ep_attr = USB_ENDPOINT_XFER_ISOC| 4135 USB_ENDPOINT_SYNC_ASYNC, 4136 .rates = SNDRV_PCM_RATE_48000, 4137 .rate_min = 48000, 4138 .rate_max = 48000, 4139 .nr_rates = 1, 4140 .rate_table = (unsigned int[]) { 4141 48000 4142 } 4143 } 4144 }, 4145 { 4146 .ifnum = 0, 4147 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 4148 .data = &(const struct audioformat) { 4149 .formats = SNDRV_PCM_FMTBIT_S24_3LE, 4150 .channels = 12, 4151 .iface = 0, 4152 .altsetting = 1, 4153 .altset_idx = 1, 4154 .endpoint = 0x82, 4155 .ep_idx = 1, 4156 .ep_attr = USB_ENDPOINT_XFER_ISOC| 4157 USB_ENDPOINT_SYNC_ASYNC| 4158 USB_ENDPOINT_USAGE_IMPLICIT_FB, 4159 .rates = SNDRV_PCM_RATE_48000, 4160 .rate_min = 48000, 4161 .rate_max = 48000, 4162 .nr_rates = 1, 4163 .rate_table = (unsigned int[]) { 48000 } 4164 } 4165 }, 4166 { 4167 .ifnum = -1 4168 } 4169 } 4170 } 4171 }, 4172 { 4173 /* 4174 * Pioneer DJ DJM-850 4175 * 8 channels playback and 8 channels capture @ 44.1/48/96kHz S24LE 4176 * Playback on EP 0x05 4177 * Capture on EP 0x86 4178 */ 4179 USB_DEVICE_VENDOR_SPEC(0x08e4, 0x0163), 4180 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) { 4181 .ifnum = QUIRK_ANY_INTERFACE, 4182 .type = QUIRK_COMPOSITE, 4183 .data = (const struct snd_usb_audio_quirk[]) { 4184 { 4185 .ifnum = 0, 4186 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 4187 .data = &(const struct audioformat) { 4188 .formats = SNDRV_PCM_FMTBIT_S24_3LE, 4189 .channels = 8, 4190 .iface = 0, 4191 .altsetting = 1, 4192 .altset_idx = 1, 4193 .endpoint = 0x05, 4194 .ep_attr = USB_ENDPOINT_XFER_ISOC| 4195 USB_ENDPOINT_SYNC_ASYNC| 4196 USB_ENDPOINT_USAGE_DATA, 4197 .rates = SNDRV_PCM_RATE_44100| 4198 SNDRV_PCM_RATE_48000| 4199 SNDRV_PCM_RATE_96000, 4200 .rate_min = 44100, 4201 .rate_max = 96000, 4202 .nr_rates = 3, 4203 .rate_table = (unsigned int[]) { 44100, 48000, 96000 } 4204 } 4205 }, 4206 { 4207 .ifnum = 0, 4208 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 4209 .data = &(const struct audioformat) { 4210 .formats = SNDRV_PCM_FMTBIT_S24_3LE, 4211 .channels = 8, 4212 .iface = 0, 4213 .altsetting = 1, 4214 .altset_idx = 1, 4215 .endpoint = 0x86, 4216 .ep_idx = 1, 4217 .ep_attr = USB_ENDPOINT_XFER_ISOC| 4218 USB_ENDPOINT_SYNC_ASYNC| 4219 USB_ENDPOINT_USAGE_DATA, 4220 .rates = SNDRV_PCM_RATE_44100| 4221 SNDRV_PCM_RATE_48000| 4222 SNDRV_PCM_RATE_96000, 4223 .rate_min = 44100, 4224 .rate_max = 96000, 4225 .nr_rates = 3, 4226 .rate_table = (unsigned int[]) { 44100, 48000, 96000 } 4227 } 4228 }, 4229 { 4230 .ifnum = -1 4231 } 4232 } 4233 } 4234 }, 4235 { 4236 /* 4237 * Pioneer DJ DJM-450 4238 * PCM is 8 channels out @ 48 fixed (endpoint 0x01) 4239 * and 8 channels in @ 48 fixed (endpoint 0x82). 4240 */ 4241 USB_DEVICE_VENDOR_SPEC(0x2b73, 0x0013), 4242 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) { 4243 .ifnum = QUIRK_ANY_INTERFACE, 4244 .type = QUIRK_COMPOSITE, 4245 .data = (const struct snd_usb_audio_quirk[]) { 4246 { 4247 .ifnum = 0, 4248 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 4249 .data = &(const struct audioformat) { 4250 .formats = SNDRV_PCM_FMTBIT_S24_3LE, 4251 .channels = 8, // outputs 4252 .iface = 0, 4253 .altsetting = 1, 4254 .altset_idx = 1, 4255 .endpoint = 0x01, 4256 .ep_attr = USB_ENDPOINT_XFER_ISOC| 4257 USB_ENDPOINT_SYNC_ASYNC, 4258 .rates = SNDRV_PCM_RATE_48000, 4259 .rate_min = 48000, 4260 .rate_max = 48000, 4261 .nr_rates = 1, 4262 .rate_table = (unsigned int[]) { 48000 } 4263 } 4264 }, 4265 { 4266 .ifnum = 0, 4267 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 4268 .data = &(const struct audioformat) { 4269 .formats = SNDRV_PCM_FMTBIT_S24_3LE, 4270 .channels = 8, // inputs 4271 .iface = 0, 4272 .altsetting = 1, 4273 .altset_idx = 1, 4274 .endpoint = 0x82, 4275 .ep_idx = 1, 4276 .ep_attr = USB_ENDPOINT_XFER_ISOC| 4277 USB_ENDPOINT_SYNC_ASYNC| 4278 USB_ENDPOINT_USAGE_IMPLICIT_FB, 4279 .rates = SNDRV_PCM_RATE_48000, 4280 .rate_min = 48000, 4281 .rate_max = 48000, 4282 .nr_rates = 1, 4283 .rate_table = (unsigned int[]) { 48000 } 4284 } 4285 }, 4286 { 4287 .ifnum = -1 4288 } 4289 } 4290 } 4291 }, 4292 { 4293 /* 4294 * Sennheiser GSP670 4295 * Change order of interfaces loaded 4296 */ 4297 USB_DEVICE(0x1395, 0x0300), 4298 .bInterfaceClass = USB_CLASS_PER_INTERFACE, 4299 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) { 4300 .ifnum = QUIRK_ANY_INTERFACE, 4301 .type = QUIRK_COMPOSITE, 4302 .data = &(const struct snd_usb_audio_quirk[]) { 4303 // Communication 4304 { 4305 .ifnum = 3, 4306 .type = QUIRK_AUDIO_STANDARD_INTERFACE 4307 }, 4308 // Recording 4309 { 4310 .ifnum = 4, 4311 .type = QUIRK_AUDIO_STANDARD_INTERFACE 4312 }, 4313 // Main 4314 { 4315 .ifnum = 1, 4316 .type = QUIRK_AUDIO_STANDARD_INTERFACE 4317 }, 4318 { 4319 .ifnum = -1 4320 } 4321 } 4322 } 4323 }, 4324 { 4325 /* 4326 * Fiero SC-01 (firmware v1.0.0 @ 48 kHz) 4327 */ 4328 USB_DEVICE(0x2b53, 0x0023), 4329 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) { 4330 .vendor_name = "Fiero", 4331 .product_name = "SC-01", 4332 .ifnum = QUIRK_ANY_INTERFACE, 4333 .type = QUIRK_COMPOSITE, 4334 .data = &(const struct snd_usb_audio_quirk[]) { 4335 { 4336 .ifnum = 0, 4337 .type = QUIRK_AUDIO_STANDARD_INTERFACE 4338 }, 4339 /* Playback */ 4340 { 4341 .ifnum = 1, 4342 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 4343 .data = &(const struct audioformat) { 4344 .formats = SNDRV_PCM_FMTBIT_S32_LE, 4345 .channels = 2, 4346 .fmt_bits = 24, 4347 .iface = 1, 4348 .altsetting = 1, 4349 .altset_idx = 1, 4350 .endpoint = 0x01, 4351 .ep_attr = USB_ENDPOINT_XFER_ISOC | 4352 USB_ENDPOINT_SYNC_ASYNC, 4353 .rates = SNDRV_PCM_RATE_48000, 4354 .rate_min = 48000, 4355 .rate_max = 48000, 4356 .nr_rates = 1, 4357 .rate_table = (unsigned int[]) { 48000 }, 4358 .clock = 0x29 4359 } 4360 }, 4361 /* Capture */ 4362 { 4363 .ifnum = 2, 4364 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 4365 .data = &(const struct audioformat) { 4366 .formats = SNDRV_PCM_FMTBIT_S32_LE, 4367 .channels = 2, 4368 .fmt_bits = 24, 4369 .iface = 2, 4370 .altsetting = 1, 4371 .altset_idx = 1, 4372 .endpoint = 0x82, 4373 .ep_attr = USB_ENDPOINT_XFER_ISOC | 4374 USB_ENDPOINT_SYNC_ASYNC | 4375 USB_ENDPOINT_USAGE_IMPLICIT_FB, 4376 .rates = SNDRV_PCM_RATE_48000, 4377 .rate_min = 48000, 4378 .rate_max = 48000, 4379 .nr_rates = 1, 4380 .rate_table = (unsigned int[]) { 48000 }, 4381 .clock = 0x29 4382 } 4383 }, 4384 { 4385 .ifnum = -1 4386 } 4387 } 4388 } 4389 }, 4390 { 4391 /* 4392 * Fiero SC-01 (firmware v1.0.0 @ 96 kHz) 4393 */ 4394 USB_DEVICE(0x2b53, 0x0024), 4395 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) { 4396 .vendor_name = "Fiero", 4397 .product_name = "SC-01", 4398 .ifnum = QUIRK_ANY_INTERFACE, 4399 .type = QUIRK_COMPOSITE, 4400 .data = &(const struct snd_usb_audio_quirk[]) { 4401 { 4402 .ifnum = 0, 4403 .type = QUIRK_AUDIO_STANDARD_INTERFACE 4404 }, 4405 /* Playback */ 4406 { 4407 .ifnum = 1, 4408 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 4409 .data = &(const struct audioformat) { 4410 .formats = SNDRV_PCM_FMTBIT_S32_LE, 4411 .channels = 2, 4412 .fmt_bits = 24, 4413 .iface = 1, 4414 .altsetting = 1, 4415 .altset_idx = 1, 4416 .endpoint = 0x01, 4417 .ep_attr = USB_ENDPOINT_XFER_ISOC | 4418 USB_ENDPOINT_SYNC_ASYNC, 4419 .rates = SNDRV_PCM_RATE_96000, 4420 .rate_min = 96000, 4421 .rate_max = 96000, 4422 .nr_rates = 1, 4423 .rate_table = (unsigned int[]) { 96000 }, 4424 .clock = 0x29 4425 } 4426 }, 4427 /* Capture */ 4428 { 4429 .ifnum = 2, 4430 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 4431 .data = &(const struct audioformat) { 4432 .formats = SNDRV_PCM_FMTBIT_S32_LE, 4433 .channels = 2, 4434 .fmt_bits = 24, 4435 .iface = 2, 4436 .altsetting = 1, 4437 .altset_idx = 1, 4438 .endpoint = 0x82, 4439 .ep_attr = USB_ENDPOINT_XFER_ISOC | 4440 USB_ENDPOINT_SYNC_ASYNC | 4441 USB_ENDPOINT_USAGE_IMPLICIT_FB, 4442 .rates = SNDRV_PCM_RATE_96000, 4443 .rate_min = 96000, 4444 .rate_max = 96000, 4445 .nr_rates = 1, 4446 .rate_table = (unsigned int[]) { 96000 }, 4447 .clock = 0x29 4448 } 4449 }, 4450 { 4451 .ifnum = -1 4452 } 4453 } 4454 } 4455 }, 4456 { 4457 /* 4458 * Fiero SC-01 (firmware v1.1.0) 4459 */ 4460 USB_DEVICE(0x2b53, 0x0031), 4461 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) { 4462 .vendor_name = "Fiero", 4463 .product_name = "SC-01", 4464 .ifnum = QUIRK_ANY_INTERFACE, 4465 .type = QUIRK_COMPOSITE, 4466 .data = &(const struct snd_usb_audio_quirk[]) { 4467 { 4468 .ifnum = 0, 4469 .type = QUIRK_AUDIO_STANDARD_INTERFACE 4470 }, 4471 /* Playback */ 4472 { 4473 .ifnum = 1, 4474 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 4475 .data = &(const struct audioformat) { 4476 .formats = SNDRV_PCM_FMTBIT_S32_LE, 4477 .channels = 2, 4478 .fmt_bits = 24, 4479 .iface = 1, 4480 .altsetting = 1, 4481 .altset_idx = 1, 4482 .endpoint = 0x01, 4483 .ep_attr = USB_ENDPOINT_XFER_ISOC | 4484 USB_ENDPOINT_SYNC_ASYNC, 4485 .rates = SNDRV_PCM_RATE_48000 | 4486 SNDRV_PCM_RATE_96000, 4487 .rate_min = 48000, 4488 .rate_max = 96000, 4489 .nr_rates = 2, 4490 .rate_table = (unsigned int[]) { 48000, 96000 }, 4491 .clock = 0x29 4492 } 4493 }, 4494 /* Capture */ 4495 { 4496 .ifnum = 2, 4497 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 4498 .data = &(const struct audioformat) { 4499 .formats = SNDRV_PCM_FMTBIT_S32_LE, 4500 .channels = 2, 4501 .fmt_bits = 24, 4502 .iface = 2, 4503 .altsetting = 1, 4504 .altset_idx = 1, 4505 .endpoint = 0x82, 4506 .ep_attr = USB_ENDPOINT_XFER_ISOC | 4507 USB_ENDPOINT_SYNC_ASYNC | 4508 USB_ENDPOINT_USAGE_IMPLICIT_FB, 4509 .rates = SNDRV_PCM_RATE_48000 | 4510 SNDRV_PCM_RATE_96000, 4511 .rate_min = 48000, 4512 .rate_max = 96000, 4513 .nr_rates = 2, 4514 .rate_table = (unsigned int[]) { 48000, 96000 }, 4515 .clock = 0x29 4516 } 4517 }, 4518 { 4519 .ifnum = -1 4520 } 4521 } 4522 } 4523 }, 4524 { 4525 /* Advanced modes of the Mythware XA001AU. 4526 * For the standard mode, Mythware XA001AU has ID ffad:a001 4527 */ 4528 USB_DEVICE_VENDOR_SPEC(0xffad, 0xa001), 4529 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) { 4530 .vendor_name = "Mythware", 4531 .product_name = "XA001AU", 4532 .ifnum = QUIRK_ANY_INTERFACE, 4533 .type = QUIRK_COMPOSITE, 4534 .data = (const struct snd_usb_audio_quirk[]) { 4535 { 4536 .ifnum = 0, 4537 .type = QUIRK_IGNORE_INTERFACE, 4538 }, 4539 { 4540 .ifnum = 1, 4541 .type = QUIRK_AUDIO_STANDARD_INTERFACE, 4542 }, 4543 { 4544 .ifnum = 2, 4545 .type = QUIRK_AUDIO_STANDARD_INTERFACE, 4546 }, 4547 { 4548 .ifnum = -1 4549 } 4550 } 4551 } 4552 }, 4553 4554 #undef USB_DEVICE_VENDOR_SPEC 4555 #undef USB_AUDIO_DEVICE 4556
Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.