Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

at v2.6.15 1501 lines 36 kB view raw
1/* 2 * ALSA USB Audio Driver 3 * 4 * Copyright (c) 2002 by Takashi Iwai <tiwai@suse.de>, 5 * Clemens Ladisch <clemens@ladisch.de> 6 * 7 * 8 * This program is free software; you can redistribute it and/or modify 9 * it under the terms of the GNU General Public License as published by 10 * the Free Software Foundation; either version 2 of the License, or 11 * (at your option) any later version. 12 * 13 * This program is distributed in the hope that it will be useful, 14 * but WITHOUT ANY WARRANTY; without even the implied warranty of 15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16 * GNU General Public License for more details. 17 * 18 * You should have received a copy of the GNU General Public License 19 * along with this program; if not, write to the Free Software 20 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 21 */ 22 23/* 24 * The contents of this file are part of the driver's id_table. 25 * 26 * In a perfect world, this file would be empty. 27 */ 28 29/* 30 * Use this for devices where other interfaces are standard compliant, 31 * to prevent the quirk being applied to those interfaces. (To work with 32 * hotplugging, bDeviceClass must be set to USB_CLASS_PER_INTERFACE.) 33 */ 34#define USB_DEVICE_VENDOR_SPEC(vend, prod) \ 35 .match_flags = USB_DEVICE_ID_MATCH_VENDOR | \ 36 USB_DEVICE_ID_MATCH_PRODUCT | \ 37 USB_DEVICE_ID_MATCH_INT_CLASS, \ 38 .idVendor = vend, \ 39 .idProduct = prod, \ 40 .bInterfaceClass = USB_CLASS_VENDOR_SPEC 41 42/* 43 * Yamaha devices 44 */ 45 46#define YAMAHA_DEVICE(id, name) { \ 47 USB_DEVICE(0x0499, id), \ 48 .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) { \ 49 .vendor_name = "Yamaha", \ 50 .product_name = name, \ 51 .ifnum = QUIRK_ANY_INTERFACE, \ 52 .type = QUIRK_MIDI_YAMAHA \ 53 } \ 54} 55#define YAMAHA_INTERFACE(id, intf, name) { \ 56 USB_DEVICE_VENDOR_SPEC(0x0499, id), \ 57 .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) { \ 58 .vendor_name = "Yamaha", \ 59 .product_name = name, \ 60 .ifnum = intf, \ 61 .type = QUIRK_MIDI_YAMAHA \ 62 } \ 63} 64YAMAHA_DEVICE(0x1000, "UX256"), 65YAMAHA_DEVICE(0x1001, "MU1000"), 66YAMAHA_DEVICE(0x1002, "MU2000"), 67YAMAHA_DEVICE(0x1003, "MU500"), 68YAMAHA_INTERFACE(0x1004, 3, "UW500"), 69YAMAHA_DEVICE(0x1005, "MOTIF6"), 70YAMAHA_DEVICE(0x1006, "MOTIF7"), 71YAMAHA_DEVICE(0x1007, "MOTIF8"), 72YAMAHA_DEVICE(0x1008, "UX96"), 73YAMAHA_DEVICE(0x1009, "UX16"), 74YAMAHA_INTERFACE(0x100a, 3, "EOS BX"), 75YAMAHA_DEVICE(0x100c, "UC-MX"), 76YAMAHA_DEVICE(0x100d, "UC-KX"), 77YAMAHA_DEVICE(0x100e, "S08"), 78YAMAHA_DEVICE(0x100f, "CLP-150"), 79YAMAHA_DEVICE(0x1010, "CLP-170"), 80YAMAHA_DEVICE(0x1011, "P-250"), 81YAMAHA_DEVICE(0x1012, "TYROS"), 82YAMAHA_DEVICE(0x1013, "PF-500"), 83YAMAHA_DEVICE(0x1014, "S90"), 84YAMAHA_DEVICE(0x1015, "MOTIF-R"), 85YAMAHA_DEVICE(0x1017, "CVP-204"), 86YAMAHA_DEVICE(0x1018, "CVP-206"), 87YAMAHA_DEVICE(0x1019, "CVP-208"), 88YAMAHA_DEVICE(0x101a, "CVP-210"), 89YAMAHA_DEVICE(0x101b, "PSR-1100"), 90YAMAHA_DEVICE(0x101c, "PSR-2100"), 91YAMAHA_DEVICE(0x101d, "CLP-175"), 92YAMAHA_DEVICE(0x101e, "PSR-K1"), 93YAMAHA_DEVICE(0x1020, "EZ-250i"), 94YAMAHA_DEVICE(0x1021, "MOTIF ES 6"), 95YAMAHA_DEVICE(0x1022, "MOTIF ES 7"), 96YAMAHA_DEVICE(0x1023, "MOTIF ES 8"), 97YAMAHA_DEVICE(0x1024, "CVP-301"), 98YAMAHA_DEVICE(0x1025, "CVP-303"), 99YAMAHA_DEVICE(0x1026, "CVP-305"), 100YAMAHA_DEVICE(0x1027, "CVP-307"), 101YAMAHA_DEVICE(0x1028, "CVP-309"), 102YAMAHA_DEVICE(0x1029, "CVP-309GP"), 103YAMAHA_DEVICE(0x102a, "PSR-1500"), 104YAMAHA_DEVICE(0x102b, "PSR-3000"), 105YAMAHA_DEVICE(0x102e, "ELS-01/01C"), 106YAMAHA_DEVICE(0x1030, "PSR-295/293"), 107YAMAHA_DEVICE(0x1031, "DGX-205/203"), 108YAMAHA_DEVICE(0x1032, "DGX-305"), 109YAMAHA_DEVICE(0x1033, "DGX-505"), 110YAMAHA_DEVICE(0x1034, NULL), 111YAMAHA_DEVICE(0x1035, NULL), 112YAMAHA_DEVICE(0x1036, NULL), 113YAMAHA_DEVICE(0x1037, NULL), 114YAMAHA_DEVICE(0x1038, NULL), 115YAMAHA_DEVICE(0x1039, NULL), 116YAMAHA_DEVICE(0x103a, NULL), 117YAMAHA_DEVICE(0x103b, NULL), 118YAMAHA_DEVICE(0x103c, NULL), 119YAMAHA_DEVICE(0x103d, NULL), 120YAMAHA_DEVICE(0x103e, NULL), 121YAMAHA_DEVICE(0x103f, NULL), 122YAMAHA_DEVICE(0x1040, NULL), 123YAMAHA_DEVICE(0x1041, NULL), 124YAMAHA_DEVICE(0x2000, "DGP-7"), 125YAMAHA_DEVICE(0x2001, "DGP-5"), 126YAMAHA_DEVICE(0x2002, NULL), 127YAMAHA_DEVICE(0x5000, "CS1D"), 128YAMAHA_DEVICE(0x5001, "DSP1D"), 129YAMAHA_DEVICE(0x5002, "DME32"), 130YAMAHA_DEVICE(0x5003, "DM2000"), 131YAMAHA_DEVICE(0x5004, "02R96"), 132YAMAHA_DEVICE(0x5005, "ACU16-C"), 133YAMAHA_DEVICE(0x5006, "NHB32-C"), 134YAMAHA_DEVICE(0x5007, "DM1000"), 135YAMAHA_DEVICE(0x5008, "01V96"), 136YAMAHA_DEVICE(0x5009, "SPX2000"), 137YAMAHA_DEVICE(0x500a, "PM5D"), 138YAMAHA_DEVICE(0x500b, "DME64N"), 139YAMAHA_DEVICE(0x500c, "DME24N"), 140YAMAHA_DEVICE(0x500d, NULL), 141YAMAHA_DEVICE(0x500e, NULL), 142YAMAHA_DEVICE(0x7000, "DTX"), 143YAMAHA_DEVICE(0x7010, "UB99"), 144#undef YAMAHA_DEVICE 145#undef YAMAHA_INTERFACE 146 147/* 148 * Roland/RolandED/Edirol/BOSS devices 149 */ 150{ 151 USB_DEVICE(0x0582, 0x0000), 152 .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) { 153 .vendor_name = "Roland", 154 .product_name = "UA-100", 155 .ifnum = QUIRK_ANY_INTERFACE, 156 .type = QUIRK_COMPOSITE, 157 .data = (const snd_usb_audio_quirk_t[]) { 158 { 159 .ifnum = 0, 160 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 161 .data = & (const struct audioformat) { 162 .format = SNDRV_PCM_FORMAT_S16_LE, 163 .channels = 4, 164 .iface = 0, 165 .altsetting = 1, 166 .altset_idx = 1, 167 .attributes = 0, 168 .endpoint = 0x01, 169 .ep_attr = 0x09, 170 .rates = SNDRV_PCM_RATE_CONTINUOUS, 171 .rate_min = 44100, 172 .rate_max = 44100, 173 } 174 }, 175 { 176 .ifnum = 1, 177 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 178 .data = & (const struct audioformat) { 179 .format = SNDRV_PCM_FORMAT_S16_LE, 180 .channels = 2, 181 .iface = 1, 182 .altsetting = 1, 183 .altset_idx = 1, 184 .attributes = EP_CS_ATTR_FILL_MAX, 185 .endpoint = 0x81, 186 .ep_attr = 0x05, 187 .rates = SNDRV_PCM_RATE_CONTINUOUS, 188 .rate_min = 44100, 189 .rate_max = 44100, 190 } 191 }, 192 { 193 .ifnum = 2, 194 .type = QUIRK_MIDI_FIXED_ENDPOINT, 195 .data = & (const snd_usb_midi_endpoint_info_t) { 196 .out_cables = 0x0007, 197 .in_cables = 0x0007 198 } 199 }, 200 { 201 .ifnum = -1 202 } 203 } 204 } 205}, 206{ 207 USB_DEVICE(0x0582, 0x0002), 208 .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) { 209 .vendor_name = "EDIROL", 210 .product_name = "UM-4", 211 .ifnum = QUIRK_ANY_INTERFACE, 212 .type = QUIRK_COMPOSITE, 213 .data = (const snd_usb_audio_quirk_t[]) { 214 { 215 .ifnum = 0, 216 .type = QUIRK_IGNORE_INTERFACE 217 }, 218 { 219 .ifnum = 1, 220 .type = QUIRK_IGNORE_INTERFACE 221 }, 222 { 223 .ifnum = 2, 224 .type = QUIRK_MIDI_FIXED_ENDPOINT, 225 .data = & (const snd_usb_midi_endpoint_info_t) { 226 .out_cables = 0x000f, 227 .in_cables = 0x000f 228 } 229 }, 230 { 231 .ifnum = -1 232 } 233 } 234 } 235}, 236{ 237 USB_DEVICE(0x0582, 0x0003), 238 .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) { 239 .vendor_name = "Roland", 240 .product_name = "SC-8850", 241 .ifnum = QUIRK_ANY_INTERFACE, 242 .type = QUIRK_COMPOSITE, 243 .data = (const snd_usb_audio_quirk_t[]) { 244 { 245 .ifnum = 0, 246 .type = QUIRK_IGNORE_INTERFACE 247 }, 248 { 249 .ifnum = 1, 250 .type = QUIRK_IGNORE_INTERFACE 251 }, 252 { 253 .ifnum = 2, 254 .type = QUIRK_MIDI_FIXED_ENDPOINT, 255 .data = & (const snd_usb_midi_endpoint_info_t) { 256 .out_cables = 0x003f, 257 .in_cables = 0x003f 258 } 259 }, 260 { 261 .ifnum = -1 262 } 263 } 264 } 265}, 266{ 267 USB_DEVICE(0x0582, 0x0004), 268 .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) { 269 .vendor_name = "Roland", 270 .product_name = "U-8", 271 .ifnum = QUIRK_ANY_INTERFACE, 272 .type = QUIRK_COMPOSITE, 273 .data = (const snd_usb_audio_quirk_t[]) { 274 { 275 .ifnum = 0, 276 .type = QUIRK_IGNORE_INTERFACE 277 }, 278 { 279 .ifnum = 1, 280 .type = QUIRK_IGNORE_INTERFACE 281 }, 282 { 283 .ifnum = 2, 284 .type = QUIRK_MIDI_FIXED_ENDPOINT, 285 .data = & (const snd_usb_midi_endpoint_info_t) { 286 .out_cables = 0x0005, 287 .in_cables = 0x0005 288 } 289 }, 290 { 291 .ifnum = -1 292 } 293 } 294 } 295}, 296{ 297 /* a later revision uses ID 0x0099 */ 298 USB_DEVICE(0x0582, 0x0005), 299 .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) { 300 .vendor_name = "EDIROL", 301 .product_name = "UM-2", 302 .ifnum = QUIRK_ANY_INTERFACE, 303 .type = QUIRK_COMPOSITE, 304 .data = (const snd_usb_audio_quirk_t[]) { 305 { 306 .ifnum = 0, 307 .type = QUIRK_IGNORE_INTERFACE 308 }, 309 { 310 .ifnum = 1, 311 .type = QUIRK_IGNORE_INTERFACE 312 }, 313 { 314 .ifnum = 2, 315 .type = QUIRK_MIDI_FIXED_ENDPOINT, 316 .data = & (const snd_usb_midi_endpoint_info_t) { 317 .out_cables = 0x0003, 318 .in_cables = 0x0003 319 } 320 }, 321 { 322 .ifnum = -1 323 } 324 } 325 } 326}, 327{ 328 USB_DEVICE(0x0582, 0x0007), 329 .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) { 330 .vendor_name = "Roland", 331 .product_name = "SC-8820", 332 .ifnum = QUIRK_ANY_INTERFACE, 333 .type = QUIRK_COMPOSITE, 334 .data = (const snd_usb_audio_quirk_t[]) { 335 { 336 .ifnum = 0, 337 .type = QUIRK_IGNORE_INTERFACE 338 }, 339 { 340 .ifnum = 1, 341 .type = QUIRK_IGNORE_INTERFACE 342 }, 343 { 344 .ifnum = 2, 345 .type = QUIRK_MIDI_FIXED_ENDPOINT, 346 .data = & (const snd_usb_midi_endpoint_info_t) { 347 .out_cables = 0x0013, 348 .in_cables = 0x0013 349 } 350 }, 351 { 352 .ifnum = -1 353 } 354 } 355 } 356}, 357{ 358 USB_DEVICE(0x0582, 0x0008), 359 .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) { 360 .vendor_name = "Roland", 361 .product_name = "PC-300", 362 .ifnum = QUIRK_ANY_INTERFACE, 363 .type = QUIRK_COMPOSITE, 364 .data = (const snd_usb_audio_quirk_t[]) { 365 { 366 .ifnum = 0, 367 .type = QUIRK_IGNORE_INTERFACE 368 }, 369 { 370 .ifnum = 1, 371 .type = QUIRK_IGNORE_INTERFACE 372 }, 373 { 374 .ifnum = 2, 375 .type = QUIRK_MIDI_FIXED_ENDPOINT, 376 .data = & (const snd_usb_midi_endpoint_info_t) { 377 .out_cables = 0x0001, 378 .in_cables = 0x0001 379 } 380 }, 381 { 382 .ifnum = -1 383 } 384 } 385 } 386}, 387{ 388 /* a later revision uses ID 0x009d */ 389 USB_DEVICE(0x0582, 0x0009), 390 .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) { 391 .vendor_name = "EDIROL", 392 .product_name = "UM-1", 393 .ifnum = QUIRK_ANY_INTERFACE, 394 .type = QUIRK_COMPOSITE, 395 .data = (const snd_usb_audio_quirk_t[]) { 396 { 397 .ifnum = 0, 398 .type = QUIRK_IGNORE_INTERFACE 399 }, 400 { 401 .ifnum = 1, 402 .type = QUIRK_IGNORE_INTERFACE 403 }, 404 { 405 .ifnum = 2, 406 .type = QUIRK_MIDI_FIXED_ENDPOINT, 407 .data = & (const snd_usb_midi_endpoint_info_t) { 408 .out_cables = 0x0001, 409 .in_cables = 0x0001 410 } 411 }, 412 { 413 .ifnum = -1 414 } 415 } 416 } 417}, 418{ 419 USB_DEVICE(0x0582, 0x000b), 420 .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) { 421 .vendor_name = "Roland", 422 .product_name = "SK-500", 423 .ifnum = QUIRK_ANY_INTERFACE, 424 .type = QUIRK_COMPOSITE, 425 .data = (const snd_usb_audio_quirk_t[]) { 426 { 427 .ifnum = 0, 428 .type = QUIRK_IGNORE_INTERFACE 429 }, 430 { 431 .ifnum = 1, 432 .type = QUIRK_IGNORE_INTERFACE 433 }, 434 { 435 .ifnum = 2, 436 .type = QUIRK_MIDI_FIXED_ENDPOINT, 437 .data = & (const snd_usb_midi_endpoint_info_t) { 438 .out_cables = 0x0013, 439 .in_cables = 0x0013 440 } 441 }, 442 { 443 .ifnum = -1 444 } 445 } 446 } 447}, 448{ 449 /* thanks to Emiliano Grilli <emillo@libero.it> 450 * for helping researching this data */ 451 USB_DEVICE(0x0582, 0x000c), 452 .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) { 453 .vendor_name = "Roland", 454 .product_name = "SC-D70", 455 .ifnum = QUIRK_ANY_INTERFACE, 456 .type = QUIRK_COMPOSITE, 457 .data = (const snd_usb_audio_quirk_t[]) { 458 { 459 .ifnum = 0, 460 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 461 .data = & (const struct audioformat) { 462 .format = SNDRV_PCM_FORMAT_S24_3LE, 463 .channels = 2, 464 .iface = 0, 465 .altsetting = 1, 466 .altset_idx = 1, 467 .attributes = 0, 468 .endpoint = 0x01, 469 .ep_attr = 0x01, 470 .rates = SNDRV_PCM_RATE_CONTINUOUS, 471 .rate_min = 44100, 472 .rate_max = 44100, 473 } 474 }, 475 { 476 .ifnum = 1, 477 .type = QUIRK_AUDIO_FIXED_ENDPOINT, 478 .data = & (const struct audioformat) { 479 .format = SNDRV_PCM_FORMAT_S24_3LE, 480 .channels = 2, 481 .iface = 1, 482 .altsetting = 1, 483 .altset_idx = 1, 484 .attributes = 0, 485 .endpoint = 0x81, 486 .ep_attr = 0x01, 487 .rates = SNDRV_PCM_RATE_CONTINUOUS, 488 .rate_min = 44100, 489 .rate_max = 44100, 490 } 491 }, 492 { 493 .ifnum = 2, 494 .type = QUIRK_MIDI_FIXED_ENDPOINT, 495 .data = & (const snd_usb_midi_endpoint_info_t) { 496 .out_cables = 0x0007, 497 .in_cables = 0x0007 498 } 499 }, 500 { 501 .ifnum = -1 502 } 503 } 504 } 505}, 506{ /* 507 * This quirk is for the "Advanced Driver" mode of the Edirol UA-5. 508 * If the advanced mode switch at the back of the unit is off, the 509 * UA-5 has ID 0x0582/0x0011 and is standard compliant (no quirks), 510 * but offers only 16-bit PCM. 511 * In advanced mode, the UA-5 will output S24_3LE samples (two 512 * channels) at the rate indicated on the front switch, including 513 * the 96kHz sample rate. 514 */ 515 USB_DEVICE(0x0582, 0x0010), 516 .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) { 517 .vendor_name = "EDIROL", 518 .product_name = "UA-5", 519 .ifnum = QUIRK_ANY_INTERFACE, 520 .type = QUIRK_COMPOSITE, 521 .data = (const snd_usb_audio_quirk_t[]) { 522 { 523 .ifnum = 1, 524 .type = QUIRK_AUDIO_STANDARD_INTERFACE 525 }, 526 { 527 .ifnum = 2, 528 .type = QUIRK_AUDIO_STANDARD_INTERFACE 529 }, 530 { 531 .ifnum = -1 532 } 533 } 534 } 535}, 536{ 537 /* has ID 0x0013 when not in "Advanced Driver" mode */ 538 USB_DEVICE(0x0582, 0x0012), 539 .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) { 540 .vendor_name = "Roland", 541 .product_name = "XV-5050", 542 .ifnum = 0, 543 .type = QUIRK_MIDI_FIXED_ENDPOINT, 544 .data = & (const snd_usb_midi_endpoint_info_t) { 545 .out_cables = 0x0001, 546 .in_cables = 0x0001 547 } 548 } 549}, 550{ 551 /* has ID 0x0015 when not in "Advanced Driver" mode */ 552 USB_DEVICE(0x0582, 0x0014), 553 .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) { 554 .vendor_name = "EDIROL", 555 .product_name = "UM-880", 556 .ifnum = 0, 557 .type = QUIRK_MIDI_FIXED_ENDPOINT, 558 .data = & (const snd_usb_midi_endpoint_info_t) { 559 .out_cables = 0x01ff, 560 .in_cables = 0x01ff 561 } 562 } 563}, 564{ 565 /* has ID 0x0017 when not in "Advanced Driver" mode */ 566 USB_DEVICE(0x0582, 0x0016), 567 .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) { 568 .vendor_name = "EDIROL", 569 .product_name = "SD-90", 570 .ifnum = QUIRK_ANY_INTERFACE, 571 .type = QUIRK_COMPOSITE, 572 .data = (const snd_usb_audio_quirk_t[]) { 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 snd_usb_midi_endpoint_info_t) { 585 .out_cables = 0x000f, 586 .in_cables = 0x000f 587 } 588 }, 589 { 590 .ifnum = -1 591 } 592 } 593 } 594}, 595{ 596 /* has ID 0x001c when not in "Advanced Driver" mode */ 597 USB_DEVICE(0x0582, 0x001b), 598 .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) { 599 .vendor_name = "Roland", 600 .product_name = "MMP-2", 601 .ifnum = QUIRK_ANY_INTERFACE, 602 .type = QUIRK_COMPOSITE, 603 .data = (const snd_usb_audio_quirk_t[]) { 604 { 605 .ifnum = 0, 606 .type = QUIRK_IGNORE_INTERFACE 607 }, 608 { 609 .ifnum = 1, 610 .type = QUIRK_IGNORE_INTERFACE 611 }, 612 { 613 .ifnum = 2, 614 .type = QUIRK_MIDI_FIXED_ENDPOINT, 615 .data = & (const snd_usb_midi_endpoint_info_t) { 616 .out_cables = 0x0001, 617 .in_cables = 0x0001 618 } 619 }, 620 { 621 .ifnum = -1 622 } 623 } 624 } 625}, 626{ 627 /* has ID 0x001e when not in "Advanced Driver" mode */ 628 USB_DEVICE(0x0582, 0x001d), 629 .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) { 630 .vendor_name = "Roland", 631 .product_name = "V-SYNTH", 632 .ifnum = 0, 633 .type = QUIRK_MIDI_FIXED_ENDPOINT, 634 .data = & (const snd_usb_midi_endpoint_info_t) { 635 .out_cables = 0x0001, 636 .in_cables = 0x0001 637 } 638 } 639}, 640{ 641 /* has ID 0x0024 when not in "Advanced Driver" mode */ 642 USB_DEVICE(0x0582, 0x0023), 643 .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) { 644 .vendor_name = "EDIROL", 645 .product_name = "UM-550", 646 .ifnum = 0, 647 .type = QUIRK_MIDI_FIXED_ENDPOINT, 648 .data = & (const snd_usb_midi_endpoint_info_t) { 649 .out_cables = 0x003f, 650 .in_cables = 0x003f 651 } 652 } 653}, 654{ 655 /* 656 * This quirk is for the "Advanced Driver" mode. If off, the UA-20 657 * has ID 0x0026 and is standard compliant, but has only 16-bit PCM 658 * and no MIDI. 659 */ 660 USB_DEVICE(0x0582, 0x0025), 661 .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) { 662 .vendor_name = "EDIROL", 663 .product_name = "UA-20", 664 .ifnum = QUIRK_ANY_INTERFACE, 665 .type = QUIRK_COMPOSITE, 666 .data = (const snd_usb_audio_quirk_t[]) { 667 { 668 .ifnum = 1, 669 .type = QUIRK_AUDIO_STANDARD_INTERFACE 670 }, 671 { 672 .ifnum = 2, 673 .type = QUIRK_AUDIO_STANDARD_INTERFACE 674 }, 675 { 676 .ifnum = 3, 677 .type = QUIRK_MIDI_STANDARD_INTERFACE 678 }, 679 { 680 .ifnum = -1 681 } 682 } 683 } 684}, 685{ 686 /* has ID 0x0028 when not in "Advanced Driver" mode */ 687 USB_DEVICE(0x0582, 0x0027), 688 .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) { 689 .vendor_name = "EDIROL", 690 .product_name = "SD-20", 691 .ifnum = 0, 692 .type = QUIRK_MIDI_FIXED_ENDPOINT, 693 .data = & (const snd_usb_midi_endpoint_info_t) { 694 .out_cables = 0x0003, 695 .in_cables = 0x0007 696 } 697 } 698}, 699{ 700 /* has ID 0x002a when not in "Advanced Driver" mode */ 701 USB_DEVICE(0x0582, 0x0029), 702 .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) { 703 .vendor_name = "EDIROL", 704 .product_name = "SD-80", 705 .ifnum = 0, 706 .type = QUIRK_MIDI_FIXED_ENDPOINT, 707 .data = & (const snd_usb_midi_endpoint_info_t) { 708 .out_cables = 0x000f, 709 .in_cables = 0x000f 710 } 711 } 712}, 713{ /* 714 * This quirk is for the "Advanced" modes of the Edirol UA-700. 715 * If the sample format switch is not in an advanced setting, the 716 * UA-700 has ID 0x0582/0x002c and is standard compliant (no quirks), 717 * but offers only 16-bit PCM and no MIDI. 718 */ 719 USB_DEVICE_VENDOR_SPEC(0x0582, 0x002b), 720 .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) { 721 .vendor_name = "EDIROL", 722 .product_name = "UA-700", 723 .ifnum = QUIRK_ANY_INTERFACE, 724 .type = QUIRK_COMPOSITE, 725 .data = (const snd_usb_audio_quirk_t[]) { 726 { 727 .ifnum = 1, 728 .type = QUIRK_AUDIO_EDIROL_UA700_UA25 729 }, 730 { 731 .ifnum = 2, 732 .type = QUIRK_AUDIO_EDIROL_UA700_UA25 733 }, 734 { 735 .ifnum = 3, 736 .type = QUIRK_AUDIO_EDIROL_UA700_UA25 737 }, 738 { 739 .ifnum = -1 740 } 741 } 742 } 743}, 744{ 745 /* has ID 0x002e when not in "Advanced Driver" mode */ 746 USB_DEVICE(0x0582, 0x002d), 747 .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) { 748 .vendor_name = "Roland", 749 .product_name = "XV-2020", 750 .ifnum = 0, 751 .type = QUIRK_MIDI_FIXED_ENDPOINT, 752 .data = & (const snd_usb_midi_endpoint_info_t) { 753 .out_cables = 0x0001, 754 .in_cables = 0x0001 755 } 756 } 757}, 758{ 759 /* has ID 0x0030 when not in "Advanced Driver" mode */ 760 USB_DEVICE(0x0582, 0x002f), 761 .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) { 762 .vendor_name = "Roland", 763 .product_name = "VariOS", 764 .ifnum = 0, 765 .type = QUIRK_MIDI_FIXED_ENDPOINT, 766 .data = & (const snd_usb_midi_endpoint_info_t) { 767 .out_cables = 0x0007, 768 .in_cables = 0x0007 769 } 770 } 771}, 772{ 773 /* has ID 0x0034 when not in "Advanced Driver" mode */ 774 USB_DEVICE(0x0582, 0x0033), 775 .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) { 776 .vendor_name = "EDIROL", 777 .product_name = "PCR", 778 .ifnum = 0, 779 .type = QUIRK_MIDI_FIXED_ENDPOINT, 780 .data = & (const snd_usb_midi_endpoint_info_t) { 781 .out_cables = 0x0003, 782 .in_cables = 0x0007 783 } 784 } 785}, 786 /* TODO: add Roland M-1000 support */ 787{ 788 /* 789 * Has ID 0x0038 when not in "Advanced Driver" mode; 790 * later revisions use IDs 0x0054 and 0x00a2. 791 */ 792 USB_DEVICE(0x0582, 0x0037), 793 .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) { 794 .vendor_name = "Roland", 795 .product_name = "Digital Piano", 796 .ifnum = 0, 797 .type = QUIRK_MIDI_FIXED_ENDPOINT, 798 .data = & (const snd_usb_midi_endpoint_info_t) { 799 .out_cables = 0x0001, 800 .in_cables = 0x0001 801 } 802 } 803}, 804{ 805 /* 806 * This quirk is for the "Advanced Driver" mode. If off, the GS-10 807 * has ID 0x003c and is standard compliant, but has only 16-bit PCM 808 * and no MIDI. 809 */ 810 USB_DEVICE_VENDOR_SPEC(0x0582, 0x003b), 811 .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) { 812 .vendor_name = "BOSS", 813 .product_name = "GS-10", 814 .ifnum = QUIRK_ANY_INTERFACE, 815 .type = QUIRK_COMPOSITE, 816 .data = & (const snd_usb_audio_quirk_t[]) { 817 { 818 .ifnum = 1, 819 .type = QUIRK_AUDIO_STANDARD_INTERFACE 820 }, 821 { 822 .ifnum = 2, 823 .type = QUIRK_AUDIO_STANDARD_INTERFACE 824 }, 825 { 826 .ifnum = 3, 827 .type = QUIRK_MIDI_STANDARD_INTERFACE 828 }, 829 { 830 .ifnum = -1 831 } 832 } 833 } 834}, 835{ 836 /* has ID 0x0041 when not in "Advanced Driver" mode */ 837 USB_DEVICE(0x0582, 0x0040), 838 .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) { 839 .vendor_name = "Roland", 840 .product_name = "GI-20", 841 .ifnum = 0, 842 .type = QUIRK_MIDI_FIXED_ENDPOINT, 843 .data = & (const snd_usb_midi_endpoint_info_t) { 844 .out_cables = 0x0001, 845 .in_cables = 0x0001 846 } 847 } 848}, 849{ 850 /* has ID 0x0043 when not in "Advanced Driver" mode */ 851 USB_DEVICE(0x0582, 0x0042), 852 .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) { 853 .vendor_name = "Roland", 854 .product_name = "RS-70", 855 .ifnum = 0, 856 .type = QUIRK_MIDI_FIXED_ENDPOINT, 857 .data = & (const snd_usb_midi_endpoint_info_t) { 858 .out_cables = 0x0001, 859 .in_cables = 0x0001 860 } 861 } 862}, 863{ 864 USB_DEVICE(0x0582, 0x0044), 865 .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) { 866 .vendor_name = "Roland", 867 .product_name = "UA-1000", 868 .ifnum = QUIRK_ANY_INTERFACE, 869 .type = QUIRK_COMPOSITE, 870 .data = (const snd_usb_audio_quirk_t[]) { 871 { 872 .ifnum = 1, 873 .type = QUIRK_AUDIO_EDIROL_UA1000 874 }, 875 { 876 .ifnum = 2, 877 .type = QUIRK_AUDIO_EDIROL_UA1000 878 }, 879 { 880 .ifnum = 3, 881 .type = QUIRK_MIDI_FIXED_ENDPOINT, 882 .data = & (const snd_usb_midi_endpoint_info_t) { 883 .out_cables = 0x0003, 884 .in_cables = 0x0003 885 } 886 }, 887 { 888 .ifnum = -1 889 } 890 } 891 } 892}, 893{ 894 /* has ID 0x004a when not in "Advanced Driver" mode */ 895 USB_DEVICE(0x0582, 0x0048), 896 .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) { 897 .vendor_name = "EDIROL", 898 .product_name = "UR-80", 899 .ifnum = 0, 900 .type = QUIRK_MIDI_FIXED_ENDPOINT, 901 .data = & (const snd_usb_midi_endpoint_info_t) { 902 .out_cables = 0x0003, 903 .in_cables = 0x0007 904 } 905 } 906}, 907 /* TODO: add Edirol M-100FX support */ 908{ 909 /* has ID 0x004f when not in "Advanced Driver" mode */ 910 USB_DEVICE(0x0582, 0x004d), 911 .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) { 912 .vendor_name = "EDIROL", 913 .product_name = "PCR-A", 914 .ifnum = 0, 915 .type = QUIRK_MIDI_FIXED_ENDPOINT, 916 .data = & (const snd_usb_midi_endpoint_info_t) { 917 .out_cables = 0x0003, 918 .in_cables = 0x0007 919 } 920 } 921}, 922{ 923 /* 924 * This quirk is for the "Advanced Driver" mode. If off, the UA-3FX 925 * is standard compliant, but has only 16-bit PCM. 926 */ 927 USB_DEVICE(0x0582, 0x0050), 928 .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) { 929 .vendor_name = "EDIROL", 930 .product_name = "UA-3FX", 931 .ifnum = QUIRK_ANY_INTERFACE, 932 .type = QUIRK_COMPOSITE, 933 .data = (const snd_usb_audio_quirk_t[]) { 934 { 935 .ifnum = 1, 936 .type = QUIRK_AUDIO_STANDARD_INTERFACE 937 }, 938 { 939 .ifnum = 2, 940 .type = QUIRK_AUDIO_STANDARD_INTERFACE 941 }, 942 { 943 .ifnum = -1 944 } 945 } 946 } 947}, 948{ 949 USB_DEVICE(0x0582, 0x0052), 950 .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) { 951 .vendor_name = "EDIROL", 952 .product_name = "UM-1SX", 953 .ifnum = 0, 954 .type = QUIRK_MIDI_STANDARD_INTERFACE 955 } 956}, 957 /* TODO: add Roland EXR support */ 958{ 959 /* has ID 0x0067 when not in "Advanced Driver" mode */ 960 USB_DEVICE(0x0582, 0x0065), 961 .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) { 962 .vendor_name = "EDIROL", 963 .product_name = "PCR-1", 964 .ifnum = 0, 965 .type = QUIRK_MIDI_FIXED_ENDPOINT, 966 .data = & (const snd_usb_midi_endpoint_info_t) { 967 .out_cables = 0x0001, 968 .in_cables = 0x0003 969 } 970 } 971}, 972{ 973 /* has ID 0x006b when not in "Advanced Driver" mode */ 974 USB_DEVICE_VENDOR_SPEC(0x0582, 0x006a), 975 .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) { 976 .vendor_name = "Roland", 977 .product_name = "SP-606", 978 .ifnum = 3, 979 .type = QUIRK_MIDI_FIXED_ENDPOINT, 980 .data = & (const snd_usb_midi_endpoint_info_t) { 981 .out_cables = 0x0001, 982 .in_cables = 0x0001 983 } 984 } 985}, 986{ 987 /* has ID 0x006e when not in "Advanced Driver" mode */ 988 USB_DEVICE(0x0582, 0x006d), 989 .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) { 990 .vendor_name = "Roland", 991 .product_name = "FANTOM-X", 992 .ifnum = 0, 993 .type = QUIRK_MIDI_FIXED_ENDPOINT, 994 .data = & (const snd_usb_midi_endpoint_info_t) { 995 .out_cables = 0x0001, 996 .in_cables = 0x0001 997 } 998 } 999}, 1000{ /* 1001 * This quirk is for the "Advanced" modes of the Edirol UA-25. 1002 * If the switch is not in an advanced setting, the UA-25 has 1003 * ID 0x0582/0x0073 and is standard compliant (no quirks), but 1004 * offers only 16-bit PCM at 44.1 kHz and no MIDI. 1005 */ 1006 USB_DEVICE_VENDOR_SPEC(0x0582, 0x0074), 1007 .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) { 1008 .vendor_name = "EDIROL", 1009 .product_name = "UA-25", 1010 .ifnum = QUIRK_ANY_INTERFACE, 1011 .type = QUIRK_COMPOSITE, 1012 .data = (const snd_usb_audio_quirk_t[]) { 1013 { 1014 .ifnum = 0, 1015 .type = QUIRK_AUDIO_EDIROL_UA700_UA25 1016 }, 1017 { 1018 .ifnum = 1, 1019 .type = QUIRK_AUDIO_EDIROL_UA700_UA25 1020 }, 1021 { 1022 .ifnum = 2, 1023 .type = QUIRK_AUDIO_EDIROL_UA700_UA25 1024 }, 1025 { 1026 .ifnum = -1 1027 } 1028 } 1029 } 1030}, 1031{ 1032 /* has ID 0x0076 when not in "Advanced Driver" mode */ 1033 USB_DEVICE(0x0582, 0x0075), 1034 .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) { 1035 .vendor_name = "BOSS", 1036 .product_name = "DR-880", 1037 .ifnum = 0, 1038 .type = QUIRK_MIDI_FIXED_ENDPOINT, 1039 .data = & (const snd_usb_midi_endpoint_info_t) { 1040 .out_cables = 0x0001, 1041 .in_cables = 0x0001 1042 } 1043 } 1044}, 1045{ 1046 /* has ID 0x007b when not in "Advanced Driver" mode */ 1047 USB_DEVICE_VENDOR_SPEC(0x0582, 0x007a), 1048 .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) { 1049 .vendor_name = "Roland", 1050 /* "RD" or "RD-700SX"? */ 1051 .ifnum = 0, 1052 .type = QUIRK_MIDI_FIXED_ENDPOINT, 1053 .data = & (const snd_usb_midi_endpoint_info_t) { 1054 .out_cables = 0x0003, 1055 .in_cables = 0x0003 1056 } 1057 } 1058}, 1059 1060/* Guillemot devices */ 1061{ 1062 /* 1063 * This is for the "Windows Edition" where the external MIDI ports are 1064 * the only MIDI ports; the control data is reported through HID 1065 * interfaces. The "Macintosh Edition" has ID 0xd002 and uses standard 1066 * compliant USB MIDI ports for external MIDI and controls. 1067 */ 1068 USB_DEVICE_VENDOR_SPEC(0x06f8, 0xb000), 1069 .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) { 1070 .vendor_name = "Hercules", 1071 .product_name = "DJ Console (WE)", 1072 .ifnum = 4, 1073 .type = QUIRK_MIDI_FIXED_ENDPOINT, 1074 .data = & (const snd_usb_midi_endpoint_info_t) { 1075 .out_cables = 0x0001, 1076 .in_cables = 0x0001 1077 } 1078 } 1079}, 1080 /* TODO: add Edirol UA-101 support */ 1081 /* TODO: add Roland G-70 support */ 1082 /* TODO: add Roland V-SYNTH XT support */ 1083 /* TODO: add BOSS GT-PRO support */ 1084 /* TODO: add Edirol PC-50 support */ 1085 /* TODO: add Edirol PC-80 support */ 1086 /* TODO: add Edirol UA-1EX support */ 1087 /* TODO: add Edirol UM-3 support */ 1088 /* TODO: add Edirol MD-P1 support */ 1089 1090/* Midiman/M-Audio devices */ 1091{ 1092 USB_DEVICE_VENDOR_SPEC(0x0763, 0x1002), 1093 .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) { 1094 .vendor_name = "M-Audio", 1095 .product_name = "MidiSport 2x2", 1096 .ifnum = QUIRK_ANY_INTERFACE, 1097 .type = QUIRK_MIDI_MIDIMAN, 1098 .data = & (const snd_usb_midi_endpoint_info_t) { 1099 .out_cables = 0x0003, 1100 .in_cables = 0x0003 1101 } 1102 } 1103}, 1104{ 1105 USB_DEVICE_VENDOR_SPEC(0x0763, 0x1011), 1106 .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) { 1107 .vendor_name = "M-Audio", 1108 .product_name = "MidiSport 1x1", 1109 .ifnum = QUIRK_ANY_INTERFACE, 1110 .type = QUIRK_MIDI_MIDIMAN, 1111 .data = & (const snd_usb_midi_endpoint_info_t) { 1112 .out_cables = 0x0001, 1113 .in_cables = 0x0001 1114 } 1115 } 1116}, 1117{ 1118 USB_DEVICE_VENDOR_SPEC(0x0763, 0x1015), 1119 .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) { 1120 .vendor_name = "M-Audio", 1121 .product_name = "Keystation", 1122 .ifnum = QUIRK_ANY_INTERFACE, 1123 .type = QUIRK_MIDI_MIDIMAN, 1124 .data = & (const snd_usb_midi_endpoint_info_t) { 1125 .out_cables = 0x0001, 1126 .in_cables = 0x0001 1127 } 1128 } 1129}, 1130{ 1131 USB_DEVICE_VENDOR_SPEC(0x0763, 0x1021), 1132 .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) { 1133 .vendor_name = "M-Audio", 1134 .product_name = "MidiSport 4x4", 1135 .ifnum = QUIRK_ANY_INTERFACE, 1136 .type = QUIRK_MIDI_MIDIMAN, 1137 .data = & (const snd_usb_midi_endpoint_info_t) { 1138 .out_cables = 0x000f, 1139 .in_cables = 0x000f 1140 } 1141 } 1142}, 1143{ 1144 /* 1145 * For hardware revision 1.05; in the later revisions (1.10 and 1146 * 1.21), 0x1031 is the ID for the device without firmware. 1147 * Thanks to Olaf Giesbrecht <Olaf_Giesbrecht@yahoo.de> 1148 */ 1149 USB_DEVICE_VER(0x0763, 0x1031, 0x0100, 0x0109), 1150 .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) { 1151 .vendor_name = "M-Audio", 1152 .product_name = "MidiSport 8x8", 1153 .ifnum = QUIRK_ANY_INTERFACE, 1154 .type = QUIRK_MIDI_MIDIMAN, 1155 .data = & (const snd_usb_midi_endpoint_info_t) { 1156 .out_cables = 0x01ff, 1157 .in_cables = 0x01ff 1158 } 1159 } 1160}, 1161{ 1162 USB_DEVICE_VENDOR_SPEC(0x0763, 0x1033), 1163 .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) { 1164 .vendor_name = "M-Audio", 1165 .product_name = "MidiSport 8x8", 1166 .ifnum = QUIRK_ANY_INTERFACE, 1167 .type = QUIRK_MIDI_MIDIMAN, 1168 .data = & (const snd_usb_midi_endpoint_info_t) { 1169 .out_cables = 0x01ff, 1170 .in_cables = 0x01ff 1171 } 1172 } 1173}, 1174{ 1175 USB_DEVICE_VENDOR_SPEC(0x0763, 0x1041), 1176 .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) { 1177 .vendor_name = "M-Audio", 1178 .product_name = "MidiSport 2x4", 1179 .ifnum = QUIRK_ANY_INTERFACE, 1180 .type = QUIRK_MIDI_MIDIMAN, 1181 .data = & (const snd_usb_midi_endpoint_info_t) { 1182 .out_cables = 0x000f, 1183 .in_cables = 0x0003 1184 } 1185 } 1186}, 1187{ 1188 USB_DEVICE_VENDOR_SPEC(0x0763, 0x2001), 1189 .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) { 1190 .vendor_name = "M-Audio", 1191 .product_name = "Quattro", 1192 .ifnum = QUIRK_ANY_INTERFACE, 1193 .type = QUIRK_COMPOSITE, 1194 .data = & (const snd_usb_audio_quirk_t[]) { 1195 /* 1196 * Interfaces 0-2 are "Windows-compatible", 16-bit only, 1197 * and share endpoints with the other interfaces. 1198 * Ignore them. The other interfaces can do 24 bits, 1199 * but captured samples are big-endian (see usbaudio.c). 1200 */ 1201 { 1202 .ifnum = 0, 1203 .type = QUIRK_IGNORE_INTERFACE 1204 }, 1205 { 1206 .ifnum = 1, 1207 .type = QUIRK_IGNORE_INTERFACE 1208 }, 1209 { 1210 .ifnum = 2, 1211 .type = QUIRK_IGNORE_INTERFACE 1212 }, 1213 { 1214 .ifnum = 3, 1215 .type = QUIRK_IGNORE_INTERFACE 1216 }, 1217 { 1218 .ifnum = 4, 1219 .type = QUIRK_AUDIO_STANDARD_INTERFACE 1220 }, 1221 { 1222 .ifnum = 5, 1223 .type = QUIRK_AUDIO_STANDARD_INTERFACE 1224 }, 1225 { 1226 .ifnum = 6, 1227 .type = QUIRK_IGNORE_INTERFACE 1228 }, 1229 { 1230 .ifnum = 7, 1231 .type = QUIRK_AUDIO_STANDARD_INTERFACE 1232 }, 1233 { 1234 .ifnum = 8, 1235 .type = QUIRK_AUDIO_STANDARD_INTERFACE 1236 }, 1237 { 1238 .ifnum = 9, 1239 .type = QUIRK_MIDI_MIDIMAN, 1240 .data = & (const snd_usb_midi_endpoint_info_t) { 1241 .out_cables = 0x0001, 1242 .in_cables = 0x0001 1243 } 1244 }, 1245 { 1246 .ifnum = -1 1247 } 1248 } 1249 } 1250}, 1251{ 1252 USB_DEVICE_VENDOR_SPEC(0x0763, 0x2003), 1253 .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) { 1254 .vendor_name = "M-Audio", 1255 .product_name = "AudioPhile", 1256 .ifnum = 6, 1257 .type = QUIRK_MIDI_MIDIMAN, 1258 .data = & (const snd_usb_midi_endpoint_info_t) { 1259 .out_cables = 0x0001, 1260 .in_cables = 0x0001 1261 } 1262 } 1263}, 1264{ 1265 USB_DEVICE_VENDOR_SPEC(0x0763, 0x2008), 1266 .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) { 1267 .vendor_name = "M-Audio", 1268 .product_name = "Ozone", 1269 .ifnum = 3, 1270 .type = QUIRK_MIDI_MIDIMAN, 1271 .data = & (const snd_usb_midi_endpoint_info_t) { 1272 .out_cables = 0x0001, 1273 .in_cables = 0x0001 1274 } 1275 } 1276}, 1277{ 1278 USB_DEVICE_VENDOR_SPEC(0x0763, 0x200d), 1279 .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) { 1280 .vendor_name = "M-Audio", 1281 .product_name = "OmniStudio", 1282 .ifnum = QUIRK_ANY_INTERFACE, 1283 .type = QUIRK_COMPOSITE, 1284 .data = & (const snd_usb_audio_quirk_t[]) { 1285 { 1286 .ifnum = 0, 1287 .type = QUIRK_IGNORE_INTERFACE 1288 }, 1289 { 1290 .ifnum = 1, 1291 .type = QUIRK_IGNORE_INTERFACE 1292 }, 1293 { 1294 .ifnum = 2, 1295 .type = QUIRK_IGNORE_INTERFACE 1296 }, 1297 { 1298 .ifnum = 3, 1299 .type = QUIRK_IGNORE_INTERFACE 1300 }, 1301 { 1302 .ifnum = 4, 1303 .type = QUIRK_AUDIO_STANDARD_INTERFACE 1304 }, 1305 { 1306 .ifnum = 5, 1307 .type = QUIRK_AUDIO_STANDARD_INTERFACE 1308 }, 1309 { 1310 .ifnum = 6, 1311 .type = QUIRK_IGNORE_INTERFACE 1312 }, 1313 { 1314 .ifnum = 7, 1315 .type = QUIRK_AUDIO_STANDARD_INTERFACE 1316 }, 1317 { 1318 .ifnum = 8, 1319 .type = QUIRK_AUDIO_STANDARD_INTERFACE 1320 }, 1321 { 1322 .ifnum = 9, 1323 .type = QUIRK_MIDI_MIDIMAN, 1324 .data = & (const snd_usb_midi_endpoint_info_t) { 1325 .out_cables = 0x0001, 1326 .in_cables = 0x0001 1327 } 1328 }, 1329 { 1330 .ifnum = -1 1331 } 1332 } 1333 } 1334}, 1335 1336/* Mark of the Unicorn devices */ 1337{ 1338 /* thanks to Robert A. Lerche <ral 'at' msbit.com> */ 1339 .match_flags = USB_DEVICE_ID_MATCH_VENDOR | 1340 USB_DEVICE_ID_MATCH_PRODUCT | 1341 USB_DEVICE_ID_MATCH_DEV_SUBCLASS, 1342 .idVendor = 0x07fd, 1343 .idProduct = 0x0001, 1344 .bDeviceSubClass = 2, 1345 .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) { 1346 .vendor_name = "MOTU", 1347 .product_name = "Fastlane", 1348 .ifnum = QUIRK_ANY_INTERFACE, 1349 .type = QUIRK_COMPOSITE, 1350 .data = & (const snd_usb_audio_quirk_t[]) { 1351 { 1352 .ifnum = 0, 1353 .type = QUIRK_MIDI_RAW 1354 }, 1355 { 1356 .ifnum = 1, 1357 .type = QUIRK_IGNORE_INTERFACE 1358 }, 1359 { 1360 .ifnum = -1 1361 } 1362 } 1363 } 1364}, 1365 1366{ 1367 /* Creative Sound Blaster MP3+ */ 1368 USB_DEVICE(0x041e, 0x3010), 1369 .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) { 1370 .vendor_name = "Creative Labs", 1371 .product_name = "Sound Blaster MP3+", 1372 .ifnum = QUIRK_NO_INTERFACE 1373 } 1374 1375}, 1376 1377/* Emagic devices */ 1378{ 1379 USB_DEVICE(0x086a, 0x0001), 1380 .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) { 1381 .vendor_name = "Emagic", 1382 /* .product_name = "Unitor8", */ 1383 .ifnum = 2, 1384 .type = QUIRK_MIDI_EMAGIC, 1385 .data = & (const snd_usb_midi_endpoint_info_t) { 1386 .out_cables = 0x80ff, 1387 .in_cables = 0x80ff 1388 } 1389 } 1390}, 1391{ 1392 USB_DEVICE(0x086a, 0x0002), 1393 .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) { 1394 .vendor_name = "Emagic", 1395 /* .product_name = "AMT8", */ 1396 .ifnum = 2, 1397 .type = QUIRK_MIDI_EMAGIC, 1398 .data = & (const snd_usb_midi_endpoint_info_t) { 1399 .out_cables = 0x80ff, 1400 .in_cables = 0x80ff 1401 } 1402 } 1403}, 1404{ 1405 USB_DEVICE(0x086a, 0x0003), 1406 .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) { 1407 .vendor_name = "Emagic", 1408 /* .product_name = "MT4", */ 1409 .ifnum = 2, 1410 .type = QUIRK_MIDI_EMAGIC, 1411 .data = & (const snd_usb_midi_endpoint_info_t) { 1412 .out_cables = 0x800f, 1413 .in_cables = 0x8003 1414 } 1415 } 1416}, 1417 1418/* TerraTec devices */ 1419{ 1420 USB_DEVICE_VENDOR_SPEC(0x0ccd, 0x0012), 1421 .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) { 1422 .vendor_name = "TerraTec", 1423 .product_name = "PHASE 26", 1424 .ifnum = 3, 1425 .type = QUIRK_MIDI_STANDARD_INTERFACE 1426 } 1427}, 1428{ 1429 USB_DEVICE_VENDOR_SPEC(0x0ccd, 0x0013), 1430 .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) { 1431 .vendor_name = "TerraTec", 1432 .product_name = "PHASE 26", 1433 .ifnum = 3, 1434 .type = QUIRK_MIDI_STANDARD_INTERFACE 1435 } 1436}, 1437 1438/* Novation EMS devices */ 1439{ 1440 USB_DEVICE_VENDOR_SPEC(0x1235, 0x0001), 1441 .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) { 1442 .vendor_name = "Novation", 1443 .product_name = "ReMOTE Audio/XStation", 1444 .ifnum = 4, 1445 .type = QUIRK_MIDI_NOVATION 1446 } 1447}, 1448{ 1449 USB_DEVICE_VENDOR_SPEC(0x1235, 0x0002), 1450 .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) { 1451 .vendor_name = "Novation", 1452 .product_name = "Speedio", 1453 .ifnum = 3, 1454 .type = QUIRK_MIDI_NOVATION 1455 } 1456}, 1457{ 1458 USB_DEVICE_VENDOR_SPEC(0x1235, 0x4661), 1459 .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) { 1460 .vendor_name = "Novation", 1461 .product_name = "ReMOTE25", 1462 .ifnum = 0, 1463 .type = QUIRK_MIDI_NOVATION 1464 } 1465}, 1466 1467{ 1468 USB_DEVICE(0x4752, 0x0011), 1469 .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) { 1470 .vendor_name = "Miditech", 1471 .product_name = "Midistart-2", 1472 .ifnum = 0, 1473 .type = QUIRK_MIDI_MIDITECH 1474 } 1475}, 1476{ 1477 USB_DEVICE(0x7104, 0x2202), 1478 .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) { 1479 .vendor_name = "Miditech", 1480 .product_name = "MidiStudio-2", 1481 .ifnum = 0, 1482 .type = QUIRK_MIDI_MIDITECH 1483 } 1484}, 1485 1486{ 1487 /* 1488 * Some USB MIDI devices don't have an audio control interface, 1489 * so we have to grab MIDI streaming interfaces here. 1490 */ 1491 .match_flags = USB_DEVICE_ID_MATCH_INT_CLASS | 1492 USB_DEVICE_ID_MATCH_INT_SUBCLASS, 1493 .bInterfaceClass = USB_CLASS_AUDIO, 1494 .bInterfaceSubClass = USB_SUBCLASS_MIDI_STREAMING, 1495 .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) { 1496 .ifnum = QUIRK_ANY_INTERFACE, 1497 .type = QUIRK_MIDI_STANDARD_INTERFACE 1498 } 1499}, 1500 1501#undef USB_DEVICE_VENDOR_SPEC