Linux Audio

Check our new training course

Loading...
v3.1
   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/* Creative/Toshiba Multimedia Center SB-0500 */
  43{
  44	USB_DEVICE(0x041e, 0x3048),
  45	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
  46		.vendor_name = "Toshiba",
  47		.product_name = "SB-0500",
  48		.ifnum = QUIRK_NO_INTERFACE
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
  49	}
  50},
  51
  52/* Creative/E-Mu devices */
  53{
  54	USB_DEVICE(0x041e, 0x3010),
  55	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
  56		.vendor_name = "Creative Labs",
  57		.product_name = "Sound Blaster MP3+",
  58		.ifnum = QUIRK_NO_INTERFACE
  59	}
  60},
 
 
 
 
 
 
 
 
 
  61{
  62	/* E-Mu 0202 USB */
  63	.match_flags = USB_DEVICE_ID_MATCH_DEVICE,
  64	.idVendor = 0x041e,
  65	.idProduct = 0x3f02,
  66	.bInterfaceClass = USB_CLASS_AUDIO,
  67},
  68{
  69	/* E-Mu 0404 USB */
  70	.match_flags = USB_DEVICE_ID_MATCH_DEVICE,
  71	.idVendor = 0x041e,
  72	.idProduct = 0x3f04,
  73	.bInterfaceClass = USB_CLASS_AUDIO,
  74},
  75{
  76	/* E-Mu Tracker Pre */
  77	.match_flags = USB_DEVICE_ID_MATCH_DEVICE,
  78	.idVendor = 0x041e,
  79	.idProduct = 0x3f0a,
  80	.bInterfaceClass = USB_CLASS_AUDIO,
  81},
  82{
  83	/* E-Mu 0204 USB */
  84	.match_flags = USB_DEVICE_ID_MATCH_DEVICE,
  85	.idVendor = 0x041e,
  86	.idProduct = 0x3f19,
  87	.bInterfaceClass = USB_CLASS_AUDIO,
  88},
  89
  90/*
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
  91 * Logitech QuickCam: bDeviceClass is vendor-specific, so generic interface
  92 * class matches do not take effect without an explicit ID match.
  93 */
  94{
  95	.match_flags = USB_DEVICE_ID_MATCH_DEVICE |
  96		       USB_DEVICE_ID_MATCH_INT_CLASS |
  97		       USB_DEVICE_ID_MATCH_INT_SUBCLASS,
  98	.idVendor = 0x046d,
  99	.idProduct = 0x0850,
 100	.bInterfaceClass = USB_CLASS_AUDIO,
 101	.bInterfaceSubClass = USB_SUBCLASS_AUDIOCONTROL
 102},
 103{
 104	.match_flags = USB_DEVICE_ID_MATCH_DEVICE |
 105		       USB_DEVICE_ID_MATCH_INT_CLASS |
 106		       USB_DEVICE_ID_MATCH_INT_SUBCLASS,
 107	.idVendor = 0x046d,
 108	.idProduct = 0x08ae,
 109	.bInterfaceClass = USB_CLASS_AUDIO,
 110	.bInterfaceSubClass = USB_SUBCLASS_AUDIOCONTROL
 111},
 112{
 113	.match_flags = USB_DEVICE_ID_MATCH_DEVICE |
 114		       USB_DEVICE_ID_MATCH_INT_CLASS |
 115		       USB_DEVICE_ID_MATCH_INT_SUBCLASS,
 116	.idVendor = 0x046d,
 117	.idProduct = 0x08c6,
 118	.bInterfaceClass = USB_CLASS_AUDIO,
 119	.bInterfaceSubClass = USB_SUBCLASS_AUDIOCONTROL
 120},
 121{
 122	.match_flags = USB_DEVICE_ID_MATCH_DEVICE |
 123		       USB_DEVICE_ID_MATCH_INT_CLASS |
 124		       USB_DEVICE_ID_MATCH_INT_SUBCLASS,
 125	.idVendor = 0x046d,
 126	.idProduct = 0x08f0,
 127	.bInterfaceClass = USB_CLASS_AUDIO,
 128	.bInterfaceSubClass = USB_SUBCLASS_AUDIOCONTROL
 129},
 130{
 131	.match_flags = USB_DEVICE_ID_MATCH_DEVICE |
 132		       USB_DEVICE_ID_MATCH_INT_CLASS |
 133		       USB_DEVICE_ID_MATCH_INT_SUBCLASS,
 134	.idVendor = 0x046d,
 135	.idProduct = 0x08f5,
 136	.bInterfaceClass = USB_CLASS_AUDIO,
 137	.bInterfaceSubClass = USB_SUBCLASS_AUDIOCONTROL
 138},
 139{
 140	.match_flags = USB_DEVICE_ID_MATCH_DEVICE |
 141		       USB_DEVICE_ID_MATCH_INT_CLASS |
 142		       USB_DEVICE_ID_MATCH_INT_SUBCLASS,
 143	.idVendor = 0x046d,
 144	.idProduct = 0x08f6,
 145	.bInterfaceClass = USB_CLASS_AUDIO,
 146	.bInterfaceSubClass = USB_SUBCLASS_AUDIOCONTROL
 147},
 148{
 149	USB_DEVICE(0x046d, 0x0990),
 
 
 
 
 
 
 150	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
 151		.vendor_name = "Logitech, Inc.",
 152		.product_name = "QuickCam Pro 9000",
 153		.ifnum = QUIRK_NO_INTERFACE
 154	}
 155},
 156
 157/*
 158 * Yamaha devices
 159 */
 160
 161#define YAMAHA_DEVICE(id, name) { \
 162	USB_DEVICE(0x0499, id), \
 163	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { \
 164		.vendor_name = "Yamaha", \
 165		.product_name = name, \
 166		.ifnum = QUIRK_ANY_INTERFACE, \
 167		.type = QUIRK_MIDI_YAMAHA \
 168	} \
 169}
 170#define YAMAHA_INTERFACE(id, intf, name) { \
 171	USB_DEVICE_VENDOR_SPEC(0x0499, id), \
 172	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { \
 173		.vendor_name = "Yamaha", \
 174		.product_name = name, \
 175		.ifnum = intf, \
 176		.type = QUIRK_MIDI_YAMAHA \
 177	} \
 178}
 179YAMAHA_DEVICE(0x1000, "UX256"),
 180YAMAHA_DEVICE(0x1001, "MU1000"),
 181YAMAHA_DEVICE(0x1002, "MU2000"),
 182YAMAHA_DEVICE(0x1003, "MU500"),
 183YAMAHA_INTERFACE(0x1004, 3, "UW500"),
 184YAMAHA_DEVICE(0x1005, "MOTIF6"),
 185YAMAHA_DEVICE(0x1006, "MOTIF7"),
 186YAMAHA_DEVICE(0x1007, "MOTIF8"),
 187YAMAHA_DEVICE(0x1008, "UX96"),
 188YAMAHA_DEVICE(0x1009, "UX16"),
 189YAMAHA_INTERFACE(0x100a, 3, "EOS BX"),
 190YAMAHA_DEVICE(0x100c, "UC-MX"),
 191YAMAHA_DEVICE(0x100d, "UC-KX"),
 192YAMAHA_DEVICE(0x100e, "S08"),
 193YAMAHA_DEVICE(0x100f, "CLP-150"),
 194YAMAHA_DEVICE(0x1010, "CLP-170"),
 195YAMAHA_DEVICE(0x1011, "P-250"),
 196YAMAHA_DEVICE(0x1012, "TYROS"),
 197YAMAHA_DEVICE(0x1013, "PF-500"),
 198YAMAHA_DEVICE(0x1014, "S90"),
 199YAMAHA_DEVICE(0x1015, "MOTIF-R"),
 200YAMAHA_DEVICE(0x1016, "MDP-5"),
 201YAMAHA_DEVICE(0x1017, "CVP-204"),
 202YAMAHA_DEVICE(0x1018, "CVP-206"),
 203YAMAHA_DEVICE(0x1019, "CVP-208"),
 204YAMAHA_DEVICE(0x101a, "CVP-210"),
 205YAMAHA_DEVICE(0x101b, "PSR-1100"),
 206YAMAHA_DEVICE(0x101c, "PSR-2100"),
 207YAMAHA_DEVICE(0x101d, "CLP-175"),
 208YAMAHA_DEVICE(0x101e, "PSR-K1"),
 209YAMAHA_DEVICE(0x101f, "EZ-J24"),
 210YAMAHA_DEVICE(0x1020, "EZ-250i"),
 211YAMAHA_DEVICE(0x1021, "MOTIF ES 6"),
 212YAMAHA_DEVICE(0x1022, "MOTIF ES 7"),
 213YAMAHA_DEVICE(0x1023, "MOTIF ES 8"),
 214YAMAHA_DEVICE(0x1024, "CVP-301"),
 215YAMAHA_DEVICE(0x1025, "CVP-303"),
 216YAMAHA_DEVICE(0x1026, "CVP-305"),
 217YAMAHA_DEVICE(0x1027, "CVP-307"),
 218YAMAHA_DEVICE(0x1028, "CVP-309"),
 219YAMAHA_DEVICE(0x1029, "CVP-309GP"),
 220YAMAHA_DEVICE(0x102a, "PSR-1500"),
 221YAMAHA_DEVICE(0x102b, "PSR-3000"),
 222YAMAHA_DEVICE(0x102e, "ELS-01/01C"),
 223YAMAHA_DEVICE(0x1030, "PSR-295/293"),
 224YAMAHA_DEVICE(0x1031, "DGX-205/203"),
 225YAMAHA_DEVICE(0x1032, "DGX-305"),
 226YAMAHA_DEVICE(0x1033, "DGX-505"),
 227YAMAHA_DEVICE(0x1034, NULL),
 228YAMAHA_DEVICE(0x1035, NULL),
 229YAMAHA_DEVICE(0x1036, NULL),
 230YAMAHA_DEVICE(0x1037, NULL),
 231YAMAHA_DEVICE(0x1038, NULL),
 232YAMAHA_DEVICE(0x1039, NULL),
 233YAMAHA_DEVICE(0x103a, NULL),
 234YAMAHA_DEVICE(0x103b, NULL),
 235YAMAHA_DEVICE(0x103c, NULL),
 236YAMAHA_DEVICE(0x103d, NULL),
 237YAMAHA_DEVICE(0x103e, NULL),
 238YAMAHA_DEVICE(0x103f, NULL),
 239YAMAHA_DEVICE(0x1040, NULL),
 240YAMAHA_DEVICE(0x1041, NULL),
 241YAMAHA_DEVICE(0x1042, NULL),
 242YAMAHA_DEVICE(0x1043, NULL),
 243YAMAHA_DEVICE(0x1044, NULL),
 244YAMAHA_DEVICE(0x1045, NULL),
 245YAMAHA_INTERFACE(0x104e, 0, NULL),
 246YAMAHA_DEVICE(0x104f, NULL),
 247YAMAHA_DEVICE(0x1050, NULL),
 248YAMAHA_DEVICE(0x1051, NULL),
 249YAMAHA_DEVICE(0x1052, NULL),
 250YAMAHA_INTERFACE(0x1053, 0, NULL),
 251YAMAHA_INTERFACE(0x1054, 0, NULL),
 252YAMAHA_DEVICE(0x1055, NULL),
 253YAMAHA_DEVICE(0x1056, NULL),
 254YAMAHA_DEVICE(0x1057, NULL),
 255YAMAHA_DEVICE(0x1058, NULL),
 256YAMAHA_DEVICE(0x1059, NULL),
 257YAMAHA_DEVICE(0x105a, NULL),
 258YAMAHA_DEVICE(0x105b, NULL),
 259YAMAHA_DEVICE(0x105c, NULL),
 260YAMAHA_DEVICE(0x105d, NULL),
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 261YAMAHA_DEVICE(0x2000, "DGP-7"),
 262YAMAHA_DEVICE(0x2001, "DGP-5"),
 263YAMAHA_DEVICE(0x2002, NULL),
 264YAMAHA_DEVICE(0x2003, NULL),
 265YAMAHA_DEVICE(0x5000, "CS1D"),
 266YAMAHA_DEVICE(0x5001, "DSP1D"),
 267YAMAHA_DEVICE(0x5002, "DME32"),
 268YAMAHA_DEVICE(0x5003, "DM2000"),
 269YAMAHA_DEVICE(0x5004, "02R96"),
 270YAMAHA_DEVICE(0x5005, "ACU16-C"),
 271YAMAHA_DEVICE(0x5006, "NHB32-C"),
 272YAMAHA_DEVICE(0x5007, "DM1000"),
 273YAMAHA_DEVICE(0x5008, "01V96"),
 274YAMAHA_DEVICE(0x5009, "SPX2000"),
 275YAMAHA_DEVICE(0x500a, "PM5D"),
 276YAMAHA_DEVICE(0x500b, "DME64N"),
 277YAMAHA_DEVICE(0x500c, "DME24N"),
 278YAMAHA_DEVICE(0x500d, NULL),
 279YAMAHA_DEVICE(0x500e, NULL),
 280YAMAHA_DEVICE(0x500f, NULL),
 281YAMAHA_DEVICE(0x7000, "DTX"),
 282YAMAHA_DEVICE(0x7010, "UB99"),
 283#undef YAMAHA_DEVICE
 284#undef YAMAHA_INTERFACE
 
 
 
 
 
 
 
 
 
 
 
 285
 286/*
 287 * Roland/RolandED/Edirol/BOSS devices
 288 */
 289{
 290	USB_DEVICE(0x0582, 0x0000),
 291	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
 292		.vendor_name = "Roland",
 293		.product_name = "UA-100",
 294		.ifnum = QUIRK_ANY_INTERFACE,
 295		.type = QUIRK_COMPOSITE,
 296		.data = (const struct snd_usb_audio_quirk[]) {
 297			{
 298				.ifnum = 0,
 299				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
 300				.data = & (const struct audioformat) {
 301					.formats = SNDRV_PCM_FMTBIT_S16_LE,
 302					.channels = 4,
 303					.iface = 0,
 304					.altsetting = 1,
 305					.altset_idx = 1,
 306					.attributes = 0,
 307					.endpoint = 0x01,
 308					.ep_attr = 0x09,
 309					.rates = SNDRV_PCM_RATE_CONTINUOUS,
 310					.rate_min = 44100,
 311					.rate_max = 44100,
 312				}
 313			},
 314			{
 315				.ifnum = 1,
 316				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
 317				.data = & (const struct audioformat) {
 318					.formats = SNDRV_PCM_FMTBIT_S16_LE,
 319					.channels = 2,
 320					.iface = 1,
 321					.altsetting = 1,
 322					.altset_idx = 1,
 323					.attributes = UAC_EP_CS_ATTR_FILL_MAX,
 324					.endpoint = 0x81,
 325					.ep_attr = 0x05,
 326					.rates = SNDRV_PCM_RATE_CONTINUOUS,
 327					.rate_min = 44100,
 328					.rate_max = 44100,
 329				}
 330			},
 331			{
 332				.ifnum = 2,
 333				.type = QUIRK_MIDI_FIXED_ENDPOINT,
 334				.data = & (const struct snd_usb_midi_endpoint_info) {
 335					.out_cables = 0x0007,
 336					.in_cables  = 0x0007
 337				}
 338			},
 339			{
 340				.ifnum = -1
 341			}
 342		}
 343	}
 344},
 345{
 346	USB_DEVICE(0x0582, 0x0002),
 347	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
 348		.vendor_name = "EDIROL",
 349		.product_name = "UM-4",
 350		.ifnum = QUIRK_ANY_INTERFACE,
 351		.type = QUIRK_COMPOSITE,
 352		.data = (const struct snd_usb_audio_quirk[]) {
 353			{
 354				.ifnum = 0,
 355				.type = QUIRK_IGNORE_INTERFACE
 356			},
 357			{
 358				.ifnum = 1,
 359				.type = QUIRK_IGNORE_INTERFACE
 360			},
 361			{
 362				.ifnum = 2,
 363				.type = QUIRK_MIDI_FIXED_ENDPOINT,
 364				.data = & (const struct snd_usb_midi_endpoint_info) {
 365					.out_cables = 0x000f,
 366					.in_cables  = 0x000f
 367				}
 368			},
 369			{
 370				.ifnum = -1
 371			}
 372		}
 373	}
 374},
 375{
 376	USB_DEVICE(0x0582, 0x0003),
 377	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
 378		.vendor_name = "Roland",
 379		.product_name = "SC-8850",
 380		.ifnum = QUIRK_ANY_INTERFACE,
 381		.type = QUIRK_COMPOSITE,
 382		.data = (const struct snd_usb_audio_quirk[]) {
 383			{
 384				.ifnum = 0,
 385				.type = QUIRK_IGNORE_INTERFACE
 386			},
 387			{
 388				.ifnum = 1,
 389				.type = QUIRK_IGNORE_INTERFACE
 390			},
 391			{
 392				.ifnum = 2,
 393				.type = QUIRK_MIDI_FIXED_ENDPOINT,
 394				.data = & (const struct snd_usb_midi_endpoint_info) {
 395					.out_cables = 0x003f,
 396					.in_cables  = 0x003f
 397				}
 398			},
 399			{
 400				.ifnum = -1
 401			}
 402		}
 403	}
 404},
 405{
 406	USB_DEVICE(0x0582, 0x0004),
 407	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
 408		.vendor_name = "Roland",
 409		.product_name = "U-8",
 410		.ifnum = QUIRK_ANY_INTERFACE,
 411		.type = QUIRK_COMPOSITE,
 412		.data = (const struct snd_usb_audio_quirk[]) {
 413			{
 414				.ifnum = 0,
 415				.type = QUIRK_IGNORE_INTERFACE
 416			},
 417			{
 418				.ifnum = 1,
 419				.type = QUIRK_IGNORE_INTERFACE
 420			},
 421			{
 422				.ifnum = 2,
 423				.type = QUIRK_MIDI_FIXED_ENDPOINT,
 424				.data = & (const struct snd_usb_midi_endpoint_info) {
 425					.out_cables = 0x0005,
 426					.in_cables  = 0x0005
 427				}
 428			},
 429			{
 430				.ifnum = -1
 431			}
 432		}
 433	}
 434},
 435{
 436	/* Has ID 0x0099 when not in "Advanced Driver" mode.
 437	 * The UM-2EX has only one input, but we cannot detect this. */
 438	USB_DEVICE(0x0582, 0x0005),
 439	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
 440		.vendor_name = "EDIROL",
 441		.product_name = "UM-2",
 442		.ifnum = QUIRK_ANY_INTERFACE,
 443		.type = QUIRK_COMPOSITE,
 444		.data = (const struct snd_usb_audio_quirk[]) {
 445			{
 446				.ifnum = 0,
 447				.type = QUIRK_IGNORE_INTERFACE
 448			},
 449			{
 450				.ifnum = 1,
 451				.type = QUIRK_IGNORE_INTERFACE
 452			},
 453			{
 454				.ifnum = 2,
 455				.type = QUIRK_MIDI_FIXED_ENDPOINT,
 456				.data = & (const struct snd_usb_midi_endpoint_info) {
 457					.out_cables = 0x0003,
 458					.in_cables  = 0x0003
 459				}
 460			},
 461			{
 462				.ifnum = -1
 463			}
 464		}
 465	}
 466},
 467{
 468	USB_DEVICE(0x0582, 0x0007),
 469	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
 470		.vendor_name = "Roland",
 471		.product_name = "SC-8820",
 472		.ifnum = QUIRK_ANY_INTERFACE,
 473		.type = QUIRK_COMPOSITE,
 474		.data = (const struct snd_usb_audio_quirk[]) {
 475			{
 476				.ifnum = 0,
 477				.type = QUIRK_IGNORE_INTERFACE
 478			},
 479			{
 480				.ifnum = 1,
 481				.type = QUIRK_IGNORE_INTERFACE
 482			},
 483			{
 484				.ifnum = 2,
 485				.type = QUIRK_MIDI_FIXED_ENDPOINT,
 486				.data = & (const struct snd_usb_midi_endpoint_info) {
 487					.out_cables = 0x0013,
 488					.in_cables  = 0x0013
 489				}
 490			},
 491			{
 492				.ifnum = -1
 493			}
 494		}
 495	}
 496},
 497{
 498	USB_DEVICE(0x0582, 0x0008),
 499	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
 500		.vendor_name = "Roland",
 501		.product_name = "PC-300",
 502		.ifnum = QUIRK_ANY_INTERFACE,
 503		.type = QUIRK_COMPOSITE,
 504		.data = (const struct snd_usb_audio_quirk[]) {
 505			{
 506				.ifnum = 0,
 507				.type = QUIRK_IGNORE_INTERFACE
 508			},
 509			{
 510				.ifnum = 1,
 511				.type = QUIRK_IGNORE_INTERFACE
 512			},
 513			{
 514				.ifnum = 2,
 515				.type = QUIRK_MIDI_FIXED_ENDPOINT,
 516				.data = & (const struct snd_usb_midi_endpoint_info) {
 517					.out_cables = 0x0001,
 518					.in_cables  = 0x0001
 519				}
 520			},
 521			{
 522				.ifnum = -1
 523			}
 524		}
 525	}
 526},
 527{
 528	/* has ID 0x009d when not in "Advanced Driver" mode */
 529	USB_DEVICE(0x0582, 0x0009),
 530	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
 531		.vendor_name = "EDIROL",
 532		.product_name = "UM-1",
 533		.ifnum = QUIRK_ANY_INTERFACE,
 534		.type = QUIRK_COMPOSITE,
 535		.data = (const struct snd_usb_audio_quirk[]) {
 536			{
 537				.ifnum = 0,
 538				.type = QUIRK_IGNORE_INTERFACE
 539			},
 540			{
 541				.ifnum = 1,
 542				.type = QUIRK_IGNORE_INTERFACE
 543			},
 544			{
 545				.ifnum = 2,
 546				.type = QUIRK_MIDI_FIXED_ENDPOINT,
 547				.data = & (const struct snd_usb_midi_endpoint_info) {
 548					.out_cables = 0x0001,
 549					.in_cables  = 0x0001
 550				}
 551			},
 552			{
 553				.ifnum = -1
 554			}
 555		}
 556	}
 557},
 558{
 559	USB_DEVICE(0x0582, 0x000b),
 560	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
 561		.vendor_name = "Roland",
 562		.product_name = "SK-500",
 563		.ifnum = QUIRK_ANY_INTERFACE,
 564		.type = QUIRK_COMPOSITE,
 565		.data = (const struct snd_usb_audio_quirk[]) {
 566			{
 567				.ifnum = 0,
 568				.type = QUIRK_IGNORE_INTERFACE
 569			},
 570			{
 571				.ifnum = 1,
 572				.type = QUIRK_IGNORE_INTERFACE
 573			},
 574			{
 575				.ifnum = 2,
 576				.type = QUIRK_MIDI_FIXED_ENDPOINT,
 577				.data = & (const struct snd_usb_midi_endpoint_info) {
 578					.out_cables = 0x0013,
 579					.in_cables  = 0x0013
 580				}
 581			},
 582			{
 583				.ifnum = -1
 584			}
 585		}
 586	}
 587},
 588{
 589	/* thanks to Emiliano Grilli <emillo@libero.it>
 590	 * for helping researching this data */
 591	USB_DEVICE(0x0582, 0x000c),
 592	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
 593		.vendor_name = "Roland",
 594		.product_name = "SC-D70",
 595		.ifnum = QUIRK_ANY_INTERFACE,
 596		.type = QUIRK_COMPOSITE,
 597		.data = (const struct snd_usb_audio_quirk[]) {
 598			{
 599				.ifnum = 0,
 600				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
 601				.data = & (const struct audioformat) {
 602					.formats = SNDRV_PCM_FMTBIT_S24_3LE,
 603					.channels = 2,
 604					.iface = 0,
 605					.altsetting = 1,
 606					.altset_idx = 1,
 607					.attributes = 0,
 608					.endpoint = 0x01,
 609					.ep_attr = 0x01,
 610					.rates = SNDRV_PCM_RATE_CONTINUOUS,
 611					.rate_min = 44100,
 612					.rate_max = 44100,
 613				}
 614			},
 615			{
 616				.ifnum = 1,
 617				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
 618				.data = & (const struct audioformat) {
 619					.formats = SNDRV_PCM_FMTBIT_S24_3LE,
 620					.channels = 2,
 621					.iface = 1,
 622					.altsetting = 1,
 623					.altset_idx = 1,
 624					.attributes = 0,
 625					.endpoint = 0x81,
 626					.ep_attr = 0x01,
 627					.rates = SNDRV_PCM_RATE_CONTINUOUS,
 628					.rate_min = 44100,
 629					.rate_max = 44100,
 630				}
 631			},
 632			{
 633				.ifnum = 2,
 634				.type = QUIRK_MIDI_FIXED_ENDPOINT,
 635				.data = & (const struct snd_usb_midi_endpoint_info) {
 636					.out_cables = 0x0007,
 637					.in_cables  = 0x0007
 638				}
 639			},
 640			{
 641				.ifnum = -1
 642			}
 643		}
 644	}
 645},
 646{	/*
 647	 * This quirk is for the "Advanced Driver" mode of the Edirol UA-5.
 648	 * If the advanced mode switch at the back of the unit is off, the
 649	 * UA-5 has ID 0x0582/0x0011 and is standard compliant (no quirks),
 650	 * but offers only 16-bit PCM.
 651	 * In advanced mode, the UA-5 will output S24_3LE samples (two
 652	 * channels) at the rate indicated on the front switch, including
 653	 * the 96kHz sample rate.
 654	 */
 655	USB_DEVICE(0x0582, 0x0010),
 656	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
 657		.vendor_name = "EDIROL",
 658		.product_name = "UA-5",
 659		.ifnum = QUIRK_ANY_INTERFACE,
 660		.type = QUIRK_COMPOSITE,
 661		.data = (const struct snd_usb_audio_quirk[]) {
 662			{
 663				.ifnum = 1,
 664				.type = QUIRK_AUDIO_STANDARD_INTERFACE
 665			},
 666			{
 667				.ifnum = 2,
 668				.type = QUIRK_AUDIO_STANDARD_INTERFACE
 669			},
 670			{
 671				.ifnum = -1
 672			}
 673		}
 674	}
 675},
 676{
 677	/* has ID 0x0013 when not in "Advanced Driver" mode */
 678	USB_DEVICE(0x0582, 0x0012),
 679	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
 680		.vendor_name = "Roland",
 681		.product_name = "XV-5050",
 682		.ifnum = 0,
 683		.type = QUIRK_MIDI_FIXED_ENDPOINT,
 684		.data = & (const struct snd_usb_midi_endpoint_info) {
 685			.out_cables = 0x0001,
 686			.in_cables  = 0x0001
 687		}
 688	}
 689},
 690{
 691	/* has ID 0x0015 when not in "Advanced Driver" mode */
 692	USB_DEVICE(0x0582, 0x0014),
 693	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
 694		.vendor_name = "EDIROL",
 695		.product_name = "UM-880",
 696		.ifnum = 0,
 697		.type = QUIRK_MIDI_FIXED_ENDPOINT,
 698		.data = & (const struct snd_usb_midi_endpoint_info) {
 699			.out_cables = 0x01ff,
 700			.in_cables  = 0x01ff
 701		}
 702	}
 703},
 704{
 705	/* has ID 0x0017 when not in "Advanced Driver" mode */
 706	USB_DEVICE(0x0582, 0x0016),
 707	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
 708		.vendor_name = "EDIROL",
 709		.product_name = "SD-90",
 710		.ifnum = QUIRK_ANY_INTERFACE,
 711		.type = QUIRK_COMPOSITE,
 712		.data = (const struct snd_usb_audio_quirk[]) {
 713			{
 714				.ifnum = 0,
 715				.type = QUIRK_AUDIO_STANDARD_INTERFACE
 716			},
 717			{
 718				.ifnum = 1,
 719				.type = QUIRK_AUDIO_STANDARD_INTERFACE
 720			},
 721			{
 722				.ifnum = 2,
 723				.type = QUIRK_MIDI_FIXED_ENDPOINT,
 724				.data = & (const struct snd_usb_midi_endpoint_info) {
 725					.out_cables = 0x000f,
 726					.in_cables  = 0x000f
 727				}
 728			},
 729			{
 730				.ifnum = -1
 731			}
 732		}
 733	}
 734},
 735{
 736	/* has ID 0x001c when not in "Advanced Driver" mode */
 737	USB_DEVICE(0x0582, 0x001b),
 738	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
 739		.vendor_name = "Roland",
 740		.product_name = "MMP-2",
 741		.ifnum = QUIRK_ANY_INTERFACE,
 742		.type = QUIRK_COMPOSITE,
 743		.data = (const struct snd_usb_audio_quirk[]) {
 744			{
 745				.ifnum = 0,
 746				.type = QUIRK_IGNORE_INTERFACE
 747			},
 748			{
 749				.ifnum = 1,
 750				.type = QUIRK_IGNORE_INTERFACE
 751			},
 752			{
 753				.ifnum = 2,
 754				.type = QUIRK_MIDI_FIXED_ENDPOINT,
 755				.data = & (const struct snd_usb_midi_endpoint_info) {
 756					.out_cables = 0x0001,
 757					.in_cables  = 0x0001
 758				}
 759			},
 760			{
 761				.ifnum = -1
 762			}
 763		}
 764	}
 765},
 766{
 767	/* has ID 0x001e when not in "Advanced Driver" mode */
 768	USB_DEVICE(0x0582, 0x001d),
 769	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
 770		.vendor_name = "Roland",
 771		.product_name = "V-SYNTH",
 772		.ifnum = 0,
 773		.type = QUIRK_MIDI_FIXED_ENDPOINT,
 774		.data = & (const struct snd_usb_midi_endpoint_info) {
 775			.out_cables = 0x0001,
 776			.in_cables  = 0x0001
 777		}
 778	}
 779},
 780{
 781	/* has ID 0x0024 when not in "Advanced Driver" mode */
 782	USB_DEVICE(0x0582, 0x0023),
 783	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
 784		.vendor_name = "EDIROL",
 785		.product_name = "UM-550",
 786		.ifnum = 0,
 787		.type = QUIRK_MIDI_FIXED_ENDPOINT,
 788		.data = & (const struct snd_usb_midi_endpoint_info) {
 789			.out_cables = 0x003f,
 790			.in_cables  = 0x003f
 791		}
 792	}
 793},
 794{
 795	/*
 796	 * This quirk is for the "Advanced Driver" mode. If off, the UA-20
 797	 * has ID 0x0026 and is standard compliant, but has only 16-bit PCM
 798	 * and no MIDI.
 799	 */
 800	USB_DEVICE(0x0582, 0x0025),
 801	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
 802		.vendor_name = "EDIROL",
 803		.product_name = "UA-20",
 804		.ifnum = QUIRK_ANY_INTERFACE,
 805		.type = QUIRK_COMPOSITE,
 806		.data = (const struct snd_usb_audio_quirk[]) {
 807			{
 808				.ifnum = 0,
 809				.type = QUIRK_IGNORE_INTERFACE
 810			},
 811			{
 812				.ifnum = 1,
 813				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
 814				.data = & (const struct audioformat) {
 815					.formats = SNDRV_PCM_FMTBIT_S24_3LE,
 816					.channels = 2,
 817					.iface = 1,
 818					.altsetting = 1,
 819					.altset_idx = 1,
 820					.attributes = 0,
 821					.endpoint = 0x01,
 822					.ep_attr = 0x01,
 823					.rates = SNDRV_PCM_RATE_CONTINUOUS,
 824					.rate_min = 44100,
 825					.rate_max = 44100,
 826				}
 827			},
 828			{
 829				.ifnum = 2,
 830				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
 831				.data = & (const struct audioformat) {
 832					.formats = SNDRV_PCM_FMTBIT_S24_3LE,
 833					.channels = 2,
 834					.iface = 2,
 835					.altsetting = 1,
 836					.altset_idx = 1,
 837					.attributes = 0,
 838					.endpoint = 0x82,
 839					.ep_attr = 0x01,
 840					.rates = SNDRV_PCM_RATE_CONTINUOUS,
 841					.rate_min = 44100,
 842					.rate_max = 44100,
 843				}
 844			},
 845			{
 846				.ifnum = 3,
 847				.type = QUIRK_MIDI_FIXED_ENDPOINT,
 848				.data = & (const struct snd_usb_midi_endpoint_info) {
 849					.out_cables = 0x0001,
 850					.in_cables  = 0x0001
 851				}
 852			},
 853			{
 854				.ifnum = -1
 855			}
 856		}
 857	}
 858},
 859{
 860	/* has ID 0x0028 when not in "Advanced Driver" mode */
 861	USB_DEVICE(0x0582, 0x0027),
 862	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
 863		.vendor_name = "EDIROL",
 864		.product_name = "SD-20",
 865		.ifnum = 0,
 866		.type = QUIRK_MIDI_FIXED_ENDPOINT,
 867		.data = & (const struct snd_usb_midi_endpoint_info) {
 868			.out_cables = 0x0003,
 869			.in_cables  = 0x0007
 870		}
 871	}
 872},
 873{
 874	/* has ID 0x002a when not in "Advanced Driver" mode */
 875	USB_DEVICE(0x0582, 0x0029),
 876	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
 877		.vendor_name = "EDIROL",
 878		.product_name = "SD-80",
 879		.ifnum = 0,
 880		.type = QUIRK_MIDI_FIXED_ENDPOINT,
 881		.data = & (const struct snd_usb_midi_endpoint_info) {
 882			.out_cables = 0x000f,
 883			.in_cables  = 0x000f
 884		}
 885	}
 886},
 887{	/*
 888	 * This quirk is for the "Advanced" modes of the Edirol UA-700.
 889	 * If the sample format switch is not in an advanced setting, the
 890	 * UA-700 has ID 0x0582/0x002c and is standard compliant (no quirks),
 891	 * but offers only 16-bit PCM and no MIDI.
 892	 */
 893	USB_DEVICE_VENDOR_SPEC(0x0582, 0x002b),
 894	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
 895		.vendor_name = "EDIROL",
 896		.product_name = "UA-700",
 897		.ifnum = QUIRK_ANY_INTERFACE,
 898		.type = QUIRK_COMPOSITE,
 899		.data = (const struct snd_usb_audio_quirk[]) {
 900			{
 901				.ifnum = 1,
 902				.type = QUIRK_AUDIO_EDIROL_UAXX
 903			},
 904			{
 905				.ifnum = 2,
 906				.type = QUIRK_AUDIO_EDIROL_UAXX
 907			},
 908			{
 909				.ifnum = 3,
 910				.type = QUIRK_AUDIO_EDIROL_UAXX
 911			},
 912			{
 913				.ifnum = -1
 914			}
 915		}
 916	}
 917},
 918{
 919	/* has ID 0x002e when not in "Advanced Driver" mode */
 920	USB_DEVICE(0x0582, 0x002d),
 921	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
 922		.vendor_name = "Roland",
 923		.product_name = "XV-2020",
 924		.ifnum = 0,
 925		.type = QUIRK_MIDI_FIXED_ENDPOINT,
 926		.data = & (const struct snd_usb_midi_endpoint_info) {
 927			.out_cables = 0x0001,
 928			.in_cables  = 0x0001
 929		}
 930	}
 931},
 932{
 933	/* has ID 0x0030 when not in "Advanced Driver" mode */
 934	USB_DEVICE(0x0582, 0x002f),
 935	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
 936		.vendor_name = "Roland",
 937		.product_name = "VariOS",
 938		.ifnum = 0,
 939		.type = QUIRK_MIDI_FIXED_ENDPOINT,
 940		.data = & (const struct snd_usb_midi_endpoint_info) {
 941			.out_cables = 0x0007,
 942			.in_cables  = 0x0007
 943		}
 944	}
 945},
 946{
 947	/* has ID 0x0034 when not in "Advanced Driver" mode */
 948	USB_DEVICE(0x0582, 0x0033),
 949	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
 950		.vendor_name = "EDIROL",
 951		.product_name = "PCR",
 952		.ifnum = 0,
 953		.type = QUIRK_MIDI_FIXED_ENDPOINT,
 954		.data = & (const struct snd_usb_midi_endpoint_info) {
 955			.out_cables = 0x0003,
 956			.in_cables  = 0x0007
 957		}
 958	}
 959},
 960	/* TODO: add Roland M-1000 support */
 961{
 962	/*
 963	 * Has ID 0x0038 when not in "Advanced Driver" mode;
 964	 * later revisions use IDs 0x0054 and 0x00a2.
 965	 */
 966	USB_DEVICE(0x0582, 0x0037),
 967	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
 968		.vendor_name = "Roland",
 969		.product_name = "Digital Piano",
 970		.ifnum = 0,
 971		.type = QUIRK_MIDI_FIXED_ENDPOINT,
 972		.data = & (const struct snd_usb_midi_endpoint_info) {
 973			.out_cables = 0x0001,
 974			.in_cables  = 0x0001
 975		}
 976	}
 977},
 978{
 979	/*
 980	 * This quirk is for the "Advanced Driver" mode.  If off, the GS-10
 981	 * has ID 0x003c and is standard compliant, but has only 16-bit PCM
 982	 * and no MIDI.
 983	 */
 984	USB_DEVICE_VENDOR_SPEC(0x0582, 0x003b),
 985	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
 986		.vendor_name = "BOSS",
 987		.product_name = "GS-10",
 988		.ifnum = QUIRK_ANY_INTERFACE,
 989		.type = QUIRK_COMPOSITE,
 990		.data = & (const struct snd_usb_audio_quirk[]) {
 991			{
 992				.ifnum = 1,
 993				.type = QUIRK_AUDIO_STANDARD_INTERFACE
 994			},
 995			{
 996				.ifnum = 2,
 997				.type = QUIRK_AUDIO_STANDARD_INTERFACE
 998			},
 999			{
1000				.ifnum = 3,
1001				.type = QUIRK_MIDI_STANDARD_INTERFACE
1002			},
1003			{
1004				.ifnum = -1
1005			}
1006		}
1007	}
1008},
1009{
1010	/* has ID 0x0041 when not in "Advanced Driver" mode */
1011	USB_DEVICE(0x0582, 0x0040),
1012	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1013		.vendor_name = "Roland",
1014		.product_name = "GI-20",
1015		.ifnum = 0,
1016		.type = QUIRK_MIDI_FIXED_ENDPOINT,
1017		.data = & (const struct snd_usb_midi_endpoint_info) {
1018			.out_cables = 0x0001,
1019			.in_cables  = 0x0001
1020		}
1021	}
1022},
1023{
1024	/* has ID 0x0043 when not in "Advanced Driver" mode */
1025	USB_DEVICE(0x0582, 0x0042),
1026	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1027		.vendor_name = "Roland",
1028		.product_name = "RS-70",
1029		.ifnum = 0,
1030		.type = QUIRK_MIDI_FIXED_ENDPOINT,
1031		.data = & (const struct snd_usb_midi_endpoint_info) {
1032			.out_cables = 0x0001,
1033			.in_cables  = 0x0001
1034		}
1035	}
1036},
1037{
1038	/* has ID 0x0049 when not in "Advanced Driver" mode */
1039	USB_DEVICE(0x0582, 0x0047),
1040	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1041		/* .vendor_name = "EDIROL", */
1042		/* .product_name = "UR-80", */
1043		.ifnum = QUIRK_ANY_INTERFACE,
1044		.type = QUIRK_COMPOSITE,
1045		.data = (const struct snd_usb_audio_quirk[]) {
1046			/* in the 96 kHz modes, only interface 1 is there */
1047			{
1048				.ifnum = 1,
1049				.type = QUIRK_AUDIO_STANDARD_INTERFACE
1050			},
1051			{
1052				.ifnum = 2,
1053				.type = QUIRK_AUDIO_STANDARD_INTERFACE
1054			},
1055			{
1056				.ifnum = -1
1057			}
1058		}
1059	}
1060},
1061{
1062	/* has ID 0x004a when not in "Advanced Driver" mode */
1063	USB_DEVICE(0x0582, 0x0048),
1064	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1065		/* .vendor_name = "EDIROL", */
1066		/* .product_name = "UR-80", */
1067		.ifnum = 0,
1068		.type = QUIRK_MIDI_FIXED_ENDPOINT,
1069		.data = & (const struct snd_usb_midi_endpoint_info) {
1070			.out_cables = 0x0003,
1071			.in_cables  = 0x0007
1072		}
1073	}
1074},
1075	/* TODO: add Edirol M-100FX support */
1076{
1077	/* has ID 0x004e when not in "Advanced Driver" mode */
1078	USB_DEVICE(0x0582, 0x004c),
1079	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1080		.vendor_name = "EDIROL",
1081		.product_name = "PCR-A",
1082		.ifnum = QUIRK_ANY_INTERFACE,
1083		.type = QUIRK_COMPOSITE,
1084		.data = (const struct snd_usb_audio_quirk[]) {
1085			{
1086				.ifnum = 1,
1087				.type = QUIRK_AUDIO_STANDARD_INTERFACE
1088			},
1089			{
1090				.ifnum = 2,
1091				.type = QUIRK_AUDIO_STANDARD_INTERFACE
1092			},
1093			{
1094				.ifnum = -1
1095			}
1096		}
1097	}
1098},
1099{
1100	/* has ID 0x004f when not in "Advanced Driver" mode */
1101	USB_DEVICE(0x0582, 0x004d),
1102	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1103		.vendor_name = "EDIROL",
1104		.product_name = "PCR-A",
1105		.ifnum = 0,
1106		.type = QUIRK_MIDI_FIXED_ENDPOINT,
1107		.data = & (const struct snd_usb_midi_endpoint_info) {
1108			.out_cables = 0x0003,
1109			.in_cables  = 0x0007
1110		}
1111	}
1112},
1113{
1114	/*
1115	 * This quirk is for the "Advanced Driver" mode. If off, the UA-3FX
1116	 * is standard compliant, but has only 16-bit PCM.
1117	 */
1118	USB_DEVICE(0x0582, 0x0050),
1119	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1120		.vendor_name = "EDIROL",
1121		.product_name = "UA-3FX",
1122		.ifnum = QUIRK_ANY_INTERFACE,
1123		.type = QUIRK_COMPOSITE,
1124		.data = (const struct snd_usb_audio_quirk[]) {
1125			{
1126				.ifnum = 1,
1127				.type = QUIRK_AUDIO_STANDARD_INTERFACE
1128			},
1129			{
1130				.ifnum = 2,
1131				.type = QUIRK_AUDIO_STANDARD_INTERFACE
1132			},
1133			{
1134				.ifnum = -1
1135			}
1136		}
1137	}
1138},
1139{
1140	USB_DEVICE(0x0582, 0x0052),
1141	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1142		.vendor_name = "EDIROL",
1143		.product_name = "UM-1SX",
1144		.ifnum = 0,
1145		.type = QUIRK_MIDI_STANDARD_INTERFACE
1146	}
1147},
1148{
1149	USB_DEVICE(0x0582, 0x0060),
1150	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1151		.vendor_name = "Roland",
1152		.product_name = "EXR Series",
1153		.ifnum = 0,
1154		.type = QUIRK_MIDI_STANDARD_INTERFACE
1155	}
1156},
1157{
1158	/* has ID 0x0066 when not in "Advanced Driver" mode */
1159	USB_DEVICE(0x0582, 0x0064),
1160	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1161		/* .vendor_name = "EDIROL", */
1162		/* .product_name = "PCR-1", */
1163		.ifnum = QUIRK_ANY_INTERFACE,
1164		.type = QUIRK_COMPOSITE,
1165		.data = (const struct snd_usb_audio_quirk[]) {
1166			{
1167				.ifnum = 1,
1168				.type = QUIRK_AUDIO_STANDARD_INTERFACE
1169			},
1170			{
1171				.ifnum = 2,
1172				.type = QUIRK_AUDIO_STANDARD_INTERFACE
1173			},
1174			{
1175				.ifnum = -1
1176			}
1177		}
1178	}
1179},
1180{
1181	/* has ID 0x0067 when not in "Advanced Driver" mode */
1182	USB_DEVICE(0x0582, 0x0065),
1183	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1184		/* .vendor_name = "EDIROL", */
1185		/* .product_name = "PCR-1", */
1186		.ifnum = 0,
1187		.type = QUIRK_MIDI_FIXED_ENDPOINT,
1188		.data = & (const struct snd_usb_midi_endpoint_info) {
1189			.out_cables = 0x0001,
1190			.in_cables  = 0x0003
1191		}
1192	}
1193},
1194{
1195	/* has ID 0x006b when not in "Advanced Driver" mode */
1196	USB_DEVICE_VENDOR_SPEC(0x0582, 0x006a),
1197	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1198		.vendor_name = "Roland",
1199		.product_name = "SP-606",
1200		.ifnum = 3,
1201		.type = QUIRK_MIDI_FIXED_ENDPOINT,
1202		.data = & (const struct snd_usb_midi_endpoint_info) {
1203			.out_cables = 0x0001,
1204			.in_cables  = 0x0001
1205		}
1206	}
1207},
1208{
1209	/* has ID 0x006e when not in "Advanced Driver" mode */
1210	USB_DEVICE(0x0582, 0x006d),
1211	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1212		.vendor_name = "Roland",
1213		.product_name = "FANTOM-X",
1214		.ifnum = 0,
1215		.type = QUIRK_MIDI_FIXED_ENDPOINT,
1216		.data = & (const struct snd_usb_midi_endpoint_info) {
1217			.out_cables = 0x0001,
1218			.in_cables  = 0x0001
1219		}
1220	}
1221},
1222{	/*
1223	 * This quirk is for the "Advanced" modes of the Edirol UA-25.
1224	 * If the switch is not in an advanced setting, the UA-25 has
1225	 * ID 0x0582/0x0073 and is standard compliant (no quirks), but
1226	 * offers only 16-bit PCM at 44.1 kHz and no MIDI.
1227	 */
1228	USB_DEVICE_VENDOR_SPEC(0x0582, 0x0074),
1229	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1230		.vendor_name = "EDIROL",
1231		.product_name = "UA-25",
1232		.ifnum = QUIRK_ANY_INTERFACE,
1233		.type = QUIRK_COMPOSITE,
1234		.data = (const struct snd_usb_audio_quirk[]) {
1235			{
1236				.ifnum = 0,
1237				.type = QUIRK_AUDIO_EDIROL_UAXX
1238			},
1239			{
1240				.ifnum = 1,
1241				.type = QUIRK_AUDIO_EDIROL_UAXX
1242			},
1243			{
1244				.ifnum = 2,
1245				.type = QUIRK_AUDIO_EDIROL_UAXX
1246			},
1247			{
1248				.ifnum = -1
1249			}
1250		}
1251	}
1252},
1253{
1254	/* has ID 0x0076 when not in "Advanced Driver" mode */
1255	USB_DEVICE(0x0582, 0x0075),
1256	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1257		.vendor_name = "BOSS",
1258		.product_name = "DR-880",
1259		.ifnum = 0,
1260		.type = QUIRK_MIDI_FIXED_ENDPOINT,
1261		.data = & (const struct snd_usb_midi_endpoint_info) {
1262			.out_cables = 0x0001,
1263			.in_cables  = 0x0001
1264		}
1265	}
1266},
1267{
1268	/* has ID 0x007b when not in "Advanced Driver" mode */
1269	USB_DEVICE_VENDOR_SPEC(0x0582, 0x007a),
1270	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1271		.vendor_name = "Roland",
1272		/* "RD" or "RD-700SX"? */
1273		.ifnum = 0,
1274		.type = QUIRK_MIDI_FIXED_ENDPOINT,
1275		.data = & (const struct snd_usb_midi_endpoint_info) {
1276			.out_cables = 0x0003,
1277			.in_cables  = 0x0003
1278		}
1279	}
1280},
1281{
1282	/* has ID 0x0081 when not in "Advanced Driver" mode */
1283	USB_DEVICE(0x0582, 0x0080),
1284	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1285		.vendor_name = "Roland",
1286		.product_name = "G-70",
1287		.ifnum = 0,
1288		.type = QUIRK_MIDI_FIXED_ENDPOINT,
1289		.data = & (const struct snd_usb_midi_endpoint_info) {
1290			.out_cables = 0x0001,
1291			.in_cables  = 0x0001
1292		}
1293	}
1294},
1295	/* TODO: add Roland V-SYNTH XT support */
1296	/* TODO: add BOSS GT-PRO support */
1297{
1298	/* has ID 0x008c when not in "Advanced Driver" mode */
1299	USB_DEVICE(0x0582, 0x008b),
1300	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1301		.vendor_name = "EDIROL",
1302		.product_name = "PC-50",
1303		.ifnum = 0,
1304		.type = QUIRK_MIDI_FIXED_ENDPOINT,
1305		.data = & (const struct snd_usb_midi_endpoint_info) {
1306			.out_cables = 0x0001,
1307			.in_cables  = 0x0001
1308		}
1309	}
1310},
1311	/* TODO: add Edirol PC-80 support */
1312{
1313	USB_DEVICE(0x0582, 0x0096),
1314	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1315		.vendor_name = "EDIROL",
1316		.product_name = "UA-1EX",
1317		.ifnum = QUIRK_ANY_INTERFACE,
1318		.type = QUIRK_COMPOSITE,
1319		.data = (const struct snd_usb_audio_quirk[]) {
1320			{
1321				.ifnum = 0,
1322				.type = QUIRK_AUDIO_STANDARD_INTERFACE
1323			},
1324			{
1325				.ifnum = 1,
1326				.type = QUIRK_AUDIO_STANDARD_INTERFACE
1327			},
1328			{
1329				.ifnum = -1
1330			}
1331		}
1332	}
1333},
1334{
1335	USB_DEVICE(0x0582, 0x009a),
1336	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1337		.vendor_name = "EDIROL",
1338		.product_name = "UM-3EX",
1339		.ifnum = 0,
1340		.type = QUIRK_MIDI_FIXED_ENDPOINT,
1341		.data = & (const struct snd_usb_midi_endpoint_info) {
1342			.out_cables = 0x000f,
1343			.in_cables  = 0x000f
1344		}
1345	}
1346},
1347{
1348	/*
1349	 * This quirk is for the "Advanced Driver" mode. If off, the UA-4FX
1350	 * is standard compliant, but has only 16-bit PCM and no MIDI.
1351	 */
1352	USB_DEVICE(0x0582, 0x00a3),
1353	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1354		.vendor_name = "EDIROL",
1355		.product_name = "UA-4FX",
1356		.ifnum = QUIRK_ANY_INTERFACE,
1357		.type = QUIRK_COMPOSITE,
1358		.data = (const struct snd_usb_audio_quirk[]) {
1359			{
1360				.ifnum = 0,
1361				.type = QUIRK_AUDIO_EDIROL_UAXX
1362			},
1363			{
1364				.ifnum = 1,
1365				.type = QUIRK_AUDIO_EDIROL_UAXX
1366			},
1367			{
1368				.ifnum = 2,
1369				.type = QUIRK_AUDIO_EDIROL_UAXX
1370			},
1371			{
1372				.ifnum = -1
1373			}
1374		}
1375	}
1376},
1377	/* TODO: add Edirol MD-P1 support */
1378{
1379	USB_DEVICE(0x582, 0x00a6),
1380	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1381		.vendor_name = "Roland",
1382		.product_name = "Juno-G",
1383		.ifnum = 0,
1384		.type = QUIRK_MIDI_FIXED_ENDPOINT,
1385		.data = & (const struct snd_usb_midi_endpoint_info) {
1386			.out_cables = 0x0001,
1387			.in_cables  = 0x0001
1388		}
1389	}
1390},
1391{
1392	/* Roland SH-201 */
1393	USB_DEVICE(0x0582, 0x00ad),
1394	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1395		.vendor_name = "Roland",
1396		.product_name = "SH-201",
1397		.ifnum = QUIRK_ANY_INTERFACE,
1398		.type = QUIRK_COMPOSITE,
1399		.data = (const struct snd_usb_audio_quirk[]) {
1400			{
1401				.ifnum = 0,
1402				.type = QUIRK_AUDIO_STANDARD_INTERFACE
1403			},
1404			{
1405				.ifnum = 1,
1406				.type = QUIRK_AUDIO_STANDARD_INTERFACE
1407			},
1408			{
1409				.ifnum = 2,
1410				.type = QUIRK_MIDI_FIXED_ENDPOINT,
1411				.data = & (const struct snd_usb_midi_endpoint_info) {
1412					.out_cables = 0x0001,
1413					.in_cables  = 0x0001
1414				}
1415			},
1416			{
1417				.ifnum = -1
1418			}
1419		}
1420	}
1421},
1422{
1423	/* Roland SonicCell */
1424	USB_DEVICE(0x0582, 0x00c2),
1425	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1426		.vendor_name = "Roland",
1427		.product_name = "SonicCell",
1428		.ifnum = QUIRK_ANY_INTERFACE,
1429		.type = QUIRK_COMPOSITE,
1430		.data = (const struct snd_usb_audio_quirk[]) {
1431			{
1432				.ifnum = 0,
1433				.type = QUIRK_AUDIO_STANDARD_INTERFACE
1434			},
1435			{
1436				.ifnum = 1,
1437				.type = QUIRK_AUDIO_STANDARD_INTERFACE
1438			},
1439			{
1440				.ifnum = 2,
1441				.type = QUIRK_MIDI_FIXED_ENDPOINT,
1442				.data = & (const struct snd_usb_midi_endpoint_info) {
1443					.out_cables = 0x0001,
1444					.in_cables  = 0x0001
1445				}
1446			},
1447			{
1448				.ifnum = -1
1449			}
1450		}
1451	}
1452},
1453{
1454	/* Edirol M-16DX */
1455	/* FIXME: This quirk gives a good-working capture stream but the
1456	 *        playback seems problematic because of lacking of sync
1457	 *        with capture stream.  It needs to sync with the capture
1458	 *        clock.  As now, you'll get frequent sound distortions
1459	 *        via the playback.
1460	 */
1461	USB_DEVICE(0x0582, 0x00c4),
1462	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1463		.ifnum = QUIRK_ANY_INTERFACE,
1464		.type = QUIRK_COMPOSITE,
1465		.data = (const struct snd_usb_audio_quirk[]) {
1466			{
1467				.ifnum = 0,
1468				.type = QUIRK_AUDIO_STANDARD_INTERFACE
1469			},
1470			{
1471				.ifnum = 1,
1472				.type = QUIRK_AUDIO_STANDARD_INTERFACE
1473			},
1474			{
1475				.ifnum = 2,
1476				.type = QUIRK_MIDI_FIXED_ENDPOINT,
1477				.data = & (const struct snd_usb_midi_endpoint_info) {
1478					.out_cables = 0x0001,
1479					.in_cables  = 0x0001
1480				}
1481			},
1482			{
1483				.ifnum = -1
1484			}
1485		}
1486	}
1487},
1488{
1489	/* BOSS GT-10 */
1490	USB_DEVICE(0x0582, 0x00da),
1491	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1492		.ifnum = QUIRK_ANY_INTERFACE,
1493		.type = QUIRK_COMPOSITE,
1494		.data = (const struct snd_usb_audio_quirk[]) {
1495			{
1496				.ifnum = 0,
1497				.type = QUIRK_AUDIO_STANDARD_INTERFACE
1498			},
1499			{
1500				.ifnum = 1,
1501				.type = QUIRK_AUDIO_STANDARD_INTERFACE
1502			},
1503			{
1504				.ifnum = 2,
1505				.type = QUIRK_MIDI_FIXED_ENDPOINT,
1506				.data = & (const struct snd_usb_midi_endpoint_info) {
1507					.out_cables = 0x0001,
1508					.in_cables  = 0x0001
1509				}
1510			},
1511			{
1512				.ifnum = -1
1513			}
1514		}
1515	}
1516},
1517{
1518	/* Advanced modes of the Edirol UA-25EX.
1519	 * For the standard mode, UA-25EX has ID 0582:00e7, which
1520	 * offers only 16-bit PCM at 44.1 kHz and no MIDI.
1521	 */
1522	USB_DEVICE_VENDOR_SPEC(0x0582, 0x00e6),
1523	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1524		.vendor_name = "EDIROL",
1525		.product_name = "UA-25EX",
1526		.ifnum = QUIRK_ANY_INTERFACE,
1527		.type = QUIRK_COMPOSITE,
1528		.data = (const struct snd_usb_audio_quirk[]) {
1529			{
1530				.ifnum = 0,
1531				.type = QUIRK_AUDIO_EDIROL_UAXX
1532			},
1533			{
1534				.ifnum = 1,
1535				.type = QUIRK_AUDIO_EDIROL_UAXX
1536			},
1537			{
1538				.ifnum = 2,
1539				.type = QUIRK_AUDIO_EDIROL_UAXX
1540			},
1541			{
1542				.ifnum = -1
1543			}
1544		}
1545	}
1546},
1547{
1548	/* has ID 0x00ea when not in Advanced Driver mode */
1549	USB_DEVICE_VENDOR_SPEC(0x0582, 0x00e9),
1550	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1551		/* .vendor_name = "Roland", */
1552		/* .product_name = "UA-1G", */
1553		.ifnum = QUIRK_ANY_INTERFACE,
1554		.type = QUIRK_COMPOSITE,
1555		.data = (const struct snd_usb_audio_quirk[]) {
1556			{
1557				.ifnum = 0,
1558				.type = QUIRK_AUDIO_STANDARD_INTERFACE
1559			},
1560			{
1561				.ifnum = 1,
1562				.type = QUIRK_AUDIO_STANDARD_INTERFACE
1563			},
1564			{
1565				.ifnum = -1
1566			}
1567		}
1568	}
1569},
1570{
1571	USB_DEVICE_VENDOR_SPEC(0x0582, 0x0104),
1572	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1573		/* .vendor_name = "Roland", */
1574		/* .product_name = "UM-1G", */
1575		.ifnum = 0,
1576		.type = QUIRK_MIDI_FIXED_ENDPOINT,
1577		.data = & (const struct snd_usb_midi_endpoint_info) {
1578			.out_cables = 0x0001,
1579			.in_cables  = 0x0001
1580		}
1581	}
1582},
1583{
1584	/* Boss JS-8 Jam Station  */
1585	USB_DEVICE(0x0582, 0x0109),
1586	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1587		/* .vendor_name = "BOSS", */
1588		/* .product_name = "JS-8", */
1589		.ifnum = QUIRK_ANY_INTERFACE,
1590		.type = QUIRK_COMPOSITE,
1591		.data = (const struct snd_usb_audio_quirk[]) {
1592			{
1593				.ifnum = 0,
1594				.type = QUIRK_AUDIO_STANDARD_INTERFACE
1595			},
1596			{
1597				.ifnum = 1,
1598				.type = QUIRK_AUDIO_STANDARD_INTERFACE
1599			},
1600			{
1601				.ifnum = 2,
1602				.type = QUIRK_MIDI_STANDARD_INTERFACE
 
 
 
 
1603			},
1604			{
1605				.ifnum = -1
1606			}
1607		}
1608	}
1609},
1610{
1611	/* has ID 0x0110 when not in Advanced Driver mode */
1612	USB_DEVICE_VENDOR_SPEC(0x0582, 0x010f),
1613	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1614		/* .vendor_name = "Roland", */
1615		/* .product_name = "A-PRO", */
1616		.ifnum = 1,
1617		.type = QUIRK_MIDI_FIXED_ENDPOINT,
1618		.data = & (const struct snd_usb_midi_endpoint_info) {
1619			.out_cables = 0x0003,
1620			.in_cables  = 0x0007
1621		}
1622	}
1623},
1624{
1625	USB_DEVICE(0x0582, 0x0113),
1626	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1627		/* .vendor_name = "BOSS", */
1628		/* .product_name = "ME-25", */
1629		.ifnum = QUIRK_ANY_INTERFACE,
1630		.type = QUIRK_COMPOSITE,
1631		.data = (const struct snd_usb_audio_quirk[]) {
1632			{
1633				.ifnum = 0,
1634				.type = QUIRK_AUDIO_STANDARD_INTERFACE
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1635			},
1636			{
1637				.ifnum = 1,
1638				.type = QUIRK_AUDIO_STANDARD_INTERFACE
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1639			},
1640			{
1641				.ifnum = 2,
1642				.type = QUIRK_MIDI_FIXED_ENDPOINT,
1643				.data = & (const struct snd_usb_midi_endpoint_info) {
1644					.out_cables = 0x0001,
1645					.in_cables  = 0x0001
1646				}
1647			},
1648			{
1649				.ifnum = -1
1650			}
1651		}
1652	}
1653},
1654{
1655	USB_DEVICE(0x0582, 0x0127),
1656	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1657		/* .vendor_name = "Roland", */
1658		/* .product_name = "GR-55", */
1659		.ifnum = QUIRK_ANY_INTERFACE,
1660		.type = QUIRK_COMPOSITE,
1661		.data = (const struct snd_usb_audio_quirk[]) {
1662			{
1663				.ifnum = 0,
1664				.type = QUIRK_AUDIO_STANDARD_INTERFACE
1665			},
1666			{
1667				.ifnum = 1,
1668				.type = QUIRK_AUDIO_STANDARD_INTERFACE
1669			},
1670			{
1671				.ifnum = 2,
1672				.type = QUIRK_MIDI_STANDARD_INTERFACE
1673			},
1674			{
1675				.ifnum = -1
1676			}
1677		}
1678	}
1679},
1680{
1681	USB_DEVICE(0x0582, 0x011e),
 
1682	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1683		/* .vendor_name = "BOSS", */
1684		/* .product_name = "BR-800", */
1685		.ifnum = QUIRK_ANY_INTERFACE,
1686		.type = QUIRK_COMPOSITE,
1687		.data = (const struct snd_usb_audio_quirk[]) {
1688			{
1689				.ifnum = 0,
1690				.type = QUIRK_AUDIO_STANDARD_INTERFACE
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1691			},
1692			{
1693				.ifnum = 1,
1694				.type = QUIRK_AUDIO_STANDARD_INTERFACE
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1695			},
1696			{
1697				.ifnum = 2,
1698				.type = QUIRK_MIDI_FIXED_ENDPOINT,
1699				.data = & (const struct snd_usb_midi_endpoint_info) {
1700					.out_cables = 0x0001,
1701					.in_cables  = 0x0001
1702				}
1703			},
1704			{
 
 
 
 
 
 
 
 
1705				.ifnum = -1
1706			}
1707		}
1708	}
1709},
1710{
1711	USB_DEVICE(0x0582, 0x0130),
1712	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1713		/* .vendor_name = "BOSS", */
1714		/* .product_name = "MICRO BR-80", */
1715		.ifnum = QUIRK_ANY_INTERFACE,
1716		.type = QUIRK_COMPOSITE,
1717		.data = (const struct snd_usb_audio_quirk[]) {
1718			{
1719				.ifnum = 0,
1720				.type = QUIRK_IGNORE_INTERFACE
1721			},
1722			{
1723				.ifnum = 1,
1724				.type = QUIRK_AUDIO_STANDARD_INTERFACE
1725			},
1726			{
1727				.ifnum = 2,
1728				.type = QUIRK_AUDIO_STANDARD_INTERFACE
1729			},
1730			{
1731				.ifnum = 3,
1732				.type = QUIRK_MIDI_FIXED_ENDPOINT,
1733				.data = & (const struct snd_usb_midi_endpoint_info) {
1734					.out_cables = 0x0001,
1735					.in_cables  = 0x0001
1736				}
1737			},
1738			{
1739				.ifnum = -1
1740			}
1741		}
1742	}
1743},
 
 
 
 
 
 
 
 
 
 
 
1744
1745/* Guillemot devices */
1746{
1747	/*
1748	 * This is for the "Windows Edition" where the external MIDI ports are
1749	 * the only MIDI ports; the control data is reported through HID
1750	 * interfaces.  The "Macintosh Edition" has ID 0xd002 and uses standard
1751	 * compliant USB MIDI ports for external MIDI and controls.
1752	 */
1753	USB_DEVICE_VENDOR_SPEC(0x06f8, 0xb000),
1754	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1755		.vendor_name = "Hercules",
1756		.product_name = "DJ Console (WE)",
1757		.ifnum = 4,
1758		.type = QUIRK_MIDI_FIXED_ENDPOINT,
1759		.data = & (const struct snd_usb_midi_endpoint_info) {
1760			.out_cables = 0x0001,
1761			.in_cables = 0x0001
1762		}
1763	}
1764},
1765
1766/* Midiman/M-Audio devices */
1767{
1768	USB_DEVICE_VENDOR_SPEC(0x0763, 0x1002),
1769	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1770		.vendor_name = "M-Audio",
1771		.product_name = "MidiSport 2x2",
1772		.ifnum = QUIRK_ANY_INTERFACE,
1773		.type = QUIRK_MIDI_MIDIMAN,
1774		.data = & (const struct snd_usb_midi_endpoint_info) {
1775			.out_cables = 0x0003,
1776			.in_cables  = 0x0003
1777		}
1778	}
1779},
1780{
1781	USB_DEVICE_VENDOR_SPEC(0x0763, 0x1011),
1782	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1783		.vendor_name = "M-Audio",
1784		.product_name = "MidiSport 1x1",
1785		.ifnum = QUIRK_ANY_INTERFACE,
1786		.type = QUIRK_MIDI_MIDIMAN,
1787		.data = & (const struct snd_usb_midi_endpoint_info) {
1788			.out_cables = 0x0001,
1789			.in_cables  = 0x0001
1790		}
1791	}
1792},
1793{
1794	USB_DEVICE_VENDOR_SPEC(0x0763, 0x1015),
1795	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1796		.vendor_name = "M-Audio",
1797		.product_name = "Keystation",
1798		.ifnum = QUIRK_ANY_INTERFACE,
1799		.type = QUIRK_MIDI_MIDIMAN,
1800		.data = & (const struct snd_usb_midi_endpoint_info) {
1801			.out_cables = 0x0001,
1802			.in_cables  = 0x0001
1803		}
1804	}
1805},
1806{
1807	USB_DEVICE_VENDOR_SPEC(0x0763, 0x1021),
1808	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1809		.vendor_name = "M-Audio",
1810		.product_name = "MidiSport 4x4",
1811		.ifnum = QUIRK_ANY_INTERFACE,
1812		.type = QUIRK_MIDI_MIDIMAN,
1813		.data = & (const struct snd_usb_midi_endpoint_info) {
1814			.out_cables = 0x000f,
1815			.in_cables  = 0x000f
1816		}
1817	}
1818},
1819{
1820	/*
1821	 * For hardware revision 1.05; in the later revisions (1.10 and
1822	 * 1.21), 0x1031 is the ID for the device without firmware.
1823	 * Thanks to Olaf Giesbrecht <Olaf_Giesbrecht@yahoo.de>
1824	 */
1825	USB_DEVICE_VER(0x0763, 0x1031, 0x0100, 0x0109),
1826	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1827		.vendor_name = "M-Audio",
1828		.product_name = "MidiSport 8x8",
1829		.ifnum = QUIRK_ANY_INTERFACE,
1830		.type = QUIRK_MIDI_MIDIMAN,
1831		.data = & (const struct snd_usb_midi_endpoint_info) {
1832			.out_cables = 0x01ff,
1833			.in_cables  = 0x01ff
1834		}
1835	}
1836},
1837{
1838	USB_DEVICE_VENDOR_SPEC(0x0763, 0x1033),
1839	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1840		.vendor_name = "M-Audio",
1841		.product_name = "MidiSport 8x8",
1842		.ifnum = QUIRK_ANY_INTERFACE,
1843		.type = QUIRK_MIDI_MIDIMAN,
1844		.data = & (const struct snd_usb_midi_endpoint_info) {
1845			.out_cables = 0x01ff,
1846			.in_cables  = 0x01ff
1847		}
1848	}
1849},
1850{
1851	USB_DEVICE_VENDOR_SPEC(0x0763, 0x1041),
1852	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1853		.vendor_name = "M-Audio",
1854		.product_name = "MidiSport 2x4",
1855		.ifnum = QUIRK_ANY_INTERFACE,
1856		.type = QUIRK_MIDI_MIDIMAN,
1857		.data = & (const struct snd_usb_midi_endpoint_info) {
1858			.out_cables = 0x000f,
1859			.in_cables  = 0x0003
1860		}
1861	}
1862},
1863{
1864	USB_DEVICE_VENDOR_SPEC(0x0763, 0x2001),
1865	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1866		.vendor_name = "M-Audio",
1867		.product_name = "Quattro",
1868		.ifnum = QUIRK_ANY_INTERFACE,
1869		.type = QUIRK_COMPOSITE,
1870		.data = & (const struct snd_usb_audio_quirk[]) {
1871			/*
1872			 * Interfaces 0-2 are "Windows-compatible", 16-bit only,
1873			 * and share endpoints with the other interfaces.
1874			 * Ignore them.  The other interfaces can do 24 bits,
1875			 * but captured samples are big-endian (see usbaudio.c).
1876			 */
1877			{
1878				.ifnum = 0,
1879				.type = QUIRK_IGNORE_INTERFACE
1880			},
1881			{
1882				.ifnum = 1,
1883				.type = QUIRK_IGNORE_INTERFACE
1884			},
1885			{
1886				.ifnum = 2,
1887				.type = QUIRK_IGNORE_INTERFACE
1888			},
1889			{
1890				.ifnum = 3,
1891				.type = QUIRK_IGNORE_INTERFACE
1892			},
1893			{
1894				.ifnum = 4,
1895				.type = QUIRK_AUDIO_STANDARD_INTERFACE
1896			},
1897			{
1898				.ifnum = 5,
1899				.type = QUIRK_AUDIO_STANDARD_INTERFACE
1900			},
1901			{
1902				.ifnum = 6,
1903				.type = QUIRK_IGNORE_INTERFACE
1904			},
1905			{
1906				.ifnum = 7,
1907				.type = QUIRK_AUDIO_STANDARD_INTERFACE
1908			},
1909			{
1910				.ifnum = 8,
1911				.type = QUIRK_AUDIO_STANDARD_INTERFACE
1912			},
1913			{
1914				.ifnum = 9,
1915				.type = QUIRK_MIDI_MIDIMAN,
1916				.data = & (const struct snd_usb_midi_endpoint_info) {
1917					.out_cables = 0x0001,
1918					.in_cables  = 0x0001
1919				}
1920			},
1921			{
1922				.ifnum = -1
1923			}
1924		}
1925	}
1926},
1927{
1928	USB_DEVICE_VENDOR_SPEC(0x0763, 0x2003),
1929	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1930		.vendor_name = "M-Audio",
1931		.product_name = "AudioPhile",
1932		.ifnum = 6,
1933		.type = QUIRK_MIDI_MIDIMAN,
1934		.data = & (const struct snd_usb_midi_endpoint_info) {
1935			.out_cables = 0x0001,
1936			.in_cables  = 0x0001
1937		}
1938	}
1939},
1940{
1941	USB_DEVICE_VENDOR_SPEC(0x0763, 0x2008),
1942	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1943		.vendor_name = "M-Audio",
1944		.product_name = "Ozone",
1945		.ifnum = 3,
1946		.type = QUIRK_MIDI_MIDIMAN,
1947		.data = & (const struct snd_usb_midi_endpoint_info) {
1948			.out_cables = 0x0001,
1949			.in_cables  = 0x0001
1950		}
1951	}
1952},
1953{
1954	USB_DEVICE_VENDOR_SPEC(0x0763, 0x200d),
1955	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1956		.vendor_name = "M-Audio",
1957		.product_name = "OmniStudio",
1958		.ifnum = QUIRK_ANY_INTERFACE,
1959		.type = QUIRK_COMPOSITE,
1960		.data = & (const struct snd_usb_audio_quirk[]) {
1961			{
1962				.ifnum = 0,
1963				.type = QUIRK_IGNORE_INTERFACE
1964			},
1965			{
1966				.ifnum = 1,
1967				.type = QUIRK_IGNORE_INTERFACE
1968			},
1969			{
1970				.ifnum = 2,
1971				.type = QUIRK_IGNORE_INTERFACE
1972			},
1973			{
1974				.ifnum = 3,
1975				.type = QUIRK_IGNORE_INTERFACE
1976			},
1977			{
1978				.ifnum = 4,
1979				.type = QUIRK_AUDIO_STANDARD_INTERFACE
1980			},
1981			{
1982				.ifnum = 5,
1983				.type = QUIRK_AUDIO_STANDARD_INTERFACE
1984			},
1985			{
1986				.ifnum = 6,
1987				.type = QUIRK_IGNORE_INTERFACE
1988			},
1989			{
1990				.ifnum = 7,
1991				.type = QUIRK_AUDIO_STANDARD_INTERFACE
1992			},
1993			{
1994				.ifnum = 8,
1995				.type = QUIRK_AUDIO_STANDARD_INTERFACE
1996			},
1997			{
1998				.ifnum = 9,
1999				.type = QUIRK_MIDI_MIDIMAN,
2000				.data = & (const struct snd_usb_midi_endpoint_info) {
2001					.out_cables = 0x0001,
2002					.in_cables  = 0x0001
2003				}
2004			},
2005			{
2006				.ifnum = -1
2007			}
2008		}
2009	}
2010},
2011{
2012	USB_DEVICE(0x0763, 0x2019),
2013	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2014		/* .vendor_name = "M-Audio", */
2015		/* .product_name = "Ozone Academic", */
2016		.ifnum = QUIRK_ANY_INTERFACE,
2017		.type = QUIRK_COMPOSITE,
2018		.data = & (const struct snd_usb_audio_quirk[]) {
2019			{
2020				.ifnum = 0,
2021				.type = QUIRK_AUDIO_STANDARD_INTERFACE
2022			},
2023			{
2024				.ifnum = 1,
2025				.type = QUIRK_AUDIO_STANDARD_INTERFACE
2026			},
2027			{
2028				.ifnum = 2,
2029				.type = QUIRK_AUDIO_STANDARD_INTERFACE
2030			},
2031			{
2032				.ifnum = 3,
2033				.type = QUIRK_MIDI_MIDIMAN,
2034				.data = & (const struct snd_usb_midi_endpoint_info) {
2035					.out_cables = 0x0001,
2036					.in_cables  = 0x0001
2037				}
2038			},
2039			{
2040				.ifnum = -1
2041			}
2042		}
2043	}
2044},
2045{
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2046	USB_DEVICE_VENDOR_SPEC(0x0763, 0x2080),
2047	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2048		/* .vendor_name = "M-Audio", */
2049		/* .product_name = "Fast Track Ultra", */
2050		.ifnum = QUIRK_ANY_INTERFACE,
2051		.type = QUIRK_COMPOSITE,
2052		.data = & (const struct snd_usb_audio_quirk[]) {
2053			{
2054				.ifnum = 0,
2055				.type = QUIRK_AUDIO_STANDARD_MIXER,
2056			},
2057			{
2058				.ifnum = 1,
2059				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
2060				.data = & (const struct audioformat) {
2061					.formats = SNDRV_PCM_FMTBIT_S24_3LE,
2062					.channels = 8,
2063					.iface = 1,
2064					.altsetting = 1,
2065					.altset_idx = 1,
2066					.attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
2067					.endpoint = 0x01,
2068					.ep_attr = 0x09,
2069					.rates = SNDRV_PCM_RATE_44100 |
2070						 SNDRV_PCM_RATE_48000 |
2071						 SNDRV_PCM_RATE_88200 |
2072						 SNDRV_PCM_RATE_96000,
2073					.rate_min = 44100,
2074					.rate_max = 96000,
2075					.nr_rates = 4,
2076					.rate_table = (unsigned int[]) {
2077						44100, 48000, 88200, 96000
2078					}
2079				}
2080			},
2081			{
2082				.ifnum = 2,
2083				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
2084				.data = & (const struct audioformat) {
2085					.formats = SNDRV_PCM_FMTBIT_S24_3LE,
2086					.channels = 8,
2087					.iface = 2,
2088					.altsetting = 1,
2089					.altset_idx = 1,
2090					.attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
2091					.endpoint = 0x81,
2092					.ep_attr = 0x05,
2093					.rates = SNDRV_PCM_RATE_44100 |
2094						 SNDRV_PCM_RATE_48000 |
2095						 SNDRV_PCM_RATE_88200 |
2096						 SNDRV_PCM_RATE_96000,
2097					.rate_min = 44100,
2098					.rate_max = 96000,
2099					.nr_rates = 4,
2100					.rate_table = (unsigned int[]) {
2101						44100, 48000, 88200, 96000
2102					}
2103				}
2104			},
2105			/* interface 3 (MIDI) is standard compliant */
2106			{
2107				.ifnum = -1
2108			}
2109		}
2110	}
2111},
2112{
2113	USB_DEVICE_VENDOR_SPEC(0x0763, 0x2081),
2114	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2115		/* .vendor_name = "M-Audio", */
2116		/* .product_name = "Fast Track Ultra 8R", */
2117		.ifnum = QUIRK_ANY_INTERFACE,
2118		.type = QUIRK_COMPOSITE,
2119		.data = & (const struct snd_usb_audio_quirk[]) {
2120			{
2121				.ifnum = 0,
2122				.type = QUIRK_AUDIO_STANDARD_MIXER,
2123			},
2124			{
2125				.ifnum = 1,
2126				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
2127				.data = & (const struct audioformat) {
2128					.formats = SNDRV_PCM_FMTBIT_S24_3LE,
2129					.channels = 8,
2130					.iface = 1,
2131					.altsetting = 1,
2132					.altset_idx = 1,
2133					.attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
2134					.endpoint = 0x01,
2135					.ep_attr = 0x09,
2136					.rates = SNDRV_PCM_RATE_44100 |
2137						 SNDRV_PCM_RATE_48000 |
2138						 SNDRV_PCM_RATE_88200 |
2139						 SNDRV_PCM_RATE_96000,
2140					.rate_min = 44100,
2141					.rate_max = 96000,
2142					.nr_rates = 4,
2143					.rate_table = (unsigned int[]) {
2144							44100, 48000, 88200, 96000
2145					}
2146				}
2147			},
2148			{
2149				.ifnum = 2,
2150				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
2151				.data = & (const struct audioformat) {
2152					.formats = SNDRV_PCM_FMTBIT_S24_3LE,
2153					.channels = 8,
2154					.iface = 2,
2155					.altsetting = 1,
2156					.altset_idx = 1,
2157					.attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
2158					.endpoint = 0x81,
2159					.ep_attr = 0x05,
2160					.rates = SNDRV_PCM_RATE_44100 |
2161						 SNDRV_PCM_RATE_48000 |
2162						 SNDRV_PCM_RATE_88200 |
2163						 SNDRV_PCM_RATE_96000,
2164					.rate_min = 44100,
2165					.rate_max = 96000,
2166					.nr_rates = 4,
2167					.rate_table = (unsigned int[]) {
2168						44100, 48000, 88200, 96000
2169					}
2170				}
2171			},
2172			/* interface 3 (MIDI) is standard compliant */
2173			{
2174				.ifnum = -1
2175			}
2176		}
2177	}
2178},
2179
2180/* Casio devices */
2181{
2182	USB_DEVICE(0x07cf, 0x6801),
2183	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2184		.vendor_name = "Casio",
2185		.product_name = "PL-40R",
2186		.ifnum = 0,
2187		.type = QUIRK_MIDI_YAMAHA
2188	}
2189},
2190{
2191	/* this ID is used by several devices without a product ID */
2192	USB_DEVICE(0x07cf, 0x6802),
2193	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2194		.vendor_name = "Casio",
2195		.product_name = "Keyboard",
2196		.ifnum = 0,
2197		.type = QUIRK_MIDI_YAMAHA
2198	}
2199},
2200
2201/* Mark of the Unicorn devices */
2202{
2203	/* thanks to Robert A. Lerche <ral 'at' msbit.com> */
2204	.match_flags = USB_DEVICE_ID_MATCH_VENDOR |
2205		       USB_DEVICE_ID_MATCH_PRODUCT |
2206		       USB_DEVICE_ID_MATCH_DEV_SUBCLASS,
2207	.idVendor = 0x07fd,
2208	.idProduct = 0x0001,
2209	.bDeviceSubClass = 2,
2210	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2211		.vendor_name = "MOTU",
2212		.product_name = "Fastlane",
2213		.ifnum = QUIRK_ANY_INTERFACE,
2214		.type = QUIRK_COMPOSITE,
2215		.data = & (const struct snd_usb_audio_quirk[]) {
2216			{
2217				.ifnum = 0,
2218				.type = QUIRK_MIDI_RAW_BYTES
2219			},
2220			{
2221				.ifnum = 1,
2222				.type = QUIRK_IGNORE_INTERFACE
2223			},
2224			{
2225				.ifnum = -1
2226			}
2227		}
2228	}
2229},
2230
2231/* Emagic devices */
2232{
2233	USB_DEVICE(0x086a, 0x0001),
2234	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2235		.vendor_name = "Emagic",
2236		/* .product_name = "Unitor8", */
2237		.ifnum = 2,
2238		.type = QUIRK_MIDI_EMAGIC,
2239		.data = & (const struct snd_usb_midi_endpoint_info) {
2240			.out_cables = 0x80ff,
2241			.in_cables  = 0x80ff
2242		}
2243	}
2244},
2245{
2246	USB_DEVICE(0x086a, 0x0002),
2247	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2248		.vendor_name = "Emagic",
2249		/* .product_name = "AMT8", */
2250		.ifnum = 2,
2251		.type = QUIRK_MIDI_EMAGIC,
2252		.data = & (const struct snd_usb_midi_endpoint_info) {
2253			.out_cables = 0x80ff,
2254			.in_cables  = 0x80ff
2255		}
2256	}
2257},
2258{
2259	USB_DEVICE(0x086a, 0x0003),
2260	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2261		.vendor_name = "Emagic",
2262		/* .product_name = "MT4", */
2263		.ifnum = 2,
2264		.type = QUIRK_MIDI_EMAGIC,
2265		.data = & (const struct snd_usb_midi_endpoint_info) {
2266			.out_cables = 0x800f,
2267			.in_cables  = 0x8003
2268		}
2269	}
2270},
2271
2272/* KORG devices */
2273{
2274	USB_DEVICE_VENDOR_SPEC(0x0944, 0x0200),
2275	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2276		.vendor_name = "KORG, Inc.",
2277		/* .product_name = "PANDORA PX5D", */
2278		.ifnum = 3,
2279		.type = QUIRK_MIDI_STANDARD_INTERFACE,
2280	}
2281},
2282
 
 
 
 
 
 
 
 
 
 
2283/* AKAI devices */
2284{
2285	USB_DEVICE(0x09e8, 0x0062),
2286	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2287		.vendor_name = "AKAI",
2288		.product_name = "MPD16",
2289		.ifnum = 0,
2290		.type = QUIRK_MIDI_AKAI,
2291	}
2292},
2293
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2294/* TerraTec devices */
2295{
2296	USB_DEVICE_VENDOR_SPEC(0x0ccd, 0x0012),
2297	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2298		.vendor_name = "TerraTec",
2299		.product_name = "PHASE 26",
2300		.ifnum = 3,
2301		.type = QUIRK_MIDI_STANDARD_INTERFACE
2302	}
2303},
2304{
2305	USB_DEVICE_VENDOR_SPEC(0x0ccd, 0x0013),
2306	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2307		.vendor_name = "TerraTec",
2308		.product_name = "PHASE 26",
2309		.ifnum = 3,
2310		.type = QUIRK_MIDI_STANDARD_INTERFACE
2311	}
2312},
2313{
2314	USB_DEVICE_VENDOR_SPEC(0x0ccd, 0x0014),
2315	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2316		.vendor_name = "TerraTec",
2317		.product_name = "PHASE 26",
2318		.ifnum = 3,
2319		.type = QUIRK_MIDI_STANDARD_INTERFACE
2320	}
2321},
2322{
2323	USB_DEVICE(0x0ccd, 0x0028),
2324	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2325		.vendor_name = "TerraTec",
2326		.product_name = "Aureon5.1MkII",
2327		.ifnum = QUIRK_NO_INTERFACE
2328	}
2329},
2330{
2331	USB_DEVICE(0x0ccd, 0x0035),
2332	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2333		.vendor_name = "Miditech",
2334		.product_name = "Play'n Roll",
2335		.ifnum = 0,
2336		.type = QUIRK_MIDI_CME
2337	}
2338},
2339
2340/* Stanton/N2IT Final Scratch v1 device ('Scratchamp') */
2341{
2342	USB_DEVICE(0x103d, 0x0100),
2343		.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2344		.vendor_name = "Stanton",
2345		.product_name = "ScratchAmp",
2346		.ifnum = QUIRK_NO_INTERFACE
2347	}
2348},
2349{
2350	USB_DEVICE(0x103d, 0x0101),
2351		.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2352		.vendor_name = "Stanton",
2353		.product_name = "ScratchAmp",
2354		.ifnum = QUIRK_NO_INTERFACE
2355	}
2356},
2357
2358/* Novation EMS devices */
2359{
2360	USB_DEVICE_VENDOR_SPEC(0x1235, 0x0001),
2361	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2362		.vendor_name = "Novation",
2363		.product_name = "ReMOTE Audio/XStation",
2364		.ifnum = 4,
2365		.type = QUIRK_MIDI_NOVATION
2366	}
2367},
2368{
2369	USB_DEVICE_VENDOR_SPEC(0x1235, 0x0002),
2370	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2371		.vendor_name = "Novation",
2372		.product_name = "Speedio",
2373		.ifnum = 3,
2374		.type = QUIRK_MIDI_NOVATION
2375	}
2376},
2377{
 
 
 
 
 
 
 
 
 
2378	USB_DEVICE(0x1235, 0x000e),
2379	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2380		/* .vendor_name = "Novation", */
2381		/* .product_name = "Launchpad", */
2382		.ifnum = 0,
2383		.type = QUIRK_MIDI_RAW_BYTES
2384	}
2385},
2386{
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2387	USB_DEVICE_VENDOR_SPEC(0x1235, 0x4661),
2388	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2389		.vendor_name = "Novation",
2390		.product_name = "ReMOTE25",
2391		.ifnum = 0,
2392		.type = QUIRK_MIDI_NOVATION
2393	}
2394},
2395
2396/* Access Music devices */
2397{
2398	/* VirusTI Desktop */
2399	USB_DEVICE_VENDOR_SPEC(0x133e, 0x0815),
2400	.driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
2401		.ifnum = QUIRK_ANY_INTERFACE,
2402		.type = QUIRK_COMPOSITE,
2403		.data = &(const struct snd_usb_audio_quirk[]) {
2404			{
2405				.ifnum = 3,
2406				.type = QUIRK_MIDI_FIXED_ENDPOINT,
2407				.data = &(const struct snd_usb_midi_endpoint_info) {
2408					.out_cables = 0x0003,
2409					.in_cables  = 0x0003
2410				}
2411			},
2412			{
2413				.ifnum = 4,
2414				.type = QUIRK_IGNORE_INTERFACE
2415			},
2416			{
2417				.ifnum = -1
2418			}
2419		}
2420	}
2421},
2422
2423/* */
2424{
2425	/* aka. Serato Scratch Live DJ Box */
2426	USB_DEVICE(0x13e5, 0x0001),
2427	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2428		.vendor_name = "Rane",
2429		.product_name = "SL-1",
2430		.ifnum = QUIRK_NO_INTERFACE
2431	}
2432},
2433
2434/* Native Instruments MK2 series */
2435{
2436	/* Komplete Audio 6 */
2437	.match_flags = USB_DEVICE_ID_MATCH_DEVICE,
2438	.idVendor = 0x17cc,
2439	.idProduct = 0x1000,
2440},
2441{
2442	/* Traktor Audio 6 */
2443	.match_flags = USB_DEVICE_ID_MATCH_DEVICE,
2444	.idVendor = 0x17cc,
2445	.idProduct = 0x1010,
2446},
2447{
2448	/* Traktor Audio 10 */
2449	.match_flags = USB_DEVICE_ID_MATCH_DEVICE,
2450	.idVendor = 0x17cc,
2451	.idProduct = 0x1020,
2452},
2453
 
 
 
 
 
 
 
 
 
 
 
2454/* KeithMcMillen Stringport */
2455{
2456	USB_DEVICE(0x1f38, 0x0001),
2457	.bInterfaceClass = USB_CLASS_AUDIO,
2458},
2459
2460/* Miditech devices */
2461{
2462	USB_DEVICE(0x4752, 0x0011),
2463	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2464		.vendor_name = "Miditech",
2465		.product_name = "Midistart-2",
2466		.ifnum = 0,
2467		.type = QUIRK_MIDI_CME
2468	}
2469},
2470
2471/* Central Music devices */
2472{
2473	/* this ID used by both Miditech MidiStudio-2 and CME UF-x */
2474	USB_DEVICE(0x7104, 0x2202),
2475	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2476		.ifnum = 0,
2477		.type = QUIRK_MIDI_CME
2478	}
2479},
2480
2481/* Hauppauge HVR-950Q and HVR-850 */
2482{
2483	USB_DEVICE_VENDOR_SPEC(0x2040, 0x7200),
2484	.match_flags = USB_DEVICE_ID_MATCH_DEVICE |
2485		       USB_DEVICE_ID_MATCH_INT_CLASS |
2486		       USB_DEVICE_ID_MATCH_INT_SUBCLASS,
2487	.bInterfaceClass = USB_CLASS_AUDIO,
2488	.bInterfaceSubClass = USB_SUBCLASS_AUDIOCONTROL,
2489	.driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
2490		.vendor_name = "Hauppauge",
2491		.product_name = "HVR-950Q",
2492		.ifnum = QUIRK_ANY_INTERFACE,
2493		.type = QUIRK_AUDIO_ALIGN_TRANSFER,
2494	}
2495},
2496{
2497	USB_DEVICE_VENDOR_SPEC(0x2040, 0x7240),
2498	.match_flags = USB_DEVICE_ID_MATCH_DEVICE |
2499		       USB_DEVICE_ID_MATCH_INT_CLASS |
2500		       USB_DEVICE_ID_MATCH_INT_SUBCLASS,
2501	.bInterfaceClass = USB_CLASS_AUDIO,
2502	.bInterfaceSubClass = USB_SUBCLASS_AUDIOCONTROL,
2503	.driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
2504		.vendor_name = "Hauppauge",
2505		.product_name = "HVR-850",
2506		.ifnum = QUIRK_ANY_INTERFACE,
2507		.type = QUIRK_AUDIO_ALIGN_TRANSFER,
2508	}
2509},
2510{
2511	USB_DEVICE_VENDOR_SPEC(0x2040, 0x7210),
2512	.match_flags = USB_DEVICE_ID_MATCH_DEVICE |
2513		       USB_DEVICE_ID_MATCH_INT_CLASS |
2514		       USB_DEVICE_ID_MATCH_INT_SUBCLASS,
2515	.bInterfaceClass = USB_CLASS_AUDIO,
2516	.bInterfaceSubClass = USB_SUBCLASS_AUDIOCONTROL,
2517	.driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
2518		.vendor_name = "Hauppauge",
2519		.product_name = "HVR-950Q",
2520		.ifnum = QUIRK_ANY_INTERFACE,
2521		.type = QUIRK_AUDIO_ALIGN_TRANSFER,
2522	}
2523},
2524{
2525	USB_DEVICE_VENDOR_SPEC(0x2040, 0x7217),
2526	.match_flags = USB_DEVICE_ID_MATCH_DEVICE |
2527		       USB_DEVICE_ID_MATCH_INT_CLASS |
2528		       USB_DEVICE_ID_MATCH_INT_SUBCLASS,
2529	.bInterfaceClass = USB_CLASS_AUDIO,
2530	.bInterfaceSubClass = USB_SUBCLASS_AUDIOCONTROL,
2531	.driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
2532		.vendor_name = "Hauppauge",
2533		.product_name = "HVR-950Q",
2534		.ifnum = QUIRK_ANY_INTERFACE,
2535		.type = QUIRK_AUDIO_ALIGN_TRANSFER,
2536	}
2537},
2538{
2539	USB_DEVICE_VENDOR_SPEC(0x2040, 0x721b),
2540	.match_flags = USB_DEVICE_ID_MATCH_DEVICE |
2541		       USB_DEVICE_ID_MATCH_INT_CLASS |
2542		       USB_DEVICE_ID_MATCH_INT_SUBCLASS,
 
 
2543	.bInterfaceClass = USB_CLASS_AUDIO,
2544	.bInterfaceSubClass = USB_SUBCLASS_AUDIOCONTROL,
2545	.driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
2546		.vendor_name = "Hauppauge",
2547		.product_name = "HVR-950Q",
2548		.ifnum = QUIRK_ANY_INTERFACE,
2549		.type = QUIRK_AUDIO_ALIGN_TRANSFER,
2550	}
2551},
 
 
2552{
2553	USB_DEVICE_VENDOR_SPEC(0x2040, 0x721e),
2554	.match_flags = USB_DEVICE_ID_MATCH_DEVICE |
2555		       USB_DEVICE_ID_MATCH_INT_CLASS |
2556		       USB_DEVICE_ID_MATCH_INT_SUBCLASS,
2557	.bInterfaceClass = USB_CLASS_AUDIO,
2558	.bInterfaceSubClass = USB_SUBCLASS_AUDIOCONTROL,
2559	.driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
2560		.vendor_name = "Hauppauge",
2561		.product_name = "HVR-950Q",
2562		.ifnum = QUIRK_ANY_INTERFACE,
2563		.type = QUIRK_AUDIO_ALIGN_TRANSFER,
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2564	}
2565},
 
 
2566{
2567	USB_DEVICE_VENDOR_SPEC(0x2040, 0x721f),
2568	.match_flags = USB_DEVICE_ID_MATCH_DEVICE |
2569		       USB_DEVICE_ID_MATCH_INT_CLASS |
2570		       USB_DEVICE_ID_MATCH_INT_SUBCLASS,
2571	.bInterfaceClass = USB_CLASS_AUDIO,
2572	.bInterfaceSubClass = USB_SUBCLASS_AUDIOCONTROL,
2573	.driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
2574		.vendor_name = "Hauppauge",
2575		.product_name = "HVR-950Q",
2576		.ifnum = QUIRK_ANY_INTERFACE,
2577		.type = QUIRK_AUDIO_ALIGN_TRANSFER,
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2578	}
2579},
2580{
2581	USB_DEVICE_VENDOR_SPEC(0x2040, 0x7280),
2582	.match_flags = USB_DEVICE_ID_MATCH_DEVICE |
2583		       USB_DEVICE_ID_MATCH_INT_CLASS |
2584		       USB_DEVICE_ID_MATCH_INT_SUBCLASS,
2585	.bInterfaceClass = USB_CLASS_AUDIO,
2586	.bInterfaceSubClass = USB_SUBCLASS_AUDIOCONTROL,
2587	.driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
2588		.vendor_name = "Hauppauge",
2589		.product_name = "HVR-950Q",
2590		.ifnum = QUIRK_ANY_INTERFACE,
2591		.type = QUIRK_AUDIO_ALIGN_TRANSFER,
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2592	}
2593},
 
 
2594{
2595	USB_DEVICE_VENDOR_SPEC(0x0fd9, 0x0008),
2596	.match_flags = USB_DEVICE_ID_MATCH_DEVICE |
2597		       USB_DEVICE_ID_MATCH_INT_CLASS |
2598		       USB_DEVICE_ID_MATCH_INT_SUBCLASS,
2599	.bInterfaceClass = USB_CLASS_AUDIO,
2600	.bInterfaceSubClass = USB_SUBCLASS_AUDIOCONTROL,
2601	.driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
2602		.vendor_name = "Hauppauge",
2603		.product_name = "HVR-950Q",
2604		.ifnum = QUIRK_ANY_INTERFACE,
2605		.type = QUIRK_AUDIO_ALIGN_TRANSFER,
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2606	}
2607},
2608
2609/* Digidesign Mbox */
2610{
2611	/* Thanks to Clemens Ladisch <clemens@ladisch.de> */
2612	USB_DEVICE(0x0dba, 0x1000),
2613	.driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
2614		.vendor_name = "Digidesign",
2615		.product_name = "MBox",
2616		.ifnum = QUIRK_ANY_INTERFACE,
2617		.type = QUIRK_COMPOSITE,
2618		.data = (const struct snd_usb_audio_quirk[]){
2619			{
2620				.ifnum = 0,
2621				.type = QUIRK_IGNORE_INTERFACE,
2622			},
2623			{
2624				.ifnum = 1,
2625				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
2626				.data = &(const struct audioformat) {
2627					.formats = SNDRV_PCM_FMTBIT_S24_3BE,
2628					.channels = 2,
2629					.iface = 1,
2630					.altsetting = 1,
2631					.altset_idx = 1,
2632					.attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
2633					.endpoint = 0x02,
2634					.ep_attr = 0x01,
2635					.maxpacksize = 0x130,
2636					.rates = SNDRV_PCM_RATE_44100 |
2637						 SNDRV_PCM_RATE_48000,
2638					.rate_min = 44100,
2639					.rate_max = 48000,
2640					.nr_rates = 2,
2641					.rate_table = (unsigned int[]) {
2642						44100, 48000
2643					}
2644				}
2645			},
2646			{
2647				.ifnum = -1
2648			}
2649		}
 
 
2650
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2651	}
2652},
2653
2654{
2655	/*
2656	 * Some USB MIDI devices don't have an audio control interface,
2657	 * so we have to grab MIDI streaming interfaces here.
2658	 */
2659	.match_flags = USB_DEVICE_ID_MATCH_INT_CLASS |
2660		       USB_DEVICE_ID_MATCH_INT_SUBCLASS,
2661	.bInterfaceClass = USB_CLASS_AUDIO,
2662	.bInterfaceSubClass = USB_SUBCLASS_MIDISTREAMING,
2663	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2664		.ifnum = QUIRK_ANY_INTERFACE,
2665		.type = QUIRK_MIDI_STANDARD_INTERFACE
 
 
 
 
 
 
 
 
 
 
 
 
2666	}
2667},
2668
2669#undef USB_DEVICE_VENDOR_SPEC
v4.10.11
   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/* FTDI devices */
  43{
  44	USB_DEVICE(0x0403, 0xb8d8),
  45	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
  46		/* .vendor_name = "STARR LABS", */
  47		/* .product_name = "Starr Labs MIDI USB device", */
  48		.ifnum = 0,
  49		.type = QUIRK_MIDI_FTDI
  50	}
  51},
  52
  53{
  54	/* Creative BT-D1 */
  55	USB_DEVICE(0x041e, 0x0005),
  56	.driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
  57		.ifnum = 1,
  58		.type = QUIRK_AUDIO_FIXED_ENDPOINT,
  59		.data = &(const struct audioformat) {
  60			.formats = SNDRV_PCM_FMTBIT_S16_LE,
  61			.channels = 2,
  62			.iface = 1,
  63			.altsetting = 1,
  64			.altset_idx = 1,
  65			.endpoint = 0x03,
  66			.ep_attr = USB_ENDPOINT_XFER_ISOC,
  67			.attributes = 0,
  68			.rates = SNDRV_PCM_RATE_CONTINUOUS,
  69			.rate_min = 48000,
  70			.rate_max = 48000,
  71		}
  72	}
  73},
  74
  75/* Creative/E-Mu devices */
  76{
  77	USB_DEVICE(0x041e, 0x3010),
  78	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
  79		.vendor_name = "Creative Labs",
  80		.product_name = "Sound Blaster MP3+",
  81		.ifnum = QUIRK_NO_INTERFACE
  82	}
  83},
  84/* Creative/Toshiba Multimedia Center SB-0500 */
  85{
  86	USB_DEVICE(0x041e, 0x3048),
  87	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
  88		.vendor_name = "Toshiba",
  89		.product_name = "SB-0500",
  90		.ifnum = QUIRK_NO_INTERFACE
  91	}
  92},
  93{
  94	/* E-Mu 0202 USB */
  95	.match_flags = USB_DEVICE_ID_MATCH_DEVICE,
  96	.idVendor = 0x041e,
  97	.idProduct = 0x3f02,
  98	.bInterfaceClass = USB_CLASS_AUDIO,
  99},
 100{
 101	/* E-Mu 0404 USB */
 102	.match_flags = USB_DEVICE_ID_MATCH_DEVICE,
 103	.idVendor = 0x041e,
 104	.idProduct = 0x3f04,
 105	.bInterfaceClass = USB_CLASS_AUDIO,
 106},
 107{
 108	/* E-Mu Tracker Pre */
 109	.match_flags = USB_DEVICE_ID_MATCH_DEVICE,
 110	.idVendor = 0x041e,
 111	.idProduct = 0x3f0a,
 112	.bInterfaceClass = USB_CLASS_AUDIO,
 113},
 114{
 115	/* E-Mu 0204 USB */
 116	.match_flags = USB_DEVICE_ID_MATCH_DEVICE,
 117	.idVendor = 0x041e,
 118	.idProduct = 0x3f19,
 119	.bInterfaceClass = USB_CLASS_AUDIO,
 120},
 121
 122/*
 123 * HP Wireless Audio
 124 * When not ignored, causes instability issues for some users, forcing them to
 125 * blacklist the entire module.
 126 */
 127{
 128	USB_DEVICE(0x0424, 0xb832),
 129	.driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
 130		.vendor_name = "Standard Microsystems Corp.",
 131		.product_name = "HP Wireless Audio",
 132		.ifnum = QUIRK_ANY_INTERFACE,
 133		.type = QUIRK_COMPOSITE,
 134		.data = (const struct snd_usb_audio_quirk[]) {
 135			/* Mixer */
 136			{
 137				.ifnum = 0,
 138				.type = QUIRK_IGNORE_INTERFACE,
 139			},
 140			/* Playback */
 141			{
 142				.ifnum = 1,
 143				.type = QUIRK_IGNORE_INTERFACE,
 144			},
 145			/* Capture */
 146			{
 147				.ifnum = 2,
 148				.type = QUIRK_IGNORE_INTERFACE,
 149			},
 150			/* HID Device, .ifnum = 3 */
 151			{
 152				.ifnum = -1,
 153			}
 154		}
 155	}
 156},
 157
 158/*
 159 * Logitech QuickCam: bDeviceClass is vendor-specific, so generic interface
 160 * class matches do not take effect without an explicit ID match.
 161 */
 162{
 163	.match_flags = USB_DEVICE_ID_MATCH_DEVICE |
 164		       USB_DEVICE_ID_MATCH_INT_CLASS |
 165		       USB_DEVICE_ID_MATCH_INT_SUBCLASS,
 166	.idVendor = 0x046d,
 167	.idProduct = 0x0850,
 168	.bInterfaceClass = USB_CLASS_AUDIO,
 169	.bInterfaceSubClass = USB_SUBCLASS_AUDIOCONTROL
 170},
 171{
 172	.match_flags = USB_DEVICE_ID_MATCH_DEVICE |
 173		       USB_DEVICE_ID_MATCH_INT_CLASS |
 174		       USB_DEVICE_ID_MATCH_INT_SUBCLASS,
 175	.idVendor = 0x046d,
 176	.idProduct = 0x08ae,
 177	.bInterfaceClass = USB_CLASS_AUDIO,
 178	.bInterfaceSubClass = USB_SUBCLASS_AUDIOCONTROL
 179},
 180{
 181	.match_flags = USB_DEVICE_ID_MATCH_DEVICE |
 182		       USB_DEVICE_ID_MATCH_INT_CLASS |
 183		       USB_DEVICE_ID_MATCH_INT_SUBCLASS,
 184	.idVendor = 0x046d,
 185	.idProduct = 0x08c6,
 186	.bInterfaceClass = USB_CLASS_AUDIO,
 187	.bInterfaceSubClass = USB_SUBCLASS_AUDIOCONTROL
 188},
 189{
 190	.match_flags = USB_DEVICE_ID_MATCH_DEVICE |
 191		       USB_DEVICE_ID_MATCH_INT_CLASS |
 192		       USB_DEVICE_ID_MATCH_INT_SUBCLASS,
 193	.idVendor = 0x046d,
 194	.idProduct = 0x08f0,
 195	.bInterfaceClass = USB_CLASS_AUDIO,
 196	.bInterfaceSubClass = USB_SUBCLASS_AUDIOCONTROL
 197},
 198{
 199	.match_flags = USB_DEVICE_ID_MATCH_DEVICE |
 200		       USB_DEVICE_ID_MATCH_INT_CLASS |
 201		       USB_DEVICE_ID_MATCH_INT_SUBCLASS,
 202	.idVendor = 0x046d,
 203	.idProduct = 0x08f5,
 204	.bInterfaceClass = USB_CLASS_AUDIO,
 205	.bInterfaceSubClass = USB_SUBCLASS_AUDIOCONTROL
 206},
 207{
 208	.match_flags = USB_DEVICE_ID_MATCH_DEVICE |
 209		       USB_DEVICE_ID_MATCH_INT_CLASS |
 210		       USB_DEVICE_ID_MATCH_INT_SUBCLASS,
 211	.idVendor = 0x046d,
 212	.idProduct = 0x08f6,
 213	.bInterfaceClass = USB_CLASS_AUDIO,
 214	.bInterfaceSubClass = USB_SUBCLASS_AUDIOCONTROL
 215},
 216{
 217	.match_flags = USB_DEVICE_ID_MATCH_DEVICE |
 218		       USB_DEVICE_ID_MATCH_INT_CLASS |
 219		       USB_DEVICE_ID_MATCH_INT_SUBCLASS,
 220	.idVendor = 0x046d,
 221	.idProduct = 0x0990,
 222	.bInterfaceClass = USB_CLASS_AUDIO,
 223	.bInterfaceSubClass = USB_SUBCLASS_AUDIOCONTROL,
 224	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
 225		.vendor_name = "Logitech, Inc.",
 226		.product_name = "QuickCam Pro 9000",
 227		.ifnum = QUIRK_NO_INTERFACE
 228	}
 229},
 230
 231/*
 232 * Yamaha devices
 233 */
 234
 235#define YAMAHA_DEVICE(id, name) { \
 236	USB_DEVICE(0x0499, id), \
 237	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { \
 238		.vendor_name = "Yamaha", \
 239		.product_name = name, \
 240		.ifnum = QUIRK_ANY_INTERFACE, \
 241		.type = QUIRK_MIDI_YAMAHA \
 242	} \
 243}
 244#define YAMAHA_INTERFACE(id, intf, name) { \
 245	USB_DEVICE_VENDOR_SPEC(0x0499, id), \
 246	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { \
 247		.vendor_name = "Yamaha", \
 248		.product_name = name, \
 249		.ifnum = intf, \
 250		.type = QUIRK_MIDI_YAMAHA \
 251	} \
 252}
 253YAMAHA_DEVICE(0x1000, "UX256"),
 254YAMAHA_DEVICE(0x1001, "MU1000"),
 255YAMAHA_DEVICE(0x1002, "MU2000"),
 256YAMAHA_DEVICE(0x1003, "MU500"),
 257YAMAHA_INTERFACE(0x1004, 3, "UW500"),
 258YAMAHA_DEVICE(0x1005, "MOTIF6"),
 259YAMAHA_DEVICE(0x1006, "MOTIF7"),
 260YAMAHA_DEVICE(0x1007, "MOTIF8"),
 261YAMAHA_DEVICE(0x1008, "UX96"),
 262YAMAHA_DEVICE(0x1009, "UX16"),
 263YAMAHA_INTERFACE(0x100a, 3, "EOS BX"),
 264YAMAHA_DEVICE(0x100c, "UC-MX"),
 265YAMAHA_DEVICE(0x100d, "UC-KX"),
 266YAMAHA_DEVICE(0x100e, "S08"),
 267YAMAHA_DEVICE(0x100f, "CLP-150"),
 268YAMAHA_DEVICE(0x1010, "CLP-170"),
 269YAMAHA_DEVICE(0x1011, "P-250"),
 270YAMAHA_DEVICE(0x1012, "TYROS"),
 271YAMAHA_DEVICE(0x1013, "PF-500"),
 272YAMAHA_DEVICE(0x1014, "S90"),
 273YAMAHA_DEVICE(0x1015, "MOTIF-R"),
 274YAMAHA_DEVICE(0x1016, "MDP-5"),
 275YAMAHA_DEVICE(0x1017, "CVP-204"),
 276YAMAHA_DEVICE(0x1018, "CVP-206"),
 277YAMAHA_DEVICE(0x1019, "CVP-208"),
 278YAMAHA_DEVICE(0x101a, "CVP-210"),
 279YAMAHA_DEVICE(0x101b, "PSR-1100"),
 280YAMAHA_DEVICE(0x101c, "PSR-2100"),
 281YAMAHA_DEVICE(0x101d, "CLP-175"),
 282YAMAHA_DEVICE(0x101e, "PSR-K1"),
 283YAMAHA_DEVICE(0x101f, "EZ-J24"),
 284YAMAHA_DEVICE(0x1020, "EZ-250i"),
 285YAMAHA_DEVICE(0x1021, "MOTIF ES 6"),
 286YAMAHA_DEVICE(0x1022, "MOTIF ES 7"),
 287YAMAHA_DEVICE(0x1023, "MOTIF ES 8"),
 288YAMAHA_DEVICE(0x1024, "CVP-301"),
 289YAMAHA_DEVICE(0x1025, "CVP-303"),
 290YAMAHA_DEVICE(0x1026, "CVP-305"),
 291YAMAHA_DEVICE(0x1027, "CVP-307"),
 292YAMAHA_DEVICE(0x1028, "CVP-309"),
 293YAMAHA_DEVICE(0x1029, "CVP-309GP"),
 294YAMAHA_DEVICE(0x102a, "PSR-1500"),
 295YAMAHA_DEVICE(0x102b, "PSR-3000"),
 296YAMAHA_DEVICE(0x102e, "ELS-01/01C"),
 297YAMAHA_DEVICE(0x1030, "PSR-295/293"),
 298YAMAHA_DEVICE(0x1031, "DGX-205/203"),
 299YAMAHA_DEVICE(0x1032, "DGX-305"),
 300YAMAHA_DEVICE(0x1033, "DGX-505"),
 301YAMAHA_DEVICE(0x1034, NULL),
 302YAMAHA_DEVICE(0x1035, NULL),
 303YAMAHA_DEVICE(0x1036, NULL),
 304YAMAHA_DEVICE(0x1037, NULL),
 305YAMAHA_DEVICE(0x1038, NULL),
 306YAMAHA_DEVICE(0x1039, NULL),
 307YAMAHA_DEVICE(0x103a, NULL),
 308YAMAHA_DEVICE(0x103b, NULL),
 309YAMAHA_DEVICE(0x103c, NULL),
 310YAMAHA_DEVICE(0x103d, NULL),
 311YAMAHA_DEVICE(0x103e, NULL),
 312YAMAHA_DEVICE(0x103f, NULL),
 313YAMAHA_DEVICE(0x1040, NULL),
 314YAMAHA_DEVICE(0x1041, NULL),
 315YAMAHA_DEVICE(0x1042, NULL),
 316YAMAHA_DEVICE(0x1043, NULL),
 317YAMAHA_DEVICE(0x1044, NULL),
 318YAMAHA_DEVICE(0x1045, NULL),
 319YAMAHA_INTERFACE(0x104e, 0, NULL),
 320YAMAHA_DEVICE(0x104f, NULL),
 321YAMAHA_DEVICE(0x1050, NULL),
 322YAMAHA_DEVICE(0x1051, NULL),
 323YAMAHA_DEVICE(0x1052, NULL),
 324YAMAHA_INTERFACE(0x1053, 0, NULL),
 325YAMAHA_INTERFACE(0x1054, 0, NULL),
 326YAMAHA_DEVICE(0x1055, NULL),
 327YAMAHA_DEVICE(0x1056, NULL),
 328YAMAHA_DEVICE(0x1057, NULL),
 329YAMAHA_DEVICE(0x1058, NULL),
 330YAMAHA_DEVICE(0x1059, NULL),
 331YAMAHA_DEVICE(0x105a, NULL),
 332YAMAHA_DEVICE(0x105b, NULL),
 333YAMAHA_DEVICE(0x105c, NULL),
 334YAMAHA_DEVICE(0x105d, NULL),
 335{
 336	USB_DEVICE(0x0499, 0x1503),
 337	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
 338		/* .vendor_name = "Yamaha", */
 339		/* .product_name = "MOX6/MOX8", */
 340		.ifnum = QUIRK_ANY_INTERFACE,
 341		.type = QUIRK_COMPOSITE,
 342		.data = (const struct snd_usb_audio_quirk[]) {
 343			{
 344				.ifnum = 1,
 345				.type = QUIRK_AUDIO_STANDARD_INTERFACE
 346			},
 347			{
 348				.ifnum = 2,
 349				.type = QUIRK_AUDIO_STANDARD_INTERFACE
 350			},
 351			{
 352				.ifnum = 3,
 353				.type = QUIRK_MIDI_YAMAHA
 354			},
 355			{
 356				.ifnum = -1
 357			}
 358		}
 359	}
 360},
 361{
 362	USB_DEVICE(0x0499, 0x1507),
 363	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
 364		/* .vendor_name = "Yamaha", */
 365		/* .product_name = "THR10", */
 366		.ifnum = QUIRK_ANY_INTERFACE,
 367		.type = QUIRK_COMPOSITE,
 368		.data = (const struct snd_usb_audio_quirk[]) {
 369			{
 370				.ifnum = 1,
 371				.type = QUIRK_AUDIO_STANDARD_INTERFACE
 372			},
 373			{
 374				.ifnum = 2,
 375				.type = QUIRK_AUDIO_STANDARD_INTERFACE
 376			},
 377			{
 378				.ifnum = 3,
 379				.type = QUIRK_MIDI_YAMAHA
 380			},
 381			{
 382				.ifnum = -1
 383			}
 384		}
 385	}
 386},
 387{
 388	USB_DEVICE(0x0499, 0x1509),
 389	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
 390		/* .vendor_name = "Yamaha", */
 391		/* .product_name = "Steinberg UR22", */
 392		.ifnum = QUIRK_ANY_INTERFACE,
 393		.type = QUIRK_COMPOSITE,
 394		.data = (const struct snd_usb_audio_quirk[]) {
 395			{
 396				.ifnum = 1,
 397				.type = QUIRK_AUDIO_STANDARD_INTERFACE
 398			},
 399			{
 400				.ifnum = 2,
 401				.type = QUIRK_AUDIO_STANDARD_INTERFACE
 402			},
 403			{
 404				.ifnum = 3,
 405				.type = QUIRK_MIDI_YAMAHA
 406			},
 407			{
 408				.ifnum = 4,
 409				.type = QUIRK_IGNORE_INTERFACE
 410			},
 411			{
 412				.ifnum = -1
 413			}
 414		}
 415	}
 416},
 417{
 418	USB_DEVICE(0x0499, 0x150a),
 419	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
 420		/* .vendor_name = "Yamaha", */
 421		/* .product_name = "THR5A", */
 422		.ifnum = QUIRK_ANY_INTERFACE,
 423		.type = QUIRK_COMPOSITE,
 424		.data = (const struct snd_usb_audio_quirk[]) {
 425			{
 426				.ifnum = 1,
 427				.type = QUIRK_AUDIO_STANDARD_INTERFACE
 428			},
 429			{
 430				.ifnum = 2,
 431				.type = QUIRK_AUDIO_STANDARD_INTERFACE
 432			},
 433			{
 434				.ifnum = 3,
 435				.type = QUIRK_MIDI_YAMAHA
 436			},
 437			{
 438				.ifnum = -1
 439			}
 440		}
 441	}
 442},
 443{
 444	USB_DEVICE(0x0499, 0x150c),
 445	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
 446		/* .vendor_name = "Yamaha", */
 447		/* .product_name = "THR10C", */
 448		.ifnum = QUIRK_ANY_INTERFACE,
 449		.type = QUIRK_COMPOSITE,
 450		.data = (const struct snd_usb_audio_quirk[]) {
 451			{
 452				.ifnum = 1,
 453				.type = QUIRK_AUDIO_STANDARD_INTERFACE
 454			},
 455			{
 456				.ifnum = 2,
 457				.type = QUIRK_AUDIO_STANDARD_INTERFACE
 458			},
 459			{
 460				.ifnum = 3,
 461				.type = QUIRK_MIDI_YAMAHA
 462			},
 463			{
 464				.ifnum = -1
 465			}
 466		}
 467	}
 468},
 469YAMAHA_DEVICE(0x2000, "DGP-7"),
 470YAMAHA_DEVICE(0x2001, "DGP-5"),
 471YAMAHA_DEVICE(0x2002, NULL),
 472YAMAHA_DEVICE(0x2003, NULL),
 473YAMAHA_DEVICE(0x5000, "CS1D"),
 474YAMAHA_DEVICE(0x5001, "DSP1D"),
 475YAMAHA_DEVICE(0x5002, "DME32"),
 476YAMAHA_DEVICE(0x5003, "DM2000"),
 477YAMAHA_DEVICE(0x5004, "02R96"),
 478YAMAHA_DEVICE(0x5005, "ACU16-C"),
 479YAMAHA_DEVICE(0x5006, "NHB32-C"),
 480YAMAHA_DEVICE(0x5007, "DM1000"),
 481YAMAHA_DEVICE(0x5008, "01V96"),
 482YAMAHA_DEVICE(0x5009, "SPX2000"),
 483YAMAHA_DEVICE(0x500a, "PM5D"),
 484YAMAHA_DEVICE(0x500b, "DME64N"),
 485YAMAHA_DEVICE(0x500c, "DME24N"),
 486YAMAHA_DEVICE(0x500d, NULL),
 487YAMAHA_DEVICE(0x500e, NULL),
 488YAMAHA_DEVICE(0x500f, NULL),
 489YAMAHA_DEVICE(0x7000, "DTX"),
 490YAMAHA_DEVICE(0x7010, "UB99"),
 491#undef YAMAHA_DEVICE
 492#undef YAMAHA_INTERFACE
 493/* this catches most recent vendor-specific Yamaha devices */
 494{
 495	.match_flags = USB_DEVICE_ID_MATCH_VENDOR |
 496	               USB_DEVICE_ID_MATCH_INT_CLASS,
 497	.idVendor = 0x0499,
 498	.bInterfaceClass = USB_CLASS_VENDOR_SPEC,
 499	.driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
 500		.ifnum = QUIRK_ANY_INTERFACE,
 501		.type = QUIRK_AUTODETECT
 502	}
 503},
 504
 505/*
 506 * Roland/RolandED/Edirol/BOSS devices
 507 */
 508{
 509	USB_DEVICE(0x0582, 0x0000),
 510	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
 511		.vendor_name = "Roland",
 512		.product_name = "UA-100",
 513		.ifnum = QUIRK_ANY_INTERFACE,
 514		.type = QUIRK_COMPOSITE,
 515		.data = (const struct snd_usb_audio_quirk[]) {
 516			{
 517				.ifnum = 0,
 518				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
 519				.data = & (const struct audioformat) {
 520					.formats = SNDRV_PCM_FMTBIT_S16_LE,
 521					.channels = 4,
 522					.iface = 0,
 523					.altsetting = 1,
 524					.altset_idx = 1,
 525					.attributes = 0,
 526					.endpoint = 0x01,
 527					.ep_attr = 0x09,
 528					.rates = SNDRV_PCM_RATE_CONTINUOUS,
 529					.rate_min = 44100,
 530					.rate_max = 44100,
 531				}
 532			},
 533			{
 534				.ifnum = 1,
 535				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
 536				.data = & (const struct audioformat) {
 537					.formats = SNDRV_PCM_FMTBIT_S16_LE,
 538					.channels = 2,
 539					.iface = 1,
 540					.altsetting = 1,
 541					.altset_idx = 1,
 542					.attributes = UAC_EP_CS_ATTR_FILL_MAX,
 543					.endpoint = 0x81,
 544					.ep_attr = 0x05,
 545					.rates = SNDRV_PCM_RATE_CONTINUOUS,
 546					.rate_min = 44100,
 547					.rate_max = 44100,
 548				}
 549			},
 550			{
 551				.ifnum = 2,
 552				.type = QUIRK_MIDI_FIXED_ENDPOINT,
 553				.data = & (const struct snd_usb_midi_endpoint_info) {
 554					.out_cables = 0x0007,
 555					.in_cables  = 0x0007
 556				}
 557			},
 558			{
 559				.ifnum = -1
 560			}
 561		}
 562	}
 563},
 564{
 565	USB_DEVICE(0x0582, 0x0002),
 566	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
 567		.vendor_name = "EDIROL",
 568		.product_name = "UM-4",
 569		.ifnum = QUIRK_ANY_INTERFACE,
 570		.type = QUIRK_COMPOSITE,
 571		.data = (const struct snd_usb_audio_quirk[]) {
 572			{
 573				.ifnum = 0,
 574				.type = QUIRK_IGNORE_INTERFACE
 575			},
 576			{
 577				.ifnum = 1,
 578				.type = QUIRK_IGNORE_INTERFACE
 579			},
 580			{
 581				.ifnum = 2,
 582				.type = QUIRK_MIDI_FIXED_ENDPOINT,
 583				.data = & (const struct snd_usb_midi_endpoint_info) {
 584					.out_cables = 0x000f,
 585					.in_cables  = 0x000f
 586				}
 587			},
 588			{
 589				.ifnum = -1
 590			}
 591		}
 592	}
 593},
 594{
 595	USB_DEVICE(0x0582, 0x0003),
 596	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
 597		.vendor_name = "Roland",
 598		.product_name = "SC-8850",
 599		.ifnum = QUIRK_ANY_INTERFACE,
 600		.type = QUIRK_COMPOSITE,
 601		.data = (const struct snd_usb_audio_quirk[]) {
 602			{
 603				.ifnum = 0,
 604				.type = QUIRK_IGNORE_INTERFACE
 605			},
 606			{
 607				.ifnum = 1,
 608				.type = QUIRK_IGNORE_INTERFACE
 609			},
 610			{
 611				.ifnum = 2,
 612				.type = QUIRK_MIDI_FIXED_ENDPOINT,
 613				.data = & (const struct snd_usb_midi_endpoint_info) {
 614					.out_cables = 0x003f,
 615					.in_cables  = 0x003f
 616				}
 617			},
 618			{
 619				.ifnum = -1
 620			}
 621		}
 622	}
 623},
 624{
 625	USB_DEVICE(0x0582, 0x0004),
 626	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
 627		.vendor_name = "Roland",
 628		.product_name = "U-8",
 629		.ifnum = QUIRK_ANY_INTERFACE,
 630		.type = QUIRK_COMPOSITE,
 631		.data = (const struct snd_usb_audio_quirk[]) {
 632			{
 633				.ifnum = 0,
 634				.type = QUIRK_IGNORE_INTERFACE
 635			},
 636			{
 637				.ifnum = 1,
 638				.type = QUIRK_IGNORE_INTERFACE
 639			},
 640			{
 641				.ifnum = 2,
 642				.type = QUIRK_MIDI_FIXED_ENDPOINT,
 643				.data = & (const struct snd_usb_midi_endpoint_info) {
 644					.out_cables = 0x0005,
 645					.in_cables  = 0x0005
 646				}
 647			},
 648			{
 649				.ifnum = -1
 650			}
 651		}
 652	}
 653},
 654{
 655	/* Has ID 0x0099 when not in "Advanced Driver" mode.
 656	 * The UM-2EX has only one input, but we cannot detect this. */
 657	USB_DEVICE(0x0582, 0x0005),
 658	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
 659		.vendor_name = "EDIROL",
 660		.product_name = "UM-2",
 661		.ifnum = QUIRK_ANY_INTERFACE,
 662		.type = QUIRK_COMPOSITE,
 663		.data = (const struct snd_usb_audio_quirk[]) {
 664			{
 665				.ifnum = 0,
 666				.type = QUIRK_IGNORE_INTERFACE
 667			},
 668			{
 669				.ifnum = 1,
 670				.type = QUIRK_IGNORE_INTERFACE
 671			},
 672			{
 673				.ifnum = 2,
 674				.type = QUIRK_MIDI_FIXED_ENDPOINT,
 675				.data = & (const struct snd_usb_midi_endpoint_info) {
 676					.out_cables = 0x0003,
 677					.in_cables  = 0x0003
 678				}
 679			},
 680			{
 681				.ifnum = -1
 682			}
 683		}
 684	}
 685},
 686{
 687	USB_DEVICE(0x0582, 0x0007),
 688	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
 689		.vendor_name = "Roland",
 690		.product_name = "SC-8820",
 691		.ifnum = QUIRK_ANY_INTERFACE,
 692		.type = QUIRK_COMPOSITE,
 693		.data = (const struct snd_usb_audio_quirk[]) {
 694			{
 695				.ifnum = 0,
 696				.type = QUIRK_IGNORE_INTERFACE
 697			},
 698			{
 699				.ifnum = 1,
 700				.type = QUIRK_IGNORE_INTERFACE
 701			},
 702			{
 703				.ifnum = 2,
 704				.type = QUIRK_MIDI_FIXED_ENDPOINT,
 705				.data = & (const struct snd_usb_midi_endpoint_info) {
 706					.out_cables = 0x0013,
 707					.in_cables  = 0x0013
 708				}
 709			},
 710			{
 711				.ifnum = -1
 712			}
 713		}
 714	}
 715},
 716{
 717	USB_DEVICE(0x0582, 0x0008),
 718	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
 719		.vendor_name = "Roland",
 720		.product_name = "PC-300",
 721		.ifnum = QUIRK_ANY_INTERFACE,
 722		.type = QUIRK_COMPOSITE,
 723		.data = (const struct snd_usb_audio_quirk[]) {
 724			{
 725				.ifnum = 0,
 726				.type = QUIRK_IGNORE_INTERFACE
 727			},
 728			{
 729				.ifnum = 1,
 730				.type = QUIRK_IGNORE_INTERFACE
 731			},
 732			{
 733				.ifnum = 2,
 734				.type = QUIRK_MIDI_FIXED_ENDPOINT,
 735				.data = & (const struct snd_usb_midi_endpoint_info) {
 736					.out_cables = 0x0001,
 737					.in_cables  = 0x0001
 738				}
 739			},
 740			{
 741				.ifnum = -1
 742			}
 743		}
 744	}
 745},
 746{
 747	/* has ID 0x009d when not in "Advanced Driver" mode */
 748	USB_DEVICE(0x0582, 0x0009),
 749	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
 750		.vendor_name = "EDIROL",
 751		.product_name = "UM-1",
 752		.ifnum = QUIRK_ANY_INTERFACE,
 753		.type = QUIRK_COMPOSITE,
 754		.data = (const struct snd_usb_audio_quirk[]) {
 755			{
 756				.ifnum = 0,
 757				.type = QUIRK_IGNORE_INTERFACE
 758			},
 759			{
 760				.ifnum = 1,
 761				.type = QUIRK_IGNORE_INTERFACE
 762			},
 763			{
 764				.ifnum = 2,
 765				.type = QUIRK_MIDI_FIXED_ENDPOINT,
 766				.data = & (const struct snd_usb_midi_endpoint_info) {
 767					.out_cables = 0x0001,
 768					.in_cables  = 0x0001
 769				}
 770			},
 771			{
 772				.ifnum = -1
 773			}
 774		}
 775	}
 776},
 777{
 778	USB_DEVICE(0x0582, 0x000b),
 779	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
 780		.vendor_name = "Roland",
 781		.product_name = "SK-500",
 782		.ifnum = QUIRK_ANY_INTERFACE,
 783		.type = QUIRK_COMPOSITE,
 784		.data = (const struct snd_usb_audio_quirk[]) {
 785			{
 786				.ifnum = 0,
 787				.type = QUIRK_IGNORE_INTERFACE
 788			},
 789			{
 790				.ifnum = 1,
 791				.type = QUIRK_IGNORE_INTERFACE
 792			},
 793			{
 794				.ifnum = 2,
 795				.type = QUIRK_MIDI_FIXED_ENDPOINT,
 796				.data = & (const struct snd_usb_midi_endpoint_info) {
 797					.out_cables = 0x0013,
 798					.in_cables  = 0x0013
 799				}
 800			},
 801			{
 802				.ifnum = -1
 803			}
 804		}
 805	}
 806},
 807{
 808	/* thanks to Emiliano Grilli <emillo@libero.it>
 809	 * for helping researching this data */
 810	USB_DEVICE(0x0582, 0x000c),
 811	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
 812		.vendor_name = "Roland",
 813		.product_name = "SC-D70",
 814		.ifnum = QUIRK_ANY_INTERFACE,
 815		.type = QUIRK_COMPOSITE,
 816		.data = (const struct snd_usb_audio_quirk[]) {
 817			{
 818				.ifnum = 0,
 819				.type = QUIRK_AUDIO_STANDARD_INTERFACE
 
 
 
 
 
 
 
 
 
 
 
 
 
 820			},
 821			{
 822				.ifnum = 1,
 823				.type = QUIRK_AUDIO_STANDARD_INTERFACE
 
 
 
 
 
 
 
 
 
 
 
 
 
 824			},
 825			{
 826				.ifnum = 2,
 827				.type = QUIRK_MIDI_FIXED_ENDPOINT,
 828				.data = & (const struct snd_usb_midi_endpoint_info) {
 829					.out_cables = 0x0007,
 830					.in_cables  = 0x0007
 831				}
 832			},
 833			{
 834				.ifnum = -1
 835			}
 836		}
 837	}
 838},
 839{	/*
 840	 * This quirk is for the "Advanced Driver" mode of the Edirol UA-5.
 841	 * If the advanced mode switch at the back of the unit is off, the
 842	 * UA-5 has ID 0x0582/0x0011 and is standard compliant (no quirks),
 843	 * but offers only 16-bit PCM.
 844	 * In advanced mode, the UA-5 will output S24_3LE samples (two
 845	 * channels) at the rate indicated on the front switch, including
 846	 * the 96kHz sample rate.
 847	 */
 848	USB_DEVICE(0x0582, 0x0010),
 849	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
 850		.vendor_name = "EDIROL",
 851		.product_name = "UA-5",
 852		.ifnum = QUIRK_ANY_INTERFACE,
 853		.type = QUIRK_COMPOSITE,
 854		.data = (const struct snd_usb_audio_quirk[]) {
 855			{
 856				.ifnum = 1,
 857				.type = QUIRK_AUDIO_STANDARD_INTERFACE
 858			},
 859			{
 860				.ifnum = 2,
 861				.type = QUIRK_AUDIO_STANDARD_INTERFACE
 862			},
 863			{
 864				.ifnum = -1
 865			}
 866		}
 867	}
 868},
 869{
 870	/* has ID 0x0013 when not in "Advanced Driver" mode */
 871	USB_DEVICE(0x0582, 0x0012),
 872	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
 873		.vendor_name = "Roland",
 874		.product_name = "XV-5050",
 875		.ifnum = 0,
 876		.type = QUIRK_MIDI_FIXED_ENDPOINT,
 877		.data = & (const struct snd_usb_midi_endpoint_info) {
 878			.out_cables = 0x0001,
 879			.in_cables  = 0x0001
 880		}
 881	}
 882},
 883{
 884	/* has ID 0x0015 when not in "Advanced Driver" mode */
 885	USB_DEVICE(0x0582, 0x0014),
 886	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
 887		.vendor_name = "EDIROL",
 888		.product_name = "UM-880",
 889		.ifnum = 0,
 890		.type = QUIRK_MIDI_FIXED_ENDPOINT,
 891		.data = & (const struct snd_usb_midi_endpoint_info) {
 892			.out_cables = 0x01ff,
 893			.in_cables  = 0x01ff
 894		}
 895	}
 896},
 897{
 898	/* has ID 0x0017 when not in "Advanced Driver" mode */
 899	USB_DEVICE(0x0582, 0x0016),
 900	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
 901		.vendor_name = "EDIROL",
 902		.product_name = "SD-90",
 903		.ifnum = QUIRK_ANY_INTERFACE,
 904		.type = QUIRK_COMPOSITE,
 905		.data = (const struct snd_usb_audio_quirk[]) {
 906			{
 907				.ifnum = 0,
 908				.type = QUIRK_AUDIO_STANDARD_INTERFACE
 909			},
 910			{
 911				.ifnum = 1,
 912				.type = QUIRK_AUDIO_STANDARD_INTERFACE
 913			},
 914			{
 915				.ifnum = 2,
 916				.type = QUIRK_MIDI_FIXED_ENDPOINT,
 917				.data = & (const struct snd_usb_midi_endpoint_info) {
 918					.out_cables = 0x000f,
 919					.in_cables  = 0x000f
 920				}
 921			},
 922			{
 923				.ifnum = -1
 924			}
 925		}
 926	}
 927},
 928{
 929	/* has ID 0x001c when not in "Advanced Driver" mode */
 930	USB_DEVICE(0x0582, 0x001b),
 931	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
 932		.vendor_name = "Roland",
 933		.product_name = "MMP-2",
 934		.ifnum = QUIRK_ANY_INTERFACE,
 935		.type = QUIRK_COMPOSITE,
 936		.data = (const struct snd_usb_audio_quirk[]) {
 937			{
 938				.ifnum = 0,
 939				.type = QUIRK_IGNORE_INTERFACE
 940			},
 941			{
 942				.ifnum = 1,
 943				.type = QUIRK_IGNORE_INTERFACE
 944			},
 945			{
 946				.ifnum = 2,
 947				.type = QUIRK_MIDI_FIXED_ENDPOINT,
 948				.data = & (const struct snd_usb_midi_endpoint_info) {
 949					.out_cables = 0x0001,
 950					.in_cables  = 0x0001
 951				}
 952			},
 953			{
 954				.ifnum = -1
 955			}
 956		}
 957	}
 958},
 959{
 960	/* has ID 0x001e when not in "Advanced Driver" mode */
 961	USB_DEVICE(0x0582, 0x001d),
 962	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
 963		.vendor_name = "Roland",
 964		.product_name = "V-SYNTH",
 965		.ifnum = 0,
 966		.type = QUIRK_MIDI_FIXED_ENDPOINT,
 967		.data = & (const struct snd_usb_midi_endpoint_info) {
 968			.out_cables = 0x0001,
 969			.in_cables  = 0x0001
 970		}
 971	}
 972},
 973{
 974	/* has ID 0x0024 when not in "Advanced Driver" mode */
 975	USB_DEVICE(0x0582, 0x0023),
 976	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
 977		.vendor_name = "EDIROL",
 978		.product_name = "UM-550",
 979		.ifnum = 0,
 980		.type = QUIRK_MIDI_FIXED_ENDPOINT,
 981		.data = & (const struct snd_usb_midi_endpoint_info) {
 982			.out_cables = 0x003f,
 983			.in_cables  = 0x003f
 984		}
 985	}
 986},
 987{
 988	/*
 989	 * This quirk is for the "Advanced Driver" mode. If off, the UA-20
 990	 * has ID 0x0026 and is standard compliant, but has only 16-bit PCM
 991	 * and no MIDI.
 992	 */
 993	USB_DEVICE(0x0582, 0x0025),
 994	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
 995		.vendor_name = "EDIROL",
 996		.product_name = "UA-20",
 997		.ifnum = QUIRK_ANY_INTERFACE,
 998		.type = QUIRK_COMPOSITE,
 999		.data = (const struct snd_usb_audio_quirk[]) {
1000			{
1001				.ifnum = 0,
1002				.type = QUIRK_IGNORE_INTERFACE
1003			},
1004			{
1005				.ifnum = 1,
1006				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
1007				.data = & (const struct audioformat) {
1008					.formats = SNDRV_PCM_FMTBIT_S24_3LE,
1009					.channels = 2,
1010					.iface = 1,
1011					.altsetting = 1,
1012					.altset_idx = 1,
1013					.attributes = 0,
1014					.endpoint = 0x01,
1015					.ep_attr = 0x01,
1016					.rates = SNDRV_PCM_RATE_CONTINUOUS,
1017					.rate_min = 44100,
1018					.rate_max = 44100,
1019				}
1020			},
1021			{
1022				.ifnum = 2,
1023				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
1024				.data = & (const struct audioformat) {
1025					.formats = SNDRV_PCM_FMTBIT_S24_3LE,
1026					.channels = 2,
1027					.iface = 2,
1028					.altsetting = 1,
1029					.altset_idx = 1,
1030					.attributes = 0,
1031					.endpoint = 0x82,
1032					.ep_attr = 0x01,
1033					.rates = SNDRV_PCM_RATE_CONTINUOUS,
1034					.rate_min = 44100,
1035					.rate_max = 44100,
1036				}
1037			},
1038			{
1039				.ifnum = 3,
1040				.type = QUIRK_MIDI_FIXED_ENDPOINT,
1041				.data = & (const struct snd_usb_midi_endpoint_info) {
1042					.out_cables = 0x0001,
1043					.in_cables  = 0x0001
1044				}
1045			},
1046			{
1047				.ifnum = -1
1048			}
1049		}
1050	}
1051},
1052{
1053	/* has ID 0x0028 when not in "Advanced Driver" mode */
1054	USB_DEVICE(0x0582, 0x0027),
1055	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1056		.vendor_name = "EDIROL",
1057		.product_name = "SD-20",
1058		.ifnum = 0,
1059		.type = QUIRK_MIDI_FIXED_ENDPOINT,
1060		.data = & (const struct snd_usb_midi_endpoint_info) {
1061			.out_cables = 0x0003,
1062			.in_cables  = 0x0007
1063		}
1064	}
1065},
1066{
1067	/* has ID 0x002a when not in "Advanced Driver" mode */
1068	USB_DEVICE(0x0582, 0x0029),
1069	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1070		.vendor_name = "EDIROL",
1071		.product_name = "SD-80",
1072		.ifnum = 0,
1073		.type = QUIRK_MIDI_FIXED_ENDPOINT,
1074		.data = & (const struct snd_usb_midi_endpoint_info) {
1075			.out_cables = 0x000f,
1076			.in_cables  = 0x000f
1077		}
1078	}
1079},
1080{	/*
1081	 * This quirk is for the "Advanced" modes of the Edirol UA-700.
1082	 * If the sample format switch is not in an advanced setting, the
1083	 * UA-700 has ID 0x0582/0x002c and is standard compliant (no quirks),
1084	 * but offers only 16-bit PCM and no MIDI.
1085	 */
1086	USB_DEVICE_VENDOR_SPEC(0x0582, 0x002b),
1087	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1088		.vendor_name = "EDIROL",
1089		.product_name = "UA-700",
1090		.ifnum = QUIRK_ANY_INTERFACE,
1091		.type = QUIRK_COMPOSITE,
1092		.data = (const struct snd_usb_audio_quirk[]) {
1093			{
1094				.ifnum = 1,
1095				.type = QUIRK_AUDIO_EDIROL_UAXX
1096			},
1097			{
1098				.ifnum = 2,
1099				.type = QUIRK_AUDIO_EDIROL_UAXX
1100			},
1101			{
1102				.ifnum = 3,
1103				.type = QUIRK_AUDIO_EDIROL_UAXX
1104			},
1105			{
1106				.ifnum = -1
1107			}
1108		}
1109	}
1110},
1111{
1112	/* has ID 0x002e when not in "Advanced Driver" mode */
1113	USB_DEVICE(0x0582, 0x002d),
1114	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1115		.vendor_name = "Roland",
1116		.product_name = "XV-2020",
1117		.ifnum = 0,
1118		.type = QUIRK_MIDI_FIXED_ENDPOINT,
1119		.data = & (const struct snd_usb_midi_endpoint_info) {
1120			.out_cables = 0x0001,
1121			.in_cables  = 0x0001
1122		}
1123	}
1124},
1125{
1126	/* has ID 0x0030 when not in "Advanced Driver" mode */
1127	USB_DEVICE(0x0582, 0x002f),
1128	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1129		.vendor_name = "Roland",
1130		.product_name = "VariOS",
1131		.ifnum = 0,
1132		.type = QUIRK_MIDI_FIXED_ENDPOINT,
1133		.data = & (const struct snd_usb_midi_endpoint_info) {
1134			.out_cables = 0x0007,
1135			.in_cables  = 0x0007
1136		}
1137	}
1138},
1139{
1140	/* has ID 0x0034 when not in "Advanced Driver" mode */
1141	USB_DEVICE(0x0582, 0x0033),
1142	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1143		.vendor_name = "EDIROL",
1144		.product_name = "PCR",
1145		.ifnum = 0,
1146		.type = QUIRK_MIDI_FIXED_ENDPOINT,
1147		.data = & (const struct snd_usb_midi_endpoint_info) {
1148			.out_cables = 0x0003,
1149			.in_cables  = 0x0007
1150		}
1151	}
1152},
 
1153{
1154	/*
1155	 * Has ID 0x0038 when not in "Advanced Driver" mode;
1156	 * later revisions use IDs 0x0054 and 0x00a2.
1157	 */
1158	USB_DEVICE(0x0582, 0x0037),
1159	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1160		.vendor_name = "Roland",
1161		.product_name = "Digital Piano",
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	/*
1172	 * This quirk is for the "Advanced Driver" mode.  If off, the GS-10
1173	 * has ID 0x003c and is standard compliant, but has only 16-bit PCM
1174	 * and no MIDI.
1175	 */
1176	USB_DEVICE_VENDOR_SPEC(0x0582, 0x003b),
1177	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1178		.vendor_name = "BOSS",
1179		.product_name = "GS-10",
1180		.ifnum = QUIRK_ANY_INTERFACE,
1181		.type = QUIRK_COMPOSITE,
1182		.data = & (const struct snd_usb_audio_quirk[]) {
1183			{
1184				.ifnum = 1,
1185				.type = QUIRK_AUDIO_STANDARD_INTERFACE
1186			},
1187			{
1188				.ifnum = 2,
1189				.type = QUIRK_AUDIO_STANDARD_INTERFACE
1190			},
1191			{
1192				.ifnum = 3,
1193				.type = QUIRK_MIDI_STANDARD_INTERFACE
1194			},
1195			{
1196				.ifnum = -1
1197			}
1198		}
1199	}
1200},
1201{
1202	/* has ID 0x0041 when not in "Advanced Driver" mode */
1203	USB_DEVICE(0x0582, 0x0040),
1204	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1205		.vendor_name = "Roland",
1206		.product_name = "GI-20",
1207		.ifnum = 0,
1208		.type = QUIRK_MIDI_FIXED_ENDPOINT,
1209		.data = & (const struct snd_usb_midi_endpoint_info) {
1210			.out_cables = 0x0001,
1211			.in_cables  = 0x0001
1212		}
1213	}
1214},
1215{
1216	/* has ID 0x0043 when not in "Advanced Driver" mode */
1217	USB_DEVICE(0x0582, 0x0042),
1218	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1219		.vendor_name = "Roland",
1220		.product_name = "RS-70",
1221		.ifnum = 0,
1222		.type = QUIRK_MIDI_FIXED_ENDPOINT,
1223		.data = & (const struct snd_usb_midi_endpoint_info) {
1224			.out_cables = 0x0001,
1225			.in_cables  = 0x0001
1226		}
1227	}
1228},
1229{
1230	/* has ID 0x0049 when not in "Advanced Driver" mode */
1231	USB_DEVICE(0x0582, 0x0047),
1232	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1233		/* .vendor_name = "EDIROL", */
1234		/* .product_name = "UR-80", */
1235		.ifnum = QUIRK_ANY_INTERFACE,
1236		.type = QUIRK_COMPOSITE,
1237		.data = (const struct snd_usb_audio_quirk[]) {
1238			/* in the 96 kHz modes, only interface 1 is there */
1239			{
1240				.ifnum = 1,
1241				.type = QUIRK_AUDIO_STANDARD_INTERFACE
1242			},
1243			{
1244				.ifnum = 2,
1245				.type = QUIRK_AUDIO_STANDARD_INTERFACE
1246			},
1247			{
1248				.ifnum = -1
1249			}
1250		}
1251	}
1252},
1253{
1254	/* has ID 0x004a when not in "Advanced Driver" mode */
1255	USB_DEVICE(0x0582, 0x0048),
1256	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1257		/* .vendor_name = "EDIROL", */
1258		/* .product_name = "UR-80", */
1259		.ifnum = 0,
1260		.type = QUIRK_MIDI_FIXED_ENDPOINT,
1261		.data = & (const struct snd_usb_midi_endpoint_info) {
1262			.out_cables = 0x0003,
1263			.in_cables  = 0x0007
1264		}
1265	}
1266},
 
1267{
1268	/* has ID 0x004e when not in "Advanced Driver" mode */
1269	USB_DEVICE(0x0582, 0x004c),
1270	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1271		.vendor_name = "EDIROL",
1272		.product_name = "PCR-A",
1273		.ifnum = QUIRK_ANY_INTERFACE,
1274		.type = QUIRK_COMPOSITE,
1275		.data = (const struct snd_usb_audio_quirk[]) {
1276			{
1277				.ifnum = 1,
1278				.type = QUIRK_AUDIO_STANDARD_INTERFACE
1279			},
1280			{
1281				.ifnum = 2,
1282				.type = QUIRK_AUDIO_STANDARD_INTERFACE
1283			},
1284			{
1285				.ifnum = -1
1286			}
1287		}
1288	}
1289},
1290{
1291	/* has ID 0x004f when not in "Advanced Driver" mode */
1292	USB_DEVICE(0x0582, 0x004d),
1293	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1294		.vendor_name = "EDIROL",
1295		.product_name = "PCR-A",
1296		.ifnum = 0,
1297		.type = QUIRK_MIDI_FIXED_ENDPOINT,
1298		.data = & (const struct snd_usb_midi_endpoint_info) {
1299			.out_cables = 0x0003,
1300			.in_cables  = 0x0007
1301		}
1302	}
1303},
1304{
1305	/*
1306	 * This quirk is for the "Advanced Driver" mode. If off, the UA-3FX
1307	 * is standard compliant, but has only 16-bit PCM.
1308	 */
1309	USB_DEVICE(0x0582, 0x0050),
1310	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1311		.vendor_name = "EDIROL",
1312		.product_name = "UA-3FX",
1313		.ifnum = QUIRK_ANY_INTERFACE,
1314		.type = QUIRK_COMPOSITE,
1315		.data = (const struct snd_usb_audio_quirk[]) {
1316			{
1317				.ifnum = 1,
1318				.type = QUIRK_AUDIO_STANDARD_INTERFACE
1319			},
1320			{
1321				.ifnum = 2,
1322				.type = QUIRK_AUDIO_STANDARD_INTERFACE
1323			},
1324			{
1325				.ifnum = -1
1326			}
1327		}
1328	}
1329},
1330{
1331	USB_DEVICE(0x0582, 0x0052),
1332	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1333		.vendor_name = "EDIROL",
1334		.product_name = "UM-1SX",
1335		.ifnum = 0,
1336		.type = QUIRK_MIDI_STANDARD_INTERFACE
1337	}
1338},
1339{
1340	USB_DEVICE(0x0582, 0x0060),
1341	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1342		.vendor_name = "Roland",
1343		.product_name = "EXR Series",
1344		.ifnum = 0,
1345		.type = QUIRK_MIDI_STANDARD_INTERFACE
1346	}
1347},
1348{
1349	/* has ID 0x0066 when not in "Advanced Driver" mode */
1350	USB_DEVICE(0x0582, 0x0064),
1351	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1352		/* .vendor_name = "EDIROL", */
1353		/* .product_name = "PCR-1", */
1354		.ifnum = QUIRK_ANY_INTERFACE,
1355		.type = QUIRK_COMPOSITE,
1356		.data = (const struct snd_usb_audio_quirk[]) {
1357			{
1358				.ifnum = 1,
1359				.type = QUIRK_AUDIO_STANDARD_INTERFACE
1360			},
1361			{
1362				.ifnum = 2,
1363				.type = QUIRK_AUDIO_STANDARD_INTERFACE
1364			},
1365			{
1366				.ifnum = -1
1367			}
1368		}
1369	}
1370},
1371{
1372	/* has ID 0x0067 when not in "Advanced Driver" mode */
1373	USB_DEVICE(0x0582, 0x0065),
1374	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1375		/* .vendor_name = "EDIROL", */
1376		/* .product_name = "PCR-1", */
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  = 0x0003
1382		}
1383	}
1384},
1385{
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1386	/* has ID 0x006e when not in "Advanced Driver" mode */
1387	USB_DEVICE(0x0582, 0x006d),
1388	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1389		.vendor_name = "Roland",
1390		.product_name = "FANTOM-X",
1391		.ifnum = 0,
1392		.type = QUIRK_MIDI_FIXED_ENDPOINT,
1393		.data = & (const struct snd_usb_midi_endpoint_info) {
1394			.out_cables = 0x0001,
1395			.in_cables  = 0x0001
1396		}
1397	}
1398},
1399{	/*
1400	 * This quirk is for the "Advanced" modes of the Edirol UA-25.
1401	 * If the switch is not in an advanced setting, the UA-25 has
1402	 * ID 0x0582/0x0073 and is standard compliant (no quirks), but
1403	 * offers only 16-bit PCM at 44.1 kHz and no MIDI.
1404	 */
1405	USB_DEVICE_VENDOR_SPEC(0x0582, 0x0074),
1406	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1407		.vendor_name = "EDIROL",
1408		.product_name = "UA-25",
1409		.ifnum = QUIRK_ANY_INTERFACE,
1410		.type = QUIRK_COMPOSITE,
1411		.data = (const struct snd_usb_audio_quirk[]) {
1412			{
1413				.ifnum = 0,
1414				.type = QUIRK_AUDIO_EDIROL_UAXX
1415			},
1416			{
1417				.ifnum = 1,
1418				.type = QUIRK_AUDIO_EDIROL_UAXX
1419			},
1420			{
1421				.ifnum = 2,
1422				.type = QUIRK_AUDIO_EDIROL_UAXX
1423			},
1424			{
1425				.ifnum = -1
1426			}
1427		}
1428	}
1429},
1430{
1431	/* has ID 0x0076 when not in "Advanced Driver" mode */
1432	USB_DEVICE(0x0582, 0x0075),
1433	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1434		.vendor_name = "BOSS",
1435		.product_name = "DR-880",
1436		.ifnum = 0,
1437		.type = QUIRK_MIDI_FIXED_ENDPOINT,
1438		.data = & (const struct snd_usb_midi_endpoint_info) {
1439			.out_cables = 0x0001,
1440			.in_cables  = 0x0001
1441		}
1442	}
1443},
1444{
1445	/* has ID 0x007b when not in "Advanced Driver" mode */
1446	USB_DEVICE_VENDOR_SPEC(0x0582, 0x007a),
1447	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1448		.vendor_name = "Roland",
1449		/* "RD" or "RD-700SX"? */
1450		.ifnum = 0,
1451		.type = QUIRK_MIDI_FIXED_ENDPOINT,
1452		.data = & (const struct snd_usb_midi_endpoint_info) {
1453			.out_cables = 0x0003,
1454			.in_cables  = 0x0003
1455		}
1456	}
1457},
1458{
1459	/* has ID 0x0081 when not in "Advanced Driver" mode */
1460	USB_DEVICE(0x0582, 0x0080),
1461	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1462		.vendor_name = "Roland",
1463		.product_name = "G-70",
1464		.ifnum = 0,
1465		.type = QUIRK_MIDI_FIXED_ENDPOINT,
1466		.data = & (const struct snd_usb_midi_endpoint_info) {
1467			.out_cables = 0x0001,
1468			.in_cables  = 0x0001
1469		}
1470	}
1471},
 
 
1472{
1473	/* has ID 0x008c when not in "Advanced Driver" mode */
1474	USB_DEVICE(0x0582, 0x008b),
1475	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1476		.vendor_name = "EDIROL",
1477		.product_name = "PC-50",
1478		.ifnum = 0,
1479		.type = QUIRK_MIDI_FIXED_ENDPOINT,
1480		.data = & (const struct snd_usb_midi_endpoint_info) {
1481			.out_cables = 0x0001,
1482			.in_cables  = 0x0001
1483		}
1484	}
1485},
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1486{
1487	/*
1488	 * This quirk is for the "Advanced Driver" mode. If off, the UA-4FX
1489	 * is standard compliant, but has only 16-bit PCM and no MIDI.
1490	 */
1491	USB_DEVICE(0x0582, 0x00a3),
1492	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1493		.vendor_name = "EDIROL",
1494		.product_name = "UA-4FX",
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 M-16DX */
 
 
 
 
 
 
1518	USB_DEVICE(0x0582, 0x00c4),
1519	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1520		.ifnum = QUIRK_ANY_INTERFACE,
1521		.type = QUIRK_COMPOSITE,
1522		.data = (const struct snd_usb_audio_quirk[]) {
1523			{
1524				.ifnum = 0,
1525				.type = QUIRK_AUDIO_STANDARD_INTERFACE
1526			},
1527			{
1528				.ifnum = 1,
1529				.type = QUIRK_AUDIO_STANDARD_INTERFACE
1530			},
1531			{
1532				.ifnum = 2,
1533				.type = QUIRK_MIDI_FIXED_ENDPOINT,
1534				.data = & (const struct snd_usb_midi_endpoint_info) {
1535					.out_cables = 0x0001,
1536					.in_cables  = 0x0001
1537				}
1538			},
1539			{
1540				.ifnum = -1
1541			}
1542		}
1543	}
1544},
1545{
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1546	/* Advanced modes of the Edirol UA-25EX.
1547	 * For the standard mode, UA-25EX has ID 0582:00e7, which
1548	 * offers only 16-bit PCM at 44.1 kHz and no MIDI.
1549	 */
1550	USB_DEVICE_VENDOR_SPEC(0x0582, 0x00e6),
1551	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1552		.vendor_name = "EDIROL",
1553		.product_name = "UA-25EX",
1554		.ifnum = QUIRK_ANY_INTERFACE,
1555		.type = QUIRK_COMPOSITE,
1556		.data = (const struct snd_usb_audio_quirk[]) {
1557			{
1558				.ifnum = 0,
1559				.type = QUIRK_AUDIO_EDIROL_UAXX
1560			},
1561			{
1562				.ifnum = 1,
1563				.type = QUIRK_AUDIO_EDIROL_UAXX
1564			},
1565			{
1566				.ifnum = 2,
1567				.type = QUIRK_AUDIO_EDIROL_UAXX
1568			},
1569			{
1570				.ifnum = -1
1571			}
1572		}
1573	}
1574},
1575{
1576	/* Edirol UM-3G */
1577	USB_DEVICE_VENDOR_SPEC(0x0582, 0x0108),
1578	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1579		.ifnum = 0,
1580		.type = QUIRK_MIDI_FIXED_ENDPOINT,
1581		.data = & (const struct snd_usb_midi_endpoint_info) {
1582			.out_cables = 0x0007,
1583			.in_cables  = 0x0007
1584		}
1585	}
1586},
1587{
1588	/* BOSS ME-25 */
1589	USB_DEVICE(0x0582, 0x0113),
1590	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
 
 
1591		.ifnum = QUIRK_ANY_INTERFACE,
1592		.type = QUIRK_COMPOSITE,
1593		.data = (const struct snd_usb_audio_quirk[]) {
1594			{
1595				.ifnum = 0,
1596				.type = QUIRK_AUDIO_STANDARD_INTERFACE
1597			},
1598			{
1599				.ifnum = 1,
1600				.type = QUIRK_AUDIO_STANDARD_INTERFACE
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 = -1
1612			}
1613		}
1614	}
1615},
1616{
1617	/* only 44.1 kHz works at the moment */
1618	USB_DEVICE(0x0582, 0x0120),
1619	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1620		/* .vendor_name = "Roland", */
1621		/* .product_name = "OCTO-CAPTURE", */
 
 
 
 
 
 
 
 
 
 
 
 
 
1622		.ifnum = QUIRK_ANY_INTERFACE,
1623		.type = QUIRK_COMPOSITE,
1624		.data = (const struct snd_usb_audio_quirk[]) {
1625			{
1626				.ifnum = 0,
1627				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
1628				.data = & (const struct audioformat) {
1629					.formats = SNDRV_PCM_FMTBIT_S32_LE,
1630					.channels = 10,
1631					.iface = 0,
1632					.altsetting = 1,
1633					.altset_idx = 1,
1634					.endpoint = 0x05,
1635					.ep_attr = 0x05,
1636					.rates = SNDRV_PCM_RATE_44100,
1637					.rate_min = 44100,
1638					.rate_max = 44100,
1639					.nr_rates = 1,
1640					.rate_table = (unsigned int[]) { 44100 }
1641				}
1642			},
1643			{
1644				.ifnum = 1,
1645				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
1646				.data = & (const struct audioformat) {
1647					.formats = SNDRV_PCM_FMTBIT_S32_LE,
1648					.channels = 12,
1649					.iface = 1,
1650					.altsetting = 1,
1651					.altset_idx = 1,
1652					.endpoint = 0x85,
1653					.ep_attr = 0x25,
1654					.rates = SNDRV_PCM_RATE_44100,
1655					.rate_min = 44100,
1656					.rate_max = 44100,
1657					.nr_rates = 1,
1658					.rate_table = (unsigned int[]) { 44100 }
1659				}
1660			},
1661			{
1662				.ifnum = 2,
1663				.type = QUIRK_MIDI_FIXED_ENDPOINT,
1664				.data = & (const struct snd_usb_midi_endpoint_info) {
1665					.out_cables = 0x0001,
1666					.in_cables  = 0x0001
1667				}
1668			},
1669			{
1670				.ifnum = 3,
1671				.type = QUIRK_IGNORE_INTERFACE
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1672			},
1673			{
1674				.ifnum = 4,
1675				.type = QUIRK_IGNORE_INTERFACE
1676			},
1677			{
1678				.ifnum = -1
1679			}
1680		}
1681	}
1682},
1683{
1684	/* only 44.1 kHz works at the moment */
1685	USB_DEVICE(0x0582, 0x012f),
1686	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1687		/* .vendor_name = "Roland", */
1688		/* .product_name = "QUAD-CAPTURE", */
1689		.ifnum = QUIRK_ANY_INTERFACE,
1690		.type = QUIRK_COMPOSITE,
1691		.data = (const struct snd_usb_audio_quirk[]) {
1692			{
1693				.ifnum = 0,
1694				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
1695				.data = & (const struct audioformat) {
1696					.formats = SNDRV_PCM_FMTBIT_S32_LE,
1697					.channels = 4,
1698					.iface = 0,
1699					.altsetting = 1,
1700					.altset_idx = 1,
1701					.endpoint = 0x05,
1702					.ep_attr = 0x05,
1703					.rates = SNDRV_PCM_RATE_44100,
1704					.rate_min = 44100,
1705					.rate_max = 44100,
1706					.nr_rates = 1,
1707					.rate_table = (unsigned int[]) { 44100 }
1708				}
1709			},
1710			{
1711				.ifnum = 1,
1712				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
1713				.data = & (const struct audioformat) {
1714					.formats = SNDRV_PCM_FMTBIT_S32_LE,
1715					.channels = 6,
1716					.iface = 1,
1717					.altsetting = 1,
1718					.altset_idx = 1,
1719					.endpoint = 0x85,
1720					.ep_attr = 0x25,
1721					.rates = SNDRV_PCM_RATE_44100,
1722					.rate_min = 44100,
1723					.rate_max = 44100,
1724					.nr_rates = 1,
1725					.rate_table = (unsigned int[]) { 44100 }
1726				}
1727			},
1728			{
1729				.ifnum = 2,
1730				.type = QUIRK_MIDI_FIXED_ENDPOINT,
1731				.data = & (const struct snd_usb_midi_endpoint_info) {
1732					.out_cables = 0x0001,
1733					.in_cables  = 0x0001
1734				}
1735			},
1736			{
1737				.ifnum = 3,
1738				.type = QUIRK_IGNORE_INTERFACE
1739			},
1740			{
1741				.ifnum = 4,
1742				.type = QUIRK_IGNORE_INTERFACE
1743			},
1744			{
1745				.ifnum = -1
1746			}
1747		}
1748	}
1749},
1750{
1751	USB_DEVICE(0x0582, 0x0159),
1752	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1753		/* .vendor_name = "Roland", */
1754		/* .product_name = "UA-22", */
1755		.ifnum = QUIRK_ANY_INTERFACE,
1756		.type = QUIRK_COMPOSITE,
1757		.data = (const struct snd_usb_audio_quirk[]) {
1758			{
1759				.ifnum = 0,
1760				.type = QUIRK_AUDIO_STANDARD_INTERFACE
1761			},
1762			{
1763				.ifnum = 1,
1764				.type = QUIRK_AUDIO_STANDARD_INTERFACE
1765			},
1766			{
1767				.ifnum = 2,
 
 
 
 
1768				.type = QUIRK_MIDI_FIXED_ENDPOINT,
1769				.data = & (const struct snd_usb_midi_endpoint_info) {
1770					.out_cables = 0x0001,
1771					.in_cables = 0x0001
1772				}
1773			},
1774			{
1775				.ifnum = -1
1776			}
1777		}
1778	}
1779},
1780/* this catches most recent vendor-specific Roland devices */
1781{
1782	.match_flags = USB_DEVICE_ID_MATCH_VENDOR |
1783	               USB_DEVICE_ID_MATCH_INT_CLASS,
1784	.idVendor = 0x0582,
1785	.bInterfaceClass = USB_CLASS_VENDOR_SPEC,
1786	.driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
1787		.ifnum = QUIRK_ANY_INTERFACE,
1788		.type = QUIRK_AUTODETECT
1789	}
1790},
1791
1792/* Guillemot devices */
1793{
1794	/*
1795	 * This is for the "Windows Edition" where the external MIDI ports are
1796	 * the only MIDI ports; the control data is reported through HID
1797	 * interfaces.  The "Macintosh Edition" has ID 0xd002 and uses standard
1798	 * compliant USB MIDI ports for external MIDI and controls.
1799	 */
1800	USB_DEVICE_VENDOR_SPEC(0x06f8, 0xb000),
1801	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1802		.vendor_name = "Hercules",
1803		.product_name = "DJ Console (WE)",
1804		.ifnum = 4,
1805		.type = QUIRK_MIDI_FIXED_ENDPOINT,
1806		.data = & (const struct snd_usb_midi_endpoint_info) {
1807			.out_cables = 0x0001,
1808			.in_cables = 0x0001
1809		}
1810	}
1811},
1812
1813/* Midiman/M-Audio devices */
1814{
1815	USB_DEVICE_VENDOR_SPEC(0x0763, 0x1002),
1816	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1817		.vendor_name = "M-Audio",
1818		.product_name = "MidiSport 2x2",
1819		.ifnum = QUIRK_ANY_INTERFACE,
1820		.type = QUIRK_MIDI_MIDIMAN,
1821		.data = & (const struct snd_usb_midi_endpoint_info) {
1822			.out_cables = 0x0003,
1823			.in_cables  = 0x0003
1824		}
1825	}
1826},
1827{
1828	USB_DEVICE_VENDOR_SPEC(0x0763, 0x1011),
1829	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1830		.vendor_name = "M-Audio",
1831		.product_name = "MidiSport 1x1",
1832		.ifnum = QUIRK_ANY_INTERFACE,
1833		.type = QUIRK_MIDI_MIDIMAN,
1834		.data = & (const struct snd_usb_midi_endpoint_info) {
1835			.out_cables = 0x0001,
1836			.in_cables  = 0x0001
1837		}
1838	}
1839},
1840{
1841	USB_DEVICE_VENDOR_SPEC(0x0763, 0x1015),
1842	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1843		.vendor_name = "M-Audio",
1844		.product_name = "Keystation",
1845		.ifnum = QUIRK_ANY_INTERFACE,
1846		.type = QUIRK_MIDI_MIDIMAN,
1847		.data = & (const struct snd_usb_midi_endpoint_info) {
1848			.out_cables = 0x0001,
1849			.in_cables  = 0x0001
1850		}
1851	}
1852},
1853{
1854	USB_DEVICE_VENDOR_SPEC(0x0763, 0x1021),
1855	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1856		.vendor_name = "M-Audio",
1857		.product_name = "MidiSport 4x4",
1858		.ifnum = QUIRK_ANY_INTERFACE,
1859		.type = QUIRK_MIDI_MIDIMAN,
1860		.data = & (const struct snd_usb_midi_endpoint_info) {
1861			.out_cables = 0x000f,
1862			.in_cables  = 0x000f
1863		}
1864	}
1865},
1866{
1867	/*
1868	 * For hardware revision 1.05; in the later revisions (1.10 and
1869	 * 1.21), 0x1031 is the ID for the device without firmware.
1870	 * Thanks to Olaf Giesbrecht <Olaf_Giesbrecht@yahoo.de>
1871	 */
1872	USB_DEVICE_VER(0x0763, 0x1031, 0x0100, 0x0109),
1873	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1874		.vendor_name = "M-Audio",
1875		.product_name = "MidiSport 8x8",
1876		.ifnum = QUIRK_ANY_INTERFACE,
1877		.type = QUIRK_MIDI_MIDIMAN,
1878		.data = & (const struct snd_usb_midi_endpoint_info) {
1879			.out_cables = 0x01ff,
1880			.in_cables  = 0x01ff
1881		}
1882	}
1883},
1884{
1885	USB_DEVICE_VENDOR_SPEC(0x0763, 0x1033),
1886	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1887		.vendor_name = "M-Audio",
1888		.product_name = "MidiSport 8x8",
1889		.ifnum = QUIRK_ANY_INTERFACE,
1890		.type = QUIRK_MIDI_MIDIMAN,
1891		.data = & (const struct snd_usb_midi_endpoint_info) {
1892			.out_cables = 0x01ff,
1893			.in_cables  = 0x01ff
1894		}
1895	}
1896},
1897{
1898	USB_DEVICE_VENDOR_SPEC(0x0763, 0x1041),
1899	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1900		.vendor_name = "M-Audio",
1901		.product_name = "MidiSport 2x4",
1902		.ifnum = QUIRK_ANY_INTERFACE,
1903		.type = QUIRK_MIDI_MIDIMAN,
1904		.data = & (const struct snd_usb_midi_endpoint_info) {
1905			.out_cables = 0x000f,
1906			.in_cables  = 0x0003
1907		}
1908	}
1909},
1910{
1911	USB_DEVICE_VENDOR_SPEC(0x0763, 0x2001),
1912	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1913		.vendor_name = "M-Audio",
1914		.product_name = "Quattro",
1915		.ifnum = QUIRK_ANY_INTERFACE,
1916		.type = QUIRK_COMPOSITE,
1917		.data = & (const struct snd_usb_audio_quirk[]) {
1918			/*
1919			 * Interfaces 0-2 are "Windows-compatible", 16-bit only,
1920			 * and share endpoints with the other interfaces.
1921			 * Ignore them.  The other interfaces can do 24 bits,
1922			 * but captured samples are big-endian (see usbaudio.c).
1923			 */
1924			{
1925				.ifnum = 0,
1926				.type = QUIRK_IGNORE_INTERFACE
1927			},
1928			{
1929				.ifnum = 1,
1930				.type = QUIRK_IGNORE_INTERFACE
1931			},
1932			{
1933				.ifnum = 2,
1934				.type = QUIRK_IGNORE_INTERFACE
1935			},
1936			{
1937				.ifnum = 3,
1938				.type = QUIRK_IGNORE_INTERFACE
1939			},
1940			{
1941				.ifnum = 4,
1942				.type = QUIRK_AUDIO_STANDARD_INTERFACE
1943			},
1944			{
1945				.ifnum = 5,
1946				.type = QUIRK_AUDIO_STANDARD_INTERFACE
1947			},
1948			{
1949				.ifnum = 6,
1950				.type = QUIRK_IGNORE_INTERFACE
1951			},
1952			{
1953				.ifnum = 7,
1954				.type = QUIRK_AUDIO_STANDARD_INTERFACE
1955			},
1956			{
1957				.ifnum = 8,
1958				.type = QUIRK_AUDIO_STANDARD_INTERFACE
1959			},
1960			{
1961				.ifnum = 9,
1962				.type = QUIRK_MIDI_MIDIMAN,
1963				.data = & (const struct snd_usb_midi_endpoint_info) {
1964					.out_cables = 0x0001,
1965					.in_cables  = 0x0001
1966				}
1967			},
1968			{
1969				.ifnum = -1
1970			}
1971		}
1972	}
1973},
1974{
1975	USB_DEVICE_VENDOR_SPEC(0x0763, 0x2003),
1976	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1977		.vendor_name = "M-Audio",
1978		.product_name = "AudioPhile",
1979		.ifnum = 6,
1980		.type = QUIRK_MIDI_MIDIMAN,
1981		.data = & (const struct snd_usb_midi_endpoint_info) {
1982			.out_cables = 0x0001,
1983			.in_cables  = 0x0001
1984		}
1985	}
1986},
1987{
1988	USB_DEVICE_VENDOR_SPEC(0x0763, 0x2008),
1989	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1990		.vendor_name = "M-Audio",
1991		.product_name = "Ozone",
1992		.ifnum = 3,
1993		.type = QUIRK_MIDI_MIDIMAN,
1994		.data = & (const struct snd_usb_midi_endpoint_info) {
1995			.out_cables = 0x0001,
1996			.in_cables  = 0x0001
1997		}
1998	}
1999},
2000{
2001	USB_DEVICE_VENDOR_SPEC(0x0763, 0x200d),
2002	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2003		.vendor_name = "M-Audio",
2004		.product_name = "OmniStudio",
2005		.ifnum = QUIRK_ANY_INTERFACE,
2006		.type = QUIRK_COMPOSITE,
2007		.data = & (const struct snd_usb_audio_quirk[]) {
2008			{
2009				.ifnum = 0,
2010				.type = QUIRK_IGNORE_INTERFACE
2011			},
2012			{
2013				.ifnum = 1,
2014				.type = QUIRK_IGNORE_INTERFACE
2015			},
2016			{
2017				.ifnum = 2,
2018				.type = QUIRK_IGNORE_INTERFACE
2019			},
2020			{
2021				.ifnum = 3,
2022				.type = QUIRK_IGNORE_INTERFACE
2023			},
2024			{
2025				.ifnum = 4,
2026				.type = QUIRK_AUDIO_STANDARD_INTERFACE
2027			},
2028			{
2029				.ifnum = 5,
2030				.type = QUIRK_AUDIO_STANDARD_INTERFACE
2031			},
2032			{
2033				.ifnum = 6,
2034				.type = QUIRK_IGNORE_INTERFACE
2035			},
2036			{
2037				.ifnum = 7,
2038				.type = QUIRK_AUDIO_STANDARD_INTERFACE
2039			},
2040			{
2041				.ifnum = 8,
2042				.type = QUIRK_AUDIO_STANDARD_INTERFACE
2043			},
2044			{
2045				.ifnum = 9,
2046				.type = QUIRK_MIDI_MIDIMAN,
2047				.data = & (const struct snd_usb_midi_endpoint_info) {
2048					.out_cables = 0x0001,
2049					.in_cables  = 0x0001
2050				}
2051			},
2052			{
2053				.ifnum = -1
2054			}
2055		}
2056	}
2057},
2058{
2059	USB_DEVICE(0x0763, 0x2019),
2060	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2061		/* .vendor_name = "M-Audio", */
2062		/* .product_name = "Ozone Academic", */
2063		.ifnum = QUIRK_ANY_INTERFACE,
2064		.type = QUIRK_COMPOSITE,
2065		.data = & (const struct snd_usb_audio_quirk[]) {
2066			{
2067				.ifnum = 0,
2068				.type = QUIRK_AUDIO_STANDARD_INTERFACE
2069			},
2070			{
2071				.ifnum = 1,
2072				.type = QUIRK_AUDIO_STANDARD_INTERFACE
2073			},
2074			{
2075				.ifnum = 2,
2076				.type = QUIRK_AUDIO_STANDARD_INTERFACE
2077			},
2078			{
2079				.ifnum = 3,
2080				.type = QUIRK_MIDI_MIDIMAN,
2081				.data = & (const struct snd_usb_midi_endpoint_info) {
2082					.out_cables = 0x0001,
2083					.in_cables  = 0x0001
2084				}
2085			},
2086			{
2087				.ifnum = -1
2088			}
2089		}
2090	}
2091},
2092{
2093	USB_DEVICE_VENDOR_SPEC(0x0763, 0x2030),
2094	.driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
2095		/* .vendor_name = "M-Audio", */
2096		/* .product_name = "Fast Track C400", */
2097		.ifnum = QUIRK_ANY_INTERFACE,
2098		.type = QUIRK_COMPOSITE,
2099		.data = &(const struct snd_usb_audio_quirk[]) {
2100			{
2101				.ifnum = 1,
2102				.type = QUIRK_AUDIO_STANDARD_MIXER,
2103			},
2104			/* Playback */
2105			{
2106				.ifnum = 2,
2107				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
2108				.data = &(const struct audioformat) {
2109					.formats = SNDRV_PCM_FMTBIT_S24_3LE,
2110					.channels = 6,
2111					.iface = 2,
2112					.altsetting = 1,
2113					.altset_idx = 1,
2114					.attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
2115					.endpoint = 0x01,
2116					.ep_attr = 0x09,
2117					.rates = SNDRV_PCM_RATE_44100 |
2118						 SNDRV_PCM_RATE_48000 |
2119						 SNDRV_PCM_RATE_88200 |
2120						 SNDRV_PCM_RATE_96000,
2121					.rate_min = 44100,
2122					.rate_max = 96000,
2123					.nr_rates = 4,
2124					.rate_table = (unsigned int[]) {
2125							44100, 48000, 88200, 96000
2126					},
2127					.clock = 0x80,
2128				}
2129			},
2130			/* Capture */
2131			{
2132				.ifnum = 3,
2133				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
2134				.data = &(const struct audioformat) {
2135					.formats = SNDRV_PCM_FMTBIT_S24_3LE,
2136					.channels = 4,
2137					.iface = 3,
2138					.altsetting = 1,
2139					.altset_idx = 1,
2140					.attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
2141					.endpoint = 0x81,
2142					.ep_attr = 0x05,
2143					.rates = SNDRV_PCM_RATE_44100 |
2144						 SNDRV_PCM_RATE_48000 |
2145						 SNDRV_PCM_RATE_88200 |
2146						 SNDRV_PCM_RATE_96000,
2147					.rate_min = 44100,
2148					.rate_max = 96000,
2149					.nr_rates = 4,
2150					.rate_table = (unsigned int[]) {
2151						44100, 48000, 88200, 96000
2152					},
2153					.clock = 0x80,
2154				}
2155			},
2156			/* MIDI */
2157			{
2158				.ifnum = -1 /* Interface = 4 */
2159			}
2160		}
2161	}
2162},
2163{
2164	USB_DEVICE_VENDOR_SPEC(0x0763, 0x2031),
2165	.driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
2166		/* .vendor_name = "M-Audio", */
2167		/* .product_name = "Fast Track C600", */
2168		.ifnum = QUIRK_ANY_INTERFACE,
2169		.type = QUIRK_COMPOSITE,
2170		.data = &(const struct snd_usb_audio_quirk[]) {
2171			{
2172				.ifnum = 1,
2173				.type = QUIRK_AUDIO_STANDARD_MIXER,
2174			},
2175			/* Playback */
2176			{
2177				.ifnum = 2,
2178				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
2179				.data = &(const struct audioformat) {
2180					.formats = SNDRV_PCM_FMTBIT_S24_3LE,
2181					.channels = 8,
2182					.iface = 2,
2183					.altsetting = 1,
2184					.altset_idx = 1,
2185					.attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
2186					.endpoint = 0x01,
2187					.ep_attr = 0x09,
2188					.rates = SNDRV_PCM_RATE_44100 |
2189						 SNDRV_PCM_RATE_48000 |
2190						 SNDRV_PCM_RATE_88200 |
2191						 SNDRV_PCM_RATE_96000,
2192					.rate_min = 44100,
2193					.rate_max = 96000,
2194					.nr_rates = 4,
2195					.rate_table = (unsigned int[]) {
2196							44100, 48000, 88200, 96000
2197					},
2198					.clock = 0x80,
2199				}
2200			},
2201			/* Capture */
2202			{
2203				.ifnum = 3,
2204				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
2205				.data = &(const struct audioformat) {
2206					.formats = SNDRV_PCM_FMTBIT_S24_3LE,
2207					.channels = 6,
2208					.iface = 3,
2209					.altsetting = 1,
2210					.altset_idx = 1,
2211					.attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
2212					.endpoint = 0x81,
2213					.ep_attr = 0x05,
2214					.rates = SNDRV_PCM_RATE_44100 |
2215						 SNDRV_PCM_RATE_48000 |
2216						 SNDRV_PCM_RATE_88200 |
2217						 SNDRV_PCM_RATE_96000,
2218					.rate_min = 44100,
2219					.rate_max = 96000,
2220					.nr_rates = 4,
2221					.rate_table = (unsigned int[]) {
2222						44100, 48000, 88200, 96000
2223					},
2224					.clock = 0x80,
2225				}
2226			},
2227			/* MIDI */
2228			{
2229				.ifnum = -1 /* Interface = 4 */
2230			}
2231		}
2232	}
2233},
2234{
2235	USB_DEVICE_VENDOR_SPEC(0x0763, 0x2080),
2236	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2237		/* .vendor_name = "M-Audio", */
2238		/* .product_name = "Fast Track Ultra", */
2239		.ifnum = QUIRK_ANY_INTERFACE,
2240		.type = QUIRK_COMPOSITE,
2241		.data = & (const struct snd_usb_audio_quirk[]) {
2242			{
2243				.ifnum = 0,
2244				.type = QUIRK_AUDIO_STANDARD_MIXER,
2245			},
2246			{
2247				.ifnum = 1,
2248				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
2249				.data = & (const struct audioformat) {
2250					.formats = SNDRV_PCM_FMTBIT_S24_3LE,
2251					.channels = 8,
2252					.iface = 1,
2253					.altsetting = 1,
2254					.altset_idx = 1,
2255					.attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
2256					.endpoint = 0x01,
2257					.ep_attr = 0x09,
2258					.rates = SNDRV_PCM_RATE_44100 |
2259						 SNDRV_PCM_RATE_48000 |
2260						 SNDRV_PCM_RATE_88200 |
2261						 SNDRV_PCM_RATE_96000,
2262					.rate_min = 44100,
2263					.rate_max = 96000,
2264					.nr_rates = 4,
2265					.rate_table = (unsigned int[]) {
2266						44100, 48000, 88200, 96000
2267					}
2268				}
2269			},
2270			{
2271				.ifnum = 2,
2272				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
2273				.data = & (const struct audioformat) {
2274					.formats = SNDRV_PCM_FMTBIT_S24_3LE,
2275					.channels = 8,
2276					.iface = 2,
2277					.altsetting = 1,
2278					.altset_idx = 1,
2279					.attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
2280					.endpoint = 0x81,
2281					.ep_attr = 0x05,
2282					.rates = SNDRV_PCM_RATE_44100 |
2283						 SNDRV_PCM_RATE_48000 |
2284						 SNDRV_PCM_RATE_88200 |
2285						 SNDRV_PCM_RATE_96000,
2286					.rate_min = 44100,
2287					.rate_max = 96000,
2288					.nr_rates = 4,
2289					.rate_table = (unsigned int[]) {
2290						44100, 48000, 88200, 96000
2291					}
2292				}
2293			},
2294			/* interface 3 (MIDI) is standard compliant */
2295			{
2296				.ifnum = -1
2297			}
2298		}
2299	}
2300},
2301{
2302	USB_DEVICE_VENDOR_SPEC(0x0763, 0x2081),
2303	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2304		/* .vendor_name = "M-Audio", */
2305		/* .product_name = "Fast Track Ultra 8R", */
2306		.ifnum = QUIRK_ANY_INTERFACE,
2307		.type = QUIRK_COMPOSITE,
2308		.data = & (const struct snd_usb_audio_quirk[]) {
2309			{
2310				.ifnum = 0,
2311				.type = QUIRK_AUDIO_STANDARD_MIXER,
2312			},
2313			{
2314				.ifnum = 1,
2315				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
2316				.data = & (const struct audioformat) {
2317					.formats = SNDRV_PCM_FMTBIT_S24_3LE,
2318					.channels = 8,
2319					.iface = 1,
2320					.altsetting = 1,
2321					.altset_idx = 1,
2322					.attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
2323					.endpoint = 0x01,
2324					.ep_attr = 0x09,
2325					.rates = SNDRV_PCM_RATE_44100 |
2326						 SNDRV_PCM_RATE_48000 |
2327						 SNDRV_PCM_RATE_88200 |
2328						 SNDRV_PCM_RATE_96000,
2329					.rate_min = 44100,
2330					.rate_max = 96000,
2331					.nr_rates = 4,
2332					.rate_table = (unsigned int[]) {
2333							44100, 48000, 88200, 96000
2334					}
2335				}
2336			},
2337			{
2338				.ifnum = 2,
2339				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
2340				.data = & (const struct audioformat) {
2341					.formats = SNDRV_PCM_FMTBIT_S24_3LE,
2342					.channels = 8,
2343					.iface = 2,
2344					.altsetting = 1,
2345					.altset_idx = 1,
2346					.attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
2347					.endpoint = 0x81,
2348					.ep_attr = 0x05,
2349					.rates = SNDRV_PCM_RATE_44100 |
2350						 SNDRV_PCM_RATE_48000 |
2351						 SNDRV_PCM_RATE_88200 |
2352						 SNDRV_PCM_RATE_96000,
2353					.rate_min = 44100,
2354					.rate_max = 96000,
2355					.nr_rates = 4,
2356					.rate_table = (unsigned int[]) {
2357						44100, 48000, 88200, 96000
2358					}
2359				}
2360			},
2361			/* interface 3 (MIDI) is standard compliant */
2362			{
2363				.ifnum = -1
2364			}
2365		}
2366	}
2367},
2368
2369/* Casio devices */
2370{
2371	USB_DEVICE(0x07cf, 0x6801),
2372	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2373		.vendor_name = "Casio",
2374		.product_name = "PL-40R",
2375		.ifnum = 0,
2376		.type = QUIRK_MIDI_YAMAHA
2377	}
2378},
2379{
2380	/* this ID is used by several devices without a product ID */
2381	USB_DEVICE(0x07cf, 0x6802),
2382	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2383		.vendor_name = "Casio",
2384		.product_name = "Keyboard",
2385		.ifnum = 0,
2386		.type = QUIRK_MIDI_YAMAHA
2387	}
2388},
2389
2390/* Mark of the Unicorn devices */
2391{
2392	/* thanks to Robert A. Lerche <ral 'at' msbit.com> */
2393	.match_flags = USB_DEVICE_ID_MATCH_VENDOR |
2394		       USB_DEVICE_ID_MATCH_PRODUCT |
2395		       USB_DEVICE_ID_MATCH_DEV_SUBCLASS,
2396	.idVendor = 0x07fd,
2397	.idProduct = 0x0001,
2398	.bDeviceSubClass = 2,
2399	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2400		.vendor_name = "MOTU",
2401		.product_name = "Fastlane",
2402		.ifnum = QUIRK_ANY_INTERFACE,
2403		.type = QUIRK_COMPOSITE,
2404		.data = & (const struct snd_usb_audio_quirk[]) {
2405			{
2406				.ifnum = 0,
2407				.type = QUIRK_MIDI_RAW_BYTES
2408			},
2409			{
2410				.ifnum = 1,
2411				.type = QUIRK_IGNORE_INTERFACE
2412			},
2413			{
2414				.ifnum = -1
2415			}
2416		}
2417	}
2418},
2419
2420/* Emagic devices */
2421{
2422	USB_DEVICE(0x086a, 0x0001),
2423	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2424		.vendor_name = "Emagic",
2425		/* .product_name = "Unitor8", */
2426		.ifnum = 2,
2427		.type = QUIRK_MIDI_EMAGIC,
2428		.data = & (const struct snd_usb_midi_endpoint_info) {
2429			.out_cables = 0x80ff,
2430			.in_cables  = 0x80ff
2431		}
2432	}
2433},
2434{
2435	USB_DEVICE(0x086a, 0x0002),
2436	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2437		.vendor_name = "Emagic",
2438		/* .product_name = "AMT8", */
2439		.ifnum = 2,
2440		.type = QUIRK_MIDI_EMAGIC,
2441		.data = & (const struct snd_usb_midi_endpoint_info) {
2442			.out_cables = 0x80ff,
2443			.in_cables  = 0x80ff
2444		}
2445	}
2446},
2447{
2448	USB_DEVICE(0x086a, 0x0003),
2449	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2450		.vendor_name = "Emagic",
2451		/* .product_name = "MT4", */
2452		.ifnum = 2,
2453		.type = QUIRK_MIDI_EMAGIC,
2454		.data = & (const struct snd_usb_midi_endpoint_info) {
2455			.out_cables = 0x800f,
2456			.in_cables  = 0x8003
2457		}
2458	}
2459},
2460
2461/* KORG devices */
2462{
2463	USB_DEVICE_VENDOR_SPEC(0x0944, 0x0200),
2464	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2465		.vendor_name = "KORG, Inc.",
2466		/* .product_name = "PANDORA PX5D", */
2467		.ifnum = 3,
2468		.type = QUIRK_MIDI_STANDARD_INTERFACE,
2469	}
2470},
2471
2472{
2473	USB_DEVICE_VENDOR_SPEC(0x0944, 0x0201),
2474	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2475		.vendor_name = "KORG, Inc.",
2476		/* .product_name = "ToneLab ST", */
2477		.ifnum = 3,
2478		.type = QUIRK_MIDI_STANDARD_INTERFACE,
2479	}
2480},
2481
2482/* AKAI devices */
2483{
2484	USB_DEVICE(0x09e8, 0x0062),
2485	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2486		.vendor_name = "AKAI",
2487		.product_name = "MPD16",
2488		.ifnum = 0,
2489		.type = QUIRK_MIDI_AKAI,
2490	}
2491},
2492
2493{
2494	/* Akai MPC Element */
2495	USB_DEVICE(0x09e8, 0x0021),
2496	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2497		.ifnum = QUIRK_ANY_INTERFACE,
2498		.type = QUIRK_COMPOSITE,
2499		.data = & (const struct snd_usb_audio_quirk[]) {
2500			{
2501				.ifnum = 0,
2502				.type = QUIRK_IGNORE_INTERFACE
2503			},
2504			{
2505				.ifnum = 1,
2506				.type = QUIRK_MIDI_STANDARD_INTERFACE
2507			},
2508			{
2509				.ifnum = -1
2510			}
2511		}
2512	}
2513},
2514
2515/* Steinberg devices */
2516{
2517	/* Steinberg MI2 */
2518	USB_DEVICE_VENDOR_SPEC(0x0a4e, 0x2040),
2519	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2520		.ifnum = QUIRK_ANY_INTERFACE,
2521		.type = QUIRK_COMPOSITE,
2522		.data = & (const struct snd_usb_audio_quirk[]) {
2523			{
2524				.ifnum = 0,
2525				.type = QUIRK_AUDIO_STANDARD_INTERFACE
2526			},
2527			{
2528				.ifnum = 1,
2529				.type = QUIRK_AUDIO_STANDARD_INTERFACE
2530			},
2531			{
2532				.ifnum = 2,
2533				.type = QUIRK_AUDIO_STANDARD_INTERFACE
2534			},
2535			{
2536				.ifnum = 3,
2537				.type = QUIRK_MIDI_FIXED_ENDPOINT,
2538				.data = &(const struct snd_usb_midi_endpoint_info) {
2539					.out_cables = 0x0001,
2540					.in_cables  = 0x0001
2541				}
2542			},
2543			{
2544				.ifnum = -1
2545			}
2546		}
2547	}
2548},
2549{
2550	/* Steinberg MI4 */
2551	USB_DEVICE_VENDOR_SPEC(0x0a4e, 0x4040),
2552	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2553		.ifnum = QUIRK_ANY_INTERFACE,
2554		.type = QUIRK_COMPOSITE,
2555		.data = & (const struct snd_usb_audio_quirk[]) {
2556			{
2557				.ifnum = 0,
2558				.type = QUIRK_AUDIO_STANDARD_INTERFACE
2559			},
2560			{
2561				.ifnum = 1,
2562				.type = QUIRK_AUDIO_STANDARD_INTERFACE
2563			},
2564			{
2565				.ifnum = 2,
2566				.type = QUIRK_AUDIO_STANDARD_INTERFACE
2567			},
2568			{
2569				.ifnum = 3,
2570				.type = QUIRK_MIDI_FIXED_ENDPOINT,
2571				.data = &(const struct snd_usb_midi_endpoint_info) {
2572					.out_cables = 0x0001,
2573					.in_cables  = 0x0001
2574				}
2575			},
2576			{
2577				.ifnum = -1
2578			}
2579		}
2580	}
2581},
2582
2583/* TerraTec devices */
2584{
2585	USB_DEVICE_VENDOR_SPEC(0x0ccd, 0x0012),
2586	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2587		.vendor_name = "TerraTec",
2588		.product_name = "PHASE 26",
2589		.ifnum = 3,
2590		.type = QUIRK_MIDI_STANDARD_INTERFACE
2591	}
2592},
2593{
2594	USB_DEVICE_VENDOR_SPEC(0x0ccd, 0x0013),
2595	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2596		.vendor_name = "TerraTec",
2597		.product_name = "PHASE 26",
2598		.ifnum = 3,
2599		.type = QUIRK_MIDI_STANDARD_INTERFACE
2600	}
2601},
2602{
2603	USB_DEVICE_VENDOR_SPEC(0x0ccd, 0x0014),
2604	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2605		.vendor_name = "TerraTec",
2606		.product_name = "PHASE 26",
2607		.ifnum = 3,
2608		.type = QUIRK_MIDI_STANDARD_INTERFACE
2609	}
2610},
2611{
2612	USB_DEVICE(0x0ccd, 0x0028),
2613	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2614		.vendor_name = "TerraTec",
2615		.product_name = "Aureon5.1MkII",
2616		.ifnum = QUIRK_NO_INTERFACE
2617	}
2618},
2619{
2620	USB_DEVICE(0x0ccd, 0x0035),
2621	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2622		.vendor_name = "Miditech",
2623		.product_name = "Play'n Roll",
2624		.ifnum = 0,
2625		.type = QUIRK_MIDI_CME
2626	}
2627},
2628
2629/* Stanton/N2IT Final Scratch v1 device ('Scratchamp') */
2630{
2631	USB_DEVICE(0x103d, 0x0100),
2632		.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2633		.vendor_name = "Stanton",
2634		.product_name = "ScratchAmp",
2635		.ifnum = QUIRK_NO_INTERFACE
2636	}
2637},
2638{
2639	USB_DEVICE(0x103d, 0x0101),
2640		.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2641		.vendor_name = "Stanton",
2642		.product_name = "ScratchAmp",
2643		.ifnum = QUIRK_NO_INTERFACE
2644	}
2645},
2646
2647/* Novation EMS devices */
2648{
2649	USB_DEVICE_VENDOR_SPEC(0x1235, 0x0001),
2650	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2651		.vendor_name = "Novation",
2652		.product_name = "ReMOTE Audio/XStation",
2653		.ifnum = 4,
2654		.type = QUIRK_MIDI_NOVATION
2655	}
2656},
2657{
2658	USB_DEVICE_VENDOR_SPEC(0x1235, 0x0002),
2659	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2660		.vendor_name = "Novation",
2661		.product_name = "Speedio",
2662		.ifnum = 3,
2663		.type = QUIRK_MIDI_NOVATION
2664	}
2665},
2666{
2667	USB_DEVICE(0x1235, 0x000a),
2668	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2669		/* .vendor_name = "Novation", */
2670		/* .product_name = "Nocturn", */
2671		.ifnum = 0,
2672		.type = QUIRK_MIDI_RAW_BYTES
2673	}
2674},
2675{
2676	USB_DEVICE(0x1235, 0x000e),
2677	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2678		/* .vendor_name = "Novation", */
2679		/* .product_name = "Launchpad", */
2680		.ifnum = 0,
2681		.type = QUIRK_MIDI_RAW_BYTES
2682	}
2683},
2684{
2685	USB_DEVICE(0x1235, 0x0010),
2686	.driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
2687		.vendor_name = "Focusrite",
2688		.product_name = "Saffire 6 USB",
2689		.ifnum = QUIRK_ANY_INTERFACE,
2690		.type = QUIRK_COMPOSITE,
2691		.data = (const struct snd_usb_audio_quirk[]) {
2692			{
2693				.ifnum = 0,
2694				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
2695				.data = &(const struct audioformat) {
2696					.formats = SNDRV_PCM_FMTBIT_S24_3LE,
2697					.channels = 4,
2698					.iface = 0,
2699					.altsetting = 1,
2700					.altset_idx = 1,
2701					.attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
2702					.endpoint = 0x01,
2703					.ep_attr = USB_ENDPOINT_XFER_ISOC,
2704					.rates = SNDRV_PCM_RATE_44100 |
2705						 SNDRV_PCM_RATE_48000,
2706					.rate_min = 44100,
2707					.rate_max = 48000,
2708					.nr_rates = 2,
2709					.rate_table = (unsigned int[]) {
2710						44100, 48000
2711					}
2712				}
2713			},
2714			{
2715				.ifnum = 1,
2716				.type = QUIRK_MIDI_RAW_BYTES
2717			},
2718			{
2719				.ifnum = -1
2720			}
2721		}
2722	}
2723},
2724{
2725	USB_DEVICE(0x1235, 0x0018),
2726	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2727		.vendor_name = "Novation",
2728		.product_name = "Twitch",
2729		.ifnum = QUIRK_ANY_INTERFACE,
2730		.type = QUIRK_COMPOSITE,
2731		.data = (const struct snd_usb_audio_quirk[]) {
2732			{
2733				.ifnum = 0,
2734				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
2735				.data = & (const struct audioformat) {
2736					.formats = SNDRV_PCM_FMTBIT_S24_3LE,
2737					.channels = 4,
2738					.iface = 0,
2739					.altsetting = 1,
2740					.altset_idx = 1,
2741					.attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
2742					.endpoint = 0x01,
2743					.ep_attr = USB_ENDPOINT_XFER_ISOC,
2744					.rates = SNDRV_PCM_RATE_44100 |
2745						 SNDRV_PCM_RATE_48000,
2746					.rate_min = 44100,
2747					.rate_max = 48000,
2748					.nr_rates = 2,
2749					.rate_table = (unsigned int[]) {
2750						44100, 48000
2751					}
2752				}
2753			},
2754			{
2755				.ifnum = 1,
2756				.type = QUIRK_MIDI_RAW_BYTES
2757			},
2758			{
2759				.ifnum = -1
2760			}
2761		}
2762	}
2763},
2764{
2765	USB_DEVICE_VENDOR_SPEC(0x1235, 0x4661),
2766	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2767		.vendor_name = "Novation",
2768		.product_name = "ReMOTE25",
2769		.ifnum = 0,
2770		.type = QUIRK_MIDI_NOVATION
2771	}
2772},
2773
2774/* Access Music devices */
2775{
2776	/* VirusTI Desktop */
2777	USB_DEVICE_VENDOR_SPEC(0x133e, 0x0815),
2778	.driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
2779		.ifnum = QUIRK_ANY_INTERFACE,
2780		.type = QUIRK_COMPOSITE,
2781		.data = &(const struct snd_usb_audio_quirk[]) {
2782			{
2783				.ifnum = 3,
2784				.type = QUIRK_MIDI_FIXED_ENDPOINT,
2785				.data = &(const struct snd_usb_midi_endpoint_info) {
2786					.out_cables = 0x0003,
2787					.in_cables  = 0x0003
2788				}
2789			},
2790			{
2791				.ifnum = 4,
2792				.type = QUIRK_IGNORE_INTERFACE
2793			},
2794			{
2795				.ifnum = -1
2796			}
2797		}
2798	}
2799},
2800
2801/* */
2802{
2803	/* aka. Serato Scratch Live DJ Box */
2804	USB_DEVICE(0x13e5, 0x0001),
2805	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2806		.vendor_name = "Rane",
2807		.product_name = "SL-1",
2808		.ifnum = QUIRK_NO_INTERFACE
2809	}
2810},
2811
2812/* Native Instruments MK2 series */
2813{
2814	/* Komplete Audio 6 */
2815	.match_flags = USB_DEVICE_ID_MATCH_DEVICE,
2816	.idVendor = 0x17cc,
2817	.idProduct = 0x1000,
2818},
2819{
2820	/* Traktor Audio 6 */
2821	.match_flags = USB_DEVICE_ID_MATCH_DEVICE,
2822	.idVendor = 0x17cc,
2823	.idProduct = 0x1010,
2824},
2825{
2826	/* Traktor Audio 10 */
2827	.match_flags = USB_DEVICE_ID_MATCH_DEVICE,
2828	.idVendor = 0x17cc,
2829	.idProduct = 0x1020,
2830},
2831
2832/* QinHeng devices */
2833{
2834	USB_DEVICE(0x1a86, 0x752d),
2835	.driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
2836		.vendor_name = "QinHeng",
2837		.product_name = "CH345",
2838		.ifnum = 1,
2839		.type = QUIRK_MIDI_CH345
2840	}
2841},
2842
2843/* KeithMcMillen Stringport */
2844{
2845	USB_DEVICE(0x1f38, 0x0001),
2846	.bInterfaceClass = USB_CLASS_AUDIO,
2847},
2848
2849/* Miditech devices */
2850{
2851	USB_DEVICE(0x4752, 0x0011),
2852	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2853		.vendor_name = "Miditech",
2854		.product_name = "Midistart-2",
2855		.ifnum = 0,
2856		.type = QUIRK_MIDI_CME
2857	}
2858},
2859
2860/* Central Music devices */
2861{
2862	/* this ID used by both Miditech MidiStudio-2 and CME UF-x */
2863	USB_DEVICE(0x7104, 0x2202),
2864	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2865		.ifnum = 0,
2866		.type = QUIRK_MIDI_CME
2867	}
2868},
2869
2870/*
2871 * Auvitek au0828 devices with audio interface.
2872 * This should be kept in sync with drivers/media/usb/au0828/au0828-cards.c
2873 * Please notice that some drivers are DVB only, and don't need to be
2874 * here. That's the case, for example, of DVICO_FUSIONHDTV7.
2875 */
2876
2877#define AU0828_DEVICE(vid, pid, vname, pname) { \
2878	USB_DEVICE_VENDOR_SPEC(vid, pid), \
2879	.match_flags = USB_DEVICE_ID_MATCH_DEVICE | \
2880		       USB_DEVICE_ID_MATCH_INT_CLASS | \
2881		       USB_DEVICE_ID_MATCH_INT_SUBCLASS, \
2882	.bInterfaceClass = USB_CLASS_AUDIO, \
2883	.bInterfaceSubClass = USB_SUBCLASS_AUDIOCONTROL, \
2884	.driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) { \
2885		.vendor_name = vname, \
2886		.product_name = pname, \
2887		.ifnum = QUIRK_ANY_INTERFACE, \
2888		.type = QUIRK_AUDIO_ALIGN_TRANSFER, \
2889	} \
2890}
2891
2892AU0828_DEVICE(0x2040, 0x7200, "Hauppauge", "HVR-950Q"),
2893AU0828_DEVICE(0x2040, 0x7240, "Hauppauge", "HVR-850"),
2894AU0828_DEVICE(0x2040, 0x7210, "Hauppauge", "HVR-950Q"),
2895AU0828_DEVICE(0x2040, 0x7217, "Hauppauge", "HVR-950Q"),
2896AU0828_DEVICE(0x2040, 0x721b, "Hauppauge", "HVR-950Q"),
2897AU0828_DEVICE(0x2040, 0x721e, "Hauppauge", "HVR-950Q"),
2898AU0828_DEVICE(0x2040, 0x721f, "Hauppauge", "HVR-950Q"),
2899AU0828_DEVICE(0x2040, 0x7280, "Hauppauge", "HVR-950Q"),
2900AU0828_DEVICE(0x0fd9, 0x0008, "Hauppauge", "HVR-950Q"),
2901AU0828_DEVICE(0x2040, 0x7201, "Hauppauge", "HVR-950Q-MXL"),
2902AU0828_DEVICE(0x2040, 0x7211, "Hauppauge", "HVR-950Q-MXL"),
2903AU0828_DEVICE(0x2040, 0x7281, "Hauppauge", "HVR-950Q-MXL"),
2904AU0828_DEVICE(0x05e1, 0x0480, "Hauppauge", "Woodbury"),
2905AU0828_DEVICE(0x2040, 0x8200, "Hauppauge", "Woodbury"),
2906AU0828_DEVICE(0x2040, 0x7260, "Hauppauge", "HVR-950Q"),
2907AU0828_DEVICE(0x2040, 0x7213, "Hauppauge", "HVR-950Q"),
2908AU0828_DEVICE(0x2040, 0x7270, "Hauppauge", "HVR-950Q"),
2909
2910/* Syntek STK1160 */
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2911{
 
2912	.match_flags = USB_DEVICE_ID_MATCH_DEVICE |
2913		       USB_DEVICE_ID_MATCH_INT_CLASS |
2914		       USB_DEVICE_ID_MATCH_INT_SUBCLASS,
2915	.idVendor = 0x05e1,
2916	.idProduct = 0x0408,
2917	.bInterfaceClass = USB_CLASS_AUDIO,
2918	.bInterfaceSubClass = USB_SUBCLASS_AUDIOCONTROL,
2919	.driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
2920		.vendor_name = "Syntek",
2921		.product_name = "STK1160",
2922		.ifnum = QUIRK_ANY_INTERFACE,
2923		.type = QUIRK_AUDIO_ALIGN_TRANSFER
2924	}
2925},
2926
2927/* Digidesign Mbox */
2928{
2929	/* Thanks to Clemens Ladisch <clemens@ladisch.de> */
2930	USB_DEVICE(0x0dba, 0x1000),
 
 
 
 
2931	.driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
2932		.vendor_name = "Digidesign",
2933		.product_name = "MBox",
2934		.ifnum = QUIRK_ANY_INTERFACE,
2935		.type = QUIRK_COMPOSITE,
2936		.data = (const struct snd_usb_audio_quirk[]){
2937			{
2938				.ifnum = 0,
2939				.type = QUIRK_AUDIO_STANDARD_MIXER,
2940			},
2941			{
2942				.ifnum = 1,
2943				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
2944				.data = &(const struct audioformat) {
2945					.formats = SNDRV_PCM_FMTBIT_S24_3BE,
2946					.channels = 2,
2947					.iface = 1,
2948					.altsetting = 1,
2949					.altset_idx = 1,
2950					.attributes = 0x4,
2951					.endpoint = 0x02,
2952					.ep_attr = USB_ENDPOINT_XFER_ISOC |
2953						USB_ENDPOINT_SYNC_SYNC,
2954					.maxpacksize = 0x130,
2955					.rates = SNDRV_PCM_RATE_48000,
2956					.rate_min = 48000,
2957					.rate_max = 48000,
2958					.nr_rates = 1,
2959					.rate_table = (unsigned int[]) {
2960						48000
2961					}
2962				}
2963			},
2964			{
2965				.ifnum = 1,
2966				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
2967				.data = &(const struct audioformat) {
2968					.formats = SNDRV_PCM_FMTBIT_S24_3BE,
2969					.channels = 2,
2970					.iface = 1,
2971					.altsetting = 1,
2972					.altset_idx = 1,
2973					.attributes = 0x4,
2974					.endpoint = 0x81,
2975					.ep_attr = USB_ENDPOINT_XFER_ISOC |
2976						USB_ENDPOINT_SYNC_ASYNC,
2977					.maxpacksize = 0x130,
2978					.rates = SNDRV_PCM_RATE_48000,
2979					.rate_min = 48000,
2980					.rate_max = 48000,
2981					.nr_rates = 1,
2982					.rate_table = (unsigned int[]) {
2983						48000
2984					}
2985				}
2986			},
2987			{
2988				.ifnum = -1
2989			}
2990		}
2991	}
2992},
2993
2994/* DIGIDESIGN MBOX 2 */
2995{
2996	USB_DEVICE(0x0dba, 0x3000),
 
 
 
 
 
2997	.driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
2998		.vendor_name = "Digidesign",
2999		.product_name = "Mbox 2",
3000		.ifnum = QUIRK_ANY_INTERFACE,
3001		.type = QUIRK_COMPOSITE,
3002		.data = (const struct snd_usb_audio_quirk[]) {
3003			{
3004				.ifnum = 0,
3005				.type = QUIRK_IGNORE_INTERFACE
3006			},
3007			{
3008				.ifnum = 1,
3009				.type = QUIRK_IGNORE_INTERFACE
3010			},
3011			{
3012				.ifnum = 2,
3013				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
3014				.data = &(const struct audioformat) {
3015					.formats = SNDRV_PCM_FMTBIT_S24_3BE,
3016					.channels = 2,
3017					.iface = 2,
3018					.altsetting = 2,
3019					.altset_idx = 1,
3020					.attributes = 0x00,
3021					.endpoint = 0x03,
3022					.ep_attr = USB_ENDPOINT_SYNC_ASYNC,
3023					.rates = SNDRV_PCM_RATE_48000,
3024					.rate_min = 48000,
3025					.rate_max = 48000,
3026					.nr_rates = 1,
3027					.rate_table = (unsigned int[]) {
3028						48000
3029					}
3030				}
3031			},
3032			{
3033				.ifnum = 3,
3034				.type = QUIRK_IGNORE_INTERFACE
3035			},
3036			{
3037				.ifnum = 4,
3038				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
3039				.data = &(const struct audioformat) {
3040				.formats = SNDRV_PCM_FMTBIT_S24_3BE,
3041					.channels = 2,
3042					.iface = 4,
3043					.altsetting = 2,
3044					.altset_idx = 1,
3045					.attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
3046					.endpoint = 0x85,
3047					.ep_attr = USB_ENDPOINT_SYNC_SYNC,
3048					.rates = SNDRV_PCM_RATE_48000,
3049					.rate_min = 48000,
3050					.rate_max = 48000,
3051					.nr_rates = 1,
3052					.rate_table = (unsigned int[]) {
3053						48000
3054					}
3055				}
3056			},
3057			{
3058				.ifnum = 5,
3059				.type = QUIRK_IGNORE_INTERFACE
3060			},
3061			{
3062				.ifnum = 6,
3063				.type = QUIRK_MIDI_MIDIMAN,
3064				.data = &(const struct snd_usb_midi_endpoint_info) {
3065					.out_ep =  0x02,
3066					.out_cables = 0x0001,
3067					.in_ep = 0x81,
3068					.in_interval = 0x01,
3069					.in_cables = 0x0001
3070				}
3071			},
3072			{
3073				.ifnum = -1
3074			}
3075		}
3076	}
3077},
3078{
3079	/* Tascam US122 MKII - playback-only support */
3080	.match_flags = USB_DEVICE_ID_MATCH_DEVICE,
3081	.idVendor = 0x0644,
3082	.idProduct = 0x8021,
3083	.bInterfaceClass = USB_CLASS_AUDIO,
 
3084	.driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
3085		.vendor_name = "TASCAM",
3086		.product_name = "US122 MKII",
3087		.ifnum = QUIRK_ANY_INTERFACE,
3088		.type = QUIRK_COMPOSITE,
3089		.data = (const struct snd_usb_audio_quirk[]) {
3090			{
3091				.ifnum = 0,
3092				.type = QUIRK_IGNORE_INTERFACE
3093			},
3094			{
3095				.ifnum = 1,
3096				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
3097				.data = &(const struct audioformat) {
3098					.formats = SNDRV_PCM_FMTBIT_S24_3LE,
3099					.channels = 2,
3100					.iface = 1,
3101					.altsetting = 1,
3102					.altset_idx = 1,
3103					.attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
3104					.endpoint = 0x02,
3105					.ep_attr = USB_ENDPOINT_XFER_ISOC,
3106					.rates = SNDRV_PCM_RATE_44100 |
3107						 SNDRV_PCM_RATE_48000 |
3108						 SNDRV_PCM_RATE_88200 |
3109						 SNDRV_PCM_RATE_96000,
3110					.rate_min = 44100,
3111					.rate_max = 96000,
3112					.nr_rates = 4,
3113					.rate_table = (unsigned int[]) {
3114						44100, 48000, 88200, 96000
3115					}
3116				}
3117			},
3118			{
3119				.ifnum = -1
3120			}
3121		}
3122	}
3123},
3124
3125/* Microsoft XboxLive Headset/Xbox Communicator */
3126{
3127	USB_DEVICE(0x045e, 0x0283),
3128	.bInterfaceClass = USB_CLASS_PER_INTERFACE,
 
 
 
 
3129	.driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
3130		.vendor_name = "Microsoft",
3131		.product_name = "XboxLive Headset/Xbox Communicator",
3132		.ifnum = QUIRK_ANY_INTERFACE,
3133		.type = QUIRK_COMPOSITE,
3134		.data = &(const struct snd_usb_audio_quirk[]) {
3135			{
3136				/* playback */
3137				.ifnum = 0,
3138				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
3139				.data = &(const struct audioformat) {
3140					.formats = SNDRV_PCM_FMTBIT_S16_LE,
3141					.channels = 1,
3142					.iface = 0,
3143					.altsetting = 0,
3144					.altset_idx = 0,
3145					.attributes = 0,
3146					.endpoint = 0x04,
3147					.ep_attr = 0x05,
3148					.rates = SNDRV_PCM_RATE_CONTINUOUS,
3149					.rate_min = 22050,
3150					.rate_max = 22050
3151				}
3152			},
3153			{
3154				/* capture */
3155				.ifnum = 1,
3156				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
3157				.data = &(const struct audioformat) {
3158					.formats = SNDRV_PCM_FMTBIT_S16_LE,
3159					.channels = 1,
3160					.iface = 1,
3161					.altsetting = 0,
3162					.altset_idx = 0,
3163					.attributes = 0,
3164					.endpoint = 0x85,
3165					.ep_attr = 0x05,
3166					.rates = SNDRV_PCM_RATE_CONTINUOUS,
3167					.rate_min = 16000,
3168					.rate_max = 16000
3169				}
3170			},
3171			{
3172				.ifnum = -1
3173			}
3174		}
3175	}
3176},
3177
3178/* Reloop Play */
3179{
3180	USB_DEVICE(0x200c, 0x100b),
3181	.bInterfaceClass = USB_CLASS_PER_INTERFACE,
3182	.driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
 
 
3183		.ifnum = QUIRK_ANY_INTERFACE,
3184		.type = QUIRK_COMPOSITE,
3185		.data = &(const struct snd_usb_audio_quirk[]) {
3186			{
3187				.ifnum = 0,
3188				.type = QUIRK_AUDIO_STANDARD_MIXER,
3189			},
3190			{
3191				.ifnum = 1,
3192				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
3193				.data = &(const struct audioformat) {
3194					.formats = SNDRV_PCM_FMTBIT_S24_3LE,
3195					.channels = 4,
3196					.iface = 1,
3197					.altsetting = 1,
3198					.altset_idx = 1,
3199					.attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
3200					.endpoint = 0x01,
3201					.ep_attr = USB_ENDPOINT_SYNC_ADAPTIVE,
 
3202					.rates = SNDRV_PCM_RATE_44100 |
3203						 SNDRV_PCM_RATE_48000,
3204					.rate_min = 44100,
3205					.rate_max = 48000,
3206					.nr_rates = 2,
3207					.rate_table = (unsigned int[]) {
3208						44100, 48000
3209					}
3210				}
3211			},
3212			{
3213				.ifnum = -1
3214			}
3215		}
3216	}
3217},
3218
3219{
3220	/*
3221	 * ZOOM R16/24 in audio interface mode.
3222	 * Playback requires an extra four byte LE length indicator
3223	 * at the start of each isochronous packet. This quirk is
3224	 * enabled in create_standard_audio_quirk().
3225	 */
3226	USB_DEVICE(0x1686, 0x00dd),
3227	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
3228		.ifnum = QUIRK_ANY_INTERFACE,
3229		.type = QUIRK_COMPOSITE,
3230		.data = (const struct snd_usb_audio_quirk[]) {
3231			{
3232				/* Playback  */
3233				.ifnum = 1,
3234				.type = QUIRK_AUDIO_STANDARD_INTERFACE,
3235			},
3236			{
3237				/* Capture */
3238				.ifnum = 2,
3239				.type = QUIRK_AUDIO_STANDARD_INTERFACE,
3240			},
3241			{
3242				/* Midi */
3243				.ifnum = 3,
3244				.type = QUIRK_MIDI_STANDARD_INTERFACE
3245			},
3246			{
3247				.ifnum = -1
3248			},
3249		}
3250	}
3251},
3252
3253{
3254	/*
3255	 * Some USB MIDI devices don't have an audio control interface,
3256	 * so we have to grab MIDI streaming interfaces here.
3257	 */
3258	.match_flags = USB_DEVICE_ID_MATCH_INT_CLASS |
3259		       USB_DEVICE_ID_MATCH_INT_SUBCLASS,
3260	.bInterfaceClass = USB_CLASS_AUDIO,
3261	.bInterfaceSubClass = USB_SUBCLASS_MIDISTREAMING,
3262	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
3263		.ifnum = QUIRK_ANY_INTERFACE,
3264		.type = QUIRK_MIDI_STANDARD_INTERFACE
3265	}
3266},
3267
3268{
3269	/*
3270	 * The original product_name is "USB Sound Device", however this name
3271	 * is also used by the CM106 based cards, so make it unique.
3272	 */
3273	USB_DEVICE(0x0d8c, 0x0103),
3274	.driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
3275		.product_name = "Audio Advantage MicroII",
3276		.ifnum = QUIRK_NO_INTERFACE
3277	}
3278},
3279
3280#undef USB_DEVICE_VENDOR_SPEC