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