Linux Audio

Check our new training course

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