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 /* this catches most recent vendor-specific Roland devices */ 1722 { 1723 .match_flags = USB_DEVICE_ID_MATCH_VENDOR | 1724 USB_DEVICE_ID_MATCH_INT_CLASS, 1725 .idVendor = 0x0582, 1726 .bInterfaceClass = USB_CLASS_VENDOR_SPEC, 1727 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) { 1728 .ifnum = QUIRK_ANY_INTERFACE, 1729 .type = QUIRK_AUTODETECT 1730 } 1731 }, 1732 1733 /* Guillemot devices */ 1734 { 1735 /* 1736 * This is for the "Windows Edition" where the external MIDI ports are 1737 * the only MIDI ports; the control data is reported through HID 1738 * interfaces. The "Macintosh Edition" has ID 0xd002 and uses standard 1739 * compliant USB MIDI ports for external MIDI and controls. 1740 */ 1741 USB_DEVICE_VENDOR_SPEC(0x06f8, 0xb000), 1742 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { 1743 .vendor_name = "Hercules", 1744 .product_name = "DJ Console (WE)", 1745 .ifnum = 4, 1746 .type = QUIRK_MIDI_FIXED_ENDPOINT, 1747 .data = & (const struct snd_usb_midi_endpoint_info) { 1748 .out_cables = 0x0001, 1749 .in_cables = 0x0001 1750 } 1751 } 1752 }, 1753 1754 /* Midiman/M-Audio devices */ 1755 { 1756 USB_DEVICE_VENDOR_SPEC(0x0763, 0x1002), 1757 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { 1758 .vendor_name = "M-Audio", 1759 .product_name = "MidiSport 2x2", 1760 .ifnum = QUIRK_ANY_INTERFACE, 1761 .type = QUIRK_MIDI_MIDIMAN, 1762 .data = & (const struct snd_usb_midi_endpoint_info) { 1763 .out_cables = 0x0003, 1764 .in_cables = 0x0003 1765 } 1766 } 1767 }, 1768 { 1769 USB_DEVICE_VENDOR_SPEC(0x0763, 0x1011), 1770 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { 1771 .vendor_name = "M-Audio", 1772 .product_name = "MidiSport 1x1", 1773 .ifnum = QUIRK_ANY_INTERFACE, 1774 .type = QUIRK_MIDI_MIDIMAN, 1775 .data = & (const struct snd_usb_midi_endpoint_info) { 1776 .out_cables = 0x0001, 1777 .in_cables = 0x0001 1778 } 1779 } 1780 }, 1781 { 1782 USB_DEVICE_VENDOR_SPEC(0x0763, 0x1015), 1783 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { 1784 .vendor_name = "M-Audio", 1785 .product_name = "Keystation", 1786 .ifnum = QUIRK_ANY_INTERFACE, 1787 .type = QUIRK_MIDI_MIDIMAN, 1788 .data = & (const struct snd_usb_midi_endpoint_info) { 1789 .out_cables = 0x0001, 1790 .in_cables = 0x0001 1791 } 1792 } 1793 }, 1794 { 1795 USB_DEVICE_VENDOR_SPEC(0x0763, 0x1021), 1796 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { 1797 .vendor_name = "M-Audio", 1798 .product_name = "MidiSport 4x4", 1799 .ifnum = QUIRK_ANY_INTERFACE, 1800 .type = QUIRK_MIDI_MIDIMAN, 1801 .data = & (const struct snd_usb_midi_endpoint_info) { 1802 .out_cables = 0x000f, 1803 .in_cables = 0x000f 1804 } 1805 } 1806 }, 1807 { 1808 /* 1809 * For hardware revision 1.05; in the later revisions (1.10 and 1810 * 1.21), 0x1031 is the ID for the device without firmware. 1811 * Thanks to Olaf Giesbrecht <Olaf_Giesbrecht@yahoo.de> 1812 */ 1813 USB_DEVICE_VER(0x0763, 0x1031, 0x0100, 0x0109), 1814 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { 1815 .vendor_name = "M-Audio", 1816 .product_name = "MidiSport 8x8", 1817 .ifnum = QUIRK_ANY_INTERFACE, 1818 .type = QUIRK_MIDI_MIDIMAN, 1819 .data = & (const struct snd_usb_midi_endpoint_info) { 1820 .out_cables = 0x01ff, 1821 .in_cables = 0x01ff 1822 } 1823 } 1824 }, 1825 { 1826 USB_DEVICE_VENDOR_SPEC(0x0763, 0x1033), 1827 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { 1828 .vendor_name = "M-Audio", 1829 .product_name = "MidiSport 8x8", 1830 .ifnum = QUIRK_ANY_INTERFACE, 1831 .type = QUIRK_MIDI_MIDIMAN, 1832 .data = & (const struct snd_usb_midi_endpoint_info) { 1833 .out_cables = 0x01ff, 1834 .in_cables = 0x01ff 1835 } 1836 } 1837 }, 1838 { 1839 USB_DEVICE_VENDOR_SPEC(0x0763, 0x1041), 1840 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { 1841 .vendor_name = "M-Audio", 1842 .product_name = "MidiSport 2x4", 1843 .ifnum = QUIRK_ANY_INTERFACE, 1844 .type = QUIRK_MIDI_MIDIMAN, 1845 .data = & (const struct snd_usb_midi_endpoint_info) { 1846 .out_cables = 0x000f, 1847 .in_cables = 0x0003 1848 } 1849 } 1850 }, 1851 { 1852 USB_DEVICE_VENDOR_SPEC(0x0763, 0x2001), 1853 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { 1854 .vendor_name = "M-Audio", 1855 .product_name = "Quattro", 1856 .ifnum = QUIRK_ANY_INTERFACE, 1857 .type = QUIRK_COMPOSITE, 1858 .data = & (const struct snd_usb_audio_quirk[]) { 1859 /* 1860 * Interfaces 0-2 are "Windows-compatible", 16-bit only, 1861 * and share endpoints with the other interfaces. 1862 * Ignore them. The other interfaces can do 24 bits, 1863 * but captured samples are big-endian (see usbaudio.c). 1864 */ 1865 { 1866 .ifnum = 0, 1867 .type = QUIRK_IGNORE_INTERFACE 1868 }, 1869 { 1870 .ifnum = 1, 1871 .type = QUIRK_IGNORE_INTERFACE 1872 }, 1873 { 1874 .ifnum = 2, 1875 .type = QUIRK_IGNORE_INTERFACE 1876 }, 1877 { 1878 .ifnum = 3, 1879 .type = QUIRK_IGNORE_INTERFACE 1880 }, 1881 { 1882 .ifnum = 4, 1883 .type = QUIRK_AUDIO_STANDARD_INTERFACE 1884 }, 1885 { 1886 .ifnum = 5, 1887 .type = QUIRK_AUDIO_STANDARD_INTERFACE 1888 }, 1889 { 1890 .ifnum = 6, 1891 .type = QUIRK_IGNORE_INTERFACE 1892 }, 1893 { 1894 .ifnum = 7, 1895 .type = QUIRK_AUDIO_STANDARD_INTERFACE 1896 }, 1897 { 1898 .ifnum = 8, 1899 .type = QUIRK_AUDIO_STANDARD_INTERFACE 1900 }, 1901 { 1902 .ifnum = 9, 1903 .type = QUIRK_MIDI_MIDIMAN, 1904 .data = & (const struct snd_usb_midi_endpoint_info) { 1905 .out_cables = 0x0001, 1906 .in_cables = 0x0001 1907 } 1908 }, 1909 { 1910 .ifnum = -1 1911 } 1912 } 1913 } 1914 }, 1915 { 1916 USB_DEVICE_VENDOR_SPEC(0x0763, 0x2003), 1917 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { 1918 .vendor_name = "M-Audio", 1919 .product_name = "AudioPhile", 1920 .ifnum = 6, 1921 .type = QUIRK_MIDI_MIDIMAN, 1922 .data = & (const struct snd_usb_midi_endpoint_info) { 1923 .out_cables = 0x0001, 1924 .in_cables = 0x0001 1925 } 1926 } 1927 }, 1928 { 1929 USB_DEVICE_VENDOR_SPEC(0x0763, 0x2008), 1930 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { 1931 .vendor_name = "M-Audio", 1932 .product_name = "Ozone", 1933 .ifnum = 3, 1934 .type = QUIRK_MIDI_MIDIMAN, 1935 .data = & (const struct snd_usb_midi_endpoint_info) { 1936 .out_cables = 0x0001, 1937 .in_cables = 0x0001 1938 } 1939 } 1940 }, 1941 { 1942 USB_DEVICE_VENDOR_SPEC(0x0763, 0x200d), 1943 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { 1944 .vendor_name = "M-Audio", 1945 .product_name = "OmniStudio", 1946 .ifnum = QUIRK_ANY_INTERFACE, 1947 .type = QUIRK_COMPOSITE, 1948 .data = & (const struct snd_usb_audio_quirk[]) { 1949 { 1950 .ifnum = 0, 1951 .type = QUIRK_IGNORE_INTERFACE 1952 }, 1953 { 1954 .ifnum = 1, 1955 .type = QUIRK_IGNORE_INTERFACE 1956 }, 1957 { 1958 .ifnum = 2, 1959 .type = QUIRK_IGNORE_INTERFACE 1960 }, 1961 { 1962 .ifnum = 3, 1963 .type = QUIRK_IGNORE_INTERFACE 1964 }, 1965 { 1966 .ifnum = 4, 1967 .type = QUIRK_AUDIO_STANDARD_INTERFACE 1968 }, 1969 { 1970 .ifnum = 5, 1971 .type = QUIRK_AUDIO_STANDARD_INTERFACE 1972 }, 1973 { 1974 .ifnum = 6, 1975 .type = QUIRK_IGNORE_INTERFACE 1976 }, 1977 { 1978 .ifnum = 7, 1979 .type = QUIRK_AUDIO_STANDARD_INTERFACE 1980 }, 1981 { 1982 .ifnum = 8, 1983 .type = QUIRK_AUDIO_STANDARD_INTERFACE 1984 }, 1985 { 1986 .ifnum = 9, 1987 .type = QUIRK_MIDI_MIDIMAN, 1988 .data = & (const struct snd_usb_midi_endpoint_info) { 1989 .out_cables = 0x0001, 1990 .in_cables = 0x0001 1991 } 1992 }, 1993 { 1994 .ifnum = -1 1995 } 1996 } 1997 } 1998 }, 1999 { 2000 USB_DEVICE(0x0763, 0x2019), 2001 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { 2002 /* .vendor_name = "M-Audio", */ 2003 /* .product_name = "Ozone Academic", */ 2004 .ifnum = QUIRK_ANY_INTERFACE, 2005 .type = QUIRK_COMPOSITE, 2006 .data = & (const struct snd_usb_audio_quirk[]) { 2007 { 2008 .ifnum = 0, 2009 .type = QUIRK_AUDIO_STANDARD_INTERFACE 2010 }, 2011 { 2012 .ifnum = 1, 2013 .type = QUIRK_AUDIO_STANDARD_INTERFACE 2014 }, 2015 { 2016 .ifnum = 2, 2017 .type = QUIRK_AUDIO_STANDARD_INTERFACE 2018 }, 2019 { 2020 .ifnum = 3, 2021 .type = QUIRK_MIDI_MIDIMAN, 2022 .data = & (const struct snd_usb_midi_endpoint_info) { 2023 .out_cables = 0x0001, 2024 .in_cables = 0x0001 2025 } 2026 }, 2027 { 2028 .ifnum = -1 2029 } 2030 } 2031 } 2032 }, 2033 { 2034 /* M-Audio Micro */ 2035 USB_DEVICE_VENDOR_SPEC(0x0763, 0x201a), 2036 }, 2037 { 2038 USB_DEVICE_VENDOR_SPEC(0x0763, 0x2030), 2039 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) { 2040 /* .vendor_name = "M-Audio", */ 2041 /* .product_name = "Fast Track C400", */ 2042 .ifnum = QUIRK_ANY_INTERFACE, 2043 .type = QUIRK_COMPOSITE, 2044 .data = &(const struct snd_usb_audio_quirk[]) { 2045 { 2046 .ifnum = 1, 2047 .type = QUIRK_AUDIO_STANDARD_MIXER, 2048 }, 2049 /* Playback */ 2050 { 2051 .ifnum = 2, 2052 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 2053 .data = &(const struct audioformat) { 2054 .formats = SNDRV_PCM_FMTBIT_S24_3LE, 2055 .channels = 6, 2056 .iface = 2, 2057 .altsetting = 1, 2058 .altset_idx = 1, 2059 .attributes = UAC_EP_CS_ATTR_SAMPLE_RATE, 2060 .endpoint = 0x01, 2061 .ep_attr = 0x09, 2062 .rates = SNDRV_PCM_RATE_44100 | 2063 SNDRV_PCM_RATE_48000 | 2064 SNDRV_PCM_RATE_88200 | 2065 SNDRV_PCM_RATE_96000, 2066 .rate_min = 44100, 2067 .rate_max = 96000, 2068 .nr_rates = 4, 2069 .rate_table = (unsigned int[]) { 2070 44100, 48000, 88200, 96000 2071 }, 2072 .clock = 0x80, 2073 } 2074 }, 2075 /* Capture */ 2076 { 2077 .ifnum = 3, 2078 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 2079 .data = &(const struct audioformat) { 2080 .formats = SNDRV_PCM_FMTBIT_S24_3LE, 2081 .channels = 4, 2082 .iface = 3, 2083 .altsetting = 1, 2084 .altset_idx = 1, 2085 .attributes = UAC_EP_CS_ATTR_SAMPLE_RATE, 2086 .endpoint = 0x81, 2087 .ep_attr = 0x05, 2088 .rates = SNDRV_PCM_RATE_44100 | 2089 SNDRV_PCM_RATE_48000 | 2090 SNDRV_PCM_RATE_88200 | 2091 SNDRV_PCM_RATE_96000, 2092 .rate_min = 44100, 2093 .rate_max = 96000, 2094 .nr_rates = 4, 2095 .rate_table = (unsigned int[]) { 2096 44100, 48000, 88200, 96000 2097 }, 2098 .clock = 0x80, 2099 } 2100 }, 2101 /* MIDI */ 2102 { 2103 .ifnum = -1 /* Interface = 4 */ 2104 } 2105 } 2106 } 2107 }, 2108 { 2109 USB_DEVICE_VENDOR_SPEC(0x0763, 0x2031), 2110 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) { 2111 /* .vendor_name = "M-Audio", */ 2112 /* .product_name = "Fast Track C600", */ 2113 .ifnum = QUIRK_ANY_INTERFACE, 2114 .type = QUIRK_COMPOSITE, 2115 .data = &(const struct snd_usb_audio_quirk[]) { 2116 { 2117 .ifnum = 1, 2118 .type = QUIRK_AUDIO_STANDARD_MIXER, 2119 }, 2120 /* Playback */ 2121 { 2122 .ifnum = 2, 2123 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 2124 .data = &(const struct audioformat) { 2125 .formats = SNDRV_PCM_FMTBIT_S24_3LE, 2126 .channels = 8, 2127 .iface = 2, 2128 .altsetting = 1, 2129 .altset_idx = 1, 2130 .attributes = UAC_EP_CS_ATTR_SAMPLE_RATE, 2131 .endpoint = 0x01, 2132 .ep_attr = 0x09, 2133 .rates = SNDRV_PCM_RATE_44100 | 2134 SNDRV_PCM_RATE_48000 | 2135 SNDRV_PCM_RATE_88200 | 2136 SNDRV_PCM_RATE_96000, 2137 .rate_min = 44100, 2138 .rate_max = 96000, 2139 .nr_rates = 4, 2140 .rate_table = (unsigned int[]) { 2141 44100, 48000, 88200, 96000 2142 }, 2143 .clock = 0x80, 2144 } 2145 }, 2146 /* Capture */ 2147 { 2148 .ifnum = 3, 2149 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 2150 .data = &(const struct audioformat) { 2151 .formats = SNDRV_PCM_FMTBIT_S24_3LE, 2152 .channels = 6, 2153 .iface = 3, 2154 .altsetting = 1, 2155 .altset_idx = 1, 2156 .attributes = UAC_EP_CS_ATTR_SAMPLE_RATE, 2157 .endpoint = 0x81, 2158 .ep_attr = 0x05, 2159 .rates = SNDRV_PCM_RATE_44100 | 2160 SNDRV_PCM_RATE_48000 | 2161 SNDRV_PCM_RATE_88200 | 2162 SNDRV_PCM_RATE_96000, 2163 .rate_min = 44100, 2164 .rate_max = 96000, 2165 .nr_rates = 4, 2166 .rate_table = (unsigned int[]) { 2167 44100, 48000, 88200, 96000 2168 }, 2169 .clock = 0x80, 2170 } 2171 }, 2172 /* MIDI */ 2173 { 2174 .ifnum = -1 /* Interface = 4 */ 2175 } 2176 } 2177 } 2178 }, 2179 { 2180 USB_DEVICE_VENDOR_SPEC(0x0763, 0x2080), 2181 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { 2182 /* .vendor_name = "M-Audio", */ 2183 /* .product_name = "Fast Track Ultra", */ 2184 .ifnum = QUIRK_ANY_INTERFACE, 2185 .type = QUIRK_COMPOSITE, 2186 .data = & (const struct snd_usb_audio_quirk[]) { 2187 { 2188 .ifnum = 0, 2189 .type = QUIRK_AUDIO_STANDARD_MIXER, 2190 }, 2191 { 2192 .ifnum = 1, 2193 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 2194 .data = & (const struct audioformat) { 2195 .formats = SNDRV_PCM_FMTBIT_S24_3LE, 2196 .channels = 8, 2197 .iface = 1, 2198 .altsetting = 1, 2199 .altset_idx = 1, 2200 .attributes = UAC_EP_CS_ATTR_SAMPLE_RATE, 2201 .endpoint = 0x01, 2202 .ep_attr = 0x09, 2203 .rates = SNDRV_PCM_RATE_44100 | 2204 SNDRV_PCM_RATE_48000 | 2205 SNDRV_PCM_RATE_88200 | 2206 SNDRV_PCM_RATE_96000, 2207 .rate_min = 44100, 2208 .rate_max = 96000, 2209 .nr_rates = 4, 2210 .rate_table = (unsigned int[]) { 2211 44100, 48000, 88200, 96000 2212 } 2213 } 2214 }, 2215 { 2216 .ifnum = 2, 2217 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 2218 .data = & (const struct audioformat) { 2219 .formats = SNDRV_PCM_FMTBIT_S24_3LE, 2220 .channels = 8, 2221 .iface = 2, 2222 .altsetting = 1, 2223 .altset_idx = 1, 2224 .attributes = UAC_EP_CS_ATTR_SAMPLE_RATE, 2225 .endpoint = 0x81, 2226 .ep_attr = 0x05, 2227 .rates = SNDRV_PCM_RATE_44100 | 2228 SNDRV_PCM_RATE_48000 | 2229 SNDRV_PCM_RATE_88200 | 2230 SNDRV_PCM_RATE_96000, 2231 .rate_min = 44100, 2232 .rate_max = 96000, 2233 .nr_rates = 4, 2234 .rate_table = (unsigned int[]) { 2235 44100, 48000, 88200, 96000 2236 } 2237 } 2238 }, 2239 /* interface 3 (MIDI) is standard compliant */ 2240 { 2241 .ifnum = -1 2242 } 2243 } 2244 } 2245 }, 2246 { 2247 USB_DEVICE_VENDOR_SPEC(0x0763, 0x2081), 2248 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { 2249 /* .vendor_name = "M-Audio", */ 2250 /* .product_name = "Fast Track Ultra 8R", */ 2251 .ifnum = QUIRK_ANY_INTERFACE, 2252 .type = QUIRK_COMPOSITE, 2253 .data = & (const struct snd_usb_audio_quirk[]) { 2254 { 2255 .ifnum = 0, 2256 .type = QUIRK_AUDIO_STANDARD_MIXER, 2257 }, 2258 { 2259 .ifnum = 1, 2260 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 2261 .data = & (const struct audioformat) { 2262 .formats = SNDRV_PCM_FMTBIT_S24_3LE, 2263 .channels = 8, 2264 .iface = 1, 2265 .altsetting = 1, 2266 .altset_idx = 1, 2267 .attributes = UAC_EP_CS_ATTR_SAMPLE_RATE, 2268 .endpoint = 0x01, 2269 .ep_attr = 0x09, 2270 .rates = SNDRV_PCM_RATE_44100 | 2271 SNDRV_PCM_RATE_48000 | 2272 SNDRV_PCM_RATE_88200 | 2273 SNDRV_PCM_RATE_96000, 2274 .rate_min = 44100, 2275 .rate_max = 96000, 2276 .nr_rates = 4, 2277 .rate_table = (unsigned int[]) { 2278 44100, 48000, 88200, 96000 2279 } 2280 } 2281 }, 2282 { 2283 .ifnum = 2, 2284 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 2285 .data = & (const struct audioformat) { 2286 .formats = SNDRV_PCM_FMTBIT_S24_3LE, 2287 .channels = 8, 2288 .iface = 2, 2289 .altsetting = 1, 2290 .altset_idx = 1, 2291 .attributes = UAC_EP_CS_ATTR_SAMPLE_RATE, 2292 .endpoint = 0x81, 2293 .ep_attr = 0x05, 2294 .rates = SNDRV_PCM_RATE_44100 | 2295 SNDRV_PCM_RATE_48000 | 2296 SNDRV_PCM_RATE_88200 | 2297 SNDRV_PCM_RATE_96000, 2298 .rate_min = 44100, 2299 .rate_max = 96000, 2300 .nr_rates = 4, 2301 .rate_table = (unsigned int[]) { 2302 44100, 48000, 88200, 96000 2303 } 2304 } 2305 }, 2306 /* interface 3 (MIDI) is standard compliant */ 2307 { 2308 .ifnum = -1 2309 } 2310 } 2311 } 2312 }, 2313 2314 /* Casio devices */ 2315 { 2316 USB_DEVICE(0x07cf, 0x6801), 2317 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { 2318 .vendor_name = "Casio", 2319 .product_name = "PL-40R", 2320 .ifnum = 0, 2321 .type = QUIRK_MIDI_YAMAHA 2322 } 2323 }, 2324 { 2325 /* this ID is used by several devices without a product ID */ 2326 USB_DEVICE(0x07cf, 0x6802), 2327 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { 2328 .vendor_name = "Casio", 2329 .product_name = "Keyboard", 2330 .ifnum = 0, 2331 .type = QUIRK_MIDI_YAMAHA 2332 } 2333 }, 2334 2335 /* Mark of the Unicorn devices */ 2336 { 2337 /* thanks to Robert A. Lerche <ral 'at' msbit.com> */ 2338 .match_flags = USB_DEVICE_ID_MATCH_VENDOR | 2339 USB_DEVICE_ID_MATCH_PRODUCT | 2340 USB_DEVICE_ID_MATCH_DEV_SUBCLASS, 2341 .idVendor = 0x07fd, 2342 .idProduct = 0x0001, 2343 .bDeviceSubClass = 2, 2344 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { 2345 .vendor_name = "MOTU", 2346 .product_name = "Fastlane", 2347 .ifnum = QUIRK_ANY_INTERFACE, 2348 .type = QUIRK_COMPOSITE, 2349 .data = & (const struct snd_usb_audio_quirk[]) { 2350 { 2351 .ifnum = 0, 2352 .type = QUIRK_MIDI_RAW_BYTES 2353 }, 2354 { 2355 .ifnum = 1, 2356 .type = QUIRK_IGNORE_INTERFACE 2357 }, 2358 { 2359 .ifnum = -1 2360 } 2361 } 2362 } 2363 }, 2364 2365 /* Emagic devices */ 2366 { 2367 USB_DEVICE(0x086a, 0x0001), 2368 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { 2369 .vendor_name = "Emagic", 2370 .product_name = "Unitor8", 2371 .ifnum = 2, 2372 .type = QUIRK_MIDI_EMAGIC, 2373 .data = & (const struct snd_usb_midi_endpoint_info) { 2374 .out_cables = 0x80ff, 2375 .in_cables = 0x80ff 2376 } 2377 } 2378 }, 2379 { 2380 USB_DEVICE(0x086a, 0x0002), 2381 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { 2382 .vendor_name = "Emagic", 2383 /* .product_name = "AMT8", */ 2384 .ifnum = 2, 2385 .type = QUIRK_MIDI_EMAGIC, 2386 .data = & (const struct snd_usb_midi_endpoint_info) { 2387 .out_cables = 0x80ff, 2388 .in_cables = 0x80ff 2389 } 2390 } 2391 }, 2392 { 2393 USB_DEVICE(0x086a, 0x0003), 2394 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { 2395 .vendor_name = "Emagic", 2396 /* .product_name = "MT4", */ 2397 .ifnum = 2, 2398 .type = QUIRK_MIDI_EMAGIC, 2399 .data = & (const struct snd_usb_midi_endpoint_info) { 2400 .out_cables = 0x800f, 2401 .in_cables = 0x8003 2402 } 2403 } 2404 }, 2405 2406 /* KORG devices */ 2407 { 2408 USB_DEVICE_VENDOR_SPEC(0x0944, 0x0200), 2409 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { 2410 .vendor_name = "KORG, Inc.", 2411 /* .product_name = "PANDORA PX5D", */ 2412 .ifnum = 3, 2413 .type = QUIRK_MIDI_STANDARD_INTERFACE, 2414 } 2415 }, 2416 2417 { 2418 USB_DEVICE_VENDOR_SPEC(0x0944, 0x0201), 2419 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { 2420 .vendor_name = "KORG, Inc.", 2421 /* .product_name = "ToneLab ST", */ 2422 .ifnum = 3, 2423 .type = QUIRK_MIDI_STANDARD_INTERFACE, 2424 } 2425 }, 2426 2427 { 2428 USB_DEVICE_VENDOR_SPEC(0x0944, 0x0204), 2429 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { 2430 .vendor_name = "KORG, Inc.", 2431 /* .product_name = "ToneLab EX", */ 2432 .ifnum = 3, 2433 .type = QUIRK_MIDI_STANDARD_INTERFACE, 2434 } 2435 }, 2436 2437 /* AKAI devices */ 2438 { 2439 USB_DEVICE(0x09e8, 0x0062), 2440 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { 2441 .vendor_name = "AKAI", 2442 .product_name = "MPD16", 2443 .ifnum = 0, 2444 .type = QUIRK_MIDI_AKAI, 2445 } 2446 }, 2447 2448 { 2449 /* Akai MPC Element */ 2450 USB_DEVICE(0x09e8, 0x0021), 2451 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { 2452 .ifnum = QUIRK_ANY_INTERFACE, 2453 .type = QUIRK_COMPOSITE, 2454 .data = & (const struct snd_usb_audio_quirk[]) { 2455 { 2456 .ifnum = 0, 2457 .type = QUIRK_IGNORE_INTERFACE 2458 }, 2459 { 2460 .ifnum = 1, 2461 .type = QUIRK_MIDI_STANDARD_INTERFACE 2462 }, 2463 { 2464 .ifnum = -1 2465 } 2466 } 2467 } 2468 }, 2469 2470 /* Steinberg devices */ 2471 { 2472 /* Steinberg MI2 */ 2473 USB_DEVICE_VENDOR_SPEC(0x0a4e, 0x2040), 2474 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { 2475 .ifnum = QUIRK_ANY_INTERFACE, 2476 .type = QUIRK_COMPOSITE, 2477 .data = & (const struct snd_usb_audio_quirk[]) { 2478 { 2479 .ifnum = 0, 2480 .type = QUIRK_AUDIO_STANDARD_INTERFACE 2481 }, 2482 { 2483 .ifnum = 1, 2484 .type = QUIRK_AUDIO_STANDARD_INTERFACE 2485 }, 2486 { 2487 .ifnum = 2, 2488 .type = QUIRK_AUDIO_STANDARD_INTERFACE 2489 }, 2490 { 2491 .ifnum = 3, 2492 .type = QUIRK_MIDI_FIXED_ENDPOINT, 2493 .data = &(const struct snd_usb_midi_endpoint_info) { 2494 .out_cables = 0x0001, 2495 .in_cables = 0x0001 2496 } 2497 }, 2498 { 2499 .ifnum = -1 2500 } 2501 } 2502 } 2503 }, 2504 { 2505 /* Steinberg MI4 */ 2506 USB_DEVICE_VENDOR_SPEC(0x0a4e, 0x4040), 2507 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { 2508 .ifnum = QUIRK_ANY_INTERFACE, 2509 .type = QUIRK_COMPOSITE, 2510 .data = & (const struct snd_usb_audio_quirk[]) { 2511 { 2512 .ifnum = 0, 2513 .type = QUIRK_AUDIO_STANDARD_INTERFACE 2514 }, 2515 { 2516 .ifnum = 1, 2517 .type = QUIRK_AUDIO_STANDARD_INTERFACE 2518 }, 2519 { 2520 .ifnum = 2, 2521 .type = QUIRK_AUDIO_STANDARD_INTERFACE 2522 }, 2523 { 2524 .ifnum = 3, 2525 .type = QUIRK_MIDI_FIXED_ENDPOINT, 2526 .data = &(const struct snd_usb_midi_endpoint_info) { 2527 .out_cables = 0x0001, 2528 .in_cables = 0x0001 2529 } 2530 }, 2531 { 2532 .ifnum = -1 2533 } 2534 } 2535 } 2536 }, 2537 2538 /* TerraTec devices */ 2539 { 2540 USB_DEVICE_VENDOR_SPEC(0x0ccd, 0x0012), 2541 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { 2542 .vendor_name = "TerraTec", 2543 .product_name = "PHASE 26", 2544 .ifnum = 3, 2545 .type = QUIRK_MIDI_STANDARD_INTERFACE 2546 } 2547 }, 2548 { 2549 USB_DEVICE_VENDOR_SPEC(0x0ccd, 0x0013), 2550 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { 2551 .vendor_name = "TerraTec", 2552 .product_name = "PHASE 26", 2553 .ifnum = 3, 2554 .type = QUIRK_MIDI_STANDARD_INTERFACE 2555 } 2556 }, 2557 { 2558 USB_DEVICE_VENDOR_SPEC(0x0ccd, 0x0014), 2559 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { 2560 .vendor_name = "TerraTec", 2561 .product_name = "PHASE 26", 2562 .ifnum = 3, 2563 .type = QUIRK_MIDI_STANDARD_INTERFACE 2564 } 2565 }, 2566 { 2567 USB_DEVICE(0x0ccd, 0x0035), 2568 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { 2569 .vendor_name = "Miditech", 2570 .product_name = "Play'n Roll", 2571 .ifnum = 0, 2572 .type = QUIRK_MIDI_CME 2573 } 2574 }, 2575 2576 /* Novation EMS devices */ 2577 { 2578 USB_DEVICE_VENDOR_SPEC(0x1235, 0x0001), 2579 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { 2580 .vendor_name = "Novation", 2581 .product_name = "ReMOTE Audio/XStation", 2582 .ifnum = 4, 2583 .type = QUIRK_MIDI_NOVATION 2584 } 2585 }, 2586 { 2587 USB_DEVICE_VENDOR_SPEC(0x1235, 0x0002), 2588 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { 2589 .vendor_name = "Novation", 2590 .product_name = "Speedio", 2591 .ifnum = 3, 2592 .type = QUIRK_MIDI_NOVATION 2593 } 2594 }, 2595 { 2596 USB_DEVICE(0x1235, 0x000a), 2597 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { 2598 /* .vendor_name = "Novation", */ 2599 /* .product_name = "Nocturn", */ 2600 .ifnum = 0, 2601 .type = QUIRK_MIDI_RAW_BYTES 2602 } 2603 }, 2604 { 2605 USB_DEVICE(0x1235, 0x000e), 2606 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { 2607 /* .vendor_name = "Novation", */ 2608 /* .product_name = "Launchpad", */ 2609 .ifnum = 0, 2610 .type = QUIRK_MIDI_RAW_BYTES 2611 } 2612 }, 2613 { 2614 USB_DEVICE(0x1235, 0x0010), 2615 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) { 2616 .vendor_name = "Focusrite", 2617 .product_name = "Saffire 6 USB", 2618 .ifnum = QUIRK_ANY_INTERFACE, 2619 .type = QUIRK_COMPOSITE, 2620 .data = (const struct snd_usb_audio_quirk[]) { 2621 { 2622 .ifnum = 0, 2623 .type = QUIRK_AUDIO_STANDARD_MIXER, 2624 }, 2625 { 2626 .ifnum = 0, 2627 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 2628 .data = &(const struct audioformat) { 2629 .formats = SNDRV_PCM_FMTBIT_S24_3LE, 2630 .channels = 4, 2631 .iface = 0, 2632 .altsetting = 1, 2633 .altset_idx = 1, 2634 .attributes = UAC_EP_CS_ATTR_SAMPLE_RATE, 2635 .endpoint = 0x01, 2636 .ep_attr = USB_ENDPOINT_XFER_ISOC, 2637 .datainterval = 1, 2638 .maxpacksize = 0x024c, 2639 .rates = SNDRV_PCM_RATE_44100 | 2640 SNDRV_PCM_RATE_48000, 2641 .rate_min = 44100, 2642 .rate_max = 48000, 2643 .nr_rates = 2, 2644 .rate_table = (unsigned int[]) { 2645 44100, 48000 2646 } 2647 } 2648 }, 2649 { 2650 .ifnum = 0, 2651 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 2652 .data = &(const struct audioformat) { 2653 .formats = SNDRV_PCM_FMTBIT_S24_3LE, 2654 .channels = 2, 2655 .iface = 0, 2656 .altsetting = 1, 2657 .altset_idx = 1, 2658 .attributes = 0, 2659 .endpoint = 0x82, 2660 .ep_attr = USB_ENDPOINT_XFER_ISOC, 2661 .datainterval = 1, 2662 .maxpacksize = 0x0126, 2663 .rates = SNDRV_PCM_RATE_44100 | 2664 SNDRV_PCM_RATE_48000, 2665 .rate_min = 44100, 2666 .rate_max = 48000, 2667 .nr_rates = 2, 2668 .rate_table = (unsigned int[]) { 2669 44100, 48000 2670 } 2671 } 2672 }, 2673 { 2674 .ifnum = 1, 2675 .type = QUIRK_MIDI_RAW_BYTES 2676 }, 2677 { 2678 .ifnum = -1 2679 } 2680 } 2681 } 2682 }, 2683 { 2684 USB_DEVICE(0x1235, 0x0018), 2685 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { 2686 .vendor_name = "Novation", 2687 .product_name = "Twitch", 2688 .ifnum = QUIRK_ANY_INTERFACE, 2689 .type = QUIRK_COMPOSITE, 2690 .data = (const struct snd_usb_audio_quirk[]) { 2691 { 2692 .ifnum = 0, 2693 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 2694 .data = & (const struct audioformat) { 2695 .formats = SNDRV_PCM_FMTBIT_S24_3LE, 2696 .channels = 4, 2697 .iface = 0, 2698 .altsetting = 1, 2699 .altset_idx = 1, 2700 .attributes = UAC_EP_CS_ATTR_SAMPLE_RATE, 2701 .endpoint = 0x01, 2702 .ep_attr = USB_ENDPOINT_XFER_ISOC, 2703 .rates = SNDRV_PCM_RATE_44100 | 2704 SNDRV_PCM_RATE_48000, 2705 .rate_min = 44100, 2706 .rate_max = 48000, 2707 .nr_rates = 2, 2708 .rate_table = (unsigned int[]) { 2709 44100, 48000 2710 } 2711 } 2712 }, 2713 { 2714 .ifnum = 1, 2715 .type = QUIRK_MIDI_RAW_BYTES 2716 }, 2717 { 2718 .ifnum = -1 2719 } 2720 } 2721 } 2722 }, 2723 { 2724 USB_DEVICE_VENDOR_SPEC(0x1235, 0x4661), 2725 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { 2726 .vendor_name = "Novation", 2727 .product_name = "ReMOTE25", 2728 .ifnum = 0, 2729 .type = QUIRK_MIDI_NOVATION 2730 } 2731 }, 2732 2733 /* Access Music devices */ 2734 { 2735 /* VirusTI Desktop */ 2736 USB_DEVICE_VENDOR_SPEC(0x133e, 0x0815), 2737 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) { 2738 .ifnum = QUIRK_ANY_INTERFACE, 2739 .type = QUIRK_COMPOSITE, 2740 .data = &(const struct snd_usb_audio_quirk[]) { 2741 { 2742 .ifnum = 3, 2743 .type = QUIRK_MIDI_FIXED_ENDPOINT, 2744 .data = &(const struct snd_usb_midi_endpoint_info) { 2745 .out_cables = 0x0003, 2746 .in_cables = 0x0003 2747 } 2748 }, 2749 { 2750 .ifnum = 4, 2751 .type = QUIRK_IGNORE_INTERFACE 2752 }, 2753 { 2754 .ifnum = -1 2755 } 2756 } 2757 } 2758 }, 2759 2760 /* Lenovo ThinkStation P620 Rear Line-in, Line-out and Microphone */ 2761 { 2762 USB_DEVICE(0x17aa, 0x1046), 2763 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { 2764 .ifnum = QUIRK_ANY_INTERFACE, 2765 .type = QUIRK_SETUP_DISABLE_AUTOSUSPEND 2766 } 2767 }, 2768 /* Lenovo ThinkStation P620 Internal Speaker + Front Headset */ 2769 { 2770 USB_DEVICE(0x17aa, 0x104d), 2771 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { 2772 .ifnum = QUIRK_ANY_INTERFACE, 2773 .type = QUIRK_SETUP_DISABLE_AUTOSUSPEND 2774 } 2775 }, 2776 2777 /* Native Instruments MK2 series */ 2778 { 2779 /* Komplete Audio 6 */ 2780 .match_flags = USB_DEVICE_ID_MATCH_DEVICE, 2781 .idVendor = 0x17cc, 2782 .idProduct = 0x1000, 2783 }, 2784 { 2785 /* Traktor Audio 6 */ 2786 .match_flags = USB_DEVICE_ID_MATCH_DEVICE, 2787 .idVendor = 0x17cc, 2788 .idProduct = 0x1010, 2789 }, 2790 { 2791 /* Traktor Audio 10 */ 2792 .match_flags = USB_DEVICE_ID_MATCH_DEVICE, 2793 .idVendor = 0x17cc, 2794 .idProduct = 0x1020, 2795 }, 2796 2797 /* QinHeng devices */ 2798 { 2799 USB_DEVICE(0x1a86, 0x752d), 2800 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) { 2801 .vendor_name = "QinHeng", 2802 .product_name = "CH345", 2803 .ifnum = 1, 2804 .type = QUIRK_MIDI_CH345 2805 } 2806 }, 2807 2808 /* KeithMcMillen Stringport */ 2809 { USB_DEVICE(0x1f38, 0x0001) }, /* FIXME: should be more restrictive matching */ 2810 2811 /* Miditech devices */ 2812 { 2813 USB_DEVICE(0x4752, 0x0011), 2814 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { 2815 .vendor_name = "Miditech", 2816 .product_name = "Midistart-2", 2817 .ifnum = 0, 2818 .type = QUIRK_MIDI_CME 2819 } 2820 }, 2821 2822 /* Central Music devices */ 2823 { 2824 /* this ID used by both Miditech MidiStudio-2 and CME UF-x */ 2825 USB_DEVICE(0x7104, 0x2202), 2826 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { 2827 .ifnum = 0, 2828 .type = QUIRK_MIDI_CME 2829 } 2830 }, 2831 2832 /* 2833 * Auvitek au0828 devices with audio interface. 2834 * This should be kept in sync with drivers/media/usb/au0828/au0828-cards.c 2835 * Please notice that some drivers are DVB only, and don't need to be 2836 * here. That's the case, for example, of DVICO_FUSIONHDTV7. 2837 */ 2838 2839 #define AU0828_DEVICE(vid, pid, vname, pname) { \ 2840 USB_AUDIO_DEVICE(vid, pid), \ 2841 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) { \ 2842 .vendor_name = vname, \ 2843 .product_name = pname, \ 2844 .ifnum = QUIRK_ANY_INTERFACE, \ 2845 .type = QUIRK_AUDIO_ALIGN_TRANSFER, \ 2846 .shares_media_device = 1, \ 2847 } \ 2848 } 2849 2850 AU0828_DEVICE(0x2040, 0x7200, "Hauppauge", "HVR-950Q"), 2851 AU0828_DEVICE(0x2040, 0x7240, "Hauppauge", "HVR-850"), 2852 AU0828_DEVICE(0x2040, 0x7210, "Hauppauge", "HVR-950Q"), 2853 AU0828_DEVICE(0x2040, 0x7217, "Hauppauge", "HVR-950Q"), 2854 AU0828_DEVICE(0x2040, 0x721b, "Hauppauge", "HVR-950Q"), 2855 AU0828_DEVICE(0x2040, 0x721e, "Hauppauge", "HVR-950Q"), 2856 AU0828_DEVICE(0x2040, 0x721f, "Hauppauge", "HVR-950Q"), 2857 AU0828_DEVICE(0x2040, 0x7280, "Hauppauge", "HVR-950Q"), 2858 AU0828_DEVICE(0x0fd9, 0x0008, "Hauppauge", "HVR-950Q"), 2859 AU0828_DEVICE(0x2040, 0x7201, "Hauppauge", "HVR-950Q-MXL"), 2860 AU0828_DEVICE(0x2040, 0x7211, "Hauppauge", "HVR-950Q-MXL"), 2861 AU0828_DEVICE(0x2040, 0x7281, "Hauppauge", "HVR-950Q-MXL"), 2862 AU0828_DEVICE(0x05e1, 0x0480, "Hauppauge", "Woodbury"), 2863 AU0828_DEVICE(0x2040, 0x8200, "Hauppauge", "Woodbury"), 2864 AU0828_DEVICE(0x2040, 0x7260, "Hauppauge", "HVR-950Q"), 2865 AU0828_DEVICE(0x2040, 0x7213, "Hauppauge", "HVR-950Q"), 2866 AU0828_DEVICE(0x2040, 0x7270, "Hauppauge", "HVR-950Q"), 2867 2868 /* Syntek STK1160 */ 2869 { 2870 USB_AUDIO_DEVICE(0x05e1, 0x0408), 2871 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) { 2872 .vendor_name = "Syntek", 2873 .product_name = "STK1160", 2874 .ifnum = QUIRK_ANY_INTERFACE, 2875 .type = QUIRK_AUDIO_ALIGN_TRANSFER 2876 } 2877 }, 2878 2879 /* Digidesign Mbox */ 2880 { 2881 /* Thanks to Clemens Ladisch <clemens@ladisch.de> */ 2882 USB_DEVICE(0x0dba, 0x1000), 2883 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) { 2884 .vendor_name = "Digidesign", 2885 .product_name = "MBox", 2886 .ifnum = QUIRK_ANY_INTERFACE, 2887 .type = QUIRK_COMPOSITE, 2888 .data = (const struct snd_usb_audio_quirk[]){ 2889 { 2890 .ifnum = 0, 2891 .type = QUIRK_AUDIO_STANDARD_MIXER, 2892 }, 2893 { 2894 .ifnum = 1, 2895 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 2896 .data = &(const struct audioformat) { 2897 .formats = SNDRV_PCM_FMTBIT_S24_3BE, 2898 .channels = 2, 2899 .iface = 1, 2900 .altsetting = 1, 2901 .altset_idx = 1, 2902 .attributes = 0x4, 2903 .endpoint = 0x02, 2904 .ep_attr = USB_ENDPOINT_XFER_ISOC | 2905 USB_ENDPOINT_SYNC_SYNC, 2906 .maxpacksize = 0x130, 2907 .rates = SNDRV_PCM_RATE_48000, 2908 .rate_min = 48000, 2909 .rate_max = 48000, 2910 .nr_rates = 1, 2911 .rate_table = (unsigned int[]) { 2912 48000 2913 } 2914 } 2915 }, 2916 { 2917 .ifnum = 1, 2918 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 2919 .data = &(const struct audioformat) { 2920 .formats = SNDRV_PCM_FMTBIT_S24_3BE, 2921 .channels = 2, 2922 .iface = 1, 2923 .altsetting = 1, 2924 .altset_idx = 1, 2925 .attributes = 0x4, 2926 .endpoint = 0x81, 2927 .ep_attr = USB_ENDPOINT_XFER_ISOC | 2928 USB_ENDPOINT_SYNC_ASYNC, 2929 .maxpacksize = 0x130, 2930 .rates = SNDRV_PCM_RATE_48000, 2931 .rate_min = 48000, 2932 .rate_max = 48000, 2933 .nr_rates = 1, 2934 .rate_table = (unsigned int[]) { 2935 48000 2936 } 2937 } 2938 }, 2939 { 2940 .ifnum = -1 2941 } 2942 } 2943 } 2944 }, 2945 2946 /* DIGIDESIGN MBOX 2 */ 2947 { 2948 USB_DEVICE(0x0dba, 0x3000), 2949 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) { 2950 .vendor_name = "Digidesign", 2951 .product_name = "Mbox 2", 2952 .ifnum = QUIRK_ANY_INTERFACE, 2953 .type = QUIRK_COMPOSITE, 2954 .data = (const struct snd_usb_audio_quirk[]) { 2955 { 2956 .ifnum = 0, 2957 .type = QUIRK_IGNORE_INTERFACE 2958 }, 2959 { 2960 .ifnum = 1, 2961 .type = QUIRK_IGNORE_INTERFACE 2962 }, 2963 { 2964 .ifnum = 2, 2965 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 2966 .data = &(const struct audioformat) { 2967 .formats = SNDRV_PCM_FMTBIT_S24_3BE, 2968 .channels = 2, 2969 .iface = 2, 2970 .altsetting = 2, 2971 .altset_idx = 1, 2972 .attributes = 0x00, 2973 .endpoint = 0x03, 2974 .ep_attr = USB_ENDPOINT_SYNC_ASYNC, 2975 .rates = SNDRV_PCM_RATE_48000, 2976 .rate_min = 48000, 2977 .rate_max = 48000, 2978 .nr_rates = 1, 2979 .rate_table = (unsigned int[]) { 2980 48000 2981 } 2982 } 2983 }, 2984 { 2985 .ifnum = 3, 2986 .type = QUIRK_IGNORE_INTERFACE 2987 }, 2988 { 2989 .ifnum = 4, 2990 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 2991 .data = &(const struct audioformat) { 2992 .formats = SNDRV_PCM_FMTBIT_S24_3BE, 2993 .channels = 2, 2994 .iface = 4, 2995 .altsetting = 2, 2996 .altset_idx = 1, 2997 .attributes = UAC_EP_CS_ATTR_SAMPLE_RATE, 2998 .endpoint = 0x85, 2999 .ep_attr = USB_ENDPOINT_SYNC_SYNC, 3000 .rates = SNDRV_PCM_RATE_48000, 3001 .rate_min = 48000, 3002 .rate_max = 48000, 3003 .nr_rates = 1, 3004 .rate_table = (unsigned int[]) { 3005 48000 3006 } 3007 } 3008 }, 3009 { 3010 .ifnum = 5, 3011 .type = QUIRK_IGNORE_INTERFACE 3012 }, 3013 { 3014 .ifnum = 6, 3015 .type = QUIRK_MIDI_MIDIMAN, 3016 .data = &(const struct snd_usb_midi_endpoint_info) { 3017 .out_ep = 0x02, 3018 .out_cables = 0x0001, 3019 .in_ep = 0x81, 3020 .in_interval = 0x01, 3021 .in_cables = 0x0001 3022 } 3023 }, 3024 { 3025 .ifnum = -1 3026 } 3027 } 3028 } 3029 }, 3030 { 3031 /* Tascam US122 MKII - playback-only support */ 3032 USB_DEVICE_VENDOR_SPEC(0x0644, 0x8021), 3033 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) { 3034 .vendor_name = "TASCAM", 3035 .product_name = "US122 MKII", 3036 .ifnum = QUIRK_ANY_INTERFACE, 3037 .type = QUIRK_COMPOSITE, 3038 .data = (const struct snd_usb_audio_quirk[]) { 3039 { 3040 .ifnum = 0, 3041 .type = QUIRK_IGNORE_INTERFACE 3042 }, 3043 { 3044 .ifnum = 1, 3045 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 3046 .data = &(const struct audioformat) { 3047 .formats = SNDRV_PCM_FMTBIT_S24_3LE, 3048 .channels = 2, 3049 .iface = 1, 3050 .altsetting = 1, 3051 .altset_idx = 1, 3052 .attributes = UAC_EP_CS_ATTR_SAMPLE_RATE, 3053 .endpoint = 0x02, 3054 .ep_attr = USB_ENDPOINT_XFER_ISOC, 3055 .rates = SNDRV_PCM_RATE_44100 | 3056 SNDRV_PCM_RATE_48000 | 3057 SNDRV_PCM_RATE_88200 | 3058 SNDRV_PCM_RATE_96000, 3059 .rate_min = 44100, 3060 .rate_max = 96000, 3061 .nr_rates = 4, 3062 .rate_table = (unsigned int[]) { 3063 44100, 48000, 88200, 96000 3064 } 3065 } 3066 }, 3067 { 3068 .ifnum = -1 3069 } 3070 } 3071 } 3072 }, 3073 3074 /* Microsoft XboxLive Headset/Xbox Communicator */ 3075 { 3076 USB_DEVICE(0x045e, 0x0283), 3077 .bInterfaceClass = USB_CLASS_PER_INTERFACE, 3078 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) { 3079 .vendor_name = "Microsoft", 3080 .product_name = "XboxLive Headset/Xbox Communicator", 3081 .ifnum = QUIRK_ANY_INTERFACE, 3082 .type = QUIRK_COMPOSITE, 3083 .data = &(const struct snd_usb_audio_quirk[]) { 3084 { 3085 /* playback */ 3086 .ifnum = 0, 3087 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 3088 .data = &(const struct audioformat) { 3089 .formats = SNDRV_PCM_FMTBIT_S16_LE, 3090 .channels = 1, 3091 .iface = 0, 3092 .altsetting = 0, 3093 .altset_idx = 0, 3094 .attributes = 0, 3095 .endpoint = 0x04, 3096 .ep_attr = 0x05, 3097 .rates = SNDRV_PCM_RATE_CONTINUOUS, 3098 .rate_min = 22050, 3099 .rate_max = 22050 3100 } 3101 }, 3102 { 3103 /* capture */ 3104 .ifnum = 1, 3105 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 3106 .data = &(const struct audioformat) { 3107 .formats = SNDRV_PCM_FMTBIT_S16_LE, 3108 .channels = 1, 3109 .iface = 1, 3110 .altsetting = 0, 3111 .altset_idx = 0, 3112 .attributes = 0, 3113 .endpoint = 0x85, 3114 .ep_attr = 0x05, 3115 .rates = SNDRV_PCM_RATE_CONTINUOUS, 3116 .rate_min = 16000, 3117 .rate_max = 16000 3118 } 3119 }, 3120 { 3121 .ifnum = -1 3122 } 3123 } 3124 } 3125 }, 3126 3127 /* Reloop Play */ 3128 { 3129 USB_DEVICE(0x200c, 0x100b), 3130 .bInterfaceClass = USB_CLASS_PER_INTERFACE, 3131 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) { 3132 .ifnum = QUIRK_ANY_INTERFACE, 3133 .type = QUIRK_COMPOSITE, 3134 .data = &(const struct snd_usb_audio_quirk[]) { 3135 { 3136 .ifnum = 0, 3137 .type = QUIRK_AUDIO_STANDARD_MIXER, 3138 }, 3139 { 3140 .ifnum = 1, 3141 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 3142 .data = &(const struct audioformat) { 3143 .formats = SNDRV_PCM_FMTBIT_S24_3LE, 3144 .channels = 4, 3145 .iface = 1, 3146 .altsetting = 1, 3147 .altset_idx = 1, 3148 .attributes = UAC_EP_CS_ATTR_SAMPLE_RATE, 3149 .endpoint = 0x01, 3150 .ep_attr = USB_ENDPOINT_SYNC_ADAPTIVE, 3151 .rates = SNDRV_PCM_RATE_44100 | 3152 SNDRV_PCM_RATE_48000, 3153 .rate_min = 44100, 3154 .rate_max = 48000, 3155 .nr_rates = 2, 3156 .rate_table = (unsigned int[]) { 3157 44100, 48000 3158 } 3159 } 3160 }, 3161 { 3162 .ifnum = -1 3163 } 3164 } 3165 } 3166 }, 3167 3168 { 3169 /* 3170 * ZOOM R16/24 in audio interface mode. 3171 * Playback requires an extra four byte LE length indicator 3172 * at the start of each isochronous packet. This quirk is 3173 * enabled in create_standard_audio_quirk(). 3174 */ 3175 USB_DEVICE(0x1686, 0x00dd), 3176 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { 3177 .ifnum = QUIRK_ANY_INTERFACE, 3178 .type = QUIRK_COMPOSITE, 3179 .data = (const struct snd_usb_audio_quirk[]) { 3180 { 3181 /* Playback */ 3182 .ifnum = 1, 3183 .type = QUIRK_AUDIO_STANDARD_INTERFACE, 3184 }, 3185 { 3186 /* Capture */ 3187 .ifnum = 2, 3188 .type = QUIRK_AUDIO_STANDARD_INTERFACE, 3189 }, 3190 { 3191 /* Midi */ 3192 .ifnum = 3, 3193 .type = QUIRK_MIDI_STANDARD_INTERFACE 3194 }, 3195 { 3196 .ifnum = -1 3197 }, 3198 } 3199 } 3200 }, 3201 3202 { 3203 /* 3204 * Some USB MIDI devices don't have an audio control interface, 3205 * so we have to grab MIDI streaming interfaces here. 3206 */ 3207 .match_flags = USB_DEVICE_ID_MATCH_INT_CLASS | 3208 USB_DEVICE_ID_MATCH_INT_SUBCLASS, 3209 .bInterfaceClass = USB_CLASS_AUDIO, 3210 .bInterfaceSubClass = USB_SUBCLASS_MIDISTREAMING, 3211 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { 3212 .ifnum = QUIRK_ANY_INTERFACE, 3213 .type = QUIRK_MIDI_STANDARD_INTERFACE 3214 } 3215 }, 3216 3217 /* Rane SL-1 */ 3218 { 3219 USB_DEVICE(0x13e5, 0x0001), 3220 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { 3221 .ifnum = QUIRK_ANY_INTERFACE, 3222 .type = QUIRK_AUDIO_STANDARD_INTERFACE 3223 } 3224 }, 3225 3226 /* disabled due to regression for other devices; 3227 * see https://bugzilla.kernel.org/show_bug.cgi?id=199905 3228 */ 3229 #if 0 3230 { 3231 /* 3232 * Nura's first gen headphones use Cambridge Silicon Radio's vendor 3233 * ID, but it looks like the product ID actually is only for Nura. 3234 * The capture interface does not work at all (even on Windows), 3235 * and only the 48 kHz sample rate works for the playback interface. 3236 */ 3237 USB_DEVICE(0x0a12, 0x1243), 3238 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) { 3239 .ifnum = QUIRK_ANY_INTERFACE, 3240 .type = QUIRK_COMPOSITE, 3241 .data = (const struct snd_usb_audio_quirk[]) { 3242 { 3243 .ifnum = 0, 3244 .type = QUIRK_AUDIO_STANDARD_MIXER, 3245 }, 3246 /* Capture */ 3247 { 3248 .ifnum = 1, 3249 .type = QUIRK_IGNORE_INTERFACE, 3250 }, 3251 /* Playback */ 3252 { 3253 .ifnum = 2, 3254 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 3255 .data = &(const struct audioformat) { 3256 .formats = SNDRV_PCM_FMTBIT_S16_LE, 3257 .channels = 2, 3258 .iface = 2, 3259 .altsetting = 1, 3260 .altset_idx = 1, 3261 .attributes = UAC_EP_CS_ATTR_FILL_MAX | 3262 UAC_EP_CS_ATTR_SAMPLE_RATE, 3263 .endpoint = 0x03, 3264 .ep_attr = USB_ENDPOINT_XFER_ISOC, 3265 .rates = SNDRV_PCM_RATE_48000, 3266 .rate_min = 48000, 3267 .rate_max = 48000, 3268 .nr_rates = 1, 3269 .rate_table = (unsigned int[]) { 3270 48000 3271 } 3272 } 3273 }, 3274 { 3275 .ifnum = -1 3276 }, 3277 } 3278 } 3279 }, 3280 #endif /* disabled */ 3281 3282 { 3283 /* 3284 * Bower's & Wilkins PX headphones only support the 48 kHz sample rate 3285 * even though it advertises more. The capture interface doesn't work 3286 * even on windows. 3287 */ 3288 USB_DEVICE(0x19b5, 0x0021), 3289 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) { 3290 .ifnum = QUIRK_ANY_INTERFACE, 3291 .type = QUIRK_COMPOSITE, 3292 .data = (const struct snd_usb_audio_quirk[]) { 3293 { 3294 .ifnum = 0, 3295 .type = QUIRK_AUDIO_STANDARD_MIXER, 3296 }, 3297 /* Playback */ 3298 { 3299 .ifnum = 1, 3300 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 3301 .data = &(const struct audioformat) { 3302 .formats = SNDRV_PCM_FMTBIT_S16_LE, 3303 .channels = 2, 3304 .iface = 1, 3305 .altsetting = 1, 3306 .altset_idx = 1, 3307 .attributes = UAC_EP_CS_ATTR_FILL_MAX | 3308 UAC_EP_CS_ATTR_SAMPLE_RATE, 3309 .endpoint = 0x03, 3310 .ep_attr = USB_ENDPOINT_XFER_ISOC, 3311 .rates = SNDRV_PCM_RATE_48000, 3312 .rate_min = 48000, 3313 .rate_max = 48000, 3314 .nr_rates = 1, 3315 .rate_table = (unsigned int[]) { 3316 48000 3317 } 3318 } 3319 }, 3320 { 3321 .ifnum = -1 3322 }, 3323 } 3324 } 3325 }, 3326 /* Dell WD19 Dock */ 3327 { 3328 USB_DEVICE(0x0bda, 0x402e), 3329 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { 3330 .ifnum = QUIRK_ANY_INTERFACE, 3331 .type = QUIRK_SETUP_FMT_AFTER_RESUME 3332 } 3333 }, 3334 /* MOTU Microbook II */ 3335 { 3336 USB_DEVICE_VENDOR_SPEC(0x07fd, 0x0004), 3337 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) { 3338 .vendor_name = "MOTU", 3339 .product_name = "MicroBookII", 3340 .ifnum = QUIRK_ANY_INTERFACE, 3341 .type = QUIRK_COMPOSITE, 3342 .data = (const struct snd_usb_audio_quirk[]) { 3343 { 3344 .ifnum = 0, 3345 .type = QUIRK_AUDIO_STANDARD_MIXER, 3346 }, 3347 { 3348 .ifnum = 0, 3349 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 3350 .data = &(const struct audioformat) { 3351 .formats = SNDRV_PCM_FMTBIT_S24_3BE, 3352 .channels = 6, 3353 .iface = 0, 3354 .altsetting = 1, 3355 .altset_idx = 1, 3356 .attributes = 0, 3357 .endpoint = 0x84, 3358 .rates = SNDRV_PCM_RATE_96000, 3359 .ep_attr = USB_ENDPOINT_XFER_ISOC | 3360 USB_ENDPOINT_SYNC_ASYNC, 3361 .rate_min = 96000, 3362 .rate_max = 96000, 3363 .nr_rates = 1, 3364 .maxpacksize = 0x00d8, 3365 .rate_table = (unsigned int[]) { 3366 96000 3367 } 3368 } 3369 }, 3370 { 3371 .ifnum = 0, 3372 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 3373 .data = &(const struct audioformat) { 3374 .formats = SNDRV_PCM_FMTBIT_S24_3BE, 3375 .channels = 8, 3376 .iface = 0, 3377 .altsetting = 1, 3378 .altset_idx = 1, 3379 .attributes = 0, 3380 .endpoint = 0x03, 3381 .rates = SNDRV_PCM_RATE_96000, 3382 .ep_attr = USB_ENDPOINT_XFER_ISOC | 3383 USB_ENDPOINT_SYNC_ASYNC, 3384 .rate_min = 96000, 3385 .rate_max = 96000, 3386 .nr_rates = 1, 3387 .maxpacksize = 0x0120, 3388 .rate_table = (unsigned int[]) { 3389 96000 3390 } 3391 } 3392 }, 3393 { 3394 .ifnum = -1 3395 } 3396 } 3397 } 3398 }, 3399 { 3400 /* 3401 * PIONEER DJ DDJ-SX3 3402 * PCM is 12 channels out, 10 channels in @ 44.1 fixed 3403 * interface 0, vendor class alt setting 1 for endpoints 5 and 0x86 3404 * The feedback for the output is the input. 3405 */ 3406 USB_DEVICE_VENDOR_SPEC(0x2b73, 0x0023), 3407 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) { 3408 .ifnum = QUIRK_ANY_INTERFACE, 3409 .type = QUIRK_COMPOSITE, 3410 .data = (const struct snd_usb_audio_quirk[]) { 3411 { 3412 .ifnum = 0, 3413 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 3414 .data = &(const struct audioformat) { 3415 .formats = SNDRV_PCM_FMTBIT_S32_LE, 3416 .channels = 12, 3417 .iface = 0, 3418 .altsetting = 1, 3419 .altset_idx = 1, 3420 .endpoint = 0x05, 3421 .ep_attr = USB_ENDPOINT_XFER_ISOC| 3422 USB_ENDPOINT_SYNC_ASYNC, 3423 .rates = SNDRV_PCM_RATE_44100, 3424 .rate_min = 44100, 3425 .rate_max = 44100, 3426 .nr_rates = 1, 3427 .rate_table = (unsigned int[]) { 44100 } 3428 } 3429 }, 3430 { 3431 .ifnum = 0, 3432 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 3433 .data = &(const struct audioformat) { 3434 .formats = SNDRV_PCM_FMTBIT_S32_LE, 3435 .channels = 10, 3436 .iface = 0, 3437 .altsetting = 1, 3438 .altset_idx = 1, 3439 .endpoint = 0x86, 3440 .ep_attr = USB_ENDPOINT_XFER_ISOC| 3441 USB_ENDPOINT_SYNC_ASYNC| 3442 USB_ENDPOINT_USAGE_IMPLICIT_FB, 3443 .rates = SNDRV_PCM_RATE_44100, 3444 .rate_min = 44100, 3445 .rate_max = 44100, 3446 .nr_rates = 1, 3447 .rate_table = (unsigned int[]) { 44100 } 3448 } 3449 }, 3450 { 3451 .ifnum = -1 3452 } 3453 } 3454 } 3455 }, 3456 { 3457 /* 3458 * Pioneer DJ DJM-250MK2 3459 * PCM is 8 channels out @ 48 fixed (endpoint 0x01) 3460 * and 8 channels in @ 48 fixed (endpoint 0x82). 3461 * 3462 * Both playback and recording is working, even simultaneously. 3463 * 3464 * Playback channels could be mapped to: 3465 * - CH1 3466 * - CH2 3467 * - AUX 3468 * 3469 * Recording channels could be mapped to: 3470 * - Post CH1 Fader 3471 * - Post CH2 Fader 3472 * - Cross Fader A 3473 * - Cross Fader B 3474 * - MIC 3475 * - AUX 3476 * - REC OUT 3477 * 3478 * There is remaining problem with recording directly from PHONO/LINE. 3479 * If we map a channel to: 3480 * - CH1 Control Tone PHONO 3481 * - CH1 Control Tone LINE 3482 * - CH2 Control Tone PHONO 3483 * - CH2 Control Tone LINE 3484 * it is silent. 3485 * There is no signal even on other operating systems with official drivers. 3486 * The signal appears only when a supported application is started. 3487 * This needs to be investigated yet... 3488 * (there is quite a lot communication on the USB in both directions) 3489 * 3490 * In current version this mixer could be used for playback 3491 * and for recording from vinyls (through Post CH* Fader) 3492 * but not for DVS (Digital Vinyl Systems) like in Mixxx. 3493 */ 3494 USB_DEVICE_VENDOR_SPEC(0x2b73, 0x0017), 3495 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) { 3496 .ifnum = QUIRK_ANY_INTERFACE, 3497 .type = QUIRK_COMPOSITE, 3498 .data = (const struct snd_usb_audio_quirk[]) { 3499 { 3500 .ifnum = 0, 3501 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 3502 .data = &(const struct audioformat) { 3503 .formats = SNDRV_PCM_FMTBIT_S24_3LE, 3504 .channels = 8, // outputs 3505 .iface = 0, 3506 .altsetting = 1, 3507 .altset_idx = 1, 3508 .endpoint = 0x01, 3509 .ep_attr = USB_ENDPOINT_XFER_ISOC| 3510 USB_ENDPOINT_SYNC_ASYNC, 3511 .rates = SNDRV_PCM_RATE_48000, 3512 .rate_min = 48000, 3513 .rate_max = 48000, 3514 .nr_rates = 1, 3515 .rate_table = (unsigned int[]) { 48000 } 3516 } 3517 }, 3518 { 3519 .ifnum = 0, 3520 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 3521 .data = &(const struct audioformat) { 3522 .formats = SNDRV_PCM_FMTBIT_S24_3LE, 3523 .channels = 8, // inputs 3524 .iface = 0, 3525 .altsetting = 1, 3526 .altset_idx = 1, 3527 .endpoint = 0x82, 3528 .ep_attr = USB_ENDPOINT_XFER_ISOC| 3529 USB_ENDPOINT_SYNC_ASYNC| 3530 USB_ENDPOINT_USAGE_IMPLICIT_FB, 3531 .rates = SNDRV_PCM_RATE_48000, 3532 .rate_min = 48000, 3533 .rate_max = 48000, 3534 .nr_rates = 1, 3535 .rate_table = (unsigned int[]) { 48000 } 3536 } 3537 }, 3538 { 3539 .ifnum = -1 3540 } 3541 } 3542 } 3543 }, 3544 { 3545 /* 3546 * PIONEER DJ DDJ-RB 3547 * PCM is 4 channels out, 2 dummy channels in @ 44.1 fixed 3548 * The feedback for the output is the dummy input. 3549 */ 3550 USB_DEVICE_VENDOR_SPEC(0x2b73, 0x000e), 3551 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) { 3552 .ifnum = QUIRK_ANY_INTERFACE, 3553 .type = QUIRK_COMPOSITE, 3554 .data = (const struct snd_usb_audio_quirk[]) { 3555 { 3556 .ifnum = 0, 3557 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 3558 .data = &(const struct audioformat) { 3559 .formats = SNDRV_PCM_FMTBIT_S24_3LE, 3560 .channels = 4, 3561 .iface = 0, 3562 .altsetting = 1, 3563 .altset_idx = 1, 3564 .endpoint = 0x01, 3565 .ep_attr = USB_ENDPOINT_XFER_ISOC| 3566 USB_ENDPOINT_SYNC_ASYNC, 3567 .rates = SNDRV_PCM_RATE_44100, 3568 .rate_min = 44100, 3569 .rate_max = 44100, 3570 .nr_rates = 1, 3571 .rate_table = (unsigned int[]) { 44100 } 3572 } 3573 }, 3574 { 3575 .ifnum = 0, 3576 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 3577 .data = &(const struct audioformat) { 3578 .formats = SNDRV_PCM_FMTBIT_S24_3LE, 3579 .channels = 2, 3580 .iface = 0, 3581 .altsetting = 1, 3582 .altset_idx = 1, 3583 .endpoint = 0x82, 3584 .ep_attr = USB_ENDPOINT_XFER_ISOC| 3585 USB_ENDPOINT_SYNC_ASYNC| 3586 USB_ENDPOINT_USAGE_IMPLICIT_FB, 3587 .rates = SNDRV_PCM_RATE_44100, 3588 .rate_min = 44100, 3589 .rate_max = 44100, 3590 .nr_rates = 1, 3591 .rate_table = (unsigned int[]) { 44100 } 3592 } 3593 }, 3594 { 3595 .ifnum = -1 3596 } 3597 } 3598 } 3599 }, 3600 3601 { 3602 /* 3603 * Pioneer DJ DJM-900NXS2 3604 * 10 channels playback & 12 channels capture @ 44.1/48/96kHz S24LE 3605 */ 3606 USB_DEVICE_VENDOR_SPEC(0x2b73, 0x000a), 3607 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) { 3608 .ifnum = QUIRK_ANY_INTERFACE, 3609 .type = QUIRK_COMPOSITE, 3610 .data = (const struct snd_usb_audio_quirk[]) { 3611 { 3612 .ifnum = 0, 3613 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 3614 .data = &(const struct audioformat) { 3615 .formats = SNDRV_PCM_FMTBIT_S24_3LE, 3616 .channels = 10, 3617 .iface = 0, 3618 .altsetting = 1, 3619 .altset_idx = 1, 3620 .endpoint = 0x01, 3621 .ep_attr = USB_ENDPOINT_XFER_ISOC| 3622 USB_ENDPOINT_SYNC_ASYNC, 3623 .rates = SNDRV_PCM_RATE_44100| 3624 SNDRV_PCM_RATE_48000| 3625 SNDRV_PCM_RATE_96000, 3626 .rate_min = 44100, 3627 .rate_max = 96000, 3628 .nr_rates = 3, 3629 .rate_table = (unsigned int[]) { 3630 44100, 48000, 96000 3631 } 3632 } 3633 }, 3634 { 3635 .ifnum = 0, 3636 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 3637 .data = &(const struct audioformat) { 3638 .formats = SNDRV_PCM_FMTBIT_S24_3LE, 3639 .channels = 12, 3640 .iface = 0, 3641 .altsetting = 1, 3642 .altset_idx = 1, 3643 .endpoint = 0x82, 3644 .ep_attr = USB_ENDPOINT_XFER_ISOC| 3645 USB_ENDPOINT_SYNC_ASYNC| 3646 USB_ENDPOINT_USAGE_IMPLICIT_FB, 3647 .rates = SNDRV_PCM_RATE_44100| 3648 SNDRV_PCM_RATE_48000| 3649 SNDRV_PCM_RATE_96000, 3650 .rate_min = 44100, 3651 .rate_max = 96000, 3652 .nr_rates = 3, 3653 .rate_table = (unsigned int[]) { 3654 44100, 48000, 96000 3655 } 3656 } 3657 }, 3658 { 3659 .ifnum = -1 3660 } 3661 } 3662 } 3663 }, 3664 3665 /* 3666 * MacroSilicon MS2100/MS2106 based AV capture cards 3667 * 3668 * These claim 96kHz 1ch in the descriptors, but are actually 48kHz 2ch. 3669 * They also need QUIRK_AUDIO_ALIGN_TRANSFER, which makes one wonder if 3670 * they pretend to be 96kHz mono as a workaround for stereo being broken 3671 * by that... 3672 * 3673 * They also have an issue with initial stream alignment that causes the 3674 * channels to be swapped and out of phase, which is dealt with in quirks.c. 3675 */ 3676 { 3677 USB_AUDIO_DEVICE(0x534d, 0x0021), 3678 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) { 3679 .vendor_name = "MacroSilicon", 3680 .product_name = "MS210x", 3681 .ifnum = QUIRK_ANY_INTERFACE, 3682 .type = QUIRK_COMPOSITE, 3683 .data = &(const struct snd_usb_audio_quirk[]) { 3684 { 3685 .ifnum = 2, 3686 .type = QUIRK_AUDIO_ALIGN_TRANSFER, 3687 }, 3688 { 3689 .ifnum = 2, 3690 .type = QUIRK_AUDIO_STANDARD_MIXER, 3691 }, 3692 { 3693 .ifnum = 3, 3694 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 3695 .data = &(const struct audioformat) { 3696 .formats = SNDRV_PCM_FMTBIT_S16_LE, 3697 .channels = 2, 3698 .iface = 3, 3699 .altsetting = 1, 3700 .altset_idx = 1, 3701 .attributes = 0, 3702 .endpoint = 0x82, 3703 .ep_attr = USB_ENDPOINT_XFER_ISOC | 3704 USB_ENDPOINT_SYNC_ASYNC, 3705 .rates = SNDRV_PCM_RATE_CONTINUOUS, 3706 .rate_min = 48000, 3707 .rate_max = 48000, 3708 } 3709 }, 3710 { 3711 .ifnum = -1 3712 } 3713 } 3714 } 3715 }, 3716 3717 /* 3718 * MacroSilicon MS2109 based HDMI capture cards 3719 * 3720 * These claim 96kHz 1ch in the descriptors, but are actually 48kHz 2ch. 3721 * They also need QUIRK_AUDIO_ALIGN_TRANSFER, which makes one wonder if 3722 * they pretend to be 96kHz mono as a workaround for stereo being broken 3723 * by that... 3724 * 3725 * They also have an issue with initial stream alignment that causes the 3726 * channels to be swapped and out of phase, which is dealt with in quirks.c. 3727 */ 3728 { 3729 USB_AUDIO_DEVICE(0x534d, 0x2109), 3730 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) { 3731 .vendor_name = "MacroSilicon", 3732 .product_name = "MS2109", 3733 .ifnum = QUIRK_ANY_INTERFACE, 3734 .type = QUIRK_COMPOSITE, 3735 .data = &(const struct snd_usb_audio_quirk[]) { 3736 { 3737 .ifnum = 2, 3738 .type = QUIRK_AUDIO_ALIGN_TRANSFER, 3739 }, 3740 { 3741 .ifnum = 2, 3742 .type = QUIRK_AUDIO_STANDARD_MIXER, 3743 }, 3744 { 3745 .ifnum = 3, 3746 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 3747 .data = &(const struct audioformat) { 3748 .formats = SNDRV_PCM_FMTBIT_S16_LE, 3749 .channels = 2, 3750 .iface = 3, 3751 .altsetting = 1, 3752 .altset_idx = 1, 3753 .attributes = 0, 3754 .endpoint = 0x82, 3755 .ep_attr = USB_ENDPOINT_XFER_ISOC | 3756 USB_ENDPOINT_SYNC_ASYNC, 3757 .rates = SNDRV_PCM_RATE_CONTINUOUS, 3758 .rate_min = 48000, 3759 .rate_max = 48000, 3760 } 3761 }, 3762 { 3763 .ifnum = -1 3764 } 3765 } 3766 } 3767 }, 3768 { 3769 /* 3770 * Sennheiser GSP670 3771 * Change order of interfaces loaded 3772 */ 3773 USB_DEVICE(0x1395, 0x0300), 3774 .bInterfaceClass = USB_CLASS_PER_INTERFACE, 3775 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) { 3776 .ifnum = QUIRK_ANY_INTERFACE, 3777 .type = QUIRK_COMPOSITE, 3778 .data = &(const struct snd_usb_audio_quirk[]) { 3779 // Communication 3780 { 3781 .ifnum = 3, 3782 .type = QUIRK_AUDIO_STANDARD_INTERFACE 3783 }, 3784 // Recording 3785 { 3786 .ifnum = 4, 3787 .type = QUIRK_AUDIO_STANDARD_INTERFACE 3788 }, 3789 // Main 3790 { 3791 .ifnum = 1, 3792 .type = QUIRK_AUDIO_STANDARD_INTERFACE 3793 }, 3794 { 3795 .ifnum = -1 3796 } 3797 } 3798 } 3799 }, 3800 { 3801 /* Advanced modes of the Mythware XA001AU. 3802 * For the standard mode, Mythware XA001AU has ID ffad:a001 3803 */ 3804 USB_DEVICE_VENDOR_SPEC(0xffad, 0xa001), 3805 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) { 3806 .vendor_name = "Mythware", 3807 .product_name = "XA001AU", 3808 .ifnum = QUIRK_ANY_INTERFACE, 3809 .type = QUIRK_COMPOSITE, 3810 .data = (const struct snd_usb_audio_quirk[]) { 3811 { 3812 .ifnum = 0, 3813 .type = QUIRK_IGNORE_INTERFACE, 3814 }, 3815 { 3816 .ifnum = 1, 3817 .type = QUIRK_AUDIO_STANDARD_INTERFACE, 3818 }, 3819 { 3820 .ifnum = 2, 3821 .type = QUIRK_AUDIO_STANDARD_INTERFACE, 3822 }, 3823 { 3824 .ifnum = -1 3825 } 3826 } 3827 } 3828 }, 3829 3830 #undef USB_DEVICE_VENDOR_SPEC 3831 #undef USB_AUDIO_DEVICE 3832