Linux Audio

Check our new training course

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