Linux Audio

Check our new training course

Yocto / OpenEmbedded training

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