162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-or-later */
262306a36Sopenharmony_ci/*
362306a36Sopenharmony_ci * ALSA USB Audio Driver
462306a36Sopenharmony_ci *
562306a36Sopenharmony_ci * Copyright (c) 2002 by Takashi Iwai <tiwai@suse.de>,
662306a36Sopenharmony_ci *                       Clemens Ladisch <clemens@ladisch.de>
762306a36Sopenharmony_ci */
862306a36Sopenharmony_ci
962306a36Sopenharmony_ci/*
1062306a36Sopenharmony_ci * The contents of this file are part of the driver's id_table.
1162306a36Sopenharmony_ci *
1262306a36Sopenharmony_ci * In a perfect world, this file would be empty.
1362306a36Sopenharmony_ci */
1462306a36Sopenharmony_ci
1562306a36Sopenharmony_ci/*
1662306a36Sopenharmony_ci * Use this for devices where other interfaces are standard compliant,
1762306a36Sopenharmony_ci * to prevent the quirk being applied to those interfaces. (To work with
1862306a36Sopenharmony_ci * hotplugging, bDeviceClass must be set to USB_CLASS_PER_INTERFACE.)
1962306a36Sopenharmony_ci */
2062306a36Sopenharmony_ci#define USB_DEVICE_VENDOR_SPEC(vend, prod) \
2162306a36Sopenharmony_ci	.match_flags = USB_DEVICE_ID_MATCH_VENDOR | \
2262306a36Sopenharmony_ci		       USB_DEVICE_ID_MATCH_PRODUCT | \
2362306a36Sopenharmony_ci		       USB_DEVICE_ID_MATCH_INT_CLASS, \
2462306a36Sopenharmony_ci	.idVendor = vend, \
2562306a36Sopenharmony_ci	.idProduct = prod, \
2662306a36Sopenharmony_ci	.bInterfaceClass = USB_CLASS_VENDOR_SPEC
2762306a36Sopenharmony_ci
2862306a36Sopenharmony_ci/* A standard entry matching with vid/pid and the audio class/subclass */
2962306a36Sopenharmony_ci#define USB_AUDIO_DEVICE(vend, prod) \
3062306a36Sopenharmony_ci	.match_flags = USB_DEVICE_ID_MATCH_DEVICE | \
3162306a36Sopenharmony_ci		       USB_DEVICE_ID_MATCH_INT_CLASS | \
3262306a36Sopenharmony_ci		       USB_DEVICE_ID_MATCH_INT_SUBCLASS, \
3362306a36Sopenharmony_ci	.idVendor = vend, \
3462306a36Sopenharmony_ci	.idProduct = prod, \
3562306a36Sopenharmony_ci	.bInterfaceClass = USB_CLASS_AUDIO, \
3662306a36Sopenharmony_ci	.bInterfaceSubClass = USB_SUBCLASS_AUDIOCONTROL
3762306a36Sopenharmony_ci
3862306a36Sopenharmony_ci/* FTDI devices */
3962306a36Sopenharmony_ci{
4062306a36Sopenharmony_ci	USB_DEVICE(0x0403, 0xb8d8),
4162306a36Sopenharmony_ci	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
4262306a36Sopenharmony_ci		/* .vendor_name = "STARR LABS", */
4362306a36Sopenharmony_ci		/* .product_name = "Starr Labs MIDI USB device", */
4462306a36Sopenharmony_ci		.ifnum = 0,
4562306a36Sopenharmony_ci		.type = QUIRK_MIDI_FTDI
4662306a36Sopenharmony_ci	}
4762306a36Sopenharmony_ci},
4862306a36Sopenharmony_ci
4962306a36Sopenharmony_ci{
5062306a36Sopenharmony_ci	/* Creative BT-D1 */
5162306a36Sopenharmony_ci	USB_DEVICE(0x041e, 0x0005),
5262306a36Sopenharmony_ci	.driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
5362306a36Sopenharmony_ci		.ifnum = 1,
5462306a36Sopenharmony_ci		.type = QUIRK_AUDIO_FIXED_ENDPOINT,
5562306a36Sopenharmony_ci		.data = &(const struct audioformat) {
5662306a36Sopenharmony_ci			.formats = SNDRV_PCM_FMTBIT_S16_LE,
5762306a36Sopenharmony_ci			.channels = 2,
5862306a36Sopenharmony_ci			.iface = 1,
5962306a36Sopenharmony_ci			.altsetting = 1,
6062306a36Sopenharmony_ci			.altset_idx = 1,
6162306a36Sopenharmony_ci			.endpoint = 0x03,
6262306a36Sopenharmony_ci			.ep_attr = USB_ENDPOINT_XFER_ISOC,
6362306a36Sopenharmony_ci			.attributes = 0,
6462306a36Sopenharmony_ci			.rates = SNDRV_PCM_RATE_CONTINUOUS,
6562306a36Sopenharmony_ci			.rate_min = 48000,
6662306a36Sopenharmony_ci			.rate_max = 48000,
6762306a36Sopenharmony_ci		}
6862306a36Sopenharmony_ci	}
6962306a36Sopenharmony_ci},
7062306a36Sopenharmony_ci
7162306a36Sopenharmony_ci/* E-Mu 0202 USB */
7262306a36Sopenharmony_ci{ USB_DEVICE_VENDOR_SPEC(0x041e, 0x3f02) },
7362306a36Sopenharmony_ci/* E-Mu 0404 USB */
7462306a36Sopenharmony_ci{ USB_DEVICE_VENDOR_SPEC(0x041e, 0x3f04) },
7562306a36Sopenharmony_ci/* E-Mu Tracker Pre */
7662306a36Sopenharmony_ci{ USB_DEVICE_VENDOR_SPEC(0x041e, 0x3f0a) },
7762306a36Sopenharmony_ci/* E-Mu 0204 USB */
7862306a36Sopenharmony_ci{ USB_DEVICE_VENDOR_SPEC(0x041e, 0x3f19) },
7962306a36Sopenharmony_ci/* Ktmicro Usb_audio device */
8062306a36Sopenharmony_ci{ USB_DEVICE_VENDOR_SPEC(0x31b2, 0x0011) },
8162306a36Sopenharmony_ci
8262306a36Sopenharmony_ci/*
8362306a36Sopenharmony_ci * Creative Technology, Ltd Live! Cam Sync HD [VF0770]
8462306a36Sopenharmony_ci * The device advertises 8 formats, but only a rate of 48kHz is honored by the
8562306a36Sopenharmony_ci * hardware and 24 bits give chopped audio, so only report the one working
8662306a36Sopenharmony_ci * combination.
8762306a36Sopenharmony_ci */
8862306a36Sopenharmony_ci{
8962306a36Sopenharmony_ci	USB_AUDIO_DEVICE(0x041e, 0x4095),
9062306a36Sopenharmony_ci	.driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
9162306a36Sopenharmony_ci		.ifnum = QUIRK_ANY_INTERFACE,
9262306a36Sopenharmony_ci		.type = QUIRK_COMPOSITE,
9362306a36Sopenharmony_ci		.data = &(const struct snd_usb_audio_quirk[]) {
9462306a36Sopenharmony_ci			{
9562306a36Sopenharmony_ci				.ifnum = 2,
9662306a36Sopenharmony_ci				.type = QUIRK_AUDIO_STANDARD_MIXER,
9762306a36Sopenharmony_ci			},
9862306a36Sopenharmony_ci			{
9962306a36Sopenharmony_ci				.ifnum = 3,
10062306a36Sopenharmony_ci				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
10162306a36Sopenharmony_ci				.data = &(const struct audioformat) {
10262306a36Sopenharmony_ci					.formats = SNDRV_PCM_FMTBIT_S16_LE,
10362306a36Sopenharmony_ci					.channels = 2,
10462306a36Sopenharmony_ci					.fmt_bits = 16,
10562306a36Sopenharmony_ci					.iface = 3,
10662306a36Sopenharmony_ci					.altsetting = 4,
10762306a36Sopenharmony_ci					.altset_idx = 4,
10862306a36Sopenharmony_ci					.endpoint = 0x82,
10962306a36Sopenharmony_ci					.ep_attr = 0x05,
11062306a36Sopenharmony_ci					.rates = SNDRV_PCM_RATE_48000,
11162306a36Sopenharmony_ci					.rate_min = 48000,
11262306a36Sopenharmony_ci					.rate_max = 48000,
11362306a36Sopenharmony_ci					.nr_rates = 1,
11462306a36Sopenharmony_ci					.rate_table = (unsigned int[]) { 48000 },
11562306a36Sopenharmony_ci				},
11662306a36Sopenharmony_ci			},
11762306a36Sopenharmony_ci			{
11862306a36Sopenharmony_ci				.ifnum = -1
11962306a36Sopenharmony_ci			},
12062306a36Sopenharmony_ci		},
12162306a36Sopenharmony_ci	},
12262306a36Sopenharmony_ci},
12362306a36Sopenharmony_ci
12462306a36Sopenharmony_ci/*
12562306a36Sopenharmony_ci * HP Wireless Audio
12662306a36Sopenharmony_ci * When not ignored, causes instability issues for some users, forcing them to
12762306a36Sopenharmony_ci * skip the entire module.
12862306a36Sopenharmony_ci */
12962306a36Sopenharmony_ci{
13062306a36Sopenharmony_ci	USB_DEVICE(0x0424, 0xb832),
13162306a36Sopenharmony_ci	.driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
13262306a36Sopenharmony_ci		.vendor_name = "Standard Microsystems Corp.",
13362306a36Sopenharmony_ci		.product_name = "HP Wireless Audio",
13462306a36Sopenharmony_ci		.ifnum = QUIRK_ANY_INTERFACE,
13562306a36Sopenharmony_ci		.type = QUIRK_COMPOSITE,
13662306a36Sopenharmony_ci		.data = (const struct snd_usb_audio_quirk[]) {
13762306a36Sopenharmony_ci			/* Mixer */
13862306a36Sopenharmony_ci			{
13962306a36Sopenharmony_ci				.ifnum = 0,
14062306a36Sopenharmony_ci				.type = QUIRK_IGNORE_INTERFACE,
14162306a36Sopenharmony_ci			},
14262306a36Sopenharmony_ci			/* Playback */
14362306a36Sopenharmony_ci			{
14462306a36Sopenharmony_ci				.ifnum = 1,
14562306a36Sopenharmony_ci				.type = QUIRK_IGNORE_INTERFACE,
14662306a36Sopenharmony_ci			},
14762306a36Sopenharmony_ci			/* Capture */
14862306a36Sopenharmony_ci			{
14962306a36Sopenharmony_ci				.ifnum = 2,
15062306a36Sopenharmony_ci				.type = QUIRK_IGNORE_INTERFACE,
15162306a36Sopenharmony_ci			},
15262306a36Sopenharmony_ci			/* HID Device, .ifnum = 3 */
15362306a36Sopenharmony_ci			{
15462306a36Sopenharmony_ci				.ifnum = -1,
15562306a36Sopenharmony_ci			}
15662306a36Sopenharmony_ci		}
15762306a36Sopenharmony_ci	}
15862306a36Sopenharmony_ci},
15962306a36Sopenharmony_ci
16062306a36Sopenharmony_ci/*
16162306a36Sopenharmony_ci * Logitech QuickCam: bDeviceClass is vendor-specific, so generic interface
16262306a36Sopenharmony_ci * class matches do not take effect without an explicit ID match.
16362306a36Sopenharmony_ci */
16462306a36Sopenharmony_ci{ USB_AUDIO_DEVICE(0x046d, 0x0850) },
16562306a36Sopenharmony_ci{ USB_AUDIO_DEVICE(0x046d, 0x08ae) },
16662306a36Sopenharmony_ci{ USB_AUDIO_DEVICE(0x046d, 0x08c6) },
16762306a36Sopenharmony_ci{ USB_AUDIO_DEVICE(0x046d, 0x08f0) },
16862306a36Sopenharmony_ci{ USB_AUDIO_DEVICE(0x046d, 0x08f5) },
16962306a36Sopenharmony_ci{ USB_AUDIO_DEVICE(0x046d, 0x08f6) },
17062306a36Sopenharmony_ci{ USB_AUDIO_DEVICE(0x046d, 0x0990) },
17162306a36Sopenharmony_ci
17262306a36Sopenharmony_ci/*
17362306a36Sopenharmony_ci * Yamaha devices
17462306a36Sopenharmony_ci */
17562306a36Sopenharmony_ci
17662306a36Sopenharmony_ci#define YAMAHA_DEVICE(id, name) { \
17762306a36Sopenharmony_ci	USB_DEVICE(0x0499, id), \
17862306a36Sopenharmony_ci	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { \
17962306a36Sopenharmony_ci		.vendor_name = "Yamaha", \
18062306a36Sopenharmony_ci		.product_name = name, \
18162306a36Sopenharmony_ci		.ifnum = QUIRK_ANY_INTERFACE, \
18262306a36Sopenharmony_ci		.type = QUIRK_MIDI_YAMAHA \
18362306a36Sopenharmony_ci	} \
18462306a36Sopenharmony_ci}
18562306a36Sopenharmony_ci#define YAMAHA_INTERFACE(id, intf, name) { \
18662306a36Sopenharmony_ci	USB_DEVICE_VENDOR_SPEC(0x0499, id), \
18762306a36Sopenharmony_ci	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { \
18862306a36Sopenharmony_ci		.vendor_name = "Yamaha", \
18962306a36Sopenharmony_ci		.product_name = name, \
19062306a36Sopenharmony_ci		.ifnum = intf, \
19162306a36Sopenharmony_ci		.type = QUIRK_MIDI_YAMAHA \
19262306a36Sopenharmony_ci	} \
19362306a36Sopenharmony_ci}
19462306a36Sopenharmony_ciYAMAHA_DEVICE(0x1000, "UX256"),
19562306a36Sopenharmony_ciYAMAHA_DEVICE(0x1001, "MU1000"),
19662306a36Sopenharmony_ciYAMAHA_DEVICE(0x1002, "MU2000"),
19762306a36Sopenharmony_ciYAMAHA_DEVICE(0x1003, "MU500"),
19862306a36Sopenharmony_ciYAMAHA_INTERFACE(0x1004, 3, "UW500"),
19962306a36Sopenharmony_ciYAMAHA_DEVICE(0x1005, "MOTIF6"),
20062306a36Sopenharmony_ciYAMAHA_DEVICE(0x1006, "MOTIF7"),
20162306a36Sopenharmony_ciYAMAHA_DEVICE(0x1007, "MOTIF8"),
20262306a36Sopenharmony_ciYAMAHA_DEVICE(0x1008, "UX96"),
20362306a36Sopenharmony_ciYAMAHA_DEVICE(0x1009, "UX16"),
20462306a36Sopenharmony_ciYAMAHA_INTERFACE(0x100a, 3, "EOS BX"),
20562306a36Sopenharmony_ciYAMAHA_DEVICE(0x100c, "UC-MX"),
20662306a36Sopenharmony_ciYAMAHA_DEVICE(0x100d, "UC-KX"),
20762306a36Sopenharmony_ciYAMAHA_DEVICE(0x100e, "S08"),
20862306a36Sopenharmony_ciYAMAHA_DEVICE(0x100f, "CLP-150"),
20962306a36Sopenharmony_ciYAMAHA_DEVICE(0x1010, "CLP-170"),
21062306a36Sopenharmony_ciYAMAHA_DEVICE(0x1011, "P-250"),
21162306a36Sopenharmony_ciYAMAHA_DEVICE(0x1012, "TYROS"),
21262306a36Sopenharmony_ciYAMAHA_DEVICE(0x1013, "PF-500"),
21362306a36Sopenharmony_ciYAMAHA_DEVICE(0x1014, "S90"),
21462306a36Sopenharmony_ciYAMAHA_DEVICE(0x1015, "MOTIF-R"),
21562306a36Sopenharmony_ciYAMAHA_DEVICE(0x1016, "MDP-5"),
21662306a36Sopenharmony_ciYAMAHA_DEVICE(0x1017, "CVP-204"),
21762306a36Sopenharmony_ciYAMAHA_DEVICE(0x1018, "CVP-206"),
21862306a36Sopenharmony_ciYAMAHA_DEVICE(0x1019, "CVP-208"),
21962306a36Sopenharmony_ciYAMAHA_DEVICE(0x101a, "CVP-210"),
22062306a36Sopenharmony_ciYAMAHA_DEVICE(0x101b, "PSR-1100"),
22162306a36Sopenharmony_ciYAMAHA_DEVICE(0x101c, "PSR-2100"),
22262306a36Sopenharmony_ciYAMAHA_DEVICE(0x101d, "CLP-175"),
22362306a36Sopenharmony_ciYAMAHA_DEVICE(0x101e, "PSR-K1"),
22462306a36Sopenharmony_ciYAMAHA_DEVICE(0x101f, "EZ-J24"),
22562306a36Sopenharmony_ciYAMAHA_DEVICE(0x1020, "EZ-250i"),
22662306a36Sopenharmony_ciYAMAHA_DEVICE(0x1021, "MOTIF ES 6"),
22762306a36Sopenharmony_ciYAMAHA_DEVICE(0x1022, "MOTIF ES 7"),
22862306a36Sopenharmony_ciYAMAHA_DEVICE(0x1023, "MOTIF ES 8"),
22962306a36Sopenharmony_ciYAMAHA_DEVICE(0x1024, "CVP-301"),
23062306a36Sopenharmony_ciYAMAHA_DEVICE(0x1025, "CVP-303"),
23162306a36Sopenharmony_ciYAMAHA_DEVICE(0x1026, "CVP-305"),
23262306a36Sopenharmony_ciYAMAHA_DEVICE(0x1027, "CVP-307"),
23362306a36Sopenharmony_ciYAMAHA_DEVICE(0x1028, "CVP-309"),
23462306a36Sopenharmony_ciYAMAHA_DEVICE(0x1029, "CVP-309GP"),
23562306a36Sopenharmony_ciYAMAHA_DEVICE(0x102a, "PSR-1500"),
23662306a36Sopenharmony_ciYAMAHA_DEVICE(0x102b, "PSR-3000"),
23762306a36Sopenharmony_ciYAMAHA_DEVICE(0x102e, "ELS-01/01C"),
23862306a36Sopenharmony_ciYAMAHA_DEVICE(0x1030, "PSR-295/293"),
23962306a36Sopenharmony_ciYAMAHA_DEVICE(0x1031, "DGX-205/203"),
24062306a36Sopenharmony_ciYAMAHA_DEVICE(0x1032, "DGX-305"),
24162306a36Sopenharmony_ciYAMAHA_DEVICE(0x1033, "DGX-505"),
24262306a36Sopenharmony_ciYAMAHA_DEVICE(0x1034, NULL),
24362306a36Sopenharmony_ciYAMAHA_DEVICE(0x1035, NULL),
24462306a36Sopenharmony_ciYAMAHA_DEVICE(0x1036, NULL),
24562306a36Sopenharmony_ciYAMAHA_DEVICE(0x1037, NULL),
24662306a36Sopenharmony_ciYAMAHA_DEVICE(0x1038, NULL),
24762306a36Sopenharmony_ciYAMAHA_DEVICE(0x1039, NULL),
24862306a36Sopenharmony_ciYAMAHA_DEVICE(0x103a, NULL),
24962306a36Sopenharmony_ciYAMAHA_DEVICE(0x103b, NULL),
25062306a36Sopenharmony_ciYAMAHA_DEVICE(0x103c, NULL),
25162306a36Sopenharmony_ciYAMAHA_DEVICE(0x103d, NULL),
25262306a36Sopenharmony_ciYAMAHA_DEVICE(0x103e, NULL),
25362306a36Sopenharmony_ciYAMAHA_DEVICE(0x103f, NULL),
25462306a36Sopenharmony_ciYAMAHA_DEVICE(0x1040, NULL),
25562306a36Sopenharmony_ciYAMAHA_DEVICE(0x1041, NULL),
25662306a36Sopenharmony_ciYAMAHA_DEVICE(0x1042, NULL),
25762306a36Sopenharmony_ciYAMAHA_DEVICE(0x1043, NULL),
25862306a36Sopenharmony_ciYAMAHA_DEVICE(0x1044, NULL),
25962306a36Sopenharmony_ciYAMAHA_DEVICE(0x1045, NULL),
26062306a36Sopenharmony_ciYAMAHA_INTERFACE(0x104e, 0, NULL),
26162306a36Sopenharmony_ciYAMAHA_DEVICE(0x104f, NULL),
26262306a36Sopenharmony_ciYAMAHA_DEVICE(0x1050, NULL),
26362306a36Sopenharmony_ciYAMAHA_DEVICE(0x1051, NULL),
26462306a36Sopenharmony_ciYAMAHA_DEVICE(0x1052, NULL),
26562306a36Sopenharmony_ciYAMAHA_INTERFACE(0x1053, 0, NULL),
26662306a36Sopenharmony_ciYAMAHA_INTERFACE(0x1054, 0, NULL),
26762306a36Sopenharmony_ciYAMAHA_DEVICE(0x1055, NULL),
26862306a36Sopenharmony_ciYAMAHA_DEVICE(0x1056, NULL),
26962306a36Sopenharmony_ciYAMAHA_DEVICE(0x1057, NULL),
27062306a36Sopenharmony_ciYAMAHA_DEVICE(0x1058, NULL),
27162306a36Sopenharmony_ciYAMAHA_DEVICE(0x1059, NULL),
27262306a36Sopenharmony_ciYAMAHA_DEVICE(0x105a, NULL),
27362306a36Sopenharmony_ciYAMAHA_DEVICE(0x105b, NULL),
27462306a36Sopenharmony_ciYAMAHA_DEVICE(0x105c, NULL),
27562306a36Sopenharmony_ciYAMAHA_DEVICE(0x105d, NULL),
27662306a36Sopenharmony_ci{
27762306a36Sopenharmony_ci	USB_DEVICE(0x0499, 0x1503),
27862306a36Sopenharmony_ci	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
27962306a36Sopenharmony_ci		/* .vendor_name = "Yamaha", */
28062306a36Sopenharmony_ci		/* .product_name = "MOX6/MOX8", */
28162306a36Sopenharmony_ci		.ifnum = QUIRK_ANY_INTERFACE,
28262306a36Sopenharmony_ci		.type = QUIRK_COMPOSITE,
28362306a36Sopenharmony_ci		.data = (const struct snd_usb_audio_quirk[]) {
28462306a36Sopenharmony_ci			{
28562306a36Sopenharmony_ci				.ifnum = 1,
28662306a36Sopenharmony_ci				.type = QUIRK_AUDIO_STANDARD_INTERFACE
28762306a36Sopenharmony_ci			},
28862306a36Sopenharmony_ci			{
28962306a36Sopenharmony_ci				.ifnum = 2,
29062306a36Sopenharmony_ci				.type = QUIRK_AUDIO_STANDARD_INTERFACE
29162306a36Sopenharmony_ci			},
29262306a36Sopenharmony_ci			{
29362306a36Sopenharmony_ci				.ifnum = 3,
29462306a36Sopenharmony_ci				.type = QUIRK_MIDI_YAMAHA
29562306a36Sopenharmony_ci			},
29662306a36Sopenharmony_ci			{
29762306a36Sopenharmony_ci				.ifnum = -1
29862306a36Sopenharmony_ci			}
29962306a36Sopenharmony_ci		}
30062306a36Sopenharmony_ci	}
30162306a36Sopenharmony_ci},
30262306a36Sopenharmony_ci{
30362306a36Sopenharmony_ci	USB_DEVICE(0x0499, 0x1507),
30462306a36Sopenharmony_ci	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
30562306a36Sopenharmony_ci		/* .vendor_name = "Yamaha", */
30662306a36Sopenharmony_ci		/* .product_name = "THR10", */
30762306a36Sopenharmony_ci		.ifnum = QUIRK_ANY_INTERFACE,
30862306a36Sopenharmony_ci		.type = QUIRK_COMPOSITE,
30962306a36Sopenharmony_ci		.data = (const struct snd_usb_audio_quirk[]) {
31062306a36Sopenharmony_ci			{
31162306a36Sopenharmony_ci				.ifnum = 1,
31262306a36Sopenharmony_ci				.type = QUIRK_AUDIO_STANDARD_INTERFACE
31362306a36Sopenharmony_ci			},
31462306a36Sopenharmony_ci			{
31562306a36Sopenharmony_ci				.ifnum = 2,
31662306a36Sopenharmony_ci				.type = QUIRK_AUDIO_STANDARD_INTERFACE
31762306a36Sopenharmony_ci			},
31862306a36Sopenharmony_ci			{
31962306a36Sopenharmony_ci				.ifnum = 3,
32062306a36Sopenharmony_ci				.type = QUIRK_MIDI_YAMAHA
32162306a36Sopenharmony_ci			},
32262306a36Sopenharmony_ci			{
32362306a36Sopenharmony_ci				.ifnum = -1
32462306a36Sopenharmony_ci			}
32562306a36Sopenharmony_ci		}
32662306a36Sopenharmony_ci	}
32762306a36Sopenharmony_ci},
32862306a36Sopenharmony_ci{
32962306a36Sopenharmony_ci	USB_DEVICE(0x0499, 0x1509),
33062306a36Sopenharmony_ci	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
33162306a36Sopenharmony_ci		/* .vendor_name = "Yamaha", */
33262306a36Sopenharmony_ci		/* .product_name = "Steinberg UR22", */
33362306a36Sopenharmony_ci		.ifnum = QUIRK_ANY_INTERFACE,
33462306a36Sopenharmony_ci		.type = QUIRK_COMPOSITE,
33562306a36Sopenharmony_ci		.data = (const struct snd_usb_audio_quirk[]) {
33662306a36Sopenharmony_ci			{
33762306a36Sopenharmony_ci				.ifnum = 1,
33862306a36Sopenharmony_ci				.type = QUIRK_AUDIO_STANDARD_INTERFACE
33962306a36Sopenharmony_ci			},
34062306a36Sopenharmony_ci			{
34162306a36Sopenharmony_ci				.ifnum = 2,
34262306a36Sopenharmony_ci				.type = QUIRK_AUDIO_STANDARD_INTERFACE
34362306a36Sopenharmony_ci			},
34462306a36Sopenharmony_ci			{
34562306a36Sopenharmony_ci				.ifnum = 3,
34662306a36Sopenharmony_ci				.type = QUIRK_MIDI_YAMAHA
34762306a36Sopenharmony_ci			},
34862306a36Sopenharmony_ci			{
34962306a36Sopenharmony_ci				.ifnum = 4,
35062306a36Sopenharmony_ci				.type = QUIRK_IGNORE_INTERFACE
35162306a36Sopenharmony_ci			},
35262306a36Sopenharmony_ci			{
35362306a36Sopenharmony_ci				.ifnum = -1
35462306a36Sopenharmony_ci			}
35562306a36Sopenharmony_ci		}
35662306a36Sopenharmony_ci	}
35762306a36Sopenharmony_ci},
35862306a36Sopenharmony_ci{
35962306a36Sopenharmony_ci	USB_DEVICE(0x0499, 0x150a),
36062306a36Sopenharmony_ci	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
36162306a36Sopenharmony_ci		/* .vendor_name = "Yamaha", */
36262306a36Sopenharmony_ci		/* .product_name = "THR5A", */
36362306a36Sopenharmony_ci		.ifnum = QUIRK_ANY_INTERFACE,
36462306a36Sopenharmony_ci		.type = QUIRK_COMPOSITE,
36562306a36Sopenharmony_ci		.data = (const struct snd_usb_audio_quirk[]) {
36662306a36Sopenharmony_ci			{
36762306a36Sopenharmony_ci				.ifnum = 1,
36862306a36Sopenharmony_ci				.type = QUIRK_AUDIO_STANDARD_INTERFACE
36962306a36Sopenharmony_ci			},
37062306a36Sopenharmony_ci			{
37162306a36Sopenharmony_ci				.ifnum = 2,
37262306a36Sopenharmony_ci				.type = QUIRK_AUDIO_STANDARD_INTERFACE
37362306a36Sopenharmony_ci			},
37462306a36Sopenharmony_ci			{
37562306a36Sopenharmony_ci				.ifnum = 3,
37662306a36Sopenharmony_ci				.type = QUIRK_MIDI_YAMAHA
37762306a36Sopenharmony_ci			},
37862306a36Sopenharmony_ci			{
37962306a36Sopenharmony_ci				.ifnum = -1
38062306a36Sopenharmony_ci			}
38162306a36Sopenharmony_ci		}
38262306a36Sopenharmony_ci	}
38362306a36Sopenharmony_ci},
38462306a36Sopenharmony_ci{
38562306a36Sopenharmony_ci	USB_DEVICE(0x0499, 0x150c),
38662306a36Sopenharmony_ci	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
38762306a36Sopenharmony_ci		/* .vendor_name = "Yamaha", */
38862306a36Sopenharmony_ci		/* .product_name = "THR10C", */
38962306a36Sopenharmony_ci		.ifnum = QUIRK_ANY_INTERFACE,
39062306a36Sopenharmony_ci		.type = QUIRK_COMPOSITE,
39162306a36Sopenharmony_ci		.data = (const struct snd_usb_audio_quirk[]) {
39262306a36Sopenharmony_ci			{
39362306a36Sopenharmony_ci				.ifnum = 1,
39462306a36Sopenharmony_ci				.type = QUIRK_AUDIO_STANDARD_INTERFACE
39562306a36Sopenharmony_ci			},
39662306a36Sopenharmony_ci			{
39762306a36Sopenharmony_ci				.ifnum = 2,
39862306a36Sopenharmony_ci				.type = QUIRK_AUDIO_STANDARD_INTERFACE
39962306a36Sopenharmony_ci			},
40062306a36Sopenharmony_ci			{
40162306a36Sopenharmony_ci				.ifnum = 3,
40262306a36Sopenharmony_ci				.type = QUIRK_MIDI_YAMAHA
40362306a36Sopenharmony_ci			},
40462306a36Sopenharmony_ci			{
40562306a36Sopenharmony_ci				.ifnum = -1
40662306a36Sopenharmony_ci			}
40762306a36Sopenharmony_ci		}
40862306a36Sopenharmony_ci	}
40962306a36Sopenharmony_ci},
41062306a36Sopenharmony_ciYAMAHA_DEVICE(0x2000, "DGP-7"),
41162306a36Sopenharmony_ciYAMAHA_DEVICE(0x2001, "DGP-5"),
41262306a36Sopenharmony_ciYAMAHA_DEVICE(0x2002, NULL),
41362306a36Sopenharmony_ciYAMAHA_DEVICE(0x2003, NULL),
41462306a36Sopenharmony_ciYAMAHA_DEVICE(0x5000, "CS1D"),
41562306a36Sopenharmony_ciYAMAHA_DEVICE(0x5001, "DSP1D"),
41662306a36Sopenharmony_ciYAMAHA_DEVICE(0x5002, "DME32"),
41762306a36Sopenharmony_ciYAMAHA_DEVICE(0x5003, "DM2000"),
41862306a36Sopenharmony_ciYAMAHA_DEVICE(0x5004, "02R96"),
41962306a36Sopenharmony_ciYAMAHA_DEVICE(0x5005, "ACU16-C"),
42062306a36Sopenharmony_ciYAMAHA_DEVICE(0x5006, "NHB32-C"),
42162306a36Sopenharmony_ciYAMAHA_DEVICE(0x5007, "DM1000"),
42262306a36Sopenharmony_ciYAMAHA_DEVICE(0x5008, "01V96"),
42362306a36Sopenharmony_ciYAMAHA_DEVICE(0x5009, "SPX2000"),
42462306a36Sopenharmony_ciYAMAHA_DEVICE(0x500a, "PM5D"),
42562306a36Sopenharmony_ciYAMAHA_DEVICE(0x500b, "DME64N"),
42662306a36Sopenharmony_ciYAMAHA_DEVICE(0x500c, "DME24N"),
42762306a36Sopenharmony_ciYAMAHA_DEVICE(0x500d, NULL),
42862306a36Sopenharmony_ciYAMAHA_DEVICE(0x500e, NULL),
42962306a36Sopenharmony_ciYAMAHA_DEVICE(0x500f, NULL),
43062306a36Sopenharmony_ciYAMAHA_DEVICE(0x7000, "DTX"),
43162306a36Sopenharmony_ciYAMAHA_DEVICE(0x7010, "UB99"),
43262306a36Sopenharmony_ci#undef YAMAHA_DEVICE
43362306a36Sopenharmony_ci#undef YAMAHA_INTERFACE
43462306a36Sopenharmony_ci/* this catches most recent vendor-specific Yamaha devices */
43562306a36Sopenharmony_ci{
43662306a36Sopenharmony_ci	.match_flags = USB_DEVICE_ID_MATCH_VENDOR |
43762306a36Sopenharmony_ci	               USB_DEVICE_ID_MATCH_INT_CLASS,
43862306a36Sopenharmony_ci	.idVendor = 0x0499,
43962306a36Sopenharmony_ci	.bInterfaceClass = USB_CLASS_VENDOR_SPEC,
44062306a36Sopenharmony_ci	.driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
44162306a36Sopenharmony_ci		.ifnum = QUIRK_ANY_INTERFACE,
44262306a36Sopenharmony_ci		.type = QUIRK_AUTODETECT
44362306a36Sopenharmony_ci	}
44462306a36Sopenharmony_ci},
44562306a36Sopenharmony_ci
44662306a36Sopenharmony_ci/*
44762306a36Sopenharmony_ci * Roland/RolandED/Edirol/BOSS devices
44862306a36Sopenharmony_ci */
44962306a36Sopenharmony_ci{
45062306a36Sopenharmony_ci	USB_DEVICE(0x0582, 0x0000),
45162306a36Sopenharmony_ci	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
45262306a36Sopenharmony_ci		.vendor_name = "Roland",
45362306a36Sopenharmony_ci		.product_name = "UA-100",
45462306a36Sopenharmony_ci		.ifnum = QUIRK_ANY_INTERFACE,
45562306a36Sopenharmony_ci		.type = QUIRK_COMPOSITE,
45662306a36Sopenharmony_ci		.data = (const struct snd_usb_audio_quirk[]) {
45762306a36Sopenharmony_ci			{
45862306a36Sopenharmony_ci				.ifnum = 0,
45962306a36Sopenharmony_ci				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
46062306a36Sopenharmony_ci				.data = & (const struct audioformat) {
46162306a36Sopenharmony_ci					.formats = SNDRV_PCM_FMTBIT_S16_LE,
46262306a36Sopenharmony_ci					.channels = 4,
46362306a36Sopenharmony_ci					.iface = 0,
46462306a36Sopenharmony_ci					.altsetting = 1,
46562306a36Sopenharmony_ci					.altset_idx = 1,
46662306a36Sopenharmony_ci					.attributes = 0,
46762306a36Sopenharmony_ci					.endpoint = 0x01,
46862306a36Sopenharmony_ci					.ep_attr = 0x09,
46962306a36Sopenharmony_ci					.rates = SNDRV_PCM_RATE_CONTINUOUS,
47062306a36Sopenharmony_ci					.rate_min = 44100,
47162306a36Sopenharmony_ci					.rate_max = 44100,
47262306a36Sopenharmony_ci				}
47362306a36Sopenharmony_ci			},
47462306a36Sopenharmony_ci			{
47562306a36Sopenharmony_ci				.ifnum = 1,
47662306a36Sopenharmony_ci				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
47762306a36Sopenharmony_ci				.data = & (const struct audioformat) {
47862306a36Sopenharmony_ci					.formats = SNDRV_PCM_FMTBIT_S16_LE,
47962306a36Sopenharmony_ci					.channels = 2,
48062306a36Sopenharmony_ci					.iface = 1,
48162306a36Sopenharmony_ci					.altsetting = 1,
48262306a36Sopenharmony_ci					.altset_idx = 1,
48362306a36Sopenharmony_ci					.attributes = UAC_EP_CS_ATTR_FILL_MAX,
48462306a36Sopenharmony_ci					.endpoint = 0x81,
48562306a36Sopenharmony_ci					.ep_attr = 0x05,
48662306a36Sopenharmony_ci					.rates = SNDRV_PCM_RATE_CONTINUOUS,
48762306a36Sopenharmony_ci					.rate_min = 44100,
48862306a36Sopenharmony_ci					.rate_max = 44100,
48962306a36Sopenharmony_ci				}
49062306a36Sopenharmony_ci			},
49162306a36Sopenharmony_ci			{
49262306a36Sopenharmony_ci				.ifnum = 2,
49362306a36Sopenharmony_ci				.type = QUIRK_MIDI_FIXED_ENDPOINT,
49462306a36Sopenharmony_ci				.data = & (const struct snd_usb_midi_endpoint_info) {
49562306a36Sopenharmony_ci					.out_cables = 0x0007,
49662306a36Sopenharmony_ci					.in_cables  = 0x0007
49762306a36Sopenharmony_ci				}
49862306a36Sopenharmony_ci			},
49962306a36Sopenharmony_ci			{
50062306a36Sopenharmony_ci				.ifnum = -1
50162306a36Sopenharmony_ci			}
50262306a36Sopenharmony_ci		}
50362306a36Sopenharmony_ci	}
50462306a36Sopenharmony_ci},
50562306a36Sopenharmony_ci{
50662306a36Sopenharmony_ci	USB_DEVICE(0x0582, 0x0002),
50762306a36Sopenharmony_ci	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
50862306a36Sopenharmony_ci		.vendor_name = "EDIROL",
50962306a36Sopenharmony_ci		.product_name = "UM-4",
51062306a36Sopenharmony_ci		.ifnum = QUIRK_ANY_INTERFACE,
51162306a36Sopenharmony_ci		.type = QUIRK_COMPOSITE,
51262306a36Sopenharmony_ci		.data = (const struct snd_usb_audio_quirk[]) {
51362306a36Sopenharmony_ci			{
51462306a36Sopenharmony_ci				.ifnum = 0,
51562306a36Sopenharmony_ci				.type = QUIRK_IGNORE_INTERFACE
51662306a36Sopenharmony_ci			},
51762306a36Sopenharmony_ci			{
51862306a36Sopenharmony_ci				.ifnum = 1,
51962306a36Sopenharmony_ci				.type = QUIRK_IGNORE_INTERFACE
52062306a36Sopenharmony_ci			},
52162306a36Sopenharmony_ci			{
52262306a36Sopenharmony_ci				.ifnum = 2,
52362306a36Sopenharmony_ci				.type = QUIRK_MIDI_FIXED_ENDPOINT,
52462306a36Sopenharmony_ci				.data = & (const struct snd_usb_midi_endpoint_info) {
52562306a36Sopenharmony_ci					.out_cables = 0x000f,
52662306a36Sopenharmony_ci					.in_cables  = 0x000f
52762306a36Sopenharmony_ci				}
52862306a36Sopenharmony_ci			},
52962306a36Sopenharmony_ci			{
53062306a36Sopenharmony_ci				.ifnum = -1
53162306a36Sopenharmony_ci			}
53262306a36Sopenharmony_ci		}
53362306a36Sopenharmony_ci	}
53462306a36Sopenharmony_ci},
53562306a36Sopenharmony_ci{
53662306a36Sopenharmony_ci	USB_DEVICE(0x0582, 0x0003),
53762306a36Sopenharmony_ci	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
53862306a36Sopenharmony_ci		.vendor_name = "Roland",
53962306a36Sopenharmony_ci		.product_name = "SC-8850",
54062306a36Sopenharmony_ci		.ifnum = QUIRK_ANY_INTERFACE,
54162306a36Sopenharmony_ci		.type = QUIRK_COMPOSITE,
54262306a36Sopenharmony_ci		.data = (const struct snd_usb_audio_quirk[]) {
54362306a36Sopenharmony_ci			{
54462306a36Sopenharmony_ci				.ifnum = 0,
54562306a36Sopenharmony_ci				.type = QUIRK_IGNORE_INTERFACE
54662306a36Sopenharmony_ci			},
54762306a36Sopenharmony_ci			{
54862306a36Sopenharmony_ci				.ifnum = 1,
54962306a36Sopenharmony_ci				.type = QUIRK_IGNORE_INTERFACE
55062306a36Sopenharmony_ci			},
55162306a36Sopenharmony_ci			{
55262306a36Sopenharmony_ci				.ifnum = 2,
55362306a36Sopenharmony_ci				.type = QUIRK_MIDI_FIXED_ENDPOINT,
55462306a36Sopenharmony_ci				.data = & (const struct snd_usb_midi_endpoint_info) {
55562306a36Sopenharmony_ci					.out_cables = 0x003f,
55662306a36Sopenharmony_ci					.in_cables  = 0x003f
55762306a36Sopenharmony_ci				}
55862306a36Sopenharmony_ci			},
55962306a36Sopenharmony_ci			{
56062306a36Sopenharmony_ci				.ifnum = -1
56162306a36Sopenharmony_ci			}
56262306a36Sopenharmony_ci		}
56362306a36Sopenharmony_ci	}
56462306a36Sopenharmony_ci},
56562306a36Sopenharmony_ci{
56662306a36Sopenharmony_ci	USB_DEVICE(0x0582, 0x0004),
56762306a36Sopenharmony_ci	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
56862306a36Sopenharmony_ci		.vendor_name = "Roland",
56962306a36Sopenharmony_ci		.product_name = "U-8",
57062306a36Sopenharmony_ci		.ifnum = QUIRK_ANY_INTERFACE,
57162306a36Sopenharmony_ci		.type = QUIRK_COMPOSITE,
57262306a36Sopenharmony_ci		.data = (const struct snd_usb_audio_quirk[]) {
57362306a36Sopenharmony_ci			{
57462306a36Sopenharmony_ci				.ifnum = 0,
57562306a36Sopenharmony_ci				.type = QUIRK_IGNORE_INTERFACE
57662306a36Sopenharmony_ci			},
57762306a36Sopenharmony_ci			{
57862306a36Sopenharmony_ci				.ifnum = 1,
57962306a36Sopenharmony_ci				.type = QUIRK_IGNORE_INTERFACE
58062306a36Sopenharmony_ci			},
58162306a36Sopenharmony_ci			{
58262306a36Sopenharmony_ci				.ifnum = 2,
58362306a36Sopenharmony_ci				.type = QUIRK_MIDI_FIXED_ENDPOINT,
58462306a36Sopenharmony_ci				.data = & (const struct snd_usb_midi_endpoint_info) {
58562306a36Sopenharmony_ci					.out_cables = 0x0005,
58662306a36Sopenharmony_ci					.in_cables  = 0x0005
58762306a36Sopenharmony_ci				}
58862306a36Sopenharmony_ci			},
58962306a36Sopenharmony_ci			{
59062306a36Sopenharmony_ci				.ifnum = -1
59162306a36Sopenharmony_ci			}
59262306a36Sopenharmony_ci		}
59362306a36Sopenharmony_ci	}
59462306a36Sopenharmony_ci},
59562306a36Sopenharmony_ci{
59662306a36Sopenharmony_ci	/* Has ID 0x0099 when not in "Advanced Driver" mode.
59762306a36Sopenharmony_ci	 * The UM-2EX has only one input, but we cannot detect this. */
59862306a36Sopenharmony_ci	USB_DEVICE(0x0582, 0x0005),
59962306a36Sopenharmony_ci	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
60062306a36Sopenharmony_ci		.vendor_name = "EDIROL",
60162306a36Sopenharmony_ci		.product_name = "UM-2",
60262306a36Sopenharmony_ci		.ifnum = QUIRK_ANY_INTERFACE,
60362306a36Sopenharmony_ci		.type = QUIRK_COMPOSITE,
60462306a36Sopenharmony_ci		.data = (const struct snd_usb_audio_quirk[]) {
60562306a36Sopenharmony_ci			{
60662306a36Sopenharmony_ci				.ifnum = 0,
60762306a36Sopenharmony_ci				.type = QUIRK_IGNORE_INTERFACE
60862306a36Sopenharmony_ci			},
60962306a36Sopenharmony_ci			{
61062306a36Sopenharmony_ci				.ifnum = 1,
61162306a36Sopenharmony_ci				.type = QUIRK_IGNORE_INTERFACE
61262306a36Sopenharmony_ci			},
61362306a36Sopenharmony_ci			{
61462306a36Sopenharmony_ci				.ifnum = 2,
61562306a36Sopenharmony_ci				.type = QUIRK_MIDI_FIXED_ENDPOINT,
61662306a36Sopenharmony_ci				.data = & (const struct snd_usb_midi_endpoint_info) {
61762306a36Sopenharmony_ci					.out_cables = 0x0003,
61862306a36Sopenharmony_ci					.in_cables  = 0x0003
61962306a36Sopenharmony_ci				}
62062306a36Sopenharmony_ci			},
62162306a36Sopenharmony_ci			{
62262306a36Sopenharmony_ci				.ifnum = -1
62362306a36Sopenharmony_ci			}
62462306a36Sopenharmony_ci		}
62562306a36Sopenharmony_ci	}
62662306a36Sopenharmony_ci},
62762306a36Sopenharmony_ci{
62862306a36Sopenharmony_ci	USB_DEVICE(0x0582, 0x0007),
62962306a36Sopenharmony_ci	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
63062306a36Sopenharmony_ci		.vendor_name = "Roland",
63162306a36Sopenharmony_ci		.product_name = "SC-8820",
63262306a36Sopenharmony_ci		.ifnum = QUIRK_ANY_INTERFACE,
63362306a36Sopenharmony_ci		.type = QUIRK_COMPOSITE,
63462306a36Sopenharmony_ci		.data = (const struct snd_usb_audio_quirk[]) {
63562306a36Sopenharmony_ci			{
63662306a36Sopenharmony_ci				.ifnum = 0,
63762306a36Sopenharmony_ci				.type = QUIRK_IGNORE_INTERFACE
63862306a36Sopenharmony_ci			},
63962306a36Sopenharmony_ci			{
64062306a36Sopenharmony_ci				.ifnum = 1,
64162306a36Sopenharmony_ci				.type = QUIRK_IGNORE_INTERFACE
64262306a36Sopenharmony_ci			},
64362306a36Sopenharmony_ci			{
64462306a36Sopenharmony_ci				.ifnum = 2,
64562306a36Sopenharmony_ci				.type = QUIRK_MIDI_FIXED_ENDPOINT,
64662306a36Sopenharmony_ci				.data = & (const struct snd_usb_midi_endpoint_info) {
64762306a36Sopenharmony_ci					.out_cables = 0x0013,
64862306a36Sopenharmony_ci					.in_cables  = 0x0013
64962306a36Sopenharmony_ci				}
65062306a36Sopenharmony_ci			},
65162306a36Sopenharmony_ci			{
65262306a36Sopenharmony_ci				.ifnum = -1
65362306a36Sopenharmony_ci			}
65462306a36Sopenharmony_ci		}
65562306a36Sopenharmony_ci	}
65662306a36Sopenharmony_ci},
65762306a36Sopenharmony_ci{
65862306a36Sopenharmony_ci	USB_DEVICE(0x0582, 0x0008),
65962306a36Sopenharmony_ci	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
66062306a36Sopenharmony_ci		.vendor_name = "Roland",
66162306a36Sopenharmony_ci		.product_name = "PC-300",
66262306a36Sopenharmony_ci		.ifnum = QUIRK_ANY_INTERFACE,
66362306a36Sopenharmony_ci		.type = QUIRK_COMPOSITE,
66462306a36Sopenharmony_ci		.data = (const struct snd_usb_audio_quirk[]) {
66562306a36Sopenharmony_ci			{
66662306a36Sopenharmony_ci				.ifnum = 0,
66762306a36Sopenharmony_ci				.type = QUIRK_IGNORE_INTERFACE
66862306a36Sopenharmony_ci			},
66962306a36Sopenharmony_ci			{
67062306a36Sopenharmony_ci				.ifnum = 1,
67162306a36Sopenharmony_ci				.type = QUIRK_IGNORE_INTERFACE
67262306a36Sopenharmony_ci			},
67362306a36Sopenharmony_ci			{
67462306a36Sopenharmony_ci				.ifnum = 2,
67562306a36Sopenharmony_ci				.type = QUIRK_MIDI_FIXED_ENDPOINT,
67662306a36Sopenharmony_ci				.data = & (const struct snd_usb_midi_endpoint_info) {
67762306a36Sopenharmony_ci					.out_cables = 0x0001,
67862306a36Sopenharmony_ci					.in_cables  = 0x0001
67962306a36Sopenharmony_ci				}
68062306a36Sopenharmony_ci			},
68162306a36Sopenharmony_ci			{
68262306a36Sopenharmony_ci				.ifnum = -1
68362306a36Sopenharmony_ci			}
68462306a36Sopenharmony_ci		}
68562306a36Sopenharmony_ci	}
68662306a36Sopenharmony_ci},
68762306a36Sopenharmony_ci{
68862306a36Sopenharmony_ci	/* has ID 0x009d when not in "Advanced Driver" mode */
68962306a36Sopenharmony_ci	USB_DEVICE(0x0582, 0x0009),
69062306a36Sopenharmony_ci	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
69162306a36Sopenharmony_ci		.vendor_name = "EDIROL",
69262306a36Sopenharmony_ci		.product_name = "UM-1",
69362306a36Sopenharmony_ci		.ifnum = QUIRK_ANY_INTERFACE,
69462306a36Sopenharmony_ci		.type = QUIRK_COMPOSITE,
69562306a36Sopenharmony_ci		.data = (const struct snd_usb_audio_quirk[]) {
69662306a36Sopenharmony_ci			{
69762306a36Sopenharmony_ci				.ifnum = 0,
69862306a36Sopenharmony_ci				.type = QUIRK_IGNORE_INTERFACE
69962306a36Sopenharmony_ci			},
70062306a36Sopenharmony_ci			{
70162306a36Sopenharmony_ci				.ifnum = 1,
70262306a36Sopenharmony_ci				.type = QUIRK_IGNORE_INTERFACE
70362306a36Sopenharmony_ci			},
70462306a36Sopenharmony_ci			{
70562306a36Sopenharmony_ci				.ifnum = 2,
70662306a36Sopenharmony_ci				.type = QUIRK_MIDI_FIXED_ENDPOINT,
70762306a36Sopenharmony_ci				.data = & (const struct snd_usb_midi_endpoint_info) {
70862306a36Sopenharmony_ci					.out_cables = 0x0001,
70962306a36Sopenharmony_ci					.in_cables  = 0x0001
71062306a36Sopenharmony_ci				}
71162306a36Sopenharmony_ci			},
71262306a36Sopenharmony_ci			{
71362306a36Sopenharmony_ci				.ifnum = -1
71462306a36Sopenharmony_ci			}
71562306a36Sopenharmony_ci		}
71662306a36Sopenharmony_ci	}
71762306a36Sopenharmony_ci},
71862306a36Sopenharmony_ci{
71962306a36Sopenharmony_ci	USB_DEVICE(0x0582, 0x000b),
72062306a36Sopenharmony_ci	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
72162306a36Sopenharmony_ci		.vendor_name = "Roland",
72262306a36Sopenharmony_ci		.product_name = "SK-500",
72362306a36Sopenharmony_ci		.ifnum = QUIRK_ANY_INTERFACE,
72462306a36Sopenharmony_ci		.type = QUIRK_COMPOSITE,
72562306a36Sopenharmony_ci		.data = (const struct snd_usb_audio_quirk[]) {
72662306a36Sopenharmony_ci			{
72762306a36Sopenharmony_ci				.ifnum = 0,
72862306a36Sopenharmony_ci				.type = QUIRK_IGNORE_INTERFACE
72962306a36Sopenharmony_ci			},
73062306a36Sopenharmony_ci			{
73162306a36Sopenharmony_ci				.ifnum = 1,
73262306a36Sopenharmony_ci				.type = QUIRK_IGNORE_INTERFACE
73362306a36Sopenharmony_ci			},
73462306a36Sopenharmony_ci			{
73562306a36Sopenharmony_ci				.ifnum = 2,
73662306a36Sopenharmony_ci				.type = QUIRK_MIDI_FIXED_ENDPOINT,
73762306a36Sopenharmony_ci				.data = & (const struct snd_usb_midi_endpoint_info) {
73862306a36Sopenharmony_ci					.out_cables = 0x0013,
73962306a36Sopenharmony_ci					.in_cables  = 0x0013
74062306a36Sopenharmony_ci				}
74162306a36Sopenharmony_ci			},
74262306a36Sopenharmony_ci			{
74362306a36Sopenharmony_ci				.ifnum = -1
74462306a36Sopenharmony_ci			}
74562306a36Sopenharmony_ci		}
74662306a36Sopenharmony_ci	}
74762306a36Sopenharmony_ci},
74862306a36Sopenharmony_ci{
74962306a36Sopenharmony_ci	/* thanks to Emiliano Grilli <emillo@libero.it>
75062306a36Sopenharmony_ci	 * for helping researching this data */
75162306a36Sopenharmony_ci	USB_DEVICE(0x0582, 0x000c),
75262306a36Sopenharmony_ci	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
75362306a36Sopenharmony_ci		.vendor_name = "Roland",
75462306a36Sopenharmony_ci		.product_name = "SC-D70",
75562306a36Sopenharmony_ci		.ifnum = QUIRK_ANY_INTERFACE,
75662306a36Sopenharmony_ci		.type = QUIRK_COMPOSITE,
75762306a36Sopenharmony_ci		.data = (const struct snd_usb_audio_quirk[]) {
75862306a36Sopenharmony_ci			{
75962306a36Sopenharmony_ci				.ifnum = 0,
76062306a36Sopenharmony_ci				.type = QUIRK_AUDIO_STANDARD_INTERFACE
76162306a36Sopenharmony_ci			},
76262306a36Sopenharmony_ci			{
76362306a36Sopenharmony_ci				.ifnum = 1,
76462306a36Sopenharmony_ci				.type = QUIRK_AUDIO_STANDARD_INTERFACE
76562306a36Sopenharmony_ci			},
76662306a36Sopenharmony_ci			{
76762306a36Sopenharmony_ci				.ifnum = 2,
76862306a36Sopenharmony_ci				.type = QUIRK_MIDI_FIXED_ENDPOINT,
76962306a36Sopenharmony_ci				.data = & (const struct snd_usb_midi_endpoint_info) {
77062306a36Sopenharmony_ci					.out_cables = 0x0007,
77162306a36Sopenharmony_ci					.in_cables  = 0x0007
77262306a36Sopenharmony_ci				}
77362306a36Sopenharmony_ci			},
77462306a36Sopenharmony_ci			{
77562306a36Sopenharmony_ci				.ifnum = -1
77662306a36Sopenharmony_ci			}
77762306a36Sopenharmony_ci		}
77862306a36Sopenharmony_ci	}
77962306a36Sopenharmony_ci},
78062306a36Sopenharmony_ci{	/*
78162306a36Sopenharmony_ci	 * This quirk is for the "Advanced Driver" mode of the Edirol UA-5.
78262306a36Sopenharmony_ci	 * If the advanced mode switch at the back of the unit is off, the
78362306a36Sopenharmony_ci	 * UA-5 has ID 0x0582/0x0011 and is standard compliant (no quirks),
78462306a36Sopenharmony_ci	 * but offers only 16-bit PCM.
78562306a36Sopenharmony_ci	 * In advanced mode, the UA-5 will output S24_3LE samples (two
78662306a36Sopenharmony_ci	 * channels) at the rate indicated on the front switch, including
78762306a36Sopenharmony_ci	 * the 96kHz sample rate.
78862306a36Sopenharmony_ci	 */
78962306a36Sopenharmony_ci	USB_DEVICE(0x0582, 0x0010),
79062306a36Sopenharmony_ci	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
79162306a36Sopenharmony_ci		.vendor_name = "EDIROL",
79262306a36Sopenharmony_ci		.product_name = "UA-5",
79362306a36Sopenharmony_ci		.ifnum = QUIRK_ANY_INTERFACE,
79462306a36Sopenharmony_ci		.type = QUIRK_COMPOSITE,
79562306a36Sopenharmony_ci		.data = (const struct snd_usb_audio_quirk[]) {
79662306a36Sopenharmony_ci			{
79762306a36Sopenharmony_ci				.ifnum = 1,
79862306a36Sopenharmony_ci				.type = QUIRK_AUDIO_STANDARD_INTERFACE
79962306a36Sopenharmony_ci			},
80062306a36Sopenharmony_ci			{
80162306a36Sopenharmony_ci				.ifnum = 2,
80262306a36Sopenharmony_ci				.type = QUIRK_AUDIO_STANDARD_INTERFACE
80362306a36Sopenharmony_ci			},
80462306a36Sopenharmony_ci			{
80562306a36Sopenharmony_ci				.ifnum = -1
80662306a36Sopenharmony_ci			}
80762306a36Sopenharmony_ci		}
80862306a36Sopenharmony_ci	}
80962306a36Sopenharmony_ci},
81062306a36Sopenharmony_ci{
81162306a36Sopenharmony_ci	/* has ID 0x0013 when not in "Advanced Driver" mode */
81262306a36Sopenharmony_ci	USB_DEVICE(0x0582, 0x0012),
81362306a36Sopenharmony_ci	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
81462306a36Sopenharmony_ci		.vendor_name = "Roland",
81562306a36Sopenharmony_ci		.product_name = "XV-5050",
81662306a36Sopenharmony_ci		.ifnum = 0,
81762306a36Sopenharmony_ci		.type = QUIRK_MIDI_FIXED_ENDPOINT,
81862306a36Sopenharmony_ci		.data = & (const struct snd_usb_midi_endpoint_info) {
81962306a36Sopenharmony_ci			.out_cables = 0x0001,
82062306a36Sopenharmony_ci			.in_cables  = 0x0001
82162306a36Sopenharmony_ci		}
82262306a36Sopenharmony_ci	}
82362306a36Sopenharmony_ci},
82462306a36Sopenharmony_ci{
82562306a36Sopenharmony_ci	/* has ID 0x0015 when not in "Advanced Driver" mode */
82662306a36Sopenharmony_ci	USB_DEVICE(0x0582, 0x0014),
82762306a36Sopenharmony_ci	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
82862306a36Sopenharmony_ci		.vendor_name = "EDIROL",
82962306a36Sopenharmony_ci		.product_name = "UM-880",
83062306a36Sopenharmony_ci		.ifnum = 0,
83162306a36Sopenharmony_ci		.type = QUIRK_MIDI_FIXED_ENDPOINT,
83262306a36Sopenharmony_ci		.data = & (const struct snd_usb_midi_endpoint_info) {
83362306a36Sopenharmony_ci			.out_cables = 0x01ff,
83462306a36Sopenharmony_ci			.in_cables  = 0x01ff
83562306a36Sopenharmony_ci		}
83662306a36Sopenharmony_ci	}
83762306a36Sopenharmony_ci},
83862306a36Sopenharmony_ci{
83962306a36Sopenharmony_ci	/* has ID 0x0017 when not in "Advanced Driver" mode */
84062306a36Sopenharmony_ci	USB_DEVICE(0x0582, 0x0016),
84162306a36Sopenharmony_ci	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
84262306a36Sopenharmony_ci		.vendor_name = "EDIROL",
84362306a36Sopenharmony_ci		.product_name = "SD-90",
84462306a36Sopenharmony_ci		.ifnum = QUIRK_ANY_INTERFACE,
84562306a36Sopenharmony_ci		.type = QUIRK_COMPOSITE,
84662306a36Sopenharmony_ci		.data = (const struct snd_usb_audio_quirk[]) {
84762306a36Sopenharmony_ci			{
84862306a36Sopenharmony_ci				.ifnum = 0,
84962306a36Sopenharmony_ci				.type = QUIRK_AUDIO_STANDARD_INTERFACE
85062306a36Sopenharmony_ci			},
85162306a36Sopenharmony_ci			{
85262306a36Sopenharmony_ci				.ifnum = 1,
85362306a36Sopenharmony_ci				.type = QUIRK_AUDIO_STANDARD_INTERFACE
85462306a36Sopenharmony_ci			},
85562306a36Sopenharmony_ci			{
85662306a36Sopenharmony_ci				.ifnum = 2,
85762306a36Sopenharmony_ci				.type = QUIRK_MIDI_FIXED_ENDPOINT,
85862306a36Sopenharmony_ci				.data = & (const struct snd_usb_midi_endpoint_info) {
85962306a36Sopenharmony_ci					.out_cables = 0x000f,
86062306a36Sopenharmony_ci					.in_cables  = 0x000f
86162306a36Sopenharmony_ci				}
86262306a36Sopenharmony_ci			},
86362306a36Sopenharmony_ci			{
86462306a36Sopenharmony_ci				.ifnum = -1
86562306a36Sopenharmony_ci			}
86662306a36Sopenharmony_ci		}
86762306a36Sopenharmony_ci	}
86862306a36Sopenharmony_ci},
86962306a36Sopenharmony_ci{
87062306a36Sopenharmony_ci	/* has ID 0x001c when not in "Advanced Driver" mode */
87162306a36Sopenharmony_ci	USB_DEVICE(0x0582, 0x001b),
87262306a36Sopenharmony_ci	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
87362306a36Sopenharmony_ci		.vendor_name = "Roland",
87462306a36Sopenharmony_ci		.product_name = "MMP-2",
87562306a36Sopenharmony_ci		.ifnum = QUIRK_ANY_INTERFACE,
87662306a36Sopenharmony_ci		.type = QUIRK_COMPOSITE,
87762306a36Sopenharmony_ci		.data = (const struct snd_usb_audio_quirk[]) {
87862306a36Sopenharmony_ci			{
87962306a36Sopenharmony_ci				.ifnum = 0,
88062306a36Sopenharmony_ci				.type = QUIRK_IGNORE_INTERFACE
88162306a36Sopenharmony_ci			},
88262306a36Sopenharmony_ci			{
88362306a36Sopenharmony_ci				.ifnum = 1,
88462306a36Sopenharmony_ci				.type = QUIRK_IGNORE_INTERFACE
88562306a36Sopenharmony_ci			},
88662306a36Sopenharmony_ci			{
88762306a36Sopenharmony_ci				.ifnum = 2,
88862306a36Sopenharmony_ci				.type = QUIRK_MIDI_FIXED_ENDPOINT,
88962306a36Sopenharmony_ci				.data = & (const struct snd_usb_midi_endpoint_info) {
89062306a36Sopenharmony_ci					.out_cables = 0x0001,
89162306a36Sopenharmony_ci					.in_cables  = 0x0001
89262306a36Sopenharmony_ci				}
89362306a36Sopenharmony_ci			},
89462306a36Sopenharmony_ci			{
89562306a36Sopenharmony_ci				.ifnum = -1
89662306a36Sopenharmony_ci			}
89762306a36Sopenharmony_ci		}
89862306a36Sopenharmony_ci	}
89962306a36Sopenharmony_ci},
90062306a36Sopenharmony_ci{
90162306a36Sopenharmony_ci	/* has ID 0x001e when not in "Advanced Driver" mode */
90262306a36Sopenharmony_ci	USB_DEVICE(0x0582, 0x001d),
90362306a36Sopenharmony_ci	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
90462306a36Sopenharmony_ci		.vendor_name = "Roland",
90562306a36Sopenharmony_ci		.product_name = "V-SYNTH",
90662306a36Sopenharmony_ci		.ifnum = 0,
90762306a36Sopenharmony_ci		.type = QUIRK_MIDI_FIXED_ENDPOINT,
90862306a36Sopenharmony_ci		.data = & (const struct snd_usb_midi_endpoint_info) {
90962306a36Sopenharmony_ci			.out_cables = 0x0001,
91062306a36Sopenharmony_ci			.in_cables  = 0x0001
91162306a36Sopenharmony_ci		}
91262306a36Sopenharmony_ci	}
91362306a36Sopenharmony_ci},
91462306a36Sopenharmony_ci{
91562306a36Sopenharmony_ci	/* has ID 0x0024 when not in "Advanced Driver" mode */
91662306a36Sopenharmony_ci	USB_DEVICE(0x0582, 0x0023),
91762306a36Sopenharmony_ci	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
91862306a36Sopenharmony_ci		.vendor_name = "EDIROL",
91962306a36Sopenharmony_ci		.product_name = "UM-550",
92062306a36Sopenharmony_ci		.ifnum = 0,
92162306a36Sopenharmony_ci		.type = QUIRK_MIDI_FIXED_ENDPOINT,
92262306a36Sopenharmony_ci		.data = & (const struct snd_usb_midi_endpoint_info) {
92362306a36Sopenharmony_ci			.out_cables = 0x003f,
92462306a36Sopenharmony_ci			.in_cables  = 0x003f
92562306a36Sopenharmony_ci		}
92662306a36Sopenharmony_ci	}
92762306a36Sopenharmony_ci},
92862306a36Sopenharmony_ci{
92962306a36Sopenharmony_ci	/*
93062306a36Sopenharmony_ci	 * This quirk is for the "Advanced Driver" mode. If off, the UA-20
93162306a36Sopenharmony_ci	 * has ID 0x0026 and is standard compliant, but has only 16-bit PCM
93262306a36Sopenharmony_ci	 * and no MIDI.
93362306a36Sopenharmony_ci	 */
93462306a36Sopenharmony_ci	USB_DEVICE(0x0582, 0x0025),
93562306a36Sopenharmony_ci	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
93662306a36Sopenharmony_ci		.vendor_name = "EDIROL",
93762306a36Sopenharmony_ci		.product_name = "UA-20",
93862306a36Sopenharmony_ci		.ifnum = QUIRK_ANY_INTERFACE,
93962306a36Sopenharmony_ci		.type = QUIRK_COMPOSITE,
94062306a36Sopenharmony_ci		.data = (const struct snd_usb_audio_quirk[]) {
94162306a36Sopenharmony_ci			{
94262306a36Sopenharmony_ci				.ifnum = 0,
94362306a36Sopenharmony_ci				.type = QUIRK_IGNORE_INTERFACE
94462306a36Sopenharmony_ci			},
94562306a36Sopenharmony_ci			{
94662306a36Sopenharmony_ci				.ifnum = 1,
94762306a36Sopenharmony_ci				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
94862306a36Sopenharmony_ci				.data = & (const struct audioformat) {
94962306a36Sopenharmony_ci					.formats = SNDRV_PCM_FMTBIT_S24_3LE,
95062306a36Sopenharmony_ci					.channels = 2,
95162306a36Sopenharmony_ci					.iface = 1,
95262306a36Sopenharmony_ci					.altsetting = 1,
95362306a36Sopenharmony_ci					.altset_idx = 1,
95462306a36Sopenharmony_ci					.attributes = 0,
95562306a36Sopenharmony_ci					.endpoint = 0x01,
95662306a36Sopenharmony_ci					.ep_attr = 0x01,
95762306a36Sopenharmony_ci					.rates = SNDRV_PCM_RATE_CONTINUOUS,
95862306a36Sopenharmony_ci					.rate_min = 44100,
95962306a36Sopenharmony_ci					.rate_max = 44100,
96062306a36Sopenharmony_ci				}
96162306a36Sopenharmony_ci			},
96262306a36Sopenharmony_ci			{
96362306a36Sopenharmony_ci				.ifnum = 2,
96462306a36Sopenharmony_ci				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
96562306a36Sopenharmony_ci				.data = & (const struct audioformat) {
96662306a36Sopenharmony_ci					.formats = SNDRV_PCM_FMTBIT_S24_3LE,
96762306a36Sopenharmony_ci					.channels = 2,
96862306a36Sopenharmony_ci					.iface = 2,
96962306a36Sopenharmony_ci					.altsetting = 1,
97062306a36Sopenharmony_ci					.altset_idx = 1,
97162306a36Sopenharmony_ci					.attributes = 0,
97262306a36Sopenharmony_ci					.endpoint = 0x82,
97362306a36Sopenharmony_ci					.ep_attr = 0x01,
97462306a36Sopenharmony_ci					.rates = SNDRV_PCM_RATE_CONTINUOUS,
97562306a36Sopenharmony_ci					.rate_min = 44100,
97662306a36Sopenharmony_ci					.rate_max = 44100,
97762306a36Sopenharmony_ci				}
97862306a36Sopenharmony_ci			},
97962306a36Sopenharmony_ci			{
98062306a36Sopenharmony_ci				.ifnum = 3,
98162306a36Sopenharmony_ci				.type = QUIRK_MIDI_FIXED_ENDPOINT,
98262306a36Sopenharmony_ci				.data = & (const struct snd_usb_midi_endpoint_info) {
98362306a36Sopenharmony_ci					.out_cables = 0x0001,
98462306a36Sopenharmony_ci					.in_cables  = 0x0001
98562306a36Sopenharmony_ci				}
98662306a36Sopenharmony_ci			},
98762306a36Sopenharmony_ci			{
98862306a36Sopenharmony_ci				.ifnum = -1
98962306a36Sopenharmony_ci			}
99062306a36Sopenharmony_ci		}
99162306a36Sopenharmony_ci	}
99262306a36Sopenharmony_ci},
99362306a36Sopenharmony_ci{
99462306a36Sopenharmony_ci	/* has ID 0x0028 when not in "Advanced Driver" mode */
99562306a36Sopenharmony_ci	USB_DEVICE(0x0582, 0x0027),
99662306a36Sopenharmony_ci	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
99762306a36Sopenharmony_ci		.vendor_name = "EDIROL",
99862306a36Sopenharmony_ci		.product_name = "SD-20",
99962306a36Sopenharmony_ci		.ifnum = 0,
100062306a36Sopenharmony_ci		.type = QUIRK_MIDI_FIXED_ENDPOINT,
100162306a36Sopenharmony_ci		.data = & (const struct snd_usb_midi_endpoint_info) {
100262306a36Sopenharmony_ci			.out_cables = 0x0003,
100362306a36Sopenharmony_ci			.in_cables  = 0x0007
100462306a36Sopenharmony_ci		}
100562306a36Sopenharmony_ci	}
100662306a36Sopenharmony_ci},
100762306a36Sopenharmony_ci{
100862306a36Sopenharmony_ci	/* has ID 0x002a when not in "Advanced Driver" mode */
100962306a36Sopenharmony_ci	USB_DEVICE(0x0582, 0x0029),
101062306a36Sopenharmony_ci	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
101162306a36Sopenharmony_ci		.vendor_name = "EDIROL",
101262306a36Sopenharmony_ci		.product_name = "SD-80",
101362306a36Sopenharmony_ci		.ifnum = 0,
101462306a36Sopenharmony_ci		.type = QUIRK_MIDI_FIXED_ENDPOINT,
101562306a36Sopenharmony_ci		.data = & (const struct snd_usb_midi_endpoint_info) {
101662306a36Sopenharmony_ci			.out_cables = 0x000f,
101762306a36Sopenharmony_ci			.in_cables  = 0x000f
101862306a36Sopenharmony_ci		}
101962306a36Sopenharmony_ci	}
102062306a36Sopenharmony_ci},
102162306a36Sopenharmony_ci{	/*
102262306a36Sopenharmony_ci	 * This quirk is for the "Advanced" modes of the Edirol UA-700.
102362306a36Sopenharmony_ci	 * If the sample format switch is not in an advanced setting, the
102462306a36Sopenharmony_ci	 * UA-700 has ID 0x0582/0x002c and is standard compliant (no quirks),
102562306a36Sopenharmony_ci	 * but offers only 16-bit PCM and no MIDI.
102662306a36Sopenharmony_ci	 */
102762306a36Sopenharmony_ci	USB_DEVICE_VENDOR_SPEC(0x0582, 0x002b),
102862306a36Sopenharmony_ci	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
102962306a36Sopenharmony_ci		.vendor_name = "EDIROL",
103062306a36Sopenharmony_ci		.product_name = "UA-700",
103162306a36Sopenharmony_ci		.ifnum = QUIRK_ANY_INTERFACE,
103262306a36Sopenharmony_ci		.type = QUIRK_COMPOSITE,
103362306a36Sopenharmony_ci		.data = (const struct snd_usb_audio_quirk[]) {
103462306a36Sopenharmony_ci			{
103562306a36Sopenharmony_ci				.ifnum = 1,
103662306a36Sopenharmony_ci				.type = QUIRK_AUDIO_EDIROL_UAXX
103762306a36Sopenharmony_ci			},
103862306a36Sopenharmony_ci			{
103962306a36Sopenharmony_ci				.ifnum = 2,
104062306a36Sopenharmony_ci				.type = QUIRK_AUDIO_EDIROL_UAXX
104162306a36Sopenharmony_ci			},
104262306a36Sopenharmony_ci			{
104362306a36Sopenharmony_ci				.ifnum = 3,
104462306a36Sopenharmony_ci				.type = QUIRK_AUDIO_EDIROL_UAXX
104562306a36Sopenharmony_ci			},
104662306a36Sopenharmony_ci			{
104762306a36Sopenharmony_ci				.ifnum = -1
104862306a36Sopenharmony_ci			}
104962306a36Sopenharmony_ci		}
105062306a36Sopenharmony_ci	}
105162306a36Sopenharmony_ci},
105262306a36Sopenharmony_ci{
105362306a36Sopenharmony_ci	/* has ID 0x002e when not in "Advanced Driver" mode */
105462306a36Sopenharmony_ci	USB_DEVICE(0x0582, 0x002d),
105562306a36Sopenharmony_ci	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
105662306a36Sopenharmony_ci		.vendor_name = "Roland",
105762306a36Sopenharmony_ci		.product_name = "XV-2020",
105862306a36Sopenharmony_ci		.ifnum = 0,
105962306a36Sopenharmony_ci		.type = QUIRK_MIDI_FIXED_ENDPOINT,
106062306a36Sopenharmony_ci		.data = & (const struct snd_usb_midi_endpoint_info) {
106162306a36Sopenharmony_ci			.out_cables = 0x0001,
106262306a36Sopenharmony_ci			.in_cables  = 0x0001
106362306a36Sopenharmony_ci		}
106462306a36Sopenharmony_ci	}
106562306a36Sopenharmony_ci},
106662306a36Sopenharmony_ci{
106762306a36Sopenharmony_ci	/* has ID 0x0030 when not in "Advanced Driver" mode */
106862306a36Sopenharmony_ci	USB_DEVICE(0x0582, 0x002f),
106962306a36Sopenharmony_ci	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
107062306a36Sopenharmony_ci		.vendor_name = "Roland",
107162306a36Sopenharmony_ci		.product_name = "VariOS",
107262306a36Sopenharmony_ci		.ifnum = 0,
107362306a36Sopenharmony_ci		.type = QUIRK_MIDI_FIXED_ENDPOINT,
107462306a36Sopenharmony_ci		.data = & (const struct snd_usb_midi_endpoint_info) {
107562306a36Sopenharmony_ci			.out_cables = 0x0007,
107662306a36Sopenharmony_ci			.in_cables  = 0x0007
107762306a36Sopenharmony_ci		}
107862306a36Sopenharmony_ci	}
107962306a36Sopenharmony_ci},
108062306a36Sopenharmony_ci{
108162306a36Sopenharmony_ci	/* has ID 0x0034 when not in "Advanced Driver" mode */
108262306a36Sopenharmony_ci	USB_DEVICE(0x0582, 0x0033),
108362306a36Sopenharmony_ci	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
108462306a36Sopenharmony_ci		.vendor_name = "EDIROL",
108562306a36Sopenharmony_ci		.product_name = "PCR",
108662306a36Sopenharmony_ci		.ifnum = 0,
108762306a36Sopenharmony_ci		.type = QUIRK_MIDI_FIXED_ENDPOINT,
108862306a36Sopenharmony_ci		.data = & (const struct snd_usb_midi_endpoint_info) {
108962306a36Sopenharmony_ci			.out_cables = 0x0003,
109062306a36Sopenharmony_ci			.in_cables  = 0x0007
109162306a36Sopenharmony_ci		}
109262306a36Sopenharmony_ci	}
109362306a36Sopenharmony_ci},
109462306a36Sopenharmony_ci{
109562306a36Sopenharmony_ci	/*
109662306a36Sopenharmony_ci	 * Has ID 0x0038 when not in "Advanced Driver" mode;
109762306a36Sopenharmony_ci	 * later revisions use IDs 0x0054 and 0x00a2.
109862306a36Sopenharmony_ci	 */
109962306a36Sopenharmony_ci	USB_DEVICE(0x0582, 0x0037),
110062306a36Sopenharmony_ci	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
110162306a36Sopenharmony_ci		.vendor_name = "Roland",
110262306a36Sopenharmony_ci		.product_name = "Digital Piano",
110362306a36Sopenharmony_ci		.ifnum = 0,
110462306a36Sopenharmony_ci		.type = QUIRK_MIDI_FIXED_ENDPOINT,
110562306a36Sopenharmony_ci		.data = & (const struct snd_usb_midi_endpoint_info) {
110662306a36Sopenharmony_ci			.out_cables = 0x0001,
110762306a36Sopenharmony_ci			.in_cables  = 0x0001
110862306a36Sopenharmony_ci		}
110962306a36Sopenharmony_ci	}
111062306a36Sopenharmony_ci},
111162306a36Sopenharmony_ci{
111262306a36Sopenharmony_ci	/*
111362306a36Sopenharmony_ci	 * This quirk is for the "Advanced Driver" mode.  If off, the GS-10
111462306a36Sopenharmony_ci	 * has ID 0x003c and is standard compliant, but has only 16-bit PCM
111562306a36Sopenharmony_ci	 * and no MIDI.
111662306a36Sopenharmony_ci	 */
111762306a36Sopenharmony_ci	USB_DEVICE_VENDOR_SPEC(0x0582, 0x003b),
111862306a36Sopenharmony_ci	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
111962306a36Sopenharmony_ci		.vendor_name = "BOSS",
112062306a36Sopenharmony_ci		.product_name = "GS-10",
112162306a36Sopenharmony_ci		.ifnum = QUIRK_ANY_INTERFACE,
112262306a36Sopenharmony_ci		.type = QUIRK_COMPOSITE,
112362306a36Sopenharmony_ci		.data = & (const struct snd_usb_audio_quirk[]) {
112462306a36Sopenharmony_ci			{
112562306a36Sopenharmony_ci				.ifnum = 1,
112662306a36Sopenharmony_ci				.type = QUIRK_AUDIO_STANDARD_INTERFACE
112762306a36Sopenharmony_ci			},
112862306a36Sopenharmony_ci			{
112962306a36Sopenharmony_ci				.ifnum = 2,
113062306a36Sopenharmony_ci				.type = QUIRK_AUDIO_STANDARD_INTERFACE
113162306a36Sopenharmony_ci			},
113262306a36Sopenharmony_ci			{
113362306a36Sopenharmony_ci				.ifnum = 3,
113462306a36Sopenharmony_ci				.type = QUIRK_MIDI_STANDARD_INTERFACE
113562306a36Sopenharmony_ci			},
113662306a36Sopenharmony_ci			{
113762306a36Sopenharmony_ci				.ifnum = -1
113862306a36Sopenharmony_ci			}
113962306a36Sopenharmony_ci		}
114062306a36Sopenharmony_ci	}
114162306a36Sopenharmony_ci},
114262306a36Sopenharmony_ci{
114362306a36Sopenharmony_ci	/* has ID 0x0041 when not in "Advanced Driver" mode */
114462306a36Sopenharmony_ci	USB_DEVICE(0x0582, 0x0040),
114562306a36Sopenharmony_ci	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
114662306a36Sopenharmony_ci		.vendor_name = "Roland",
114762306a36Sopenharmony_ci		.product_name = "GI-20",
114862306a36Sopenharmony_ci		.ifnum = 0,
114962306a36Sopenharmony_ci		.type = QUIRK_MIDI_FIXED_ENDPOINT,
115062306a36Sopenharmony_ci		.data = & (const struct snd_usb_midi_endpoint_info) {
115162306a36Sopenharmony_ci			.out_cables = 0x0001,
115262306a36Sopenharmony_ci			.in_cables  = 0x0001
115362306a36Sopenharmony_ci		}
115462306a36Sopenharmony_ci	}
115562306a36Sopenharmony_ci},
115662306a36Sopenharmony_ci{
115762306a36Sopenharmony_ci	/* has ID 0x0043 when not in "Advanced Driver" mode */
115862306a36Sopenharmony_ci	USB_DEVICE(0x0582, 0x0042),
115962306a36Sopenharmony_ci	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
116062306a36Sopenharmony_ci		.vendor_name = "Roland",
116162306a36Sopenharmony_ci		.product_name = "RS-70",
116262306a36Sopenharmony_ci		.ifnum = 0,
116362306a36Sopenharmony_ci		.type = QUIRK_MIDI_FIXED_ENDPOINT,
116462306a36Sopenharmony_ci		.data = & (const struct snd_usb_midi_endpoint_info) {
116562306a36Sopenharmony_ci			.out_cables = 0x0001,
116662306a36Sopenharmony_ci			.in_cables  = 0x0001
116762306a36Sopenharmony_ci		}
116862306a36Sopenharmony_ci	}
116962306a36Sopenharmony_ci},
117062306a36Sopenharmony_ci{
117162306a36Sopenharmony_ci	/* has ID 0x0049 when not in "Advanced Driver" mode */
117262306a36Sopenharmony_ci	USB_DEVICE(0x0582, 0x0047),
117362306a36Sopenharmony_ci	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
117462306a36Sopenharmony_ci		/* .vendor_name = "EDIROL", */
117562306a36Sopenharmony_ci		/* .product_name = "UR-80", */
117662306a36Sopenharmony_ci		.ifnum = QUIRK_ANY_INTERFACE,
117762306a36Sopenharmony_ci		.type = QUIRK_COMPOSITE,
117862306a36Sopenharmony_ci		.data = (const struct snd_usb_audio_quirk[]) {
117962306a36Sopenharmony_ci			/* in the 96 kHz modes, only interface 1 is there */
118062306a36Sopenharmony_ci			{
118162306a36Sopenharmony_ci				.ifnum = 1,
118262306a36Sopenharmony_ci				.type = QUIRK_AUDIO_STANDARD_INTERFACE
118362306a36Sopenharmony_ci			},
118462306a36Sopenharmony_ci			{
118562306a36Sopenharmony_ci				.ifnum = 2,
118662306a36Sopenharmony_ci				.type = QUIRK_AUDIO_STANDARD_INTERFACE
118762306a36Sopenharmony_ci			},
118862306a36Sopenharmony_ci			{
118962306a36Sopenharmony_ci				.ifnum = -1
119062306a36Sopenharmony_ci			}
119162306a36Sopenharmony_ci		}
119262306a36Sopenharmony_ci	}
119362306a36Sopenharmony_ci},
119462306a36Sopenharmony_ci{
119562306a36Sopenharmony_ci	/* has ID 0x004a when not in "Advanced Driver" mode */
119662306a36Sopenharmony_ci	USB_DEVICE(0x0582, 0x0048),
119762306a36Sopenharmony_ci	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
119862306a36Sopenharmony_ci		/* .vendor_name = "EDIROL", */
119962306a36Sopenharmony_ci		/* .product_name = "UR-80", */
120062306a36Sopenharmony_ci		.ifnum = 0,
120162306a36Sopenharmony_ci		.type = QUIRK_MIDI_FIXED_ENDPOINT,
120262306a36Sopenharmony_ci		.data = & (const struct snd_usb_midi_endpoint_info) {
120362306a36Sopenharmony_ci			.out_cables = 0x0003,
120462306a36Sopenharmony_ci			.in_cables  = 0x0007
120562306a36Sopenharmony_ci		}
120662306a36Sopenharmony_ci	}
120762306a36Sopenharmony_ci},
120862306a36Sopenharmony_ci{
120962306a36Sopenharmony_ci	/* has ID 0x004e when not in "Advanced Driver" mode */
121062306a36Sopenharmony_ci	USB_DEVICE(0x0582, 0x004c),
121162306a36Sopenharmony_ci	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
121262306a36Sopenharmony_ci		.vendor_name = "EDIROL",
121362306a36Sopenharmony_ci		.product_name = "PCR-A",
121462306a36Sopenharmony_ci		.ifnum = QUIRK_ANY_INTERFACE,
121562306a36Sopenharmony_ci		.type = QUIRK_COMPOSITE,
121662306a36Sopenharmony_ci		.data = (const struct snd_usb_audio_quirk[]) {
121762306a36Sopenharmony_ci			{
121862306a36Sopenharmony_ci				.ifnum = 1,
121962306a36Sopenharmony_ci				.type = QUIRK_AUDIO_STANDARD_INTERFACE
122062306a36Sopenharmony_ci			},
122162306a36Sopenharmony_ci			{
122262306a36Sopenharmony_ci				.ifnum = 2,
122362306a36Sopenharmony_ci				.type = QUIRK_AUDIO_STANDARD_INTERFACE
122462306a36Sopenharmony_ci			},
122562306a36Sopenharmony_ci			{
122662306a36Sopenharmony_ci				.ifnum = -1
122762306a36Sopenharmony_ci			}
122862306a36Sopenharmony_ci		}
122962306a36Sopenharmony_ci	}
123062306a36Sopenharmony_ci},
123162306a36Sopenharmony_ci{
123262306a36Sopenharmony_ci	/* has ID 0x004f when not in "Advanced Driver" mode */
123362306a36Sopenharmony_ci	USB_DEVICE(0x0582, 0x004d),
123462306a36Sopenharmony_ci	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
123562306a36Sopenharmony_ci		.vendor_name = "EDIROL",
123662306a36Sopenharmony_ci		.product_name = "PCR-A",
123762306a36Sopenharmony_ci		.ifnum = 0,
123862306a36Sopenharmony_ci		.type = QUIRK_MIDI_FIXED_ENDPOINT,
123962306a36Sopenharmony_ci		.data = & (const struct snd_usb_midi_endpoint_info) {
124062306a36Sopenharmony_ci			.out_cables = 0x0003,
124162306a36Sopenharmony_ci			.in_cables  = 0x0007
124262306a36Sopenharmony_ci		}
124362306a36Sopenharmony_ci	}
124462306a36Sopenharmony_ci},
124562306a36Sopenharmony_ci{
124662306a36Sopenharmony_ci	/*
124762306a36Sopenharmony_ci	 * This quirk is for the "Advanced Driver" mode. If off, the UA-3FX
124862306a36Sopenharmony_ci	 * is standard compliant, but has only 16-bit PCM.
124962306a36Sopenharmony_ci	 */
125062306a36Sopenharmony_ci	USB_DEVICE(0x0582, 0x0050),
125162306a36Sopenharmony_ci	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
125262306a36Sopenharmony_ci		.vendor_name = "EDIROL",
125362306a36Sopenharmony_ci		.product_name = "UA-3FX",
125462306a36Sopenharmony_ci		.ifnum = QUIRK_ANY_INTERFACE,
125562306a36Sopenharmony_ci		.type = QUIRK_COMPOSITE,
125662306a36Sopenharmony_ci		.data = (const struct snd_usb_audio_quirk[]) {
125762306a36Sopenharmony_ci			{
125862306a36Sopenharmony_ci				.ifnum = 1,
125962306a36Sopenharmony_ci				.type = QUIRK_AUDIO_STANDARD_INTERFACE
126062306a36Sopenharmony_ci			},
126162306a36Sopenharmony_ci			{
126262306a36Sopenharmony_ci				.ifnum = 2,
126362306a36Sopenharmony_ci				.type = QUIRK_AUDIO_STANDARD_INTERFACE
126462306a36Sopenharmony_ci			},
126562306a36Sopenharmony_ci			{
126662306a36Sopenharmony_ci				.ifnum = -1
126762306a36Sopenharmony_ci			}
126862306a36Sopenharmony_ci		}
126962306a36Sopenharmony_ci	}
127062306a36Sopenharmony_ci},
127162306a36Sopenharmony_ci{
127262306a36Sopenharmony_ci	USB_DEVICE(0x0582, 0x0052),
127362306a36Sopenharmony_ci	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
127462306a36Sopenharmony_ci		.vendor_name = "EDIROL",
127562306a36Sopenharmony_ci		.product_name = "UM-1SX",
127662306a36Sopenharmony_ci		.ifnum = 0,
127762306a36Sopenharmony_ci		.type = QUIRK_MIDI_STANDARD_INTERFACE
127862306a36Sopenharmony_ci	}
127962306a36Sopenharmony_ci},
128062306a36Sopenharmony_ci{
128162306a36Sopenharmony_ci	USB_DEVICE(0x0582, 0x0060),
128262306a36Sopenharmony_ci	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
128362306a36Sopenharmony_ci		.vendor_name = "Roland",
128462306a36Sopenharmony_ci		.product_name = "EXR Series",
128562306a36Sopenharmony_ci		.ifnum = 0,
128662306a36Sopenharmony_ci		.type = QUIRK_MIDI_STANDARD_INTERFACE
128762306a36Sopenharmony_ci	}
128862306a36Sopenharmony_ci},
128962306a36Sopenharmony_ci{
129062306a36Sopenharmony_ci	/* has ID 0x0066 when not in "Advanced Driver" mode */
129162306a36Sopenharmony_ci	USB_DEVICE(0x0582, 0x0064),
129262306a36Sopenharmony_ci	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
129362306a36Sopenharmony_ci		/* .vendor_name = "EDIROL", */
129462306a36Sopenharmony_ci		/* .product_name = "PCR-1", */
129562306a36Sopenharmony_ci		.ifnum = QUIRK_ANY_INTERFACE,
129662306a36Sopenharmony_ci		.type = QUIRK_COMPOSITE,
129762306a36Sopenharmony_ci		.data = (const struct snd_usb_audio_quirk[]) {
129862306a36Sopenharmony_ci			{
129962306a36Sopenharmony_ci				.ifnum = 1,
130062306a36Sopenharmony_ci				.type = QUIRK_AUDIO_STANDARD_INTERFACE
130162306a36Sopenharmony_ci			},
130262306a36Sopenharmony_ci			{
130362306a36Sopenharmony_ci				.ifnum = 2,
130462306a36Sopenharmony_ci				.type = QUIRK_AUDIO_STANDARD_INTERFACE
130562306a36Sopenharmony_ci			},
130662306a36Sopenharmony_ci			{
130762306a36Sopenharmony_ci				.ifnum = -1
130862306a36Sopenharmony_ci			}
130962306a36Sopenharmony_ci		}
131062306a36Sopenharmony_ci	}
131162306a36Sopenharmony_ci},
131262306a36Sopenharmony_ci{
131362306a36Sopenharmony_ci	/* has ID 0x0067 when not in "Advanced Driver" mode */
131462306a36Sopenharmony_ci	USB_DEVICE(0x0582, 0x0065),
131562306a36Sopenharmony_ci	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
131662306a36Sopenharmony_ci		/* .vendor_name = "EDIROL", */
131762306a36Sopenharmony_ci		/* .product_name = "PCR-1", */
131862306a36Sopenharmony_ci		.ifnum = 0,
131962306a36Sopenharmony_ci		.type = QUIRK_MIDI_FIXED_ENDPOINT,
132062306a36Sopenharmony_ci		.data = & (const struct snd_usb_midi_endpoint_info) {
132162306a36Sopenharmony_ci			.out_cables = 0x0001,
132262306a36Sopenharmony_ci			.in_cables  = 0x0003
132362306a36Sopenharmony_ci		}
132462306a36Sopenharmony_ci	}
132562306a36Sopenharmony_ci},
132662306a36Sopenharmony_ci{
132762306a36Sopenharmony_ci	/* has ID 0x006e when not in "Advanced Driver" mode */
132862306a36Sopenharmony_ci	USB_DEVICE(0x0582, 0x006d),
132962306a36Sopenharmony_ci	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
133062306a36Sopenharmony_ci		.vendor_name = "Roland",
133162306a36Sopenharmony_ci		.product_name = "FANTOM-X",
133262306a36Sopenharmony_ci		.ifnum = 0,
133362306a36Sopenharmony_ci		.type = QUIRK_MIDI_FIXED_ENDPOINT,
133462306a36Sopenharmony_ci		.data = & (const struct snd_usb_midi_endpoint_info) {
133562306a36Sopenharmony_ci			.out_cables = 0x0001,
133662306a36Sopenharmony_ci			.in_cables  = 0x0001
133762306a36Sopenharmony_ci		}
133862306a36Sopenharmony_ci	}
133962306a36Sopenharmony_ci},
134062306a36Sopenharmony_ci{	/*
134162306a36Sopenharmony_ci	 * This quirk is for the "Advanced" modes of the Edirol UA-25.
134262306a36Sopenharmony_ci	 * If the switch is not in an advanced setting, the UA-25 has
134362306a36Sopenharmony_ci	 * ID 0x0582/0x0073 and is standard compliant (no quirks), but
134462306a36Sopenharmony_ci	 * offers only 16-bit PCM at 44.1 kHz and no MIDI.
134562306a36Sopenharmony_ci	 */
134662306a36Sopenharmony_ci	USB_DEVICE_VENDOR_SPEC(0x0582, 0x0074),
134762306a36Sopenharmony_ci	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
134862306a36Sopenharmony_ci		.vendor_name = "EDIROL",
134962306a36Sopenharmony_ci		.product_name = "UA-25",
135062306a36Sopenharmony_ci		.ifnum = QUIRK_ANY_INTERFACE,
135162306a36Sopenharmony_ci		.type = QUIRK_COMPOSITE,
135262306a36Sopenharmony_ci		.data = (const struct snd_usb_audio_quirk[]) {
135362306a36Sopenharmony_ci			{
135462306a36Sopenharmony_ci				.ifnum = 0,
135562306a36Sopenharmony_ci				.type = QUIRK_AUDIO_EDIROL_UAXX
135662306a36Sopenharmony_ci			},
135762306a36Sopenharmony_ci			{
135862306a36Sopenharmony_ci				.ifnum = 1,
135962306a36Sopenharmony_ci				.type = QUIRK_AUDIO_EDIROL_UAXX
136062306a36Sopenharmony_ci			},
136162306a36Sopenharmony_ci			{
136262306a36Sopenharmony_ci				.ifnum = 2,
136362306a36Sopenharmony_ci				.type = QUIRK_AUDIO_EDIROL_UAXX
136462306a36Sopenharmony_ci			},
136562306a36Sopenharmony_ci			{
136662306a36Sopenharmony_ci				.ifnum = -1
136762306a36Sopenharmony_ci			}
136862306a36Sopenharmony_ci		}
136962306a36Sopenharmony_ci	}
137062306a36Sopenharmony_ci},
137162306a36Sopenharmony_ci{
137262306a36Sopenharmony_ci	/* has ID 0x0076 when not in "Advanced Driver" mode */
137362306a36Sopenharmony_ci	USB_DEVICE(0x0582, 0x0075),
137462306a36Sopenharmony_ci	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
137562306a36Sopenharmony_ci		.vendor_name = "BOSS",
137662306a36Sopenharmony_ci		.product_name = "DR-880",
137762306a36Sopenharmony_ci		.ifnum = 0,
137862306a36Sopenharmony_ci		.type = QUIRK_MIDI_FIXED_ENDPOINT,
137962306a36Sopenharmony_ci		.data = & (const struct snd_usb_midi_endpoint_info) {
138062306a36Sopenharmony_ci			.out_cables = 0x0001,
138162306a36Sopenharmony_ci			.in_cables  = 0x0001
138262306a36Sopenharmony_ci		}
138362306a36Sopenharmony_ci	}
138462306a36Sopenharmony_ci},
138562306a36Sopenharmony_ci{
138662306a36Sopenharmony_ci	/* has ID 0x007b when not in "Advanced Driver" mode */
138762306a36Sopenharmony_ci	USB_DEVICE_VENDOR_SPEC(0x0582, 0x007a),
138862306a36Sopenharmony_ci	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
138962306a36Sopenharmony_ci		.vendor_name = "Roland",
139062306a36Sopenharmony_ci		/* "RD" or "RD-700SX"? */
139162306a36Sopenharmony_ci		.ifnum = 0,
139262306a36Sopenharmony_ci		.type = QUIRK_MIDI_FIXED_ENDPOINT,
139362306a36Sopenharmony_ci		.data = & (const struct snd_usb_midi_endpoint_info) {
139462306a36Sopenharmony_ci			.out_cables = 0x0003,
139562306a36Sopenharmony_ci			.in_cables  = 0x0003
139662306a36Sopenharmony_ci		}
139762306a36Sopenharmony_ci	}
139862306a36Sopenharmony_ci},
139962306a36Sopenharmony_ci{
140062306a36Sopenharmony_ci	/* has ID 0x0081 when not in "Advanced Driver" mode */
140162306a36Sopenharmony_ci	USB_DEVICE(0x0582, 0x0080),
140262306a36Sopenharmony_ci	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
140362306a36Sopenharmony_ci		.vendor_name = "Roland",
140462306a36Sopenharmony_ci		.product_name = "G-70",
140562306a36Sopenharmony_ci		.ifnum = 0,
140662306a36Sopenharmony_ci		.type = QUIRK_MIDI_FIXED_ENDPOINT,
140762306a36Sopenharmony_ci		.data = & (const struct snd_usb_midi_endpoint_info) {
140862306a36Sopenharmony_ci			.out_cables = 0x0001,
140962306a36Sopenharmony_ci			.in_cables  = 0x0001
141062306a36Sopenharmony_ci		}
141162306a36Sopenharmony_ci	}
141262306a36Sopenharmony_ci},
141362306a36Sopenharmony_ci{
141462306a36Sopenharmony_ci	/* has ID 0x008c when not in "Advanced Driver" mode */
141562306a36Sopenharmony_ci	USB_DEVICE(0x0582, 0x008b),
141662306a36Sopenharmony_ci	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
141762306a36Sopenharmony_ci		.vendor_name = "EDIROL",
141862306a36Sopenharmony_ci		.product_name = "PC-50",
141962306a36Sopenharmony_ci		.ifnum = 0,
142062306a36Sopenharmony_ci		.type = QUIRK_MIDI_FIXED_ENDPOINT,
142162306a36Sopenharmony_ci		.data = & (const struct snd_usb_midi_endpoint_info) {
142262306a36Sopenharmony_ci			.out_cables = 0x0001,
142362306a36Sopenharmony_ci			.in_cables  = 0x0001
142462306a36Sopenharmony_ci		}
142562306a36Sopenharmony_ci	}
142662306a36Sopenharmony_ci},
142762306a36Sopenharmony_ci{
142862306a36Sopenharmony_ci	/*
142962306a36Sopenharmony_ci	 * This quirk is for the "Advanced Driver" mode. If off, the UA-4FX
143062306a36Sopenharmony_ci	 * is standard compliant, but has only 16-bit PCM and no MIDI.
143162306a36Sopenharmony_ci	 */
143262306a36Sopenharmony_ci	USB_DEVICE(0x0582, 0x00a3),
143362306a36Sopenharmony_ci	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
143462306a36Sopenharmony_ci		.vendor_name = "EDIROL",
143562306a36Sopenharmony_ci		.product_name = "UA-4FX",
143662306a36Sopenharmony_ci		.ifnum = QUIRK_ANY_INTERFACE,
143762306a36Sopenharmony_ci		.type = QUIRK_COMPOSITE,
143862306a36Sopenharmony_ci		.data = (const struct snd_usb_audio_quirk[]) {
143962306a36Sopenharmony_ci			{
144062306a36Sopenharmony_ci				.ifnum = 0,
144162306a36Sopenharmony_ci				.type = QUIRK_AUDIO_EDIROL_UAXX
144262306a36Sopenharmony_ci			},
144362306a36Sopenharmony_ci			{
144462306a36Sopenharmony_ci				.ifnum = 1,
144562306a36Sopenharmony_ci				.type = QUIRK_AUDIO_EDIROL_UAXX
144662306a36Sopenharmony_ci			},
144762306a36Sopenharmony_ci			{
144862306a36Sopenharmony_ci				.ifnum = 2,
144962306a36Sopenharmony_ci				.type = QUIRK_AUDIO_EDIROL_UAXX
145062306a36Sopenharmony_ci			},
145162306a36Sopenharmony_ci			{
145262306a36Sopenharmony_ci				.ifnum = -1
145362306a36Sopenharmony_ci			}
145462306a36Sopenharmony_ci		}
145562306a36Sopenharmony_ci	}
145662306a36Sopenharmony_ci},
145762306a36Sopenharmony_ci{
145862306a36Sopenharmony_ci	/* Edirol M-16DX */
145962306a36Sopenharmony_ci	USB_DEVICE(0x0582, 0x00c4),
146062306a36Sopenharmony_ci	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
146162306a36Sopenharmony_ci		.ifnum = QUIRK_ANY_INTERFACE,
146262306a36Sopenharmony_ci		.type = QUIRK_COMPOSITE,
146362306a36Sopenharmony_ci		.data = (const struct snd_usb_audio_quirk[]) {
146462306a36Sopenharmony_ci			{
146562306a36Sopenharmony_ci				.ifnum = 0,
146662306a36Sopenharmony_ci				.type = QUIRK_AUDIO_STANDARD_INTERFACE
146762306a36Sopenharmony_ci			},
146862306a36Sopenharmony_ci			{
146962306a36Sopenharmony_ci				.ifnum = 1,
147062306a36Sopenharmony_ci				.type = QUIRK_AUDIO_STANDARD_INTERFACE
147162306a36Sopenharmony_ci			},
147262306a36Sopenharmony_ci			{
147362306a36Sopenharmony_ci				.ifnum = 2,
147462306a36Sopenharmony_ci				.type = QUIRK_MIDI_FIXED_ENDPOINT,
147562306a36Sopenharmony_ci				.data = & (const struct snd_usb_midi_endpoint_info) {
147662306a36Sopenharmony_ci					.out_cables = 0x0001,
147762306a36Sopenharmony_ci					.in_cables  = 0x0001
147862306a36Sopenharmony_ci				}
147962306a36Sopenharmony_ci			},
148062306a36Sopenharmony_ci			{
148162306a36Sopenharmony_ci				.ifnum = -1
148262306a36Sopenharmony_ci			}
148362306a36Sopenharmony_ci		}
148462306a36Sopenharmony_ci	}
148562306a36Sopenharmony_ci},
148662306a36Sopenharmony_ci{
148762306a36Sopenharmony_ci	/* Advanced modes of the Edirol UA-25EX.
148862306a36Sopenharmony_ci	 * For the standard mode, UA-25EX has ID 0582:00e7, which
148962306a36Sopenharmony_ci	 * offers only 16-bit PCM at 44.1 kHz and no MIDI.
149062306a36Sopenharmony_ci	 */
149162306a36Sopenharmony_ci	USB_DEVICE_VENDOR_SPEC(0x0582, 0x00e6),
149262306a36Sopenharmony_ci	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
149362306a36Sopenharmony_ci		.vendor_name = "EDIROL",
149462306a36Sopenharmony_ci		.product_name = "UA-25EX",
149562306a36Sopenharmony_ci		.ifnum = QUIRK_ANY_INTERFACE,
149662306a36Sopenharmony_ci		.type = QUIRK_COMPOSITE,
149762306a36Sopenharmony_ci		.data = (const struct snd_usb_audio_quirk[]) {
149862306a36Sopenharmony_ci			{
149962306a36Sopenharmony_ci				.ifnum = 0,
150062306a36Sopenharmony_ci				.type = QUIRK_AUDIO_EDIROL_UAXX
150162306a36Sopenharmony_ci			},
150262306a36Sopenharmony_ci			{
150362306a36Sopenharmony_ci				.ifnum = 1,
150462306a36Sopenharmony_ci				.type = QUIRK_AUDIO_EDIROL_UAXX
150562306a36Sopenharmony_ci			},
150662306a36Sopenharmony_ci			{
150762306a36Sopenharmony_ci				.ifnum = 2,
150862306a36Sopenharmony_ci				.type = QUIRK_AUDIO_EDIROL_UAXX
150962306a36Sopenharmony_ci			},
151062306a36Sopenharmony_ci			{
151162306a36Sopenharmony_ci				.ifnum = -1
151262306a36Sopenharmony_ci			}
151362306a36Sopenharmony_ci		}
151462306a36Sopenharmony_ci	}
151562306a36Sopenharmony_ci},
151662306a36Sopenharmony_ci{
151762306a36Sopenharmony_ci	/* Edirol UM-3G */
151862306a36Sopenharmony_ci	USB_DEVICE_VENDOR_SPEC(0x0582, 0x0108),
151962306a36Sopenharmony_ci	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
152062306a36Sopenharmony_ci		.ifnum = 0,
152162306a36Sopenharmony_ci		.type = QUIRK_MIDI_FIXED_ENDPOINT,
152262306a36Sopenharmony_ci		.data = & (const struct snd_usb_midi_endpoint_info) {
152362306a36Sopenharmony_ci			.out_cables = 0x0007,
152462306a36Sopenharmony_ci			.in_cables  = 0x0007
152562306a36Sopenharmony_ci		}
152662306a36Sopenharmony_ci	}
152762306a36Sopenharmony_ci},
152862306a36Sopenharmony_ci{
152962306a36Sopenharmony_ci	/* BOSS ME-25 */
153062306a36Sopenharmony_ci	USB_DEVICE(0x0582, 0x0113),
153162306a36Sopenharmony_ci	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
153262306a36Sopenharmony_ci		.ifnum = QUIRK_ANY_INTERFACE,
153362306a36Sopenharmony_ci		.type = QUIRK_COMPOSITE,
153462306a36Sopenharmony_ci		.data = (const struct snd_usb_audio_quirk[]) {
153562306a36Sopenharmony_ci			{
153662306a36Sopenharmony_ci				.ifnum = 0,
153762306a36Sopenharmony_ci				.type = QUIRK_AUDIO_STANDARD_INTERFACE
153862306a36Sopenharmony_ci			},
153962306a36Sopenharmony_ci			{
154062306a36Sopenharmony_ci				.ifnum = 1,
154162306a36Sopenharmony_ci				.type = QUIRK_AUDIO_STANDARD_INTERFACE
154262306a36Sopenharmony_ci			},
154362306a36Sopenharmony_ci			{
154462306a36Sopenharmony_ci				.ifnum = 2,
154562306a36Sopenharmony_ci				.type = QUIRK_MIDI_FIXED_ENDPOINT,
154662306a36Sopenharmony_ci				.data = & (const struct snd_usb_midi_endpoint_info) {
154762306a36Sopenharmony_ci					.out_cables = 0x0001,
154862306a36Sopenharmony_ci					.in_cables  = 0x0001
154962306a36Sopenharmony_ci				}
155062306a36Sopenharmony_ci			},
155162306a36Sopenharmony_ci			{
155262306a36Sopenharmony_ci				.ifnum = -1
155362306a36Sopenharmony_ci			}
155462306a36Sopenharmony_ci		}
155562306a36Sopenharmony_ci	}
155662306a36Sopenharmony_ci},
155762306a36Sopenharmony_ci{
155862306a36Sopenharmony_ci	/* only 44.1 kHz works at the moment */
155962306a36Sopenharmony_ci	USB_DEVICE(0x0582, 0x0120),
156062306a36Sopenharmony_ci	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
156162306a36Sopenharmony_ci		/* .vendor_name = "Roland", */
156262306a36Sopenharmony_ci		/* .product_name = "OCTO-CAPTURE", */
156362306a36Sopenharmony_ci		.ifnum = QUIRK_ANY_INTERFACE,
156462306a36Sopenharmony_ci		.type = QUIRK_COMPOSITE,
156562306a36Sopenharmony_ci		.data = (const struct snd_usb_audio_quirk[]) {
156662306a36Sopenharmony_ci			{
156762306a36Sopenharmony_ci				.ifnum = 0,
156862306a36Sopenharmony_ci				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
156962306a36Sopenharmony_ci				.data = & (const struct audioformat) {
157062306a36Sopenharmony_ci					.formats = SNDRV_PCM_FMTBIT_S32_LE,
157162306a36Sopenharmony_ci					.channels = 10,
157262306a36Sopenharmony_ci					.iface = 0,
157362306a36Sopenharmony_ci					.altsetting = 1,
157462306a36Sopenharmony_ci					.altset_idx = 1,
157562306a36Sopenharmony_ci					.endpoint = 0x05,
157662306a36Sopenharmony_ci					.ep_attr = 0x05,
157762306a36Sopenharmony_ci					.rates = SNDRV_PCM_RATE_44100,
157862306a36Sopenharmony_ci					.rate_min = 44100,
157962306a36Sopenharmony_ci					.rate_max = 44100,
158062306a36Sopenharmony_ci					.nr_rates = 1,
158162306a36Sopenharmony_ci					.rate_table = (unsigned int[]) { 44100 }
158262306a36Sopenharmony_ci				}
158362306a36Sopenharmony_ci			},
158462306a36Sopenharmony_ci			{
158562306a36Sopenharmony_ci				.ifnum = 1,
158662306a36Sopenharmony_ci				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
158762306a36Sopenharmony_ci				.data = & (const struct audioformat) {
158862306a36Sopenharmony_ci					.formats = SNDRV_PCM_FMTBIT_S32_LE,
158962306a36Sopenharmony_ci					.channels = 12,
159062306a36Sopenharmony_ci					.iface = 1,
159162306a36Sopenharmony_ci					.altsetting = 1,
159262306a36Sopenharmony_ci					.altset_idx = 1,
159362306a36Sopenharmony_ci					.endpoint = 0x85,
159462306a36Sopenharmony_ci					.ep_attr = 0x25,
159562306a36Sopenharmony_ci					.rates = SNDRV_PCM_RATE_44100,
159662306a36Sopenharmony_ci					.rate_min = 44100,
159762306a36Sopenharmony_ci					.rate_max = 44100,
159862306a36Sopenharmony_ci					.nr_rates = 1,
159962306a36Sopenharmony_ci					.rate_table = (unsigned int[]) { 44100 }
160062306a36Sopenharmony_ci				}
160162306a36Sopenharmony_ci			},
160262306a36Sopenharmony_ci			{
160362306a36Sopenharmony_ci				.ifnum = 2,
160462306a36Sopenharmony_ci				.type = QUIRK_MIDI_FIXED_ENDPOINT,
160562306a36Sopenharmony_ci				.data = & (const struct snd_usb_midi_endpoint_info) {
160662306a36Sopenharmony_ci					.out_cables = 0x0001,
160762306a36Sopenharmony_ci					.in_cables  = 0x0001
160862306a36Sopenharmony_ci				}
160962306a36Sopenharmony_ci			},
161062306a36Sopenharmony_ci			{
161162306a36Sopenharmony_ci				.ifnum = 3,
161262306a36Sopenharmony_ci				.type = QUIRK_IGNORE_INTERFACE
161362306a36Sopenharmony_ci			},
161462306a36Sopenharmony_ci			{
161562306a36Sopenharmony_ci				.ifnum = 4,
161662306a36Sopenharmony_ci				.type = QUIRK_IGNORE_INTERFACE
161762306a36Sopenharmony_ci			},
161862306a36Sopenharmony_ci			{
161962306a36Sopenharmony_ci				.ifnum = -1
162062306a36Sopenharmony_ci			}
162162306a36Sopenharmony_ci		}
162262306a36Sopenharmony_ci	}
162362306a36Sopenharmony_ci},
162462306a36Sopenharmony_ci{
162562306a36Sopenharmony_ci	/* only 44.1 kHz works at the moment */
162662306a36Sopenharmony_ci	USB_DEVICE(0x0582, 0x012f),
162762306a36Sopenharmony_ci	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
162862306a36Sopenharmony_ci		/* .vendor_name = "Roland", */
162962306a36Sopenharmony_ci		/* .product_name = "QUAD-CAPTURE", */
163062306a36Sopenharmony_ci		.ifnum = QUIRK_ANY_INTERFACE,
163162306a36Sopenharmony_ci		.type = QUIRK_COMPOSITE,
163262306a36Sopenharmony_ci		.data = (const struct snd_usb_audio_quirk[]) {
163362306a36Sopenharmony_ci			{
163462306a36Sopenharmony_ci				.ifnum = 0,
163562306a36Sopenharmony_ci				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
163662306a36Sopenharmony_ci				.data = & (const struct audioformat) {
163762306a36Sopenharmony_ci					.formats = SNDRV_PCM_FMTBIT_S32_LE,
163862306a36Sopenharmony_ci					.channels = 4,
163962306a36Sopenharmony_ci					.iface = 0,
164062306a36Sopenharmony_ci					.altsetting = 1,
164162306a36Sopenharmony_ci					.altset_idx = 1,
164262306a36Sopenharmony_ci					.endpoint = 0x05,
164362306a36Sopenharmony_ci					.ep_attr = 0x05,
164462306a36Sopenharmony_ci					.rates = SNDRV_PCM_RATE_44100,
164562306a36Sopenharmony_ci					.rate_min = 44100,
164662306a36Sopenharmony_ci					.rate_max = 44100,
164762306a36Sopenharmony_ci					.nr_rates = 1,
164862306a36Sopenharmony_ci					.rate_table = (unsigned int[]) { 44100 }
164962306a36Sopenharmony_ci				}
165062306a36Sopenharmony_ci			},
165162306a36Sopenharmony_ci			{
165262306a36Sopenharmony_ci				.ifnum = 1,
165362306a36Sopenharmony_ci				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
165462306a36Sopenharmony_ci				.data = & (const struct audioformat) {
165562306a36Sopenharmony_ci					.formats = SNDRV_PCM_FMTBIT_S32_LE,
165662306a36Sopenharmony_ci					.channels = 6,
165762306a36Sopenharmony_ci					.iface = 1,
165862306a36Sopenharmony_ci					.altsetting = 1,
165962306a36Sopenharmony_ci					.altset_idx = 1,
166062306a36Sopenharmony_ci					.endpoint = 0x85,
166162306a36Sopenharmony_ci					.ep_attr = 0x25,
166262306a36Sopenharmony_ci					.rates = SNDRV_PCM_RATE_44100,
166362306a36Sopenharmony_ci					.rate_min = 44100,
166462306a36Sopenharmony_ci					.rate_max = 44100,
166562306a36Sopenharmony_ci					.nr_rates = 1,
166662306a36Sopenharmony_ci					.rate_table = (unsigned int[]) { 44100 }
166762306a36Sopenharmony_ci				}
166862306a36Sopenharmony_ci			},
166962306a36Sopenharmony_ci			{
167062306a36Sopenharmony_ci				.ifnum = 2,
167162306a36Sopenharmony_ci				.type = QUIRK_MIDI_FIXED_ENDPOINT,
167262306a36Sopenharmony_ci				.data = & (const struct snd_usb_midi_endpoint_info) {
167362306a36Sopenharmony_ci					.out_cables = 0x0001,
167462306a36Sopenharmony_ci					.in_cables  = 0x0001
167562306a36Sopenharmony_ci				}
167662306a36Sopenharmony_ci			},
167762306a36Sopenharmony_ci			{
167862306a36Sopenharmony_ci				.ifnum = 3,
167962306a36Sopenharmony_ci				.type = QUIRK_IGNORE_INTERFACE
168062306a36Sopenharmony_ci			},
168162306a36Sopenharmony_ci			{
168262306a36Sopenharmony_ci				.ifnum = 4,
168362306a36Sopenharmony_ci				.type = QUIRK_IGNORE_INTERFACE
168462306a36Sopenharmony_ci			},
168562306a36Sopenharmony_ci			{
168662306a36Sopenharmony_ci				.ifnum = -1
168762306a36Sopenharmony_ci			}
168862306a36Sopenharmony_ci		}
168962306a36Sopenharmony_ci	}
169062306a36Sopenharmony_ci},
169162306a36Sopenharmony_ci{
169262306a36Sopenharmony_ci	USB_DEVICE(0x0582, 0x0159),
169362306a36Sopenharmony_ci	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
169462306a36Sopenharmony_ci		/* .vendor_name = "Roland", */
169562306a36Sopenharmony_ci		/* .product_name = "UA-22", */
169662306a36Sopenharmony_ci		.ifnum = QUIRK_ANY_INTERFACE,
169762306a36Sopenharmony_ci		.type = QUIRK_COMPOSITE,
169862306a36Sopenharmony_ci		.data = (const struct snd_usb_audio_quirk[]) {
169962306a36Sopenharmony_ci			{
170062306a36Sopenharmony_ci				.ifnum = 0,
170162306a36Sopenharmony_ci				.type = QUIRK_AUDIO_STANDARD_INTERFACE
170262306a36Sopenharmony_ci			},
170362306a36Sopenharmony_ci			{
170462306a36Sopenharmony_ci				.ifnum = 1,
170562306a36Sopenharmony_ci				.type = QUIRK_AUDIO_STANDARD_INTERFACE
170662306a36Sopenharmony_ci			},
170762306a36Sopenharmony_ci			{
170862306a36Sopenharmony_ci				.ifnum = 2,
170962306a36Sopenharmony_ci				.type = QUIRK_MIDI_FIXED_ENDPOINT,
171062306a36Sopenharmony_ci				.data = & (const struct snd_usb_midi_endpoint_info) {
171162306a36Sopenharmony_ci					.out_cables = 0x0001,
171262306a36Sopenharmony_ci					.in_cables = 0x0001
171362306a36Sopenharmony_ci				}
171462306a36Sopenharmony_ci			},
171562306a36Sopenharmony_ci			{
171662306a36Sopenharmony_ci				.ifnum = -1
171762306a36Sopenharmony_ci			}
171862306a36Sopenharmony_ci		}
171962306a36Sopenharmony_ci	}
172062306a36Sopenharmony_ci},
172162306a36Sopenharmony_ci
172262306a36Sopenharmony_ci/* UA101 and co are supported by another driver */
172362306a36Sopenharmony_ci{
172462306a36Sopenharmony_ci	USB_DEVICE(0x0582, 0x0044), /* UA-1000 high speed */
172562306a36Sopenharmony_ci	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
172662306a36Sopenharmony_ci		.ifnum = QUIRK_NODEV_INTERFACE
172762306a36Sopenharmony_ci	},
172862306a36Sopenharmony_ci},
172962306a36Sopenharmony_ci{
173062306a36Sopenharmony_ci	USB_DEVICE(0x0582, 0x007d), /* UA-101 high speed */
173162306a36Sopenharmony_ci	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
173262306a36Sopenharmony_ci		.ifnum = QUIRK_NODEV_INTERFACE
173362306a36Sopenharmony_ci	},
173462306a36Sopenharmony_ci},
173562306a36Sopenharmony_ci{
173662306a36Sopenharmony_ci	USB_DEVICE(0x0582, 0x008d), /* UA-101 full speed */
173762306a36Sopenharmony_ci	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
173862306a36Sopenharmony_ci		.ifnum = QUIRK_NODEV_INTERFACE
173962306a36Sopenharmony_ci	},
174062306a36Sopenharmony_ci},
174162306a36Sopenharmony_ci
174262306a36Sopenharmony_ci/* this catches most recent vendor-specific Roland devices */
174362306a36Sopenharmony_ci{
174462306a36Sopenharmony_ci	.match_flags = USB_DEVICE_ID_MATCH_VENDOR |
174562306a36Sopenharmony_ci	               USB_DEVICE_ID_MATCH_INT_CLASS,
174662306a36Sopenharmony_ci	.idVendor = 0x0582,
174762306a36Sopenharmony_ci	.bInterfaceClass = USB_CLASS_VENDOR_SPEC,
174862306a36Sopenharmony_ci	.driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
174962306a36Sopenharmony_ci		.ifnum = QUIRK_ANY_INTERFACE,
175062306a36Sopenharmony_ci		.type = QUIRK_AUTODETECT
175162306a36Sopenharmony_ci	}
175262306a36Sopenharmony_ci},
175362306a36Sopenharmony_ci
175462306a36Sopenharmony_ci/* Guillemot devices */
175562306a36Sopenharmony_ci{
175662306a36Sopenharmony_ci	/*
175762306a36Sopenharmony_ci	 * This is for the "Windows Edition" where the external MIDI ports are
175862306a36Sopenharmony_ci	 * the only MIDI ports; the control data is reported through HID
175962306a36Sopenharmony_ci	 * interfaces.  The "Macintosh Edition" has ID 0xd002 and uses standard
176062306a36Sopenharmony_ci	 * compliant USB MIDI ports for external MIDI and controls.
176162306a36Sopenharmony_ci	 */
176262306a36Sopenharmony_ci	USB_DEVICE_VENDOR_SPEC(0x06f8, 0xb000),
176362306a36Sopenharmony_ci	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
176462306a36Sopenharmony_ci		.vendor_name = "Hercules",
176562306a36Sopenharmony_ci		.product_name = "DJ Console (WE)",
176662306a36Sopenharmony_ci		.ifnum = 4,
176762306a36Sopenharmony_ci		.type = QUIRK_MIDI_FIXED_ENDPOINT,
176862306a36Sopenharmony_ci		.data = & (const struct snd_usb_midi_endpoint_info) {
176962306a36Sopenharmony_ci			.out_cables = 0x0001,
177062306a36Sopenharmony_ci			.in_cables = 0x0001
177162306a36Sopenharmony_ci		}
177262306a36Sopenharmony_ci	}
177362306a36Sopenharmony_ci},
177462306a36Sopenharmony_ci
177562306a36Sopenharmony_ci/* Midiman/M-Audio devices */
177662306a36Sopenharmony_ci{
177762306a36Sopenharmony_ci	USB_DEVICE_VENDOR_SPEC(0x0763, 0x1002),
177862306a36Sopenharmony_ci	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
177962306a36Sopenharmony_ci		.vendor_name = "M-Audio",
178062306a36Sopenharmony_ci		.product_name = "MidiSport 2x2",
178162306a36Sopenharmony_ci		.ifnum = QUIRK_ANY_INTERFACE,
178262306a36Sopenharmony_ci		.type = QUIRK_MIDI_MIDIMAN,
178362306a36Sopenharmony_ci		.data = & (const struct snd_usb_midi_endpoint_info) {
178462306a36Sopenharmony_ci			.out_cables = 0x0003,
178562306a36Sopenharmony_ci			.in_cables  = 0x0003
178662306a36Sopenharmony_ci		}
178762306a36Sopenharmony_ci	}
178862306a36Sopenharmony_ci},
178962306a36Sopenharmony_ci{
179062306a36Sopenharmony_ci	USB_DEVICE_VENDOR_SPEC(0x0763, 0x1011),
179162306a36Sopenharmony_ci	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
179262306a36Sopenharmony_ci		.vendor_name = "M-Audio",
179362306a36Sopenharmony_ci		.product_name = "MidiSport 1x1",
179462306a36Sopenharmony_ci		.ifnum = QUIRK_ANY_INTERFACE,
179562306a36Sopenharmony_ci		.type = QUIRK_MIDI_MIDIMAN,
179662306a36Sopenharmony_ci		.data = & (const struct snd_usb_midi_endpoint_info) {
179762306a36Sopenharmony_ci			.out_cables = 0x0001,
179862306a36Sopenharmony_ci			.in_cables  = 0x0001
179962306a36Sopenharmony_ci		}
180062306a36Sopenharmony_ci	}
180162306a36Sopenharmony_ci},
180262306a36Sopenharmony_ci{
180362306a36Sopenharmony_ci	USB_DEVICE_VENDOR_SPEC(0x0763, 0x1015),
180462306a36Sopenharmony_ci	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
180562306a36Sopenharmony_ci		.vendor_name = "M-Audio",
180662306a36Sopenharmony_ci		.product_name = "Keystation",
180762306a36Sopenharmony_ci		.ifnum = QUIRK_ANY_INTERFACE,
180862306a36Sopenharmony_ci		.type = QUIRK_MIDI_MIDIMAN,
180962306a36Sopenharmony_ci		.data = & (const struct snd_usb_midi_endpoint_info) {
181062306a36Sopenharmony_ci			.out_cables = 0x0001,
181162306a36Sopenharmony_ci			.in_cables  = 0x0001
181262306a36Sopenharmony_ci		}
181362306a36Sopenharmony_ci	}
181462306a36Sopenharmony_ci},
181562306a36Sopenharmony_ci{
181662306a36Sopenharmony_ci	USB_DEVICE_VENDOR_SPEC(0x0763, 0x1021),
181762306a36Sopenharmony_ci	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
181862306a36Sopenharmony_ci		.vendor_name = "M-Audio",
181962306a36Sopenharmony_ci		.product_name = "MidiSport 4x4",
182062306a36Sopenharmony_ci		.ifnum = QUIRK_ANY_INTERFACE,
182162306a36Sopenharmony_ci		.type = QUIRK_MIDI_MIDIMAN,
182262306a36Sopenharmony_ci		.data = & (const struct snd_usb_midi_endpoint_info) {
182362306a36Sopenharmony_ci			.out_cables = 0x000f,
182462306a36Sopenharmony_ci			.in_cables  = 0x000f
182562306a36Sopenharmony_ci		}
182662306a36Sopenharmony_ci	}
182762306a36Sopenharmony_ci},
182862306a36Sopenharmony_ci{
182962306a36Sopenharmony_ci	/*
183062306a36Sopenharmony_ci	 * For hardware revision 1.05; in the later revisions (1.10 and
183162306a36Sopenharmony_ci	 * 1.21), 0x1031 is the ID for the device without firmware.
183262306a36Sopenharmony_ci	 * Thanks to Olaf Giesbrecht <Olaf_Giesbrecht@yahoo.de>
183362306a36Sopenharmony_ci	 */
183462306a36Sopenharmony_ci	USB_DEVICE_VER(0x0763, 0x1031, 0x0100, 0x0109),
183562306a36Sopenharmony_ci	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
183662306a36Sopenharmony_ci		.vendor_name = "M-Audio",
183762306a36Sopenharmony_ci		.product_name = "MidiSport 8x8",
183862306a36Sopenharmony_ci		.ifnum = QUIRK_ANY_INTERFACE,
183962306a36Sopenharmony_ci		.type = QUIRK_MIDI_MIDIMAN,
184062306a36Sopenharmony_ci		.data = & (const struct snd_usb_midi_endpoint_info) {
184162306a36Sopenharmony_ci			.out_cables = 0x01ff,
184262306a36Sopenharmony_ci			.in_cables  = 0x01ff
184362306a36Sopenharmony_ci		}
184462306a36Sopenharmony_ci	}
184562306a36Sopenharmony_ci},
184662306a36Sopenharmony_ci{
184762306a36Sopenharmony_ci	USB_DEVICE_VENDOR_SPEC(0x0763, 0x1033),
184862306a36Sopenharmony_ci	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
184962306a36Sopenharmony_ci		.vendor_name = "M-Audio",
185062306a36Sopenharmony_ci		.product_name = "MidiSport 8x8",
185162306a36Sopenharmony_ci		.ifnum = QUIRK_ANY_INTERFACE,
185262306a36Sopenharmony_ci		.type = QUIRK_MIDI_MIDIMAN,
185362306a36Sopenharmony_ci		.data = & (const struct snd_usb_midi_endpoint_info) {
185462306a36Sopenharmony_ci			.out_cables = 0x01ff,
185562306a36Sopenharmony_ci			.in_cables  = 0x01ff
185662306a36Sopenharmony_ci		}
185762306a36Sopenharmony_ci	}
185862306a36Sopenharmony_ci},
185962306a36Sopenharmony_ci{
186062306a36Sopenharmony_ci	USB_DEVICE_VENDOR_SPEC(0x0763, 0x1041),
186162306a36Sopenharmony_ci	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
186262306a36Sopenharmony_ci		.vendor_name = "M-Audio",
186362306a36Sopenharmony_ci		.product_name = "MidiSport 2x4",
186462306a36Sopenharmony_ci		.ifnum = QUIRK_ANY_INTERFACE,
186562306a36Sopenharmony_ci		.type = QUIRK_MIDI_MIDIMAN,
186662306a36Sopenharmony_ci		.data = & (const struct snd_usb_midi_endpoint_info) {
186762306a36Sopenharmony_ci			.out_cables = 0x000f,
186862306a36Sopenharmony_ci			.in_cables  = 0x0003
186962306a36Sopenharmony_ci		}
187062306a36Sopenharmony_ci	}
187162306a36Sopenharmony_ci},
187262306a36Sopenharmony_ci{
187362306a36Sopenharmony_ci	USB_DEVICE_VENDOR_SPEC(0x0763, 0x2001),
187462306a36Sopenharmony_ci	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
187562306a36Sopenharmony_ci		.vendor_name = "M-Audio",
187662306a36Sopenharmony_ci		.product_name = "Quattro",
187762306a36Sopenharmony_ci		.ifnum = QUIRK_ANY_INTERFACE,
187862306a36Sopenharmony_ci		.type = QUIRK_COMPOSITE,
187962306a36Sopenharmony_ci		.data = & (const struct snd_usb_audio_quirk[]) {
188062306a36Sopenharmony_ci			/*
188162306a36Sopenharmony_ci			 * Interfaces 0-2 are "Windows-compatible", 16-bit only,
188262306a36Sopenharmony_ci			 * and share endpoints with the other interfaces.
188362306a36Sopenharmony_ci			 * Ignore them.  The other interfaces can do 24 bits,
188462306a36Sopenharmony_ci			 * but captured samples are big-endian (see usbaudio.c).
188562306a36Sopenharmony_ci			 */
188662306a36Sopenharmony_ci			{
188762306a36Sopenharmony_ci				.ifnum = 0,
188862306a36Sopenharmony_ci				.type = QUIRK_IGNORE_INTERFACE
188962306a36Sopenharmony_ci			},
189062306a36Sopenharmony_ci			{
189162306a36Sopenharmony_ci				.ifnum = 1,
189262306a36Sopenharmony_ci				.type = QUIRK_IGNORE_INTERFACE
189362306a36Sopenharmony_ci			},
189462306a36Sopenharmony_ci			{
189562306a36Sopenharmony_ci				.ifnum = 2,
189662306a36Sopenharmony_ci				.type = QUIRK_IGNORE_INTERFACE
189762306a36Sopenharmony_ci			},
189862306a36Sopenharmony_ci			{
189962306a36Sopenharmony_ci				.ifnum = 3,
190062306a36Sopenharmony_ci				.type = QUIRK_IGNORE_INTERFACE
190162306a36Sopenharmony_ci			},
190262306a36Sopenharmony_ci			{
190362306a36Sopenharmony_ci				.ifnum = 4,
190462306a36Sopenharmony_ci				.type = QUIRK_AUDIO_STANDARD_INTERFACE
190562306a36Sopenharmony_ci			},
190662306a36Sopenharmony_ci			{
190762306a36Sopenharmony_ci				.ifnum = 5,
190862306a36Sopenharmony_ci				.type = QUIRK_AUDIO_STANDARD_INTERFACE
190962306a36Sopenharmony_ci			},
191062306a36Sopenharmony_ci			{
191162306a36Sopenharmony_ci				.ifnum = 6,
191262306a36Sopenharmony_ci				.type = QUIRK_IGNORE_INTERFACE
191362306a36Sopenharmony_ci			},
191462306a36Sopenharmony_ci			{
191562306a36Sopenharmony_ci				.ifnum = 7,
191662306a36Sopenharmony_ci				.type = QUIRK_AUDIO_STANDARD_INTERFACE
191762306a36Sopenharmony_ci			},
191862306a36Sopenharmony_ci			{
191962306a36Sopenharmony_ci				.ifnum = 8,
192062306a36Sopenharmony_ci				.type = QUIRK_AUDIO_STANDARD_INTERFACE
192162306a36Sopenharmony_ci			},
192262306a36Sopenharmony_ci			{
192362306a36Sopenharmony_ci				.ifnum = 9,
192462306a36Sopenharmony_ci				.type = QUIRK_MIDI_MIDIMAN,
192562306a36Sopenharmony_ci				.data = & (const struct snd_usb_midi_endpoint_info) {
192662306a36Sopenharmony_ci					.out_cables = 0x0001,
192762306a36Sopenharmony_ci					.in_cables  = 0x0001
192862306a36Sopenharmony_ci				}
192962306a36Sopenharmony_ci			},
193062306a36Sopenharmony_ci			{
193162306a36Sopenharmony_ci				.ifnum = -1
193262306a36Sopenharmony_ci			}
193362306a36Sopenharmony_ci		}
193462306a36Sopenharmony_ci	}
193562306a36Sopenharmony_ci},
193662306a36Sopenharmony_ci{
193762306a36Sopenharmony_ci	USB_DEVICE_VENDOR_SPEC(0x0763, 0x2003),
193862306a36Sopenharmony_ci	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
193962306a36Sopenharmony_ci		.vendor_name = "M-Audio",
194062306a36Sopenharmony_ci		.product_name = "AudioPhile",
194162306a36Sopenharmony_ci		.ifnum = 6,
194262306a36Sopenharmony_ci		.type = QUIRK_MIDI_MIDIMAN,
194362306a36Sopenharmony_ci		.data = & (const struct snd_usb_midi_endpoint_info) {
194462306a36Sopenharmony_ci			.out_cables = 0x0001,
194562306a36Sopenharmony_ci			.in_cables  = 0x0001
194662306a36Sopenharmony_ci		}
194762306a36Sopenharmony_ci	}
194862306a36Sopenharmony_ci},
194962306a36Sopenharmony_ci{
195062306a36Sopenharmony_ci	USB_DEVICE_VENDOR_SPEC(0x0763, 0x2008),
195162306a36Sopenharmony_ci	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
195262306a36Sopenharmony_ci		.vendor_name = "M-Audio",
195362306a36Sopenharmony_ci		.product_name = "Ozone",
195462306a36Sopenharmony_ci		.ifnum = 3,
195562306a36Sopenharmony_ci		.type = QUIRK_MIDI_MIDIMAN,
195662306a36Sopenharmony_ci		.data = & (const struct snd_usb_midi_endpoint_info) {
195762306a36Sopenharmony_ci			.out_cables = 0x0001,
195862306a36Sopenharmony_ci			.in_cables  = 0x0001
195962306a36Sopenharmony_ci		}
196062306a36Sopenharmony_ci	}
196162306a36Sopenharmony_ci},
196262306a36Sopenharmony_ci{
196362306a36Sopenharmony_ci	USB_DEVICE_VENDOR_SPEC(0x0763, 0x200d),
196462306a36Sopenharmony_ci	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
196562306a36Sopenharmony_ci		.vendor_name = "M-Audio",
196662306a36Sopenharmony_ci		.product_name = "OmniStudio",
196762306a36Sopenharmony_ci		.ifnum = QUIRK_ANY_INTERFACE,
196862306a36Sopenharmony_ci		.type = QUIRK_COMPOSITE,
196962306a36Sopenharmony_ci		.data = & (const struct snd_usb_audio_quirk[]) {
197062306a36Sopenharmony_ci			{
197162306a36Sopenharmony_ci				.ifnum = 0,
197262306a36Sopenharmony_ci				.type = QUIRK_IGNORE_INTERFACE
197362306a36Sopenharmony_ci			},
197462306a36Sopenharmony_ci			{
197562306a36Sopenharmony_ci				.ifnum = 1,
197662306a36Sopenharmony_ci				.type = QUIRK_IGNORE_INTERFACE
197762306a36Sopenharmony_ci			},
197862306a36Sopenharmony_ci			{
197962306a36Sopenharmony_ci				.ifnum = 2,
198062306a36Sopenharmony_ci				.type = QUIRK_IGNORE_INTERFACE
198162306a36Sopenharmony_ci			},
198262306a36Sopenharmony_ci			{
198362306a36Sopenharmony_ci				.ifnum = 3,
198462306a36Sopenharmony_ci				.type = QUIRK_IGNORE_INTERFACE
198562306a36Sopenharmony_ci			},
198662306a36Sopenharmony_ci			{
198762306a36Sopenharmony_ci				.ifnum = 4,
198862306a36Sopenharmony_ci				.type = QUIRK_AUDIO_STANDARD_INTERFACE
198962306a36Sopenharmony_ci			},
199062306a36Sopenharmony_ci			{
199162306a36Sopenharmony_ci				.ifnum = 5,
199262306a36Sopenharmony_ci				.type = QUIRK_AUDIO_STANDARD_INTERFACE
199362306a36Sopenharmony_ci			},
199462306a36Sopenharmony_ci			{
199562306a36Sopenharmony_ci				.ifnum = 6,
199662306a36Sopenharmony_ci				.type = QUIRK_IGNORE_INTERFACE
199762306a36Sopenharmony_ci			},
199862306a36Sopenharmony_ci			{
199962306a36Sopenharmony_ci				.ifnum = 7,
200062306a36Sopenharmony_ci				.type = QUIRK_AUDIO_STANDARD_INTERFACE
200162306a36Sopenharmony_ci			},
200262306a36Sopenharmony_ci			{
200362306a36Sopenharmony_ci				.ifnum = 8,
200462306a36Sopenharmony_ci				.type = QUIRK_AUDIO_STANDARD_INTERFACE
200562306a36Sopenharmony_ci			},
200662306a36Sopenharmony_ci			{
200762306a36Sopenharmony_ci				.ifnum = 9,
200862306a36Sopenharmony_ci				.type = QUIRK_MIDI_MIDIMAN,
200962306a36Sopenharmony_ci				.data = & (const struct snd_usb_midi_endpoint_info) {
201062306a36Sopenharmony_ci					.out_cables = 0x0001,
201162306a36Sopenharmony_ci					.in_cables  = 0x0001
201262306a36Sopenharmony_ci				}
201362306a36Sopenharmony_ci			},
201462306a36Sopenharmony_ci			{
201562306a36Sopenharmony_ci				.ifnum = -1
201662306a36Sopenharmony_ci			}
201762306a36Sopenharmony_ci		}
201862306a36Sopenharmony_ci	}
201962306a36Sopenharmony_ci},
202062306a36Sopenharmony_ci{
202162306a36Sopenharmony_ci	USB_DEVICE(0x0763, 0x2019),
202262306a36Sopenharmony_ci	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
202362306a36Sopenharmony_ci		/* .vendor_name = "M-Audio", */
202462306a36Sopenharmony_ci		/* .product_name = "Ozone Academic", */
202562306a36Sopenharmony_ci		.ifnum = QUIRK_ANY_INTERFACE,
202662306a36Sopenharmony_ci		.type = QUIRK_COMPOSITE,
202762306a36Sopenharmony_ci		.data = & (const struct snd_usb_audio_quirk[]) {
202862306a36Sopenharmony_ci			{
202962306a36Sopenharmony_ci				.ifnum = 0,
203062306a36Sopenharmony_ci				.type = QUIRK_AUDIO_STANDARD_INTERFACE
203162306a36Sopenharmony_ci			},
203262306a36Sopenharmony_ci			{
203362306a36Sopenharmony_ci				.ifnum = 1,
203462306a36Sopenharmony_ci				.type = QUIRK_AUDIO_STANDARD_INTERFACE
203562306a36Sopenharmony_ci			},
203662306a36Sopenharmony_ci			{
203762306a36Sopenharmony_ci				.ifnum = 2,
203862306a36Sopenharmony_ci				.type = QUIRK_AUDIO_STANDARD_INTERFACE
203962306a36Sopenharmony_ci			},
204062306a36Sopenharmony_ci			{
204162306a36Sopenharmony_ci				.ifnum = 3,
204262306a36Sopenharmony_ci				.type = QUIRK_MIDI_MIDIMAN,
204362306a36Sopenharmony_ci				.data = & (const struct snd_usb_midi_endpoint_info) {
204462306a36Sopenharmony_ci					.out_cables = 0x0001,
204562306a36Sopenharmony_ci					.in_cables  = 0x0001
204662306a36Sopenharmony_ci				}
204762306a36Sopenharmony_ci			},
204862306a36Sopenharmony_ci			{
204962306a36Sopenharmony_ci				.ifnum = -1
205062306a36Sopenharmony_ci			}
205162306a36Sopenharmony_ci		}
205262306a36Sopenharmony_ci	}
205362306a36Sopenharmony_ci},
205462306a36Sopenharmony_ci{
205562306a36Sopenharmony_ci	/* M-Audio Micro */
205662306a36Sopenharmony_ci	USB_DEVICE_VENDOR_SPEC(0x0763, 0x201a),
205762306a36Sopenharmony_ci},
205862306a36Sopenharmony_ci{
205962306a36Sopenharmony_ci	USB_DEVICE_VENDOR_SPEC(0x0763, 0x2030),
206062306a36Sopenharmony_ci	.driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
206162306a36Sopenharmony_ci		/* .vendor_name = "M-Audio", */
206262306a36Sopenharmony_ci		/* .product_name = "Fast Track C400", */
206362306a36Sopenharmony_ci		.ifnum = QUIRK_ANY_INTERFACE,
206462306a36Sopenharmony_ci		.type = QUIRK_COMPOSITE,
206562306a36Sopenharmony_ci		.data = &(const struct snd_usb_audio_quirk[]) {
206662306a36Sopenharmony_ci			{
206762306a36Sopenharmony_ci				.ifnum = 1,
206862306a36Sopenharmony_ci				.type = QUIRK_AUDIO_STANDARD_MIXER,
206962306a36Sopenharmony_ci			},
207062306a36Sopenharmony_ci			/* Playback */
207162306a36Sopenharmony_ci			{
207262306a36Sopenharmony_ci				.ifnum = 2,
207362306a36Sopenharmony_ci				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
207462306a36Sopenharmony_ci				.data = &(const struct audioformat) {
207562306a36Sopenharmony_ci					.formats = SNDRV_PCM_FMTBIT_S24_3LE,
207662306a36Sopenharmony_ci					.channels = 6,
207762306a36Sopenharmony_ci					.iface = 2,
207862306a36Sopenharmony_ci					.altsetting = 1,
207962306a36Sopenharmony_ci					.altset_idx = 1,
208062306a36Sopenharmony_ci					.attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
208162306a36Sopenharmony_ci					.endpoint = 0x01,
208262306a36Sopenharmony_ci					.ep_attr = 0x09,
208362306a36Sopenharmony_ci					.rates = SNDRV_PCM_RATE_44100 |
208462306a36Sopenharmony_ci						 SNDRV_PCM_RATE_48000 |
208562306a36Sopenharmony_ci						 SNDRV_PCM_RATE_88200 |
208662306a36Sopenharmony_ci						 SNDRV_PCM_RATE_96000,
208762306a36Sopenharmony_ci					.rate_min = 44100,
208862306a36Sopenharmony_ci					.rate_max = 96000,
208962306a36Sopenharmony_ci					.nr_rates = 4,
209062306a36Sopenharmony_ci					.rate_table = (unsigned int[]) {
209162306a36Sopenharmony_ci							44100, 48000, 88200, 96000
209262306a36Sopenharmony_ci					},
209362306a36Sopenharmony_ci					.clock = 0x80,
209462306a36Sopenharmony_ci				}
209562306a36Sopenharmony_ci			},
209662306a36Sopenharmony_ci			/* Capture */
209762306a36Sopenharmony_ci			{
209862306a36Sopenharmony_ci				.ifnum = 3,
209962306a36Sopenharmony_ci				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
210062306a36Sopenharmony_ci				.data = &(const struct audioformat) {
210162306a36Sopenharmony_ci					.formats = SNDRV_PCM_FMTBIT_S24_3LE,
210262306a36Sopenharmony_ci					.channels = 4,
210362306a36Sopenharmony_ci					.iface = 3,
210462306a36Sopenharmony_ci					.altsetting = 1,
210562306a36Sopenharmony_ci					.altset_idx = 1,
210662306a36Sopenharmony_ci					.attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
210762306a36Sopenharmony_ci					.endpoint = 0x81,
210862306a36Sopenharmony_ci					.ep_attr = 0x05,
210962306a36Sopenharmony_ci					.rates = SNDRV_PCM_RATE_44100 |
211062306a36Sopenharmony_ci						 SNDRV_PCM_RATE_48000 |
211162306a36Sopenharmony_ci						 SNDRV_PCM_RATE_88200 |
211262306a36Sopenharmony_ci						 SNDRV_PCM_RATE_96000,
211362306a36Sopenharmony_ci					.rate_min = 44100,
211462306a36Sopenharmony_ci					.rate_max = 96000,
211562306a36Sopenharmony_ci					.nr_rates = 4,
211662306a36Sopenharmony_ci					.rate_table = (unsigned int[]) {
211762306a36Sopenharmony_ci						44100, 48000, 88200, 96000
211862306a36Sopenharmony_ci					},
211962306a36Sopenharmony_ci					.clock = 0x80,
212062306a36Sopenharmony_ci				}
212162306a36Sopenharmony_ci			},
212262306a36Sopenharmony_ci			/* MIDI */
212362306a36Sopenharmony_ci			{
212462306a36Sopenharmony_ci				.ifnum = -1 /* Interface = 4 */
212562306a36Sopenharmony_ci			}
212662306a36Sopenharmony_ci		}
212762306a36Sopenharmony_ci	}
212862306a36Sopenharmony_ci},
212962306a36Sopenharmony_ci{
213062306a36Sopenharmony_ci	USB_DEVICE_VENDOR_SPEC(0x0763, 0x2031),
213162306a36Sopenharmony_ci	.driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
213262306a36Sopenharmony_ci		/* .vendor_name = "M-Audio", */
213362306a36Sopenharmony_ci		/* .product_name = "Fast Track C600", */
213462306a36Sopenharmony_ci		.ifnum = QUIRK_ANY_INTERFACE,
213562306a36Sopenharmony_ci		.type = QUIRK_COMPOSITE,
213662306a36Sopenharmony_ci		.data = &(const struct snd_usb_audio_quirk[]) {
213762306a36Sopenharmony_ci			{
213862306a36Sopenharmony_ci				.ifnum = 1,
213962306a36Sopenharmony_ci				.type = QUIRK_AUDIO_STANDARD_MIXER,
214062306a36Sopenharmony_ci			},
214162306a36Sopenharmony_ci			/* Playback */
214262306a36Sopenharmony_ci			{
214362306a36Sopenharmony_ci				.ifnum = 2,
214462306a36Sopenharmony_ci				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
214562306a36Sopenharmony_ci				.data = &(const struct audioformat) {
214662306a36Sopenharmony_ci					.formats = SNDRV_PCM_FMTBIT_S24_3LE,
214762306a36Sopenharmony_ci					.channels = 8,
214862306a36Sopenharmony_ci					.iface = 2,
214962306a36Sopenharmony_ci					.altsetting = 1,
215062306a36Sopenharmony_ci					.altset_idx = 1,
215162306a36Sopenharmony_ci					.attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
215262306a36Sopenharmony_ci					.endpoint = 0x01,
215362306a36Sopenharmony_ci					.ep_attr = 0x09,
215462306a36Sopenharmony_ci					.rates = SNDRV_PCM_RATE_44100 |
215562306a36Sopenharmony_ci						 SNDRV_PCM_RATE_48000 |
215662306a36Sopenharmony_ci						 SNDRV_PCM_RATE_88200 |
215762306a36Sopenharmony_ci						 SNDRV_PCM_RATE_96000,
215862306a36Sopenharmony_ci					.rate_min = 44100,
215962306a36Sopenharmony_ci					.rate_max = 96000,
216062306a36Sopenharmony_ci					.nr_rates = 4,
216162306a36Sopenharmony_ci					.rate_table = (unsigned int[]) {
216262306a36Sopenharmony_ci							44100, 48000, 88200, 96000
216362306a36Sopenharmony_ci					},
216462306a36Sopenharmony_ci					.clock = 0x80,
216562306a36Sopenharmony_ci				}
216662306a36Sopenharmony_ci			},
216762306a36Sopenharmony_ci			/* Capture */
216862306a36Sopenharmony_ci			{
216962306a36Sopenharmony_ci				.ifnum = 3,
217062306a36Sopenharmony_ci				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
217162306a36Sopenharmony_ci				.data = &(const struct audioformat) {
217262306a36Sopenharmony_ci					.formats = SNDRV_PCM_FMTBIT_S24_3LE,
217362306a36Sopenharmony_ci					.channels = 6,
217462306a36Sopenharmony_ci					.iface = 3,
217562306a36Sopenharmony_ci					.altsetting = 1,
217662306a36Sopenharmony_ci					.altset_idx = 1,
217762306a36Sopenharmony_ci					.attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
217862306a36Sopenharmony_ci					.endpoint = 0x81,
217962306a36Sopenharmony_ci					.ep_attr = 0x05,
218062306a36Sopenharmony_ci					.rates = SNDRV_PCM_RATE_44100 |
218162306a36Sopenharmony_ci						 SNDRV_PCM_RATE_48000 |
218262306a36Sopenharmony_ci						 SNDRV_PCM_RATE_88200 |
218362306a36Sopenharmony_ci						 SNDRV_PCM_RATE_96000,
218462306a36Sopenharmony_ci					.rate_min = 44100,
218562306a36Sopenharmony_ci					.rate_max = 96000,
218662306a36Sopenharmony_ci					.nr_rates = 4,
218762306a36Sopenharmony_ci					.rate_table = (unsigned int[]) {
218862306a36Sopenharmony_ci						44100, 48000, 88200, 96000
218962306a36Sopenharmony_ci					},
219062306a36Sopenharmony_ci					.clock = 0x80,
219162306a36Sopenharmony_ci				}
219262306a36Sopenharmony_ci			},
219362306a36Sopenharmony_ci			/* MIDI */
219462306a36Sopenharmony_ci			{
219562306a36Sopenharmony_ci				.ifnum = -1 /* Interface = 4 */
219662306a36Sopenharmony_ci			}
219762306a36Sopenharmony_ci		}
219862306a36Sopenharmony_ci	}
219962306a36Sopenharmony_ci},
220062306a36Sopenharmony_ci{
220162306a36Sopenharmony_ci	USB_DEVICE_VENDOR_SPEC(0x0763, 0x2080),
220262306a36Sopenharmony_ci	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
220362306a36Sopenharmony_ci		/* .vendor_name = "M-Audio", */
220462306a36Sopenharmony_ci		/* .product_name = "Fast Track Ultra", */
220562306a36Sopenharmony_ci		.ifnum = QUIRK_ANY_INTERFACE,
220662306a36Sopenharmony_ci		.type = QUIRK_COMPOSITE,
220762306a36Sopenharmony_ci		.data = & (const struct snd_usb_audio_quirk[]) {
220862306a36Sopenharmony_ci			{
220962306a36Sopenharmony_ci				.ifnum = 0,
221062306a36Sopenharmony_ci				.type = QUIRK_AUDIO_STANDARD_MIXER,
221162306a36Sopenharmony_ci			},
221262306a36Sopenharmony_ci			{
221362306a36Sopenharmony_ci				.ifnum = 1,
221462306a36Sopenharmony_ci				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
221562306a36Sopenharmony_ci				.data = & (const struct audioformat) {
221662306a36Sopenharmony_ci					.formats = SNDRV_PCM_FMTBIT_S24_3LE,
221762306a36Sopenharmony_ci					.channels = 8,
221862306a36Sopenharmony_ci					.iface = 1,
221962306a36Sopenharmony_ci					.altsetting = 1,
222062306a36Sopenharmony_ci					.altset_idx = 1,
222162306a36Sopenharmony_ci					.attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
222262306a36Sopenharmony_ci					.endpoint = 0x01,
222362306a36Sopenharmony_ci					.ep_attr = 0x09,
222462306a36Sopenharmony_ci					.rates = SNDRV_PCM_RATE_44100 |
222562306a36Sopenharmony_ci						 SNDRV_PCM_RATE_48000 |
222662306a36Sopenharmony_ci						 SNDRV_PCM_RATE_88200 |
222762306a36Sopenharmony_ci						 SNDRV_PCM_RATE_96000,
222862306a36Sopenharmony_ci					.rate_min = 44100,
222962306a36Sopenharmony_ci					.rate_max = 96000,
223062306a36Sopenharmony_ci					.nr_rates = 4,
223162306a36Sopenharmony_ci					.rate_table = (unsigned int[]) {
223262306a36Sopenharmony_ci						44100, 48000, 88200, 96000
223362306a36Sopenharmony_ci					}
223462306a36Sopenharmony_ci				}
223562306a36Sopenharmony_ci			},
223662306a36Sopenharmony_ci			{
223762306a36Sopenharmony_ci				.ifnum = 2,
223862306a36Sopenharmony_ci				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
223962306a36Sopenharmony_ci				.data = & (const struct audioformat) {
224062306a36Sopenharmony_ci					.formats = SNDRV_PCM_FMTBIT_S24_3LE,
224162306a36Sopenharmony_ci					.channels = 8,
224262306a36Sopenharmony_ci					.iface = 2,
224362306a36Sopenharmony_ci					.altsetting = 1,
224462306a36Sopenharmony_ci					.altset_idx = 1,
224562306a36Sopenharmony_ci					.attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
224662306a36Sopenharmony_ci					.endpoint = 0x81,
224762306a36Sopenharmony_ci					.ep_attr = 0x05,
224862306a36Sopenharmony_ci					.rates = SNDRV_PCM_RATE_44100 |
224962306a36Sopenharmony_ci						 SNDRV_PCM_RATE_48000 |
225062306a36Sopenharmony_ci						 SNDRV_PCM_RATE_88200 |
225162306a36Sopenharmony_ci						 SNDRV_PCM_RATE_96000,
225262306a36Sopenharmony_ci					.rate_min = 44100,
225362306a36Sopenharmony_ci					.rate_max = 96000,
225462306a36Sopenharmony_ci					.nr_rates = 4,
225562306a36Sopenharmony_ci					.rate_table = (unsigned int[]) {
225662306a36Sopenharmony_ci						44100, 48000, 88200, 96000
225762306a36Sopenharmony_ci					}
225862306a36Sopenharmony_ci				}
225962306a36Sopenharmony_ci			},
226062306a36Sopenharmony_ci			/* interface 3 (MIDI) is standard compliant */
226162306a36Sopenharmony_ci			{
226262306a36Sopenharmony_ci				.ifnum = -1
226362306a36Sopenharmony_ci			}
226462306a36Sopenharmony_ci		}
226562306a36Sopenharmony_ci	}
226662306a36Sopenharmony_ci},
226762306a36Sopenharmony_ci{
226862306a36Sopenharmony_ci	USB_DEVICE_VENDOR_SPEC(0x0763, 0x2081),
226962306a36Sopenharmony_ci	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
227062306a36Sopenharmony_ci		/* .vendor_name = "M-Audio", */
227162306a36Sopenharmony_ci		/* .product_name = "Fast Track Ultra 8R", */
227262306a36Sopenharmony_ci		.ifnum = QUIRK_ANY_INTERFACE,
227362306a36Sopenharmony_ci		.type = QUIRK_COMPOSITE,
227462306a36Sopenharmony_ci		.data = & (const struct snd_usb_audio_quirk[]) {
227562306a36Sopenharmony_ci			{
227662306a36Sopenharmony_ci				.ifnum = 0,
227762306a36Sopenharmony_ci				.type = QUIRK_AUDIO_STANDARD_MIXER,
227862306a36Sopenharmony_ci			},
227962306a36Sopenharmony_ci			{
228062306a36Sopenharmony_ci				.ifnum = 1,
228162306a36Sopenharmony_ci				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
228262306a36Sopenharmony_ci				.data = & (const struct audioformat) {
228362306a36Sopenharmony_ci					.formats = SNDRV_PCM_FMTBIT_S24_3LE,
228462306a36Sopenharmony_ci					.channels = 8,
228562306a36Sopenharmony_ci					.iface = 1,
228662306a36Sopenharmony_ci					.altsetting = 1,
228762306a36Sopenharmony_ci					.altset_idx = 1,
228862306a36Sopenharmony_ci					.attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
228962306a36Sopenharmony_ci					.endpoint = 0x01,
229062306a36Sopenharmony_ci					.ep_attr = 0x09,
229162306a36Sopenharmony_ci					.rates = SNDRV_PCM_RATE_44100 |
229262306a36Sopenharmony_ci						 SNDRV_PCM_RATE_48000 |
229362306a36Sopenharmony_ci						 SNDRV_PCM_RATE_88200 |
229462306a36Sopenharmony_ci						 SNDRV_PCM_RATE_96000,
229562306a36Sopenharmony_ci					.rate_min = 44100,
229662306a36Sopenharmony_ci					.rate_max = 96000,
229762306a36Sopenharmony_ci					.nr_rates = 4,
229862306a36Sopenharmony_ci					.rate_table = (unsigned int[]) {
229962306a36Sopenharmony_ci							44100, 48000, 88200, 96000
230062306a36Sopenharmony_ci					}
230162306a36Sopenharmony_ci				}
230262306a36Sopenharmony_ci			},
230362306a36Sopenharmony_ci			{
230462306a36Sopenharmony_ci				.ifnum = 2,
230562306a36Sopenharmony_ci				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
230662306a36Sopenharmony_ci				.data = & (const struct audioformat) {
230762306a36Sopenharmony_ci					.formats = SNDRV_PCM_FMTBIT_S24_3LE,
230862306a36Sopenharmony_ci					.channels = 8,
230962306a36Sopenharmony_ci					.iface = 2,
231062306a36Sopenharmony_ci					.altsetting = 1,
231162306a36Sopenharmony_ci					.altset_idx = 1,
231262306a36Sopenharmony_ci					.attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
231362306a36Sopenharmony_ci					.endpoint = 0x81,
231462306a36Sopenharmony_ci					.ep_attr = 0x05,
231562306a36Sopenharmony_ci					.rates = SNDRV_PCM_RATE_44100 |
231662306a36Sopenharmony_ci						 SNDRV_PCM_RATE_48000 |
231762306a36Sopenharmony_ci						 SNDRV_PCM_RATE_88200 |
231862306a36Sopenharmony_ci						 SNDRV_PCM_RATE_96000,
231962306a36Sopenharmony_ci					.rate_min = 44100,
232062306a36Sopenharmony_ci					.rate_max = 96000,
232162306a36Sopenharmony_ci					.nr_rates = 4,
232262306a36Sopenharmony_ci					.rate_table = (unsigned int[]) {
232362306a36Sopenharmony_ci						44100, 48000, 88200, 96000
232462306a36Sopenharmony_ci					}
232562306a36Sopenharmony_ci				}
232662306a36Sopenharmony_ci			},
232762306a36Sopenharmony_ci			/* interface 3 (MIDI) is standard compliant */
232862306a36Sopenharmony_ci			{
232962306a36Sopenharmony_ci				.ifnum = -1
233062306a36Sopenharmony_ci			}
233162306a36Sopenharmony_ci		}
233262306a36Sopenharmony_ci	}
233362306a36Sopenharmony_ci},
233462306a36Sopenharmony_ci
233562306a36Sopenharmony_ci/* Casio devices */
233662306a36Sopenharmony_ci{
233762306a36Sopenharmony_ci	USB_DEVICE(0x07cf, 0x6801),
233862306a36Sopenharmony_ci	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
233962306a36Sopenharmony_ci		.vendor_name = "Casio",
234062306a36Sopenharmony_ci		.product_name = "PL-40R",
234162306a36Sopenharmony_ci		.ifnum = 0,
234262306a36Sopenharmony_ci		.type = QUIRK_MIDI_YAMAHA
234362306a36Sopenharmony_ci	}
234462306a36Sopenharmony_ci},
234562306a36Sopenharmony_ci{
234662306a36Sopenharmony_ci	/* this ID is used by several devices without a product ID */
234762306a36Sopenharmony_ci	USB_DEVICE(0x07cf, 0x6802),
234862306a36Sopenharmony_ci	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
234962306a36Sopenharmony_ci		.vendor_name = "Casio",
235062306a36Sopenharmony_ci		.product_name = "Keyboard",
235162306a36Sopenharmony_ci		.ifnum = 0,
235262306a36Sopenharmony_ci		.type = QUIRK_MIDI_YAMAHA
235362306a36Sopenharmony_ci	}
235462306a36Sopenharmony_ci},
235562306a36Sopenharmony_ci
235662306a36Sopenharmony_ci/* Mark of the Unicorn devices */
235762306a36Sopenharmony_ci{
235862306a36Sopenharmony_ci	/* thanks to Robert A. Lerche <ral 'at' msbit.com> */
235962306a36Sopenharmony_ci	.match_flags = USB_DEVICE_ID_MATCH_VENDOR |
236062306a36Sopenharmony_ci		       USB_DEVICE_ID_MATCH_PRODUCT |
236162306a36Sopenharmony_ci		       USB_DEVICE_ID_MATCH_DEV_SUBCLASS,
236262306a36Sopenharmony_ci	.idVendor = 0x07fd,
236362306a36Sopenharmony_ci	.idProduct = 0x0001,
236462306a36Sopenharmony_ci	.bDeviceSubClass = 2,
236562306a36Sopenharmony_ci	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
236662306a36Sopenharmony_ci		.vendor_name = "MOTU",
236762306a36Sopenharmony_ci		.product_name = "Fastlane",
236862306a36Sopenharmony_ci		.ifnum = QUIRK_ANY_INTERFACE,
236962306a36Sopenharmony_ci		.type = QUIRK_COMPOSITE,
237062306a36Sopenharmony_ci		.data = & (const struct snd_usb_audio_quirk[]) {
237162306a36Sopenharmony_ci			{
237262306a36Sopenharmony_ci				.ifnum = 0,
237362306a36Sopenharmony_ci				.type = QUIRK_MIDI_RAW_BYTES
237462306a36Sopenharmony_ci			},
237562306a36Sopenharmony_ci			{
237662306a36Sopenharmony_ci				.ifnum = 1,
237762306a36Sopenharmony_ci				.type = QUIRK_IGNORE_INTERFACE
237862306a36Sopenharmony_ci			},
237962306a36Sopenharmony_ci			{
238062306a36Sopenharmony_ci				.ifnum = -1
238162306a36Sopenharmony_ci			}
238262306a36Sopenharmony_ci		}
238362306a36Sopenharmony_ci	}
238462306a36Sopenharmony_ci},
238562306a36Sopenharmony_ci
238662306a36Sopenharmony_ci/* Emagic devices */
238762306a36Sopenharmony_ci{
238862306a36Sopenharmony_ci	USB_DEVICE(0x086a, 0x0001),
238962306a36Sopenharmony_ci	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
239062306a36Sopenharmony_ci		.vendor_name = "Emagic",
239162306a36Sopenharmony_ci		.product_name = "Unitor8",
239262306a36Sopenharmony_ci		.ifnum = 2,
239362306a36Sopenharmony_ci		.type = QUIRK_MIDI_EMAGIC,
239462306a36Sopenharmony_ci		.data = & (const struct snd_usb_midi_endpoint_info) {
239562306a36Sopenharmony_ci			.out_cables = 0x80ff,
239662306a36Sopenharmony_ci			.in_cables  = 0x80ff
239762306a36Sopenharmony_ci		}
239862306a36Sopenharmony_ci	}
239962306a36Sopenharmony_ci},
240062306a36Sopenharmony_ci{
240162306a36Sopenharmony_ci	USB_DEVICE(0x086a, 0x0002),
240262306a36Sopenharmony_ci	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
240362306a36Sopenharmony_ci		.vendor_name = "Emagic",
240462306a36Sopenharmony_ci		/* .product_name = "AMT8", */
240562306a36Sopenharmony_ci		.ifnum = 2,
240662306a36Sopenharmony_ci		.type = QUIRK_MIDI_EMAGIC,
240762306a36Sopenharmony_ci		.data = & (const struct snd_usb_midi_endpoint_info) {
240862306a36Sopenharmony_ci			.out_cables = 0x80ff,
240962306a36Sopenharmony_ci			.in_cables  = 0x80ff
241062306a36Sopenharmony_ci		}
241162306a36Sopenharmony_ci	}
241262306a36Sopenharmony_ci},
241362306a36Sopenharmony_ci{
241462306a36Sopenharmony_ci	USB_DEVICE(0x086a, 0x0003),
241562306a36Sopenharmony_ci	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
241662306a36Sopenharmony_ci		.vendor_name = "Emagic",
241762306a36Sopenharmony_ci		/* .product_name = "MT4", */
241862306a36Sopenharmony_ci		.ifnum = 2,
241962306a36Sopenharmony_ci		.type = QUIRK_MIDI_EMAGIC,
242062306a36Sopenharmony_ci		.data = & (const struct snd_usb_midi_endpoint_info) {
242162306a36Sopenharmony_ci			.out_cables = 0x800f,
242262306a36Sopenharmony_ci			.in_cables  = 0x8003
242362306a36Sopenharmony_ci		}
242462306a36Sopenharmony_ci	}
242562306a36Sopenharmony_ci},
242662306a36Sopenharmony_ci
242762306a36Sopenharmony_ci/* KORG devices */
242862306a36Sopenharmony_ci{
242962306a36Sopenharmony_ci	USB_DEVICE_VENDOR_SPEC(0x0944, 0x0200),
243062306a36Sopenharmony_ci	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
243162306a36Sopenharmony_ci		.vendor_name = "KORG, Inc.",
243262306a36Sopenharmony_ci		/* .product_name = "PANDORA PX5D", */
243362306a36Sopenharmony_ci		.ifnum = 3,
243462306a36Sopenharmony_ci		.type = QUIRK_MIDI_STANDARD_INTERFACE,
243562306a36Sopenharmony_ci	}
243662306a36Sopenharmony_ci},
243762306a36Sopenharmony_ci
243862306a36Sopenharmony_ci{
243962306a36Sopenharmony_ci	USB_DEVICE_VENDOR_SPEC(0x0944, 0x0201),
244062306a36Sopenharmony_ci	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
244162306a36Sopenharmony_ci		.vendor_name = "KORG, Inc.",
244262306a36Sopenharmony_ci		/* .product_name = "ToneLab ST", */
244362306a36Sopenharmony_ci		.ifnum = 3,
244462306a36Sopenharmony_ci		.type = QUIRK_MIDI_STANDARD_INTERFACE,
244562306a36Sopenharmony_ci	}
244662306a36Sopenharmony_ci},
244762306a36Sopenharmony_ci
244862306a36Sopenharmony_ci{
244962306a36Sopenharmony_ci	USB_DEVICE_VENDOR_SPEC(0x0944, 0x0204),
245062306a36Sopenharmony_ci	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
245162306a36Sopenharmony_ci		.vendor_name = "KORG, Inc.",
245262306a36Sopenharmony_ci		/* .product_name = "ToneLab EX", */
245362306a36Sopenharmony_ci		.ifnum = 3,
245462306a36Sopenharmony_ci		.type = QUIRK_MIDI_STANDARD_INTERFACE,
245562306a36Sopenharmony_ci	}
245662306a36Sopenharmony_ci},
245762306a36Sopenharmony_ci
245862306a36Sopenharmony_ci/* AKAI devices */
245962306a36Sopenharmony_ci{
246062306a36Sopenharmony_ci	USB_DEVICE(0x09e8, 0x0062),
246162306a36Sopenharmony_ci	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
246262306a36Sopenharmony_ci		.vendor_name = "AKAI",
246362306a36Sopenharmony_ci		.product_name = "MPD16",
246462306a36Sopenharmony_ci		.ifnum = 0,
246562306a36Sopenharmony_ci		.type = QUIRK_MIDI_AKAI,
246662306a36Sopenharmony_ci	}
246762306a36Sopenharmony_ci},
246862306a36Sopenharmony_ci
246962306a36Sopenharmony_ci{
247062306a36Sopenharmony_ci	/* Akai MPC Element */
247162306a36Sopenharmony_ci	USB_DEVICE(0x09e8, 0x0021),
247262306a36Sopenharmony_ci	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
247362306a36Sopenharmony_ci		.ifnum = QUIRK_ANY_INTERFACE,
247462306a36Sopenharmony_ci		.type = QUIRK_COMPOSITE,
247562306a36Sopenharmony_ci		.data = & (const struct snd_usb_audio_quirk[]) {
247662306a36Sopenharmony_ci			{
247762306a36Sopenharmony_ci				.ifnum = 0,
247862306a36Sopenharmony_ci				.type = QUIRK_IGNORE_INTERFACE
247962306a36Sopenharmony_ci			},
248062306a36Sopenharmony_ci			{
248162306a36Sopenharmony_ci				.ifnum = 1,
248262306a36Sopenharmony_ci				.type = QUIRK_MIDI_STANDARD_INTERFACE
248362306a36Sopenharmony_ci			},
248462306a36Sopenharmony_ci			{
248562306a36Sopenharmony_ci				.ifnum = -1
248662306a36Sopenharmony_ci			}
248762306a36Sopenharmony_ci		}
248862306a36Sopenharmony_ci	}
248962306a36Sopenharmony_ci},
249062306a36Sopenharmony_ci
249162306a36Sopenharmony_ci/* Steinberg devices */
249262306a36Sopenharmony_ci{
249362306a36Sopenharmony_ci	/* Steinberg MI2 */
249462306a36Sopenharmony_ci	USB_DEVICE_VENDOR_SPEC(0x0a4e, 0x2040),
249562306a36Sopenharmony_ci	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
249662306a36Sopenharmony_ci		.ifnum = QUIRK_ANY_INTERFACE,
249762306a36Sopenharmony_ci		.type = QUIRK_COMPOSITE,
249862306a36Sopenharmony_ci		.data = & (const struct snd_usb_audio_quirk[]) {
249962306a36Sopenharmony_ci			{
250062306a36Sopenharmony_ci				.ifnum = 0,
250162306a36Sopenharmony_ci				.type = QUIRK_AUDIO_STANDARD_INTERFACE
250262306a36Sopenharmony_ci			},
250362306a36Sopenharmony_ci			{
250462306a36Sopenharmony_ci				.ifnum = 1,
250562306a36Sopenharmony_ci				.type = QUIRK_AUDIO_STANDARD_INTERFACE
250662306a36Sopenharmony_ci			},
250762306a36Sopenharmony_ci			{
250862306a36Sopenharmony_ci				.ifnum = 2,
250962306a36Sopenharmony_ci				.type = QUIRK_AUDIO_STANDARD_INTERFACE
251062306a36Sopenharmony_ci			},
251162306a36Sopenharmony_ci			{
251262306a36Sopenharmony_ci				.ifnum = 3,
251362306a36Sopenharmony_ci				.type = QUIRK_MIDI_FIXED_ENDPOINT,
251462306a36Sopenharmony_ci				.data = &(const struct snd_usb_midi_endpoint_info) {
251562306a36Sopenharmony_ci					.out_cables = 0x0001,
251662306a36Sopenharmony_ci					.in_cables  = 0x0001
251762306a36Sopenharmony_ci				}
251862306a36Sopenharmony_ci			},
251962306a36Sopenharmony_ci			{
252062306a36Sopenharmony_ci				.ifnum = -1
252162306a36Sopenharmony_ci			}
252262306a36Sopenharmony_ci		}
252362306a36Sopenharmony_ci	}
252462306a36Sopenharmony_ci},
252562306a36Sopenharmony_ci{
252662306a36Sopenharmony_ci	/* Steinberg MI4 */
252762306a36Sopenharmony_ci	USB_DEVICE_VENDOR_SPEC(0x0a4e, 0x4040),
252862306a36Sopenharmony_ci	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
252962306a36Sopenharmony_ci		.ifnum = QUIRK_ANY_INTERFACE,
253062306a36Sopenharmony_ci		.type = QUIRK_COMPOSITE,
253162306a36Sopenharmony_ci		.data = & (const struct snd_usb_audio_quirk[]) {
253262306a36Sopenharmony_ci			{
253362306a36Sopenharmony_ci				.ifnum = 0,
253462306a36Sopenharmony_ci				.type = QUIRK_AUDIO_STANDARD_INTERFACE
253562306a36Sopenharmony_ci			},
253662306a36Sopenharmony_ci			{
253762306a36Sopenharmony_ci				.ifnum = 1,
253862306a36Sopenharmony_ci				.type = QUIRK_AUDIO_STANDARD_INTERFACE
253962306a36Sopenharmony_ci			},
254062306a36Sopenharmony_ci			{
254162306a36Sopenharmony_ci				.ifnum = 2,
254262306a36Sopenharmony_ci				.type = QUIRK_AUDIO_STANDARD_INTERFACE
254362306a36Sopenharmony_ci			},
254462306a36Sopenharmony_ci			{
254562306a36Sopenharmony_ci				.ifnum = 3,
254662306a36Sopenharmony_ci				.type = QUIRK_MIDI_FIXED_ENDPOINT,
254762306a36Sopenharmony_ci				.data = &(const struct snd_usb_midi_endpoint_info) {
254862306a36Sopenharmony_ci					.out_cables = 0x0001,
254962306a36Sopenharmony_ci					.in_cables  = 0x0001
255062306a36Sopenharmony_ci				}
255162306a36Sopenharmony_ci			},
255262306a36Sopenharmony_ci			{
255362306a36Sopenharmony_ci				.ifnum = -1
255462306a36Sopenharmony_ci			}
255562306a36Sopenharmony_ci		}
255662306a36Sopenharmony_ci	}
255762306a36Sopenharmony_ci},
255862306a36Sopenharmony_ci
255962306a36Sopenharmony_ci/* TerraTec devices */
256062306a36Sopenharmony_ci{
256162306a36Sopenharmony_ci	USB_DEVICE_VENDOR_SPEC(0x0ccd, 0x0012),
256262306a36Sopenharmony_ci	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
256362306a36Sopenharmony_ci		.vendor_name = "TerraTec",
256462306a36Sopenharmony_ci		.product_name = "PHASE 26",
256562306a36Sopenharmony_ci		.ifnum = 3,
256662306a36Sopenharmony_ci		.type = QUIRK_MIDI_STANDARD_INTERFACE
256762306a36Sopenharmony_ci	}
256862306a36Sopenharmony_ci},
256962306a36Sopenharmony_ci{
257062306a36Sopenharmony_ci	USB_DEVICE_VENDOR_SPEC(0x0ccd, 0x0013),
257162306a36Sopenharmony_ci	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
257262306a36Sopenharmony_ci		.vendor_name = "TerraTec",
257362306a36Sopenharmony_ci		.product_name = "PHASE 26",
257462306a36Sopenharmony_ci		.ifnum = 3,
257562306a36Sopenharmony_ci		.type = QUIRK_MIDI_STANDARD_INTERFACE
257662306a36Sopenharmony_ci	}
257762306a36Sopenharmony_ci},
257862306a36Sopenharmony_ci{
257962306a36Sopenharmony_ci	USB_DEVICE_VENDOR_SPEC(0x0ccd, 0x0014),
258062306a36Sopenharmony_ci	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
258162306a36Sopenharmony_ci		.vendor_name = "TerraTec",
258262306a36Sopenharmony_ci		.product_name = "PHASE 26",
258362306a36Sopenharmony_ci		.ifnum = 3,
258462306a36Sopenharmony_ci		.type = QUIRK_MIDI_STANDARD_INTERFACE
258562306a36Sopenharmony_ci	}
258662306a36Sopenharmony_ci},
258762306a36Sopenharmony_ci{
258862306a36Sopenharmony_ci	USB_DEVICE(0x0ccd, 0x0035),
258962306a36Sopenharmony_ci	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
259062306a36Sopenharmony_ci		.vendor_name = "Miditech",
259162306a36Sopenharmony_ci		.product_name = "Play'n Roll",
259262306a36Sopenharmony_ci		.ifnum = 0,
259362306a36Sopenharmony_ci		.type = QUIRK_MIDI_CME
259462306a36Sopenharmony_ci	}
259562306a36Sopenharmony_ci},
259662306a36Sopenharmony_ci
259762306a36Sopenharmony_ci/* Novation EMS devices */
259862306a36Sopenharmony_ci{
259962306a36Sopenharmony_ci	USB_DEVICE_VENDOR_SPEC(0x1235, 0x0001),
260062306a36Sopenharmony_ci	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
260162306a36Sopenharmony_ci		.vendor_name = "Novation",
260262306a36Sopenharmony_ci		.product_name = "ReMOTE Audio/XStation",
260362306a36Sopenharmony_ci		.ifnum = 4,
260462306a36Sopenharmony_ci		.type = QUIRK_MIDI_NOVATION
260562306a36Sopenharmony_ci	}
260662306a36Sopenharmony_ci},
260762306a36Sopenharmony_ci{
260862306a36Sopenharmony_ci	USB_DEVICE_VENDOR_SPEC(0x1235, 0x0002),
260962306a36Sopenharmony_ci	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
261062306a36Sopenharmony_ci		.vendor_name = "Novation",
261162306a36Sopenharmony_ci		.product_name = "Speedio",
261262306a36Sopenharmony_ci		.ifnum = 3,
261362306a36Sopenharmony_ci		.type = QUIRK_MIDI_NOVATION
261462306a36Sopenharmony_ci	}
261562306a36Sopenharmony_ci},
261662306a36Sopenharmony_ci{
261762306a36Sopenharmony_ci	USB_DEVICE(0x1235, 0x000a),
261862306a36Sopenharmony_ci	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
261962306a36Sopenharmony_ci		/* .vendor_name = "Novation", */
262062306a36Sopenharmony_ci		/* .product_name = "Nocturn", */
262162306a36Sopenharmony_ci		.ifnum = 0,
262262306a36Sopenharmony_ci		.type = QUIRK_MIDI_RAW_BYTES
262362306a36Sopenharmony_ci	}
262462306a36Sopenharmony_ci},
262562306a36Sopenharmony_ci{
262662306a36Sopenharmony_ci	USB_DEVICE(0x1235, 0x000e),
262762306a36Sopenharmony_ci	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
262862306a36Sopenharmony_ci		/* .vendor_name = "Novation", */
262962306a36Sopenharmony_ci		/* .product_name = "Launchpad", */
263062306a36Sopenharmony_ci		.ifnum = 0,
263162306a36Sopenharmony_ci		.type = QUIRK_MIDI_RAW_BYTES
263262306a36Sopenharmony_ci	}
263362306a36Sopenharmony_ci},
263462306a36Sopenharmony_ci{
263562306a36Sopenharmony_ci	USB_DEVICE(0x1235, 0x0010),
263662306a36Sopenharmony_ci	.driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
263762306a36Sopenharmony_ci		.vendor_name = "Focusrite",
263862306a36Sopenharmony_ci		.product_name = "Saffire 6 USB",
263962306a36Sopenharmony_ci		.ifnum = QUIRK_ANY_INTERFACE,
264062306a36Sopenharmony_ci		.type = QUIRK_COMPOSITE,
264162306a36Sopenharmony_ci		.data = (const struct snd_usb_audio_quirk[]) {
264262306a36Sopenharmony_ci			{
264362306a36Sopenharmony_ci				.ifnum = 0,
264462306a36Sopenharmony_ci				.type = QUIRK_AUDIO_STANDARD_MIXER,
264562306a36Sopenharmony_ci			},
264662306a36Sopenharmony_ci			{
264762306a36Sopenharmony_ci				.ifnum = 0,
264862306a36Sopenharmony_ci				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
264962306a36Sopenharmony_ci				.data = &(const struct audioformat) {
265062306a36Sopenharmony_ci					.formats = SNDRV_PCM_FMTBIT_S24_3LE,
265162306a36Sopenharmony_ci					.channels = 4,
265262306a36Sopenharmony_ci					.iface = 0,
265362306a36Sopenharmony_ci					.altsetting = 1,
265462306a36Sopenharmony_ci					.altset_idx = 1,
265562306a36Sopenharmony_ci					.attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
265662306a36Sopenharmony_ci					.endpoint = 0x01,
265762306a36Sopenharmony_ci					.ep_attr = USB_ENDPOINT_XFER_ISOC,
265862306a36Sopenharmony_ci					.datainterval = 1,
265962306a36Sopenharmony_ci					.maxpacksize = 0x024c,
266062306a36Sopenharmony_ci					.rates = SNDRV_PCM_RATE_44100 |
266162306a36Sopenharmony_ci						 SNDRV_PCM_RATE_48000,
266262306a36Sopenharmony_ci					.rate_min = 44100,
266362306a36Sopenharmony_ci					.rate_max = 48000,
266462306a36Sopenharmony_ci					.nr_rates = 2,
266562306a36Sopenharmony_ci					.rate_table = (unsigned int[]) {
266662306a36Sopenharmony_ci						44100, 48000
266762306a36Sopenharmony_ci					},
266862306a36Sopenharmony_ci					.sync_ep = 0x82,
266962306a36Sopenharmony_ci					.sync_iface = 0,
267062306a36Sopenharmony_ci					.sync_altsetting = 1,
267162306a36Sopenharmony_ci					.sync_ep_idx = 1,
267262306a36Sopenharmony_ci					.implicit_fb = 1,
267362306a36Sopenharmony_ci				}
267462306a36Sopenharmony_ci			},
267562306a36Sopenharmony_ci			{
267662306a36Sopenharmony_ci				.ifnum = 0,
267762306a36Sopenharmony_ci				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
267862306a36Sopenharmony_ci				.data = &(const struct audioformat) {
267962306a36Sopenharmony_ci					.formats = SNDRV_PCM_FMTBIT_S24_3LE,
268062306a36Sopenharmony_ci					.channels = 2,
268162306a36Sopenharmony_ci					.iface = 0,
268262306a36Sopenharmony_ci					.altsetting = 1,
268362306a36Sopenharmony_ci					.altset_idx = 1,
268462306a36Sopenharmony_ci					.attributes = 0,
268562306a36Sopenharmony_ci					.endpoint = 0x82,
268662306a36Sopenharmony_ci					.ep_idx = 1,
268762306a36Sopenharmony_ci					.ep_attr = USB_ENDPOINT_XFER_ISOC,
268862306a36Sopenharmony_ci					.datainterval = 1,
268962306a36Sopenharmony_ci					.maxpacksize = 0x0126,
269062306a36Sopenharmony_ci					.rates = SNDRV_PCM_RATE_44100 |
269162306a36Sopenharmony_ci						 SNDRV_PCM_RATE_48000,
269262306a36Sopenharmony_ci					.rate_min = 44100,
269362306a36Sopenharmony_ci					.rate_max = 48000,
269462306a36Sopenharmony_ci					.nr_rates = 2,
269562306a36Sopenharmony_ci					.rate_table = (unsigned int[]) {
269662306a36Sopenharmony_ci						44100, 48000
269762306a36Sopenharmony_ci					}
269862306a36Sopenharmony_ci				}
269962306a36Sopenharmony_ci			},
270062306a36Sopenharmony_ci			{
270162306a36Sopenharmony_ci				.ifnum = 1,
270262306a36Sopenharmony_ci				.type = QUIRK_MIDI_RAW_BYTES
270362306a36Sopenharmony_ci			},
270462306a36Sopenharmony_ci			{
270562306a36Sopenharmony_ci				.ifnum = -1
270662306a36Sopenharmony_ci			}
270762306a36Sopenharmony_ci		}
270862306a36Sopenharmony_ci	}
270962306a36Sopenharmony_ci},
271062306a36Sopenharmony_ci{
271162306a36Sopenharmony_ci	USB_DEVICE(0x1235, 0x0018),
271262306a36Sopenharmony_ci	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
271362306a36Sopenharmony_ci		.vendor_name = "Novation",
271462306a36Sopenharmony_ci		.product_name = "Twitch",
271562306a36Sopenharmony_ci		.ifnum = QUIRK_ANY_INTERFACE,
271662306a36Sopenharmony_ci		.type = QUIRK_COMPOSITE,
271762306a36Sopenharmony_ci		.data = (const struct snd_usb_audio_quirk[]) {
271862306a36Sopenharmony_ci			{
271962306a36Sopenharmony_ci				.ifnum = 0,
272062306a36Sopenharmony_ci				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
272162306a36Sopenharmony_ci				.data = & (const struct audioformat) {
272262306a36Sopenharmony_ci					.formats = SNDRV_PCM_FMTBIT_S24_3LE,
272362306a36Sopenharmony_ci					.channels = 4,
272462306a36Sopenharmony_ci					.iface = 0,
272562306a36Sopenharmony_ci					.altsetting = 1,
272662306a36Sopenharmony_ci					.altset_idx = 1,
272762306a36Sopenharmony_ci					.attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
272862306a36Sopenharmony_ci					.endpoint = 0x01,
272962306a36Sopenharmony_ci					.ep_attr = USB_ENDPOINT_XFER_ISOC,
273062306a36Sopenharmony_ci					.rates = SNDRV_PCM_RATE_44100 |
273162306a36Sopenharmony_ci						 SNDRV_PCM_RATE_48000,
273262306a36Sopenharmony_ci					.rate_min = 44100,
273362306a36Sopenharmony_ci					.rate_max = 48000,
273462306a36Sopenharmony_ci					.nr_rates = 2,
273562306a36Sopenharmony_ci					.rate_table = (unsigned int[]) {
273662306a36Sopenharmony_ci						44100, 48000
273762306a36Sopenharmony_ci					}
273862306a36Sopenharmony_ci				}
273962306a36Sopenharmony_ci			},
274062306a36Sopenharmony_ci			{
274162306a36Sopenharmony_ci				.ifnum = 1,
274262306a36Sopenharmony_ci				.type = QUIRK_MIDI_RAW_BYTES
274362306a36Sopenharmony_ci			},
274462306a36Sopenharmony_ci			{
274562306a36Sopenharmony_ci				.ifnum = -1
274662306a36Sopenharmony_ci			}
274762306a36Sopenharmony_ci		}
274862306a36Sopenharmony_ci	}
274962306a36Sopenharmony_ci},
275062306a36Sopenharmony_ci{
275162306a36Sopenharmony_ci	USB_DEVICE_VENDOR_SPEC(0x1235, 0x4661),
275262306a36Sopenharmony_ci	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
275362306a36Sopenharmony_ci		.vendor_name = "Novation",
275462306a36Sopenharmony_ci		.product_name = "ReMOTE25",
275562306a36Sopenharmony_ci		.ifnum = 0,
275662306a36Sopenharmony_ci		.type = QUIRK_MIDI_NOVATION
275762306a36Sopenharmony_ci	}
275862306a36Sopenharmony_ci},
275962306a36Sopenharmony_ci
276062306a36Sopenharmony_ci/* Access Music devices */
276162306a36Sopenharmony_ci{
276262306a36Sopenharmony_ci	/* VirusTI Desktop */
276362306a36Sopenharmony_ci	USB_DEVICE_VENDOR_SPEC(0x133e, 0x0815),
276462306a36Sopenharmony_ci	.driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
276562306a36Sopenharmony_ci		.ifnum = QUIRK_ANY_INTERFACE,
276662306a36Sopenharmony_ci		.type = QUIRK_COMPOSITE,
276762306a36Sopenharmony_ci		.data = &(const struct snd_usb_audio_quirk[]) {
276862306a36Sopenharmony_ci			{
276962306a36Sopenharmony_ci				.ifnum = 3,
277062306a36Sopenharmony_ci				.type = QUIRK_MIDI_FIXED_ENDPOINT,
277162306a36Sopenharmony_ci				.data = &(const struct snd_usb_midi_endpoint_info) {
277262306a36Sopenharmony_ci					.out_cables = 0x0003,
277362306a36Sopenharmony_ci					.in_cables  = 0x0003
277462306a36Sopenharmony_ci				}
277562306a36Sopenharmony_ci			},
277662306a36Sopenharmony_ci			{
277762306a36Sopenharmony_ci				.ifnum = 4,
277862306a36Sopenharmony_ci				.type = QUIRK_IGNORE_INTERFACE
277962306a36Sopenharmony_ci			},
278062306a36Sopenharmony_ci			{
278162306a36Sopenharmony_ci				.ifnum = -1
278262306a36Sopenharmony_ci			}
278362306a36Sopenharmony_ci		}
278462306a36Sopenharmony_ci	}
278562306a36Sopenharmony_ci},
278662306a36Sopenharmony_ci
278762306a36Sopenharmony_ci/* Native Instruments MK2 series */
278862306a36Sopenharmony_ci{
278962306a36Sopenharmony_ci	/* Komplete Audio 6 */
279062306a36Sopenharmony_ci	.match_flags = USB_DEVICE_ID_MATCH_DEVICE,
279162306a36Sopenharmony_ci	.idVendor = 0x17cc,
279262306a36Sopenharmony_ci	.idProduct = 0x1000,
279362306a36Sopenharmony_ci},
279462306a36Sopenharmony_ci{
279562306a36Sopenharmony_ci	/* Traktor Audio 6 */
279662306a36Sopenharmony_ci	.match_flags = USB_DEVICE_ID_MATCH_DEVICE,
279762306a36Sopenharmony_ci	.idVendor = 0x17cc,
279862306a36Sopenharmony_ci	.idProduct = 0x1010,
279962306a36Sopenharmony_ci},
280062306a36Sopenharmony_ci{
280162306a36Sopenharmony_ci	/* Traktor Audio 10 */
280262306a36Sopenharmony_ci	.match_flags = USB_DEVICE_ID_MATCH_DEVICE,
280362306a36Sopenharmony_ci	.idVendor = 0x17cc,
280462306a36Sopenharmony_ci	.idProduct = 0x1020,
280562306a36Sopenharmony_ci},
280662306a36Sopenharmony_ci
280762306a36Sopenharmony_ci/* QinHeng devices */
280862306a36Sopenharmony_ci{
280962306a36Sopenharmony_ci	USB_DEVICE(0x1a86, 0x752d),
281062306a36Sopenharmony_ci	.driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
281162306a36Sopenharmony_ci		.vendor_name = "QinHeng",
281262306a36Sopenharmony_ci		.product_name = "CH345",
281362306a36Sopenharmony_ci		.ifnum = 1,
281462306a36Sopenharmony_ci		.type = QUIRK_MIDI_CH345
281562306a36Sopenharmony_ci	}
281662306a36Sopenharmony_ci},
281762306a36Sopenharmony_ci
281862306a36Sopenharmony_ci/* KeithMcMillen Stringport */
281962306a36Sopenharmony_ci{ USB_DEVICE(0x1f38, 0x0001) }, /* FIXME: should be more restrictive matching */
282062306a36Sopenharmony_ci
282162306a36Sopenharmony_ci/* Miditech devices */
282262306a36Sopenharmony_ci{
282362306a36Sopenharmony_ci	USB_DEVICE(0x4752, 0x0011),
282462306a36Sopenharmony_ci	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
282562306a36Sopenharmony_ci		.vendor_name = "Miditech",
282662306a36Sopenharmony_ci		.product_name = "Midistart-2",
282762306a36Sopenharmony_ci		.ifnum = 0,
282862306a36Sopenharmony_ci		.type = QUIRK_MIDI_CME
282962306a36Sopenharmony_ci	}
283062306a36Sopenharmony_ci},
283162306a36Sopenharmony_ci
283262306a36Sopenharmony_ci/* Central Music devices */
283362306a36Sopenharmony_ci{
283462306a36Sopenharmony_ci	/* this ID used by both Miditech MidiStudio-2 and CME UF-x */
283562306a36Sopenharmony_ci	USB_DEVICE(0x7104, 0x2202),
283662306a36Sopenharmony_ci	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
283762306a36Sopenharmony_ci		.ifnum = 0,
283862306a36Sopenharmony_ci		.type = QUIRK_MIDI_CME
283962306a36Sopenharmony_ci	}
284062306a36Sopenharmony_ci},
284162306a36Sopenharmony_ci
284262306a36Sopenharmony_ci/* Digidesign Mbox */
284362306a36Sopenharmony_ci{
284462306a36Sopenharmony_ci	/* Thanks to Clemens Ladisch <clemens@ladisch.de> */
284562306a36Sopenharmony_ci	USB_DEVICE(0x0dba, 0x1000),
284662306a36Sopenharmony_ci	.driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
284762306a36Sopenharmony_ci		.vendor_name = "Digidesign",
284862306a36Sopenharmony_ci		.product_name = "MBox",
284962306a36Sopenharmony_ci		.ifnum = QUIRK_ANY_INTERFACE,
285062306a36Sopenharmony_ci		.type = QUIRK_COMPOSITE,
285162306a36Sopenharmony_ci		.data = (const struct snd_usb_audio_quirk[]){
285262306a36Sopenharmony_ci			{
285362306a36Sopenharmony_ci				.ifnum = 0,
285462306a36Sopenharmony_ci				.type = QUIRK_AUDIO_STANDARD_MIXER,
285562306a36Sopenharmony_ci			},
285662306a36Sopenharmony_ci			{
285762306a36Sopenharmony_ci				.ifnum = 1,
285862306a36Sopenharmony_ci				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
285962306a36Sopenharmony_ci				.data = &(const struct audioformat) {
286062306a36Sopenharmony_ci					.formats = SNDRV_PCM_FMTBIT_S24_3BE,
286162306a36Sopenharmony_ci					.channels = 2,
286262306a36Sopenharmony_ci					.iface = 1,
286362306a36Sopenharmony_ci					.altsetting = 1,
286462306a36Sopenharmony_ci					.altset_idx = 1,
286562306a36Sopenharmony_ci					.attributes = 0x4,
286662306a36Sopenharmony_ci					.endpoint = 0x02,
286762306a36Sopenharmony_ci					.ep_attr = USB_ENDPOINT_XFER_ISOC |
286862306a36Sopenharmony_ci						USB_ENDPOINT_SYNC_SYNC,
286962306a36Sopenharmony_ci					.maxpacksize = 0x130,
287062306a36Sopenharmony_ci					.rates = SNDRV_PCM_RATE_48000,
287162306a36Sopenharmony_ci					.rate_min = 48000,
287262306a36Sopenharmony_ci					.rate_max = 48000,
287362306a36Sopenharmony_ci					.nr_rates = 1,
287462306a36Sopenharmony_ci					.rate_table = (unsigned int[]) {
287562306a36Sopenharmony_ci						48000
287662306a36Sopenharmony_ci					}
287762306a36Sopenharmony_ci				}
287862306a36Sopenharmony_ci			},
287962306a36Sopenharmony_ci			{
288062306a36Sopenharmony_ci				.ifnum = 1,
288162306a36Sopenharmony_ci				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
288262306a36Sopenharmony_ci				.data = &(const struct audioformat) {
288362306a36Sopenharmony_ci					.formats = SNDRV_PCM_FMTBIT_S24_3BE,
288462306a36Sopenharmony_ci					.channels = 2,
288562306a36Sopenharmony_ci					.iface = 1,
288662306a36Sopenharmony_ci					.altsetting = 1,
288762306a36Sopenharmony_ci					.altset_idx = 1,
288862306a36Sopenharmony_ci					.attributes = 0x4,
288962306a36Sopenharmony_ci					.endpoint = 0x81,
289062306a36Sopenharmony_ci					.ep_idx = 1,
289162306a36Sopenharmony_ci					.ep_attr = USB_ENDPOINT_XFER_ISOC |
289262306a36Sopenharmony_ci						USB_ENDPOINT_SYNC_ASYNC,
289362306a36Sopenharmony_ci					.maxpacksize = 0x130,
289462306a36Sopenharmony_ci					.rates = SNDRV_PCM_RATE_48000,
289562306a36Sopenharmony_ci					.rate_min = 48000,
289662306a36Sopenharmony_ci					.rate_max = 48000,
289762306a36Sopenharmony_ci					.nr_rates = 1,
289862306a36Sopenharmony_ci					.rate_table = (unsigned int[]) {
289962306a36Sopenharmony_ci						48000
290062306a36Sopenharmony_ci					}
290162306a36Sopenharmony_ci				}
290262306a36Sopenharmony_ci			},
290362306a36Sopenharmony_ci			{
290462306a36Sopenharmony_ci				.ifnum = -1
290562306a36Sopenharmony_ci			}
290662306a36Sopenharmony_ci		}
290762306a36Sopenharmony_ci	}
290862306a36Sopenharmony_ci},
290962306a36Sopenharmony_ci
291062306a36Sopenharmony_ci/* DIGIDESIGN MBOX 2 */
291162306a36Sopenharmony_ci{
291262306a36Sopenharmony_ci	USB_DEVICE(0x0dba, 0x3000),
291362306a36Sopenharmony_ci	.driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
291462306a36Sopenharmony_ci		.vendor_name = "Digidesign",
291562306a36Sopenharmony_ci		.product_name = "Mbox 2",
291662306a36Sopenharmony_ci		.ifnum = QUIRK_ANY_INTERFACE,
291762306a36Sopenharmony_ci		.type = QUIRK_COMPOSITE,
291862306a36Sopenharmony_ci		.data = (const struct snd_usb_audio_quirk[]) {
291962306a36Sopenharmony_ci			{
292062306a36Sopenharmony_ci				.ifnum = 0,
292162306a36Sopenharmony_ci				.type = QUIRK_IGNORE_INTERFACE
292262306a36Sopenharmony_ci			},
292362306a36Sopenharmony_ci			{
292462306a36Sopenharmony_ci				.ifnum = 1,
292562306a36Sopenharmony_ci				.type = QUIRK_IGNORE_INTERFACE
292662306a36Sopenharmony_ci			},
292762306a36Sopenharmony_ci			{
292862306a36Sopenharmony_ci				.ifnum = 2,
292962306a36Sopenharmony_ci				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
293062306a36Sopenharmony_ci				.data = &(const struct audioformat) {
293162306a36Sopenharmony_ci					.formats = SNDRV_PCM_FMTBIT_S24_3BE,
293262306a36Sopenharmony_ci					.channels = 2,
293362306a36Sopenharmony_ci					.iface = 2,
293462306a36Sopenharmony_ci					.altsetting = 2,
293562306a36Sopenharmony_ci					.altset_idx = 1,
293662306a36Sopenharmony_ci					.attributes = 0x00,
293762306a36Sopenharmony_ci					.endpoint = 0x03,
293862306a36Sopenharmony_ci					.ep_attr = USB_ENDPOINT_SYNC_ASYNC,
293962306a36Sopenharmony_ci					.rates = SNDRV_PCM_RATE_48000,
294062306a36Sopenharmony_ci					.rate_min = 48000,
294162306a36Sopenharmony_ci					.rate_max = 48000,
294262306a36Sopenharmony_ci					.nr_rates = 1,
294362306a36Sopenharmony_ci					.rate_table = (unsigned int[]) {
294462306a36Sopenharmony_ci						48000
294562306a36Sopenharmony_ci					}
294662306a36Sopenharmony_ci				}
294762306a36Sopenharmony_ci			},
294862306a36Sopenharmony_ci			{
294962306a36Sopenharmony_ci				.ifnum = 3,
295062306a36Sopenharmony_ci				.type = QUIRK_IGNORE_INTERFACE
295162306a36Sopenharmony_ci			},
295262306a36Sopenharmony_ci			{
295362306a36Sopenharmony_ci				.ifnum = 4,
295462306a36Sopenharmony_ci				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
295562306a36Sopenharmony_ci				.data = &(const struct audioformat) {
295662306a36Sopenharmony_ci				.formats = SNDRV_PCM_FMTBIT_S24_3BE,
295762306a36Sopenharmony_ci					.channels = 2,
295862306a36Sopenharmony_ci					.iface = 4,
295962306a36Sopenharmony_ci					.altsetting = 2,
296062306a36Sopenharmony_ci					.altset_idx = 1,
296162306a36Sopenharmony_ci					.attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
296262306a36Sopenharmony_ci					.endpoint = 0x85,
296362306a36Sopenharmony_ci					.ep_attr = USB_ENDPOINT_SYNC_SYNC,
296462306a36Sopenharmony_ci					.rates = SNDRV_PCM_RATE_48000,
296562306a36Sopenharmony_ci					.rate_min = 48000,
296662306a36Sopenharmony_ci					.rate_max = 48000,
296762306a36Sopenharmony_ci					.nr_rates = 1,
296862306a36Sopenharmony_ci					.rate_table = (unsigned int[]) {
296962306a36Sopenharmony_ci						48000
297062306a36Sopenharmony_ci					}
297162306a36Sopenharmony_ci				}
297262306a36Sopenharmony_ci			},
297362306a36Sopenharmony_ci			{
297462306a36Sopenharmony_ci				.ifnum = 5,
297562306a36Sopenharmony_ci				.type = QUIRK_IGNORE_INTERFACE
297662306a36Sopenharmony_ci			},
297762306a36Sopenharmony_ci			{
297862306a36Sopenharmony_ci				.ifnum = 6,
297962306a36Sopenharmony_ci				.type = QUIRK_MIDI_MIDIMAN,
298062306a36Sopenharmony_ci				.data = &(const struct snd_usb_midi_endpoint_info) {
298162306a36Sopenharmony_ci					.out_ep =  0x02,
298262306a36Sopenharmony_ci					.out_cables = 0x0001,
298362306a36Sopenharmony_ci					.in_ep = 0x81,
298462306a36Sopenharmony_ci					.in_interval = 0x01,
298562306a36Sopenharmony_ci					.in_cables = 0x0001
298662306a36Sopenharmony_ci				}
298762306a36Sopenharmony_ci			},
298862306a36Sopenharmony_ci			{
298962306a36Sopenharmony_ci				.ifnum = -1
299062306a36Sopenharmony_ci			}
299162306a36Sopenharmony_ci		}
299262306a36Sopenharmony_ci	}
299362306a36Sopenharmony_ci},
299462306a36Sopenharmony_ci/* DIGIDESIGN MBOX 3 */
299562306a36Sopenharmony_ci{
299662306a36Sopenharmony_ci	USB_DEVICE(0x0dba, 0x5000),
299762306a36Sopenharmony_ci	.driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
299862306a36Sopenharmony_ci		.vendor_name = "Digidesign",
299962306a36Sopenharmony_ci		.product_name = "Mbox 3",
300062306a36Sopenharmony_ci		.ifnum = QUIRK_ANY_INTERFACE,
300162306a36Sopenharmony_ci		.type = QUIRK_COMPOSITE,
300262306a36Sopenharmony_ci		.data = (const struct snd_usb_audio_quirk[]) {
300362306a36Sopenharmony_ci			{
300462306a36Sopenharmony_ci				.ifnum = 0,
300562306a36Sopenharmony_ci				.type = QUIRK_IGNORE_INTERFACE
300662306a36Sopenharmony_ci			},
300762306a36Sopenharmony_ci			{
300862306a36Sopenharmony_ci				.ifnum = 1,
300962306a36Sopenharmony_ci				.type = QUIRK_IGNORE_INTERFACE
301062306a36Sopenharmony_ci			},
301162306a36Sopenharmony_ci			{
301262306a36Sopenharmony_ci				.ifnum = 2,
301362306a36Sopenharmony_ci				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
301462306a36Sopenharmony_ci				.data = &(const struct audioformat) {
301562306a36Sopenharmony_ci					.formats = SNDRV_PCM_FMTBIT_S24_3LE,
301662306a36Sopenharmony_ci					.channels = 4,
301762306a36Sopenharmony_ci					.iface = 2,
301862306a36Sopenharmony_ci					.altsetting = 1,
301962306a36Sopenharmony_ci					.altset_idx = 1,
302062306a36Sopenharmony_ci					.attributes = 0x00,
302162306a36Sopenharmony_ci					.endpoint = 0x01,
302262306a36Sopenharmony_ci					.ep_attr = USB_ENDPOINT_XFER_ISOC |
302362306a36Sopenharmony_ci						USB_ENDPOINT_SYNC_ASYNC,
302462306a36Sopenharmony_ci					.rates = SNDRV_PCM_RATE_48000,
302562306a36Sopenharmony_ci					.rate_min = 48000,
302662306a36Sopenharmony_ci					.rate_max = 48000,
302762306a36Sopenharmony_ci					.nr_rates = 1,
302862306a36Sopenharmony_ci					.rate_table = (unsigned int[]) {
302962306a36Sopenharmony_ci						48000
303062306a36Sopenharmony_ci					}
303162306a36Sopenharmony_ci				}
303262306a36Sopenharmony_ci			},
303362306a36Sopenharmony_ci			{
303462306a36Sopenharmony_ci				.ifnum = 3,
303562306a36Sopenharmony_ci				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
303662306a36Sopenharmony_ci				.data = &(const struct audioformat) {
303762306a36Sopenharmony_ci					.formats = SNDRV_PCM_FMTBIT_S24_3LE,
303862306a36Sopenharmony_ci					.channels = 4,
303962306a36Sopenharmony_ci					.iface = 3,
304062306a36Sopenharmony_ci					.altsetting = 1,
304162306a36Sopenharmony_ci					.altset_idx = 1,
304262306a36Sopenharmony_ci					.endpoint = 0x81,
304362306a36Sopenharmony_ci					.attributes = 0x00,
304462306a36Sopenharmony_ci					.ep_attr = USB_ENDPOINT_XFER_ISOC |
304562306a36Sopenharmony_ci						USB_ENDPOINT_SYNC_ASYNC,
304662306a36Sopenharmony_ci					.maxpacksize = 0x009c,
304762306a36Sopenharmony_ci					.rates = SNDRV_PCM_RATE_48000,
304862306a36Sopenharmony_ci					.rate_min = 48000,
304962306a36Sopenharmony_ci					.rate_max = 48000,
305062306a36Sopenharmony_ci					.nr_rates = 1,
305162306a36Sopenharmony_ci					.rate_table = (unsigned int[]) {
305262306a36Sopenharmony_ci						48000
305362306a36Sopenharmony_ci					}
305462306a36Sopenharmony_ci				}
305562306a36Sopenharmony_ci			},
305662306a36Sopenharmony_ci			{
305762306a36Sopenharmony_ci				.ifnum = 4,
305862306a36Sopenharmony_ci				.type = QUIRK_MIDI_FIXED_ENDPOINT,
305962306a36Sopenharmony_ci				.data = &(const struct snd_usb_midi_endpoint_info) {
306062306a36Sopenharmony_ci					.out_cables = 0x0001,
306162306a36Sopenharmony_ci					.in_cables  = 0x0001
306262306a36Sopenharmony_ci				}
306362306a36Sopenharmony_ci			},
306462306a36Sopenharmony_ci			{
306562306a36Sopenharmony_ci				.ifnum = -1
306662306a36Sopenharmony_ci			}
306762306a36Sopenharmony_ci		}
306862306a36Sopenharmony_ci	}
306962306a36Sopenharmony_ci},
307062306a36Sopenharmony_ci{
307162306a36Sopenharmony_ci	/* Tascam US122 MKII - playback-only support */
307262306a36Sopenharmony_ci	USB_DEVICE_VENDOR_SPEC(0x0644, 0x8021),
307362306a36Sopenharmony_ci	.driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
307462306a36Sopenharmony_ci		.vendor_name = "TASCAM",
307562306a36Sopenharmony_ci		.product_name = "US122 MKII",
307662306a36Sopenharmony_ci		.ifnum = QUIRK_ANY_INTERFACE,
307762306a36Sopenharmony_ci		.type = QUIRK_COMPOSITE,
307862306a36Sopenharmony_ci		.data = (const struct snd_usb_audio_quirk[]) {
307962306a36Sopenharmony_ci			{
308062306a36Sopenharmony_ci				.ifnum = 0,
308162306a36Sopenharmony_ci				.type = QUIRK_IGNORE_INTERFACE
308262306a36Sopenharmony_ci			},
308362306a36Sopenharmony_ci			{
308462306a36Sopenharmony_ci				.ifnum = 1,
308562306a36Sopenharmony_ci				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
308662306a36Sopenharmony_ci				.data = &(const struct audioformat) {
308762306a36Sopenharmony_ci					.formats = SNDRV_PCM_FMTBIT_S24_3LE,
308862306a36Sopenharmony_ci					.channels = 2,
308962306a36Sopenharmony_ci					.iface = 1,
309062306a36Sopenharmony_ci					.altsetting = 1,
309162306a36Sopenharmony_ci					.altset_idx = 1,
309262306a36Sopenharmony_ci					.attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
309362306a36Sopenharmony_ci					.endpoint = 0x02,
309462306a36Sopenharmony_ci					.ep_attr = USB_ENDPOINT_XFER_ISOC,
309562306a36Sopenharmony_ci					.rates = SNDRV_PCM_RATE_44100 |
309662306a36Sopenharmony_ci						 SNDRV_PCM_RATE_48000 |
309762306a36Sopenharmony_ci						 SNDRV_PCM_RATE_88200 |
309862306a36Sopenharmony_ci						 SNDRV_PCM_RATE_96000,
309962306a36Sopenharmony_ci					.rate_min = 44100,
310062306a36Sopenharmony_ci					.rate_max = 96000,
310162306a36Sopenharmony_ci					.nr_rates = 4,
310262306a36Sopenharmony_ci					.rate_table = (unsigned int[]) {
310362306a36Sopenharmony_ci						44100, 48000, 88200, 96000
310462306a36Sopenharmony_ci					}
310562306a36Sopenharmony_ci				}
310662306a36Sopenharmony_ci			},
310762306a36Sopenharmony_ci			{
310862306a36Sopenharmony_ci				.ifnum = -1
310962306a36Sopenharmony_ci			}
311062306a36Sopenharmony_ci		}
311162306a36Sopenharmony_ci	}
311262306a36Sopenharmony_ci},
311362306a36Sopenharmony_ci
311462306a36Sopenharmony_ci/* Denon DN-X1600 */
311562306a36Sopenharmony_ci{
311662306a36Sopenharmony_ci	USB_AUDIO_DEVICE(0x154e, 0x500e),
311762306a36Sopenharmony_ci	.driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
311862306a36Sopenharmony_ci		.vendor_name = "Denon",
311962306a36Sopenharmony_ci		.product_name = "DN-X1600",
312062306a36Sopenharmony_ci		.ifnum = QUIRK_ANY_INTERFACE,
312162306a36Sopenharmony_ci		.type = QUIRK_COMPOSITE,
312262306a36Sopenharmony_ci		.data = (const struct snd_usb_audio_quirk[]){
312362306a36Sopenharmony_ci			{
312462306a36Sopenharmony_ci				.ifnum = 0,
312562306a36Sopenharmony_ci				.type = QUIRK_IGNORE_INTERFACE,
312662306a36Sopenharmony_ci			},
312762306a36Sopenharmony_ci			{
312862306a36Sopenharmony_ci				.ifnum = 1,
312962306a36Sopenharmony_ci				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
313062306a36Sopenharmony_ci				.data = &(const struct audioformat) {
313162306a36Sopenharmony_ci					.formats = SNDRV_PCM_FMTBIT_S24_3LE,
313262306a36Sopenharmony_ci					.channels = 8,
313362306a36Sopenharmony_ci					.iface = 1,
313462306a36Sopenharmony_ci					.altsetting = 1,
313562306a36Sopenharmony_ci					.altset_idx = 1,
313662306a36Sopenharmony_ci					.attributes = 0x0,
313762306a36Sopenharmony_ci					.endpoint = 0x01,
313862306a36Sopenharmony_ci					.ep_attr = USB_ENDPOINT_XFER_ISOC |
313962306a36Sopenharmony_ci						USB_ENDPOINT_SYNC_ADAPTIVE,
314062306a36Sopenharmony_ci					.maxpacksize = 0x138,
314162306a36Sopenharmony_ci					.rates = SNDRV_PCM_RATE_48000,
314262306a36Sopenharmony_ci					.rate_min = 48000,
314362306a36Sopenharmony_ci					.rate_max = 48000,
314462306a36Sopenharmony_ci					.nr_rates = 1,
314562306a36Sopenharmony_ci					.rate_table = (unsigned int[]) {
314662306a36Sopenharmony_ci						48000
314762306a36Sopenharmony_ci					}
314862306a36Sopenharmony_ci				}
314962306a36Sopenharmony_ci			},
315062306a36Sopenharmony_ci			{
315162306a36Sopenharmony_ci				.ifnum = 2,
315262306a36Sopenharmony_ci				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
315362306a36Sopenharmony_ci				.data = &(const struct audioformat) {
315462306a36Sopenharmony_ci					.formats = SNDRV_PCM_FMTBIT_S24_3LE,
315562306a36Sopenharmony_ci					.channels = 8,
315662306a36Sopenharmony_ci					.iface = 2,
315762306a36Sopenharmony_ci					.altsetting = 1,
315862306a36Sopenharmony_ci					.altset_idx = 1,
315962306a36Sopenharmony_ci					.attributes = 0x0,
316062306a36Sopenharmony_ci					.endpoint = 0x85,
316162306a36Sopenharmony_ci					.ep_attr = USB_ENDPOINT_XFER_ISOC |
316262306a36Sopenharmony_ci						USB_ENDPOINT_SYNC_ADAPTIVE,
316362306a36Sopenharmony_ci					.maxpacksize = 0x138,
316462306a36Sopenharmony_ci					.rates = SNDRV_PCM_RATE_48000,
316562306a36Sopenharmony_ci					.rate_min = 48000,
316662306a36Sopenharmony_ci					.rate_max = 48000,
316762306a36Sopenharmony_ci					.nr_rates = 1,
316862306a36Sopenharmony_ci					.rate_table = (unsigned int[]) {
316962306a36Sopenharmony_ci						48000
317062306a36Sopenharmony_ci					}
317162306a36Sopenharmony_ci				}
317262306a36Sopenharmony_ci			},
317362306a36Sopenharmony_ci			{
317462306a36Sopenharmony_ci				.ifnum = 4,
317562306a36Sopenharmony_ci				.type = QUIRK_MIDI_STANDARD_INTERFACE,
317662306a36Sopenharmony_ci			},
317762306a36Sopenharmony_ci			{
317862306a36Sopenharmony_ci				.ifnum = -1
317962306a36Sopenharmony_ci			}
318062306a36Sopenharmony_ci		}
318162306a36Sopenharmony_ci	}
318262306a36Sopenharmony_ci},
318362306a36Sopenharmony_ci
318462306a36Sopenharmony_ci/* Microsoft XboxLive Headset/Xbox Communicator */
318562306a36Sopenharmony_ci{
318662306a36Sopenharmony_ci	USB_DEVICE(0x045e, 0x0283),
318762306a36Sopenharmony_ci	.bInterfaceClass = USB_CLASS_PER_INTERFACE,
318862306a36Sopenharmony_ci	.driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
318962306a36Sopenharmony_ci		.vendor_name = "Microsoft",
319062306a36Sopenharmony_ci		.product_name = "XboxLive Headset/Xbox Communicator",
319162306a36Sopenharmony_ci		.ifnum = QUIRK_ANY_INTERFACE,
319262306a36Sopenharmony_ci		.type = QUIRK_COMPOSITE,
319362306a36Sopenharmony_ci		.data = &(const struct snd_usb_audio_quirk[]) {
319462306a36Sopenharmony_ci			{
319562306a36Sopenharmony_ci				/* playback */
319662306a36Sopenharmony_ci				.ifnum = 0,
319762306a36Sopenharmony_ci				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
319862306a36Sopenharmony_ci				.data = &(const struct audioformat) {
319962306a36Sopenharmony_ci					.formats = SNDRV_PCM_FMTBIT_S16_LE,
320062306a36Sopenharmony_ci					.channels = 1,
320162306a36Sopenharmony_ci					.iface = 0,
320262306a36Sopenharmony_ci					.altsetting = 0,
320362306a36Sopenharmony_ci					.altset_idx = 0,
320462306a36Sopenharmony_ci					.attributes = 0,
320562306a36Sopenharmony_ci					.endpoint = 0x04,
320662306a36Sopenharmony_ci					.ep_attr = 0x05,
320762306a36Sopenharmony_ci					.rates = SNDRV_PCM_RATE_CONTINUOUS,
320862306a36Sopenharmony_ci					.rate_min = 22050,
320962306a36Sopenharmony_ci					.rate_max = 22050
321062306a36Sopenharmony_ci				}
321162306a36Sopenharmony_ci			},
321262306a36Sopenharmony_ci			{
321362306a36Sopenharmony_ci				/* capture */
321462306a36Sopenharmony_ci				.ifnum = 1,
321562306a36Sopenharmony_ci				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
321662306a36Sopenharmony_ci				.data = &(const struct audioformat) {
321762306a36Sopenharmony_ci					.formats = SNDRV_PCM_FMTBIT_S16_LE,
321862306a36Sopenharmony_ci					.channels = 1,
321962306a36Sopenharmony_ci					.iface = 1,
322062306a36Sopenharmony_ci					.altsetting = 0,
322162306a36Sopenharmony_ci					.altset_idx = 0,
322262306a36Sopenharmony_ci					.attributes = 0,
322362306a36Sopenharmony_ci					.endpoint = 0x85,
322462306a36Sopenharmony_ci					.ep_attr = 0x05,
322562306a36Sopenharmony_ci					.rates = SNDRV_PCM_RATE_CONTINUOUS,
322662306a36Sopenharmony_ci					.rate_min = 16000,
322762306a36Sopenharmony_ci					.rate_max = 16000
322862306a36Sopenharmony_ci				}
322962306a36Sopenharmony_ci			},
323062306a36Sopenharmony_ci			{
323162306a36Sopenharmony_ci				.ifnum = -1
323262306a36Sopenharmony_ci			}
323362306a36Sopenharmony_ci		}
323462306a36Sopenharmony_ci	}
323562306a36Sopenharmony_ci},
323662306a36Sopenharmony_ci
323762306a36Sopenharmony_ci/* Reloop Play */
323862306a36Sopenharmony_ci{
323962306a36Sopenharmony_ci	USB_DEVICE(0x200c, 0x100b),
324062306a36Sopenharmony_ci	.bInterfaceClass = USB_CLASS_PER_INTERFACE,
324162306a36Sopenharmony_ci	.driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
324262306a36Sopenharmony_ci		.ifnum = QUIRK_ANY_INTERFACE,
324362306a36Sopenharmony_ci		.type = QUIRK_COMPOSITE,
324462306a36Sopenharmony_ci		.data = &(const struct snd_usb_audio_quirk[]) {
324562306a36Sopenharmony_ci			{
324662306a36Sopenharmony_ci				.ifnum = 0,
324762306a36Sopenharmony_ci				.type = QUIRK_AUDIO_STANDARD_MIXER,
324862306a36Sopenharmony_ci			},
324962306a36Sopenharmony_ci			{
325062306a36Sopenharmony_ci				.ifnum = 1,
325162306a36Sopenharmony_ci				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
325262306a36Sopenharmony_ci				.data = &(const struct audioformat) {
325362306a36Sopenharmony_ci					.formats = SNDRV_PCM_FMTBIT_S24_3LE,
325462306a36Sopenharmony_ci					.channels = 4,
325562306a36Sopenharmony_ci					.iface = 1,
325662306a36Sopenharmony_ci					.altsetting = 1,
325762306a36Sopenharmony_ci					.altset_idx = 1,
325862306a36Sopenharmony_ci					.attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
325962306a36Sopenharmony_ci					.endpoint = 0x01,
326062306a36Sopenharmony_ci					.ep_attr = USB_ENDPOINT_SYNC_ADAPTIVE,
326162306a36Sopenharmony_ci					.rates = SNDRV_PCM_RATE_44100 |
326262306a36Sopenharmony_ci						 SNDRV_PCM_RATE_48000,
326362306a36Sopenharmony_ci					.rate_min = 44100,
326462306a36Sopenharmony_ci					.rate_max = 48000,
326562306a36Sopenharmony_ci					.nr_rates = 2,
326662306a36Sopenharmony_ci					.rate_table = (unsigned int[]) {
326762306a36Sopenharmony_ci						44100, 48000
326862306a36Sopenharmony_ci					}
326962306a36Sopenharmony_ci				}
327062306a36Sopenharmony_ci			},
327162306a36Sopenharmony_ci			{
327262306a36Sopenharmony_ci				.ifnum = -1
327362306a36Sopenharmony_ci			}
327462306a36Sopenharmony_ci		}
327562306a36Sopenharmony_ci	}
327662306a36Sopenharmony_ci},
327762306a36Sopenharmony_ci
327862306a36Sopenharmony_ci{
327962306a36Sopenharmony_ci	/*
328062306a36Sopenharmony_ci	 * ZOOM R16/24 in audio interface mode.
328162306a36Sopenharmony_ci	 * Playback requires an extra four byte LE length indicator
328262306a36Sopenharmony_ci	 * at the start of each isochronous packet. This quirk is
328362306a36Sopenharmony_ci	 * enabled in create_standard_audio_quirk().
328462306a36Sopenharmony_ci	 */
328562306a36Sopenharmony_ci	USB_DEVICE(0x1686, 0x00dd),
328662306a36Sopenharmony_ci	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
328762306a36Sopenharmony_ci		.ifnum = QUIRK_ANY_INTERFACE,
328862306a36Sopenharmony_ci		.type = QUIRK_COMPOSITE,
328962306a36Sopenharmony_ci		.data = (const struct snd_usb_audio_quirk[]) {
329062306a36Sopenharmony_ci			{
329162306a36Sopenharmony_ci				/* Playback  */
329262306a36Sopenharmony_ci				.ifnum = 1,
329362306a36Sopenharmony_ci				.type = QUIRK_AUDIO_STANDARD_INTERFACE,
329462306a36Sopenharmony_ci			},
329562306a36Sopenharmony_ci			{
329662306a36Sopenharmony_ci				/* Capture */
329762306a36Sopenharmony_ci				.ifnum = 2,
329862306a36Sopenharmony_ci				.type = QUIRK_AUDIO_STANDARD_INTERFACE,
329962306a36Sopenharmony_ci			},
330062306a36Sopenharmony_ci			{
330162306a36Sopenharmony_ci				/* Midi */
330262306a36Sopenharmony_ci				.ifnum = 3,
330362306a36Sopenharmony_ci				.type = QUIRK_MIDI_STANDARD_INTERFACE
330462306a36Sopenharmony_ci			},
330562306a36Sopenharmony_ci			{
330662306a36Sopenharmony_ci				.ifnum = -1
330762306a36Sopenharmony_ci			},
330862306a36Sopenharmony_ci		}
330962306a36Sopenharmony_ci	}
331062306a36Sopenharmony_ci},
331162306a36Sopenharmony_ci
331262306a36Sopenharmony_ci{
331362306a36Sopenharmony_ci	/*
331462306a36Sopenharmony_ci	 * Some USB MIDI devices don't have an audio control interface,
331562306a36Sopenharmony_ci	 * so we have to grab MIDI streaming interfaces here.
331662306a36Sopenharmony_ci	 */
331762306a36Sopenharmony_ci	.match_flags = USB_DEVICE_ID_MATCH_INT_CLASS |
331862306a36Sopenharmony_ci		       USB_DEVICE_ID_MATCH_INT_SUBCLASS,
331962306a36Sopenharmony_ci	.bInterfaceClass = USB_CLASS_AUDIO,
332062306a36Sopenharmony_ci	.bInterfaceSubClass = USB_SUBCLASS_MIDISTREAMING,
332162306a36Sopenharmony_ci	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
332262306a36Sopenharmony_ci		.ifnum = QUIRK_ANY_INTERFACE,
332362306a36Sopenharmony_ci		.type = QUIRK_MIDI_STANDARD_INTERFACE
332462306a36Sopenharmony_ci	}
332562306a36Sopenharmony_ci},
332662306a36Sopenharmony_ci
332762306a36Sopenharmony_ci/* Rane SL-1 */
332862306a36Sopenharmony_ci{
332962306a36Sopenharmony_ci	USB_DEVICE(0x13e5, 0x0001),
333062306a36Sopenharmony_ci	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
333162306a36Sopenharmony_ci		.ifnum = QUIRK_ANY_INTERFACE,
333262306a36Sopenharmony_ci		.type = QUIRK_AUDIO_STANDARD_INTERFACE
333362306a36Sopenharmony_ci        }
333462306a36Sopenharmony_ci},
333562306a36Sopenharmony_ci
333662306a36Sopenharmony_ci/* disabled due to regression for other devices;
333762306a36Sopenharmony_ci * see https://bugzilla.kernel.org/show_bug.cgi?id=199905
333862306a36Sopenharmony_ci */
333962306a36Sopenharmony_ci#if 0
334062306a36Sopenharmony_ci{
334162306a36Sopenharmony_ci	/*
334262306a36Sopenharmony_ci	 * Nura's first gen headphones use Cambridge Silicon Radio's vendor
334362306a36Sopenharmony_ci	 * ID, but it looks like the product ID actually is only for Nura.
334462306a36Sopenharmony_ci	 * The capture interface does not work at all (even on Windows),
334562306a36Sopenharmony_ci	 * and only the 48 kHz sample rate works for the playback interface.
334662306a36Sopenharmony_ci	 */
334762306a36Sopenharmony_ci	USB_DEVICE(0x0a12, 0x1243),
334862306a36Sopenharmony_ci	.driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
334962306a36Sopenharmony_ci		.ifnum = QUIRK_ANY_INTERFACE,
335062306a36Sopenharmony_ci		.type = QUIRK_COMPOSITE,
335162306a36Sopenharmony_ci		.data = (const struct snd_usb_audio_quirk[]) {
335262306a36Sopenharmony_ci			{
335362306a36Sopenharmony_ci				.ifnum = 0,
335462306a36Sopenharmony_ci				.type = QUIRK_AUDIO_STANDARD_MIXER,
335562306a36Sopenharmony_ci			},
335662306a36Sopenharmony_ci			/* Capture */
335762306a36Sopenharmony_ci			{
335862306a36Sopenharmony_ci				.ifnum = 1,
335962306a36Sopenharmony_ci				.type = QUIRK_IGNORE_INTERFACE,
336062306a36Sopenharmony_ci			},
336162306a36Sopenharmony_ci			/* Playback */
336262306a36Sopenharmony_ci			{
336362306a36Sopenharmony_ci				.ifnum = 2,
336462306a36Sopenharmony_ci				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
336562306a36Sopenharmony_ci				.data = &(const struct audioformat) {
336662306a36Sopenharmony_ci					.formats = SNDRV_PCM_FMTBIT_S16_LE,
336762306a36Sopenharmony_ci					.channels = 2,
336862306a36Sopenharmony_ci					.iface = 2,
336962306a36Sopenharmony_ci					.altsetting = 1,
337062306a36Sopenharmony_ci					.altset_idx = 1,
337162306a36Sopenharmony_ci					.attributes = UAC_EP_CS_ATTR_FILL_MAX |
337262306a36Sopenharmony_ci						UAC_EP_CS_ATTR_SAMPLE_RATE,
337362306a36Sopenharmony_ci					.endpoint = 0x03,
337462306a36Sopenharmony_ci					.ep_attr = USB_ENDPOINT_XFER_ISOC,
337562306a36Sopenharmony_ci					.rates = SNDRV_PCM_RATE_48000,
337662306a36Sopenharmony_ci					.rate_min = 48000,
337762306a36Sopenharmony_ci					.rate_max = 48000,
337862306a36Sopenharmony_ci					.nr_rates = 1,
337962306a36Sopenharmony_ci					.rate_table = (unsigned int[]) {
338062306a36Sopenharmony_ci						48000
338162306a36Sopenharmony_ci					}
338262306a36Sopenharmony_ci				}
338362306a36Sopenharmony_ci			},
338462306a36Sopenharmony_ci			{
338562306a36Sopenharmony_ci				.ifnum = -1
338662306a36Sopenharmony_ci			},
338762306a36Sopenharmony_ci		}
338862306a36Sopenharmony_ci	}
338962306a36Sopenharmony_ci},
339062306a36Sopenharmony_ci#endif /* disabled */
339162306a36Sopenharmony_ci
339262306a36Sopenharmony_ci{
339362306a36Sopenharmony_ci	/*
339462306a36Sopenharmony_ci	 * Bower's & Wilkins PX headphones only support the 48 kHz sample rate
339562306a36Sopenharmony_ci	 * even though it advertises more. The capture interface doesn't work
339662306a36Sopenharmony_ci	 * even on windows.
339762306a36Sopenharmony_ci	 */
339862306a36Sopenharmony_ci	USB_DEVICE(0x19b5, 0x0021),
339962306a36Sopenharmony_ci	.driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
340062306a36Sopenharmony_ci		.ifnum = QUIRK_ANY_INTERFACE,
340162306a36Sopenharmony_ci		.type = QUIRK_COMPOSITE,
340262306a36Sopenharmony_ci		.data = (const struct snd_usb_audio_quirk[]) {
340362306a36Sopenharmony_ci			{
340462306a36Sopenharmony_ci				.ifnum = 0,
340562306a36Sopenharmony_ci				.type = QUIRK_AUDIO_STANDARD_MIXER,
340662306a36Sopenharmony_ci			},
340762306a36Sopenharmony_ci			/* Playback */
340862306a36Sopenharmony_ci			{
340962306a36Sopenharmony_ci				.ifnum = 1,
341062306a36Sopenharmony_ci				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
341162306a36Sopenharmony_ci				.data = &(const struct audioformat) {
341262306a36Sopenharmony_ci					.formats = SNDRV_PCM_FMTBIT_S16_LE,
341362306a36Sopenharmony_ci					.channels = 2,
341462306a36Sopenharmony_ci					.iface = 1,
341562306a36Sopenharmony_ci					.altsetting = 1,
341662306a36Sopenharmony_ci					.altset_idx = 1,
341762306a36Sopenharmony_ci					.attributes = UAC_EP_CS_ATTR_FILL_MAX |
341862306a36Sopenharmony_ci						UAC_EP_CS_ATTR_SAMPLE_RATE,
341962306a36Sopenharmony_ci					.endpoint = 0x03,
342062306a36Sopenharmony_ci					.ep_attr = USB_ENDPOINT_XFER_ISOC,
342162306a36Sopenharmony_ci					.rates = SNDRV_PCM_RATE_48000,
342262306a36Sopenharmony_ci					.rate_min = 48000,
342362306a36Sopenharmony_ci					.rate_max = 48000,
342462306a36Sopenharmony_ci					.nr_rates = 1,
342562306a36Sopenharmony_ci					.rate_table = (unsigned int[]) {
342662306a36Sopenharmony_ci						48000
342762306a36Sopenharmony_ci					}
342862306a36Sopenharmony_ci				}
342962306a36Sopenharmony_ci			},
343062306a36Sopenharmony_ci			{
343162306a36Sopenharmony_ci				.ifnum = -1
343262306a36Sopenharmony_ci			},
343362306a36Sopenharmony_ci		}
343462306a36Sopenharmony_ci	}
343562306a36Sopenharmony_ci},
343662306a36Sopenharmony_ci/* MOTU Microbook II */
343762306a36Sopenharmony_ci{
343862306a36Sopenharmony_ci	USB_DEVICE_VENDOR_SPEC(0x07fd, 0x0004),
343962306a36Sopenharmony_ci	.driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
344062306a36Sopenharmony_ci		.vendor_name = "MOTU",
344162306a36Sopenharmony_ci		.product_name = "MicroBookII",
344262306a36Sopenharmony_ci		.ifnum = QUIRK_ANY_INTERFACE,
344362306a36Sopenharmony_ci		.type = QUIRK_COMPOSITE,
344462306a36Sopenharmony_ci		.data = (const struct snd_usb_audio_quirk[]) {
344562306a36Sopenharmony_ci			{
344662306a36Sopenharmony_ci				.ifnum = 0,
344762306a36Sopenharmony_ci				.type = QUIRK_AUDIO_STANDARD_MIXER,
344862306a36Sopenharmony_ci			},
344962306a36Sopenharmony_ci			{
345062306a36Sopenharmony_ci				.ifnum = 0,
345162306a36Sopenharmony_ci				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
345262306a36Sopenharmony_ci				.data = &(const struct audioformat) {
345362306a36Sopenharmony_ci					.formats = SNDRV_PCM_FMTBIT_S24_3BE,
345462306a36Sopenharmony_ci					.channels = 6,
345562306a36Sopenharmony_ci					.iface = 0,
345662306a36Sopenharmony_ci					.altsetting = 1,
345762306a36Sopenharmony_ci					.altset_idx = 1,
345862306a36Sopenharmony_ci					.attributes = 0,
345962306a36Sopenharmony_ci					.endpoint = 0x84,
346062306a36Sopenharmony_ci					.rates = SNDRV_PCM_RATE_96000,
346162306a36Sopenharmony_ci					.ep_attr = USB_ENDPOINT_XFER_ISOC |
346262306a36Sopenharmony_ci						   USB_ENDPOINT_SYNC_ASYNC,
346362306a36Sopenharmony_ci					.rate_min = 96000,
346462306a36Sopenharmony_ci					.rate_max = 96000,
346562306a36Sopenharmony_ci					.nr_rates = 1,
346662306a36Sopenharmony_ci					.maxpacksize = 0x00d8,
346762306a36Sopenharmony_ci					.rate_table = (unsigned int[]) {
346862306a36Sopenharmony_ci						96000
346962306a36Sopenharmony_ci					}
347062306a36Sopenharmony_ci				}
347162306a36Sopenharmony_ci			},
347262306a36Sopenharmony_ci			{
347362306a36Sopenharmony_ci				.ifnum = 0,
347462306a36Sopenharmony_ci				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
347562306a36Sopenharmony_ci				.data = &(const struct audioformat) {
347662306a36Sopenharmony_ci					.formats = SNDRV_PCM_FMTBIT_S24_3BE,
347762306a36Sopenharmony_ci					.channels = 8,
347862306a36Sopenharmony_ci					.iface = 0,
347962306a36Sopenharmony_ci					.altsetting = 1,
348062306a36Sopenharmony_ci					.altset_idx = 1,
348162306a36Sopenharmony_ci					.attributes = 0,
348262306a36Sopenharmony_ci					.endpoint = 0x03,
348362306a36Sopenharmony_ci					.ep_idx = 1,
348462306a36Sopenharmony_ci					.rates = SNDRV_PCM_RATE_96000,
348562306a36Sopenharmony_ci					.ep_attr = USB_ENDPOINT_XFER_ISOC |
348662306a36Sopenharmony_ci						   USB_ENDPOINT_SYNC_ASYNC,
348762306a36Sopenharmony_ci					.rate_min = 96000,
348862306a36Sopenharmony_ci					.rate_max = 96000,
348962306a36Sopenharmony_ci					.nr_rates = 1,
349062306a36Sopenharmony_ci					.maxpacksize = 0x0120,
349162306a36Sopenharmony_ci					.rate_table = (unsigned int[]) {
349262306a36Sopenharmony_ci						96000
349362306a36Sopenharmony_ci					}
349462306a36Sopenharmony_ci				}
349562306a36Sopenharmony_ci			},
349662306a36Sopenharmony_ci			{
349762306a36Sopenharmony_ci				.ifnum = -1
349862306a36Sopenharmony_ci			}
349962306a36Sopenharmony_ci		}
350062306a36Sopenharmony_ci	}
350162306a36Sopenharmony_ci},
350262306a36Sopenharmony_ci{
350362306a36Sopenharmony_ci	/*
350462306a36Sopenharmony_ci	 * PIONEER DJ DDJ-SX3
350562306a36Sopenharmony_ci	 * PCM is 12 channels out, 10 channels in @ 44.1 fixed
350662306a36Sopenharmony_ci	 * interface 0, vendor class alt setting 1 for endpoints 5 and 0x86
350762306a36Sopenharmony_ci	 * The feedback for the output is the input.
350862306a36Sopenharmony_ci	 */
350962306a36Sopenharmony_ci	USB_DEVICE_VENDOR_SPEC(0x2b73, 0x0023),
351062306a36Sopenharmony_ci	.driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
351162306a36Sopenharmony_ci		.ifnum = QUIRK_ANY_INTERFACE,
351262306a36Sopenharmony_ci		.type = QUIRK_COMPOSITE,
351362306a36Sopenharmony_ci		.data = (const struct snd_usb_audio_quirk[]) {
351462306a36Sopenharmony_ci			{
351562306a36Sopenharmony_ci				.ifnum = 0,
351662306a36Sopenharmony_ci				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
351762306a36Sopenharmony_ci				.data = &(const struct audioformat) {
351862306a36Sopenharmony_ci					.formats = SNDRV_PCM_FMTBIT_S32_LE,
351962306a36Sopenharmony_ci					.channels = 12,
352062306a36Sopenharmony_ci					.iface = 0,
352162306a36Sopenharmony_ci					.altsetting = 1,
352262306a36Sopenharmony_ci					.altset_idx = 1,
352362306a36Sopenharmony_ci					.endpoint = 0x05,
352462306a36Sopenharmony_ci					.ep_attr = USB_ENDPOINT_XFER_ISOC|
352562306a36Sopenharmony_ci						   USB_ENDPOINT_SYNC_ASYNC,
352662306a36Sopenharmony_ci					.rates = SNDRV_PCM_RATE_44100,
352762306a36Sopenharmony_ci					.rate_min = 44100,
352862306a36Sopenharmony_ci					.rate_max = 44100,
352962306a36Sopenharmony_ci					.nr_rates = 1,
353062306a36Sopenharmony_ci					.rate_table = (unsigned int[]) { 44100 }
353162306a36Sopenharmony_ci				}
353262306a36Sopenharmony_ci			},
353362306a36Sopenharmony_ci			{
353462306a36Sopenharmony_ci				.ifnum = 0,
353562306a36Sopenharmony_ci				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
353662306a36Sopenharmony_ci				.data = &(const struct audioformat) {
353762306a36Sopenharmony_ci					.formats = SNDRV_PCM_FMTBIT_S32_LE,
353862306a36Sopenharmony_ci					.channels = 10,
353962306a36Sopenharmony_ci					.iface = 0,
354062306a36Sopenharmony_ci					.altsetting = 1,
354162306a36Sopenharmony_ci					.altset_idx = 1,
354262306a36Sopenharmony_ci					.endpoint = 0x86,
354362306a36Sopenharmony_ci					.ep_idx = 1,
354462306a36Sopenharmony_ci					.ep_attr = USB_ENDPOINT_XFER_ISOC|
354562306a36Sopenharmony_ci						 USB_ENDPOINT_SYNC_ASYNC|
354662306a36Sopenharmony_ci						 USB_ENDPOINT_USAGE_IMPLICIT_FB,
354762306a36Sopenharmony_ci					.rates = SNDRV_PCM_RATE_44100,
354862306a36Sopenharmony_ci					.rate_min = 44100,
354962306a36Sopenharmony_ci					.rate_max = 44100,
355062306a36Sopenharmony_ci					.nr_rates = 1,
355162306a36Sopenharmony_ci					.rate_table = (unsigned int[]) { 44100 }
355262306a36Sopenharmony_ci				}
355362306a36Sopenharmony_ci			},
355462306a36Sopenharmony_ci			{
355562306a36Sopenharmony_ci				.ifnum = -1
355662306a36Sopenharmony_ci			}
355762306a36Sopenharmony_ci		}
355862306a36Sopenharmony_ci	}
355962306a36Sopenharmony_ci},
356062306a36Sopenharmony_ci{
356162306a36Sopenharmony_ci	/*
356262306a36Sopenharmony_ci	 * Pioneer DJ DJM-250MK2
356362306a36Sopenharmony_ci	 * PCM is 8 channels out @ 48 fixed (endpoint 0x01)
356462306a36Sopenharmony_ci	 * and 8 channels in @ 48 fixed (endpoint 0x82).
356562306a36Sopenharmony_ci	 *
356662306a36Sopenharmony_ci	 * Both playback and recording is working, even simultaneously.
356762306a36Sopenharmony_ci	 *
356862306a36Sopenharmony_ci	 * Playback channels could be mapped to:
356962306a36Sopenharmony_ci	 *  - CH1
357062306a36Sopenharmony_ci	 *  - CH2
357162306a36Sopenharmony_ci	 *  - AUX
357262306a36Sopenharmony_ci	 *
357362306a36Sopenharmony_ci	 * Recording channels could be mapped to:
357462306a36Sopenharmony_ci	 *  - Post CH1 Fader
357562306a36Sopenharmony_ci	 *  - Post CH2 Fader
357662306a36Sopenharmony_ci	 *  - Cross Fader A
357762306a36Sopenharmony_ci	 *  - Cross Fader B
357862306a36Sopenharmony_ci	 *  - MIC
357962306a36Sopenharmony_ci	 *  - AUX
358062306a36Sopenharmony_ci	 *  - REC OUT
358162306a36Sopenharmony_ci	 *
358262306a36Sopenharmony_ci	 * There is remaining problem with recording directly from PHONO/LINE.
358362306a36Sopenharmony_ci	 * If we map a channel to:
358462306a36Sopenharmony_ci	 *  - CH1 Control Tone PHONO
358562306a36Sopenharmony_ci	 *  - CH1 Control Tone LINE
358662306a36Sopenharmony_ci	 *  - CH2 Control Tone PHONO
358762306a36Sopenharmony_ci	 *  - CH2 Control Tone LINE
358862306a36Sopenharmony_ci	 * it is silent.
358962306a36Sopenharmony_ci	 * There is no signal even on other operating systems with official drivers.
359062306a36Sopenharmony_ci	 * The signal appears only when a supported application is started.
359162306a36Sopenharmony_ci	 * This needs to be investigated yet...
359262306a36Sopenharmony_ci	 * (there is quite a lot communication on the USB in both directions)
359362306a36Sopenharmony_ci	 *
359462306a36Sopenharmony_ci	 * In current version this mixer could be used for playback
359562306a36Sopenharmony_ci	 * and for recording from vinyls (through Post CH* Fader)
359662306a36Sopenharmony_ci	 * but not for DVS (Digital Vinyl Systems) like in Mixxx.
359762306a36Sopenharmony_ci	 */
359862306a36Sopenharmony_ci	USB_DEVICE_VENDOR_SPEC(0x2b73, 0x0017),
359962306a36Sopenharmony_ci	.driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
360062306a36Sopenharmony_ci		.ifnum = QUIRK_ANY_INTERFACE,
360162306a36Sopenharmony_ci		.type = QUIRK_COMPOSITE,
360262306a36Sopenharmony_ci		.data = (const struct snd_usb_audio_quirk[]) {
360362306a36Sopenharmony_ci			{
360462306a36Sopenharmony_ci				.ifnum = 0,
360562306a36Sopenharmony_ci				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
360662306a36Sopenharmony_ci				.data = &(const struct audioformat) {
360762306a36Sopenharmony_ci					.formats = SNDRV_PCM_FMTBIT_S24_3LE,
360862306a36Sopenharmony_ci					.channels = 8, // outputs
360962306a36Sopenharmony_ci					.iface = 0,
361062306a36Sopenharmony_ci					.altsetting = 1,
361162306a36Sopenharmony_ci					.altset_idx = 1,
361262306a36Sopenharmony_ci					.endpoint = 0x01,
361362306a36Sopenharmony_ci					.ep_attr = USB_ENDPOINT_XFER_ISOC|
361462306a36Sopenharmony_ci						USB_ENDPOINT_SYNC_ASYNC,
361562306a36Sopenharmony_ci					.rates = SNDRV_PCM_RATE_48000,
361662306a36Sopenharmony_ci					.rate_min = 48000,
361762306a36Sopenharmony_ci					.rate_max = 48000,
361862306a36Sopenharmony_ci					.nr_rates = 1,
361962306a36Sopenharmony_ci					.rate_table = (unsigned int[]) { 48000 }
362062306a36Sopenharmony_ci					}
362162306a36Sopenharmony_ci			},
362262306a36Sopenharmony_ci			{
362362306a36Sopenharmony_ci				.ifnum = 0,
362462306a36Sopenharmony_ci				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
362562306a36Sopenharmony_ci				.data = &(const struct audioformat) {
362662306a36Sopenharmony_ci					.formats = SNDRV_PCM_FMTBIT_S24_3LE,
362762306a36Sopenharmony_ci					.channels = 8, // inputs
362862306a36Sopenharmony_ci					.iface = 0,
362962306a36Sopenharmony_ci					.altsetting = 1,
363062306a36Sopenharmony_ci					.altset_idx = 1,
363162306a36Sopenharmony_ci					.endpoint = 0x82,
363262306a36Sopenharmony_ci					.ep_idx = 1,
363362306a36Sopenharmony_ci					.ep_attr = USB_ENDPOINT_XFER_ISOC|
363462306a36Sopenharmony_ci						USB_ENDPOINT_SYNC_ASYNC|
363562306a36Sopenharmony_ci						USB_ENDPOINT_USAGE_IMPLICIT_FB,
363662306a36Sopenharmony_ci					.rates = SNDRV_PCM_RATE_48000,
363762306a36Sopenharmony_ci					.rate_min = 48000,
363862306a36Sopenharmony_ci					.rate_max = 48000,
363962306a36Sopenharmony_ci					.nr_rates = 1,
364062306a36Sopenharmony_ci					.rate_table = (unsigned int[]) { 48000 }
364162306a36Sopenharmony_ci				}
364262306a36Sopenharmony_ci			},
364362306a36Sopenharmony_ci			{
364462306a36Sopenharmony_ci				.ifnum = -1
364562306a36Sopenharmony_ci			}
364662306a36Sopenharmony_ci		}
364762306a36Sopenharmony_ci	}
364862306a36Sopenharmony_ci},
364962306a36Sopenharmony_ci{
365062306a36Sopenharmony_ci	/*
365162306a36Sopenharmony_ci	 * PIONEER DJ DDJ-RB
365262306a36Sopenharmony_ci	 * PCM is 4 channels out, 2 dummy channels in @ 44.1 fixed
365362306a36Sopenharmony_ci	 * The feedback for the output is the dummy input.
365462306a36Sopenharmony_ci	 */
365562306a36Sopenharmony_ci	USB_DEVICE_VENDOR_SPEC(0x2b73, 0x000e),
365662306a36Sopenharmony_ci	.driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
365762306a36Sopenharmony_ci		.ifnum = QUIRK_ANY_INTERFACE,
365862306a36Sopenharmony_ci		.type = QUIRK_COMPOSITE,
365962306a36Sopenharmony_ci		.data = (const struct snd_usb_audio_quirk[]) {
366062306a36Sopenharmony_ci			{
366162306a36Sopenharmony_ci				.ifnum = 0,
366262306a36Sopenharmony_ci				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
366362306a36Sopenharmony_ci				.data = &(const struct audioformat) {
366462306a36Sopenharmony_ci					.formats = SNDRV_PCM_FMTBIT_S24_3LE,
366562306a36Sopenharmony_ci					.channels = 4,
366662306a36Sopenharmony_ci					.iface = 0,
366762306a36Sopenharmony_ci					.altsetting = 1,
366862306a36Sopenharmony_ci					.altset_idx = 1,
366962306a36Sopenharmony_ci					.endpoint = 0x01,
367062306a36Sopenharmony_ci					.ep_attr = USB_ENDPOINT_XFER_ISOC|
367162306a36Sopenharmony_ci						   USB_ENDPOINT_SYNC_ASYNC,
367262306a36Sopenharmony_ci					.rates = SNDRV_PCM_RATE_44100,
367362306a36Sopenharmony_ci					.rate_min = 44100,
367462306a36Sopenharmony_ci					.rate_max = 44100,
367562306a36Sopenharmony_ci					.nr_rates = 1,
367662306a36Sopenharmony_ci					.rate_table = (unsigned int[]) { 44100 }
367762306a36Sopenharmony_ci				}
367862306a36Sopenharmony_ci			},
367962306a36Sopenharmony_ci			{
368062306a36Sopenharmony_ci				.ifnum = 0,
368162306a36Sopenharmony_ci				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
368262306a36Sopenharmony_ci				.data = &(const struct audioformat) {
368362306a36Sopenharmony_ci					.formats = SNDRV_PCM_FMTBIT_S24_3LE,
368462306a36Sopenharmony_ci					.channels = 2,
368562306a36Sopenharmony_ci					.iface = 0,
368662306a36Sopenharmony_ci					.altsetting = 1,
368762306a36Sopenharmony_ci					.altset_idx = 1,
368862306a36Sopenharmony_ci					.endpoint = 0x82,
368962306a36Sopenharmony_ci					.ep_idx = 1,
369062306a36Sopenharmony_ci					.ep_attr = USB_ENDPOINT_XFER_ISOC|
369162306a36Sopenharmony_ci						 USB_ENDPOINT_SYNC_ASYNC|
369262306a36Sopenharmony_ci						 USB_ENDPOINT_USAGE_IMPLICIT_FB,
369362306a36Sopenharmony_ci					.rates = SNDRV_PCM_RATE_44100,
369462306a36Sopenharmony_ci					.rate_min = 44100,
369562306a36Sopenharmony_ci					.rate_max = 44100,
369662306a36Sopenharmony_ci					.nr_rates = 1,
369762306a36Sopenharmony_ci					.rate_table = (unsigned int[]) { 44100 }
369862306a36Sopenharmony_ci				}
369962306a36Sopenharmony_ci			},
370062306a36Sopenharmony_ci			{
370162306a36Sopenharmony_ci				.ifnum = -1
370262306a36Sopenharmony_ci			}
370362306a36Sopenharmony_ci		}
370462306a36Sopenharmony_ci	}
370562306a36Sopenharmony_ci},
370662306a36Sopenharmony_ci
370762306a36Sopenharmony_ci{
370862306a36Sopenharmony_ci	/*
370962306a36Sopenharmony_ci	 * PIONEER DJ DDJ-RR
371062306a36Sopenharmony_ci	 * PCM is 6 channels out & 4 channels in @ 44.1 fixed
371162306a36Sopenharmony_ci	 */
371262306a36Sopenharmony_ci	USB_DEVICE_VENDOR_SPEC(0x2b73, 0x000d),
371362306a36Sopenharmony_ci	.driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
371462306a36Sopenharmony_ci		.ifnum = QUIRK_ANY_INTERFACE,
371562306a36Sopenharmony_ci		.type = QUIRK_COMPOSITE,
371662306a36Sopenharmony_ci		.data = (const struct snd_usb_audio_quirk[]) {
371762306a36Sopenharmony_ci			{
371862306a36Sopenharmony_ci				.ifnum = 0,
371962306a36Sopenharmony_ci				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
372062306a36Sopenharmony_ci				.data = &(const struct audioformat) {
372162306a36Sopenharmony_ci					.formats = SNDRV_PCM_FMTBIT_S24_3LE,
372262306a36Sopenharmony_ci					.channels = 6, //Master, Headphones & Booth
372362306a36Sopenharmony_ci					.iface = 0,
372462306a36Sopenharmony_ci					.altsetting = 1,
372562306a36Sopenharmony_ci					.altset_idx = 1,
372662306a36Sopenharmony_ci					.endpoint = 0x01,
372762306a36Sopenharmony_ci					.ep_attr = USB_ENDPOINT_XFER_ISOC|
372862306a36Sopenharmony_ci						   USB_ENDPOINT_SYNC_ASYNC,
372962306a36Sopenharmony_ci					.rates = SNDRV_PCM_RATE_44100,
373062306a36Sopenharmony_ci					.rate_min = 44100,
373162306a36Sopenharmony_ci					.rate_max = 44100,
373262306a36Sopenharmony_ci					.nr_rates = 1,
373362306a36Sopenharmony_ci					.rate_table = (unsigned int[]) { 44100 }
373462306a36Sopenharmony_ci				}
373562306a36Sopenharmony_ci			},
373662306a36Sopenharmony_ci			{
373762306a36Sopenharmony_ci				.ifnum = 0,
373862306a36Sopenharmony_ci				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
373962306a36Sopenharmony_ci				.data = &(const struct audioformat) {
374062306a36Sopenharmony_ci					.formats = SNDRV_PCM_FMTBIT_S24_3LE,
374162306a36Sopenharmony_ci					.channels = 4, //2x RCA inputs (CH1 & CH2)
374262306a36Sopenharmony_ci					.iface = 0,
374362306a36Sopenharmony_ci					.altsetting = 1,
374462306a36Sopenharmony_ci					.altset_idx = 1,
374562306a36Sopenharmony_ci					.endpoint = 0x82,
374662306a36Sopenharmony_ci					.ep_idx = 1,
374762306a36Sopenharmony_ci					.ep_attr = USB_ENDPOINT_XFER_ISOC|
374862306a36Sopenharmony_ci						 USB_ENDPOINT_SYNC_ASYNC|
374962306a36Sopenharmony_ci						 USB_ENDPOINT_USAGE_IMPLICIT_FB,
375062306a36Sopenharmony_ci					.rates = SNDRV_PCM_RATE_44100,
375162306a36Sopenharmony_ci					.rate_min = 44100,
375262306a36Sopenharmony_ci					.rate_max = 44100,
375362306a36Sopenharmony_ci					.nr_rates = 1,
375462306a36Sopenharmony_ci					.rate_table = (unsigned int[]) { 44100 }
375562306a36Sopenharmony_ci				}
375662306a36Sopenharmony_ci			},
375762306a36Sopenharmony_ci			{
375862306a36Sopenharmony_ci				.ifnum = -1
375962306a36Sopenharmony_ci			}
376062306a36Sopenharmony_ci		}
376162306a36Sopenharmony_ci	}
376262306a36Sopenharmony_ci},
376362306a36Sopenharmony_ci
376462306a36Sopenharmony_ci{
376562306a36Sopenharmony_ci	/*
376662306a36Sopenharmony_ci	 * PIONEER DJ DDJ-SR2
376762306a36Sopenharmony_ci	 * PCM is 4 channels out, 6 channels in @ 44.1 fixed
376862306a36Sopenharmony_ci	 * The Feedback for the output is the input
376962306a36Sopenharmony_ci	 */
377062306a36Sopenharmony_ci	USB_DEVICE_VENDOR_SPEC(0x2b73, 0x001e),
377162306a36Sopenharmony_ci		.driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
377262306a36Sopenharmony_ci		.ifnum = QUIRK_ANY_INTERFACE,
377362306a36Sopenharmony_ci		.type = QUIRK_COMPOSITE,
377462306a36Sopenharmony_ci		.data = (const struct snd_usb_audio_quirk[]) {
377562306a36Sopenharmony_ci			{
377662306a36Sopenharmony_ci				.ifnum = 0,
377762306a36Sopenharmony_ci				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
377862306a36Sopenharmony_ci				.data = &(const struct audioformat) {
377962306a36Sopenharmony_ci					.formats = SNDRV_PCM_FMTBIT_S24_3LE,
378062306a36Sopenharmony_ci					.channels = 4,
378162306a36Sopenharmony_ci					.iface = 0,
378262306a36Sopenharmony_ci					.altsetting = 1,
378362306a36Sopenharmony_ci					.altset_idx = 1,
378462306a36Sopenharmony_ci					.endpoint = 0x01,
378562306a36Sopenharmony_ci					.ep_attr = USB_ENDPOINT_XFER_ISOC|
378662306a36Sopenharmony_ci						USB_ENDPOINT_SYNC_ASYNC,
378762306a36Sopenharmony_ci					.rates = SNDRV_PCM_RATE_44100,
378862306a36Sopenharmony_ci					.rate_min = 44100,
378962306a36Sopenharmony_ci					.rate_max = 44100,
379062306a36Sopenharmony_ci					.nr_rates = 1,
379162306a36Sopenharmony_ci					.rate_table = (unsigned int[]) { 44100 }
379262306a36Sopenharmony_ci				}
379362306a36Sopenharmony_ci			},
379462306a36Sopenharmony_ci			{
379562306a36Sopenharmony_ci				.ifnum = 0,
379662306a36Sopenharmony_ci				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
379762306a36Sopenharmony_ci				.data = &(const struct audioformat) {
379862306a36Sopenharmony_ci					.formats = SNDRV_PCM_FMTBIT_S24_3LE,
379962306a36Sopenharmony_ci					.channels = 6,
380062306a36Sopenharmony_ci					.iface = 0,
380162306a36Sopenharmony_ci					.altsetting = 1,
380262306a36Sopenharmony_ci					.altset_idx = 1,
380362306a36Sopenharmony_ci					.endpoint = 0x82,
380462306a36Sopenharmony_ci					.ep_idx = 1,
380562306a36Sopenharmony_ci					.ep_attr = USB_ENDPOINT_XFER_ISOC|
380662306a36Sopenharmony_ci						USB_ENDPOINT_SYNC_ASYNC|
380762306a36Sopenharmony_ci					USB_ENDPOINT_USAGE_IMPLICIT_FB,
380862306a36Sopenharmony_ci					.rates = SNDRV_PCM_RATE_44100,
380962306a36Sopenharmony_ci					.rate_min = 44100,
381062306a36Sopenharmony_ci					.rate_max = 44100,
381162306a36Sopenharmony_ci					.nr_rates = 1,
381262306a36Sopenharmony_ci					.rate_table = (unsigned int[]) { 44100 }
381362306a36Sopenharmony_ci				}
381462306a36Sopenharmony_ci			},
381562306a36Sopenharmony_ci			{
381662306a36Sopenharmony_ci				.ifnum = -1
381762306a36Sopenharmony_ci			}
381862306a36Sopenharmony_ci		}
381962306a36Sopenharmony_ci	}
382062306a36Sopenharmony_ci},
382162306a36Sopenharmony_ci
382262306a36Sopenharmony_ci{
382362306a36Sopenharmony_ci	/*
382462306a36Sopenharmony_ci	 * Pioneer DJ DJM-900NXS2
382562306a36Sopenharmony_ci	 * 10 channels playback & 12 channels capture @ 44.1/48/96kHz S24LE
382662306a36Sopenharmony_ci	 */
382762306a36Sopenharmony_ci	USB_DEVICE_VENDOR_SPEC(0x2b73, 0x000a),
382862306a36Sopenharmony_ci	.driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
382962306a36Sopenharmony_ci		.ifnum = QUIRK_ANY_INTERFACE,
383062306a36Sopenharmony_ci		.type = QUIRK_COMPOSITE,
383162306a36Sopenharmony_ci		.data = (const struct snd_usb_audio_quirk[]) {
383262306a36Sopenharmony_ci			{
383362306a36Sopenharmony_ci				.ifnum = 0,
383462306a36Sopenharmony_ci				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
383562306a36Sopenharmony_ci				.data = &(const struct audioformat) {
383662306a36Sopenharmony_ci					.formats = SNDRV_PCM_FMTBIT_S24_3LE,
383762306a36Sopenharmony_ci					.channels = 10,
383862306a36Sopenharmony_ci					.iface = 0,
383962306a36Sopenharmony_ci					.altsetting = 1,
384062306a36Sopenharmony_ci					.altset_idx = 1,
384162306a36Sopenharmony_ci					.endpoint = 0x01,
384262306a36Sopenharmony_ci					.ep_attr = USB_ENDPOINT_XFER_ISOC|
384362306a36Sopenharmony_ci					    USB_ENDPOINT_SYNC_ASYNC,
384462306a36Sopenharmony_ci					.rates = SNDRV_PCM_RATE_44100|
384562306a36Sopenharmony_ci					    SNDRV_PCM_RATE_48000|
384662306a36Sopenharmony_ci					    SNDRV_PCM_RATE_96000,
384762306a36Sopenharmony_ci					.rate_min = 44100,
384862306a36Sopenharmony_ci					.rate_max = 96000,
384962306a36Sopenharmony_ci					.nr_rates = 3,
385062306a36Sopenharmony_ci					.rate_table = (unsigned int[]) {
385162306a36Sopenharmony_ci						44100, 48000, 96000
385262306a36Sopenharmony_ci					}
385362306a36Sopenharmony_ci				}
385462306a36Sopenharmony_ci			},
385562306a36Sopenharmony_ci			{
385662306a36Sopenharmony_ci				.ifnum = 0,
385762306a36Sopenharmony_ci				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
385862306a36Sopenharmony_ci				.data = &(const struct audioformat) {
385962306a36Sopenharmony_ci					.formats = SNDRV_PCM_FMTBIT_S24_3LE,
386062306a36Sopenharmony_ci					.channels = 12,
386162306a36Sopenharmony_ci					.iface = 0,
386262306a36Sopenharmony_ci					.altsetting = 1,
386362306a36Sopenharmony_ci					.altset_idx = 1,
386462306a36Sopenharmony_ci					.endpoint = 0x82,
386562306a36Sopenharmony_ci					.ep_idx = 1,
386662306a36Sopenharmony_ci					.ep_attr = USB_ENDPOINT_XFER_ISOC|
386762306a36Sopenharmony_ci					    USB_ENDPOINT_SYNC_ASYNC|
386862306a36Sopenharmony_ci					    USB_ENDPOINT_USAGE_IMPLICIT_FB,
386962306a36Sopenharmony_ci					.rates = SNDRV_PCM_RATE_44100|
387062306a36Sopenharmony_ci					    SNDRV_PCM_RATE_48000|
387162306a36Sopenharmony_ci					    SNDRV_PCM_RATE_96000,
387262306a36Sopenharmony_ci					.rate_min = 44100,
387362306a36Sopenharmony_ci					.rate_max = 96000,
387462306a36Sopenharmony_ci					.nr_rates = 3,
387562306a36Sopenharmony_ci					.rate_table = (unsigned int[]) {
387662306a36Sopenharmony_ci						44100, 48000, 96000
387762306a36Sopenharmony_ci					}
387862306a36Sopenharmony_ci				}
387962306a36Sopenharmony_ci			},
388062306a36Sopenharmony_ci			{
388162306a36Sopenharmony_ci				.ifnum = -1
388262306a36Sopenharmony_ci			}
388362306a36Sopenharmony_ci		}
388462306a36Sopenharmony_ci	}
388562306a36Sopenharmony_ci},
388662306a36Sopenharmony_ci
388762306a36Sopenharmony_ci{
388862306a36Sopenharmony_ci	/*
388962306a36Sopenharmony_ci	 * PIONEER DJ DDJ-800
389062306a36Sopenharmony_ci	 * PCM is 6 channels out, 6 channels in @ 44.1 fixed
389162306a36Sopenharmony_ci	 * The Feedback for the output is the input
389262306a36Sopenharmony_ci	 */
389362306a36Sopenharmony_ci	USB_DEVICE_VENDOR_SPEC(0x2b73, 0x0029),
389462306a36Sopenharmony_ci		.driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
389562306a36Sopenharmony_ci		.ifnum = QUIRK_ANY_INTERFACE,
389662306a36Sopenharmony_ci		.type = QUIRK_COMPOSITE,
389762306a36Sopenharmony_ci		.data = (const struct snd_usb_audio_quirk[]) {
389862306a36Sopenharmony_ci			{
389962306a36Sopenharmony_ci				.ifnum = 0,
390062306a36Sopenharmony_ci				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
390162306a36Sopenharmony_ci				.data = &(const struct audioformat) {
390262306a36Sopenharmony_ci					.formats = SNDRV_PCM_FMTBIT_S24_3LE,
390362306a36Sopenharmony_ci					.channels = 6,
390462306a36Sopenharmony_ci					.iface = 0,
390562306a36Sopenharmony_ci					.altsetting = 1,
390662306a36Sopenharmony_ci					.altset_idx = 1,
390762306a36Sopenharmony_ci					.endpoint = 0x01,
390862306a36Sopenharmony_ci					.ep_attr = USB_ENDPOINT_XFER_ISOC|
390962306a36Sopenharmony_ci						USB_ENDPOINT_SYNC_ASYNC,
391062306a36Sopenharmony_ci					.rates = SNDRV_PCM_RATE_44100,
391162306a36Sopenharmony_ci					.rate_min = 44100,
391262306a36Sopenharmony_ci					.rate_max = 44100,
391362306a36Sopenharmony_ci					.nr_rates = 1,
391462306a36Sopenharmony_ci					.rate_table = (unsigned int[]) { 44100 }
391562306a36Sopenharmony_ci				}
391662306a36Sopenharmony_ci			},
391762306a36Sopenharmony_ci			{
391862306a36Sopenharmony_ci				.ifnum = 0,
391962306a36Sopenharmony_ci				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
392062306a36Sopenharmony_ci				.data = &(const struct audioformat) {
392162306a36Sopenharmony_ci					.formats = SNDRV_PCM_FMTBIT_S24_3LE,
392262306a36Sopenharmony_ci					.channels = 6,
392362306a36Sopenharmony_ci					.iface = 0,
392462306a36Sopenharmony_ci					.altsetting = 1,
392562306a36Sopenharmony_ci					.altset_idx = 1,
392662306a36Sopenharmony_ci					.endpoint = 0x82,
392762306a36Sopenharmony_ci					.ep_idx = 1,
392862306a36Sopenharmony_ci					.ep_attr = USB_ENDPOINT_XFER_ISOC|
392962306a36Sopenharmony_ci						USB_ENDPOINT_SYNC_ASYNC|
393062306a36Sopenharmony_ci					USB_ENDPOINT_USAGE_IMPLICIT_FB,
393162306a36Sopenharmony_ci					.rates = SNDRV_PCM_RATE_44100,
393262306a36Sopenharmony_ci					.rate_min = 44100,
393362306a36Sopenharmony_ci					.rate_max = 44100,
393462306a36Sopenharmony_ci					.nr_rates = 1,
393562306a36Sopenharmony_ci					.rate_table = (unsigned int[]) { 44100 }
393662306a36Sopenharmony_ci				}
393762306a36Sopenharmony_ci			},
393862306a36Sopenharmony_ci			{
393962306a36Sopenharmony_ci				.ifnum = -1
394062306a36Sopenharmony_ci			}
394162306a36Sopenharmony_ci		}
394262306a36Sopenharmony_ci	}
394362306a36Sopenharmony_ci},
394462306a36Sopenharmony_ci
394562306a36Sopenharmony_ci/*
394662306a36Sopenharmony_ci * MacroSilicon MS2100/MS2106 based AV capture cards
394762306a36Sopenharmony_ci *
394862306a36Sopenharmony_ci * These claim 96kHz 1ch in the descriptors, but are actually 48kHz 2ch.
394962306a36Sopenharmony_ci * They also need QUIRK_FLAG_ALIGN_TRANSFER, which makes one wonder if
395062306a36Sopenharmony_ci * they pretend to be 96kHz mono as a workaround for stereo being broken
395162306a36Sopenharmony_ci * by that...
395262306a36Sopenharmony_ci *
395362306a36Sopenharmony_ci * They also have an issue with initial stream alignment that causes the
395462306a36Sopenharmony_ci * channels to be swapped and out of phase, which is dealt with in quirks.c.
395562306a36Sopenharmony_ci */
395662306a36Sopenharmony_ci{
395762306a36Sopenharmony_ci	USB_AUDIO_DEVICE(0x534d, 0x0021),
395862306a36Sopenharmony_ci	.driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
395962306a36Sopenharmony_ci		.vendor_name = "MacroSilicon",
396062306a36Sopenharmony_ci		.product_name = "MS210x",
396162306a36Sopenharmony_ci		.ifnum = QUIRK_ANY_INTERFACE,
396262306a36Sopenharmony_ci		.type = QUIRK_COMPOSITE,
396362306a36Sopenharmony_ci		.data = &(const struct snd_usb_audio_quirk[]) {
396462306a36Sopenharmony_ci			{
396562306a36Sopenharmony_ci				.ifnum = 2,
396662306a36Sopenharmony_ci				.type = QUIRK_AUDIO_STANDARD_MIXER,
396762306a36Sopenharmony_ci			},
396862306a36Sopenharmony_ci			{
396962306a36Sopenharmony_ci				.ifnum = 3,
397062306a36Sopenharmony_ci				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
397162306a36Sopenharmony_ci				.data = &(const struct audioformat) {
397262306a36Sopenharmony_ci					.formats = SNDRV_PCM_FMTBIT_S16_LE,
397362306a36Sopenharmony_ci					.channels = 2,
397462306a36Sopenharmony_ci					.iface = 3,
397562306a36Sopenharmony_ci					.altsetting = 1,
397662306a36Sopenharmony_ci					.altset_idx = 1,
397762306a36Sopenharmony_ci					.attributes = 0,
397862306a36Sopenharmony_ci					.endpoint = 0x82,
397962306a36Sopenharmony_ci					.ep_attr = USB_ENDPOINT_XFER_ISOC |
398062306a36Sopenharmony_ci						USB_ENDPOINT_SYNC_ASYNC,
398162306a36Sopenharmony_ci					.rates = SNDRV_PCM_RATE_CONTINUOUS,
398262306a36Sopenharmony_ci					.rate_min = 48000,
398362306a36Sopenharmony_ci					.rate_max = 48000,
398462306a36Sopenharmony_ci				}
398562306a36Sopenharmony_ci			},
398662306a36Sopenharmony_ci			{
398762306a36Sopenharmony_ci				.ifnum = -1
398862306a36Sopenharmony_ci			}
398962306a36Sopenharmony_ci		}
399062306a36Sopenharmony_ci	}
399162306a36Sopenharmony_ci},
399262306a36Sopenharmony_ci
399362306a36Sopenharmony_ci/*
399462306a36Sopenharmony_ci * MacroSilicon MS2109 based HDMI capture cards
399562306a36Sopenharmony_ci *
399662306a36Sopenharmony_ci * These claim 96kHz 1ch in the descriptors, but are actually 48kHz 2ch.
399762306a36Sopenharmony_ci * They also need QUIRK_FLAG_ALIGN_TRANSFER, which makes one wonder if
399862306a36Sopenharmony_ci * they pretend to be 96kHz mono as a workaround for stereo being broken
399962306a36Sopenharmony_ci * by that...
400062306a36Sopenharmony_ci *
400162306a36Sopenharmony_ci * They also have an issue with initial stream alignment that causes the
400262306a36Sopenharmony_ci * channels to be swapped and out of phase, which is dealt with in quirks.c.
400362306a36Sopenharmony_ci */
400462306a36Sopenharmony_ci{
400562306a36Sopenharmony_ci	USB_AUDIO_DEVICE(0x534d, 0x2109),
400662306a36Sopenharmony_ci	.driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
400762306a36Sopenharmony_ci		.vendor_name = "MacroSilicon",
400862306a36Sopenharmony_ci		.product_name = "MS2109",
400962306a36Sopenharmony_ci		.ifnum = QUIRK_ANY_INTERFACE,
401062306a36Sopenharmony_ci		.type = QUIRK_COMPOSITE,
401162306a36Sopenharmony_ci		.data = &(const struct snd_usb_audio_quirk[]) {
401262306a36Sopenharmony_ci			{
401362306a36Sopenharmony_ci				.ifnum = 2,
401462306a36Sopenharmony_ci				.type = QUIRK_AUDIO_STANDARD_MIXER,
401562306a36Sopenharmony_ci			},
401662306a36Sopenharmony_ci			{
401762306a36Sopenharmony_ci				.ifnum = 3,
401862306a36Sopenharmony_ci				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
401962306a36Sopenharmony_ci				.data = &(const struct audioformat) {
402062306a36Sopenharmony_ci					.formats = SNDRV_PCM_FMTBIT_S16_LE,
402162306a36Sopenharmony_ci					.channels = 2,
402262306a36Sopenharmony_ci					.iface = 3,
402362306a36Sopenharmony_ci					.altsetting = 1,
402462306a36Sopenharmony_ci					.altset_idx = 1,
402562306a36Sopenharmony_ci					.attributes = 0,
402662306a36Sopenharmony_ci					.endpoint = 0x82,
402762306a36Sopenharmony_ci					.ep_attr = USB_ENDPOINT_XFER_ISOC |
402862306a36Sopenharmony_ci						USB_ENDPOINT_SYNC_ASYNC,
402962306a36Sopenharmony_ci					.rates = SNDRV_PCM_RATE_CONTINUOUS,
403062306a36Sopenharmony_ci					.rate_min = 48000,
403162306a36Sopenharmony_ci					.rate_max = 48000,
403262306a36Sopenharmony_ci				}
403362306a36Sopenharmony_ci			},
403462306a36Sopenharmony_ci			{
403562306a36Sopenharmony_ci				.ifnum = -1
403662306a36Sopenharmony_ci			}
403762306a36Sopenharmony_ci		}
403862306a36Sopenharmony_ci	}
403962306a36Sopenharmony_ci},
404062306a36Sopenharmony_ci{
404162306a36Sopenharmony_ci	/*
404262306a36Sopenharmony_ci	 * Pioneer DJ DJM-750
404362306a36Sopenharmony_ci	 * 8 channels playback & 8 channels capture @ 44.1/48/96kHz S24LE
404462306a36Sopenharmony_ci	 */
404562306a36Sopenharmony_ci	USB_DEVICE_VENDOR_SPEC(0x08e4, 0x017f),
404662306a36Sopenharmony_ci	.driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
404762306a36Sopenharmony_ci		.ifnum = QUIRK_ANY_INTERFACE,
404862306a36Sopenharmony_ci		.type = QUIRK_COMPOSITE,
404962306a36Sopenharmony_ci		.data = (const struct snd_usb_audio_quirk[]) {
405062306a36Sopenharmony_ci			{
405162306a36Sopenharmony_ci				.ifnum = 0,
405262306a36Sopenharmony_ci				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
405362306a36Sopenharmony_ci				.data = &(const struct audioformat) {
405462306a36Sopenharmony_ci					.formats = SNDRV_PCM_FMTBIT_S24_3LE,
405562306a36Sopenharmony_ci					.channels = 8,
405662306a36Sopenharmony_ci					.iface = 0,
405762306a36Sopenharmony_ci					.altsetting = 1,
405862306a36Sopenharmony_ci					.altset_idx = 1,
405962306a36Sopenharmony_ci					.endpoint = 0x05,
406062306a36Sopenharmony_ci					.ep_attr = USB_ENDPOINT_XFER_ISOC|
406162306a36Sopenharmony_ci					    USB_ENDPOINT_SYNC_ASYNC,
406262306a36Sopenharmony_ci					.rates = SNDRV_PCM_RATE_44100|
406362306a36Sopenharmony_ci						SNDRV_PCM_RATE_48000|
406462306a36Sopenharmony_ci						SNDRV_PCM_RATE_96000,
406562306a36Sopenharmony_ci					.rate_min = 44100,
406662306a36Sopenharmony_ci					.rate_max = 96000,
406762306a36Sopenharmony_ci					.nr_rates = 3,
406862306a36Sopenharmony_ci					.rate_table = (unsigned int[]) { 44100, 48000, 96000 }
406962306a36Sopenharmony_ci				}
407062306a36Sopenharmony_ci			},
407162306a36Sopenharmony_ci			{
407262306a36Sopenharmony_ci				.ifnum = 0,
407362306a36Sopenharmony_ci				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
407462306a36Sopenharmony_ci				.data = &(const struct audioformat) {
407562306a36Sopenharmony_ci					.formats = SNDRV_PCM_FMTBIT_S24_3LE,
407662306a36Sopenharmony_ci					.channels = 8,
407762306a36Sopenharmony_ci					.iface = 0,
407862306a36Sopenharmony_ci					.altsetting = 1,
407962306a36Sopenharmony_ci					.altset_idx = 1,
408062306a36Sopenharmony_ci					.endpoint = 0x86,
408162306a36Sopenharmony_ci					.ep_idx = 1,
408262306a36Sopenharmony_ci					.ep_attr = USB_ENDPOINT_XFER_ISOC|
408362306a36Sopenharmony_ci						USB_ENDPOINT_SYNC_ASYNC|
408462306a36Sopenharmony_ci						USB_ENDPOINT_USAGE_IMPLICIT_FB,
408562306a36Sopenharmony_ci					.rates = SNDRV_PCM_RATE_44100|
408662306a36Sopenharmony_ci						SNDRV_PCM_RATE_48000|
408762306a36Sopenharmony_ci						SNDRV_PCM_RATE_96000,
408862306a36Sopenharmony_ci					.rate_min = 44100,
408962306a36Sopenharmony_ci					.rate_max = 96000,
409062306a36Sopenharmony_ci					.nr_rates = 3,
409162306a36Sopenharmony_ci					.rate_table = (unsigned int[]) { 44100, 48000, 96000 }
409262306a36Sopenharmony_ci				}
409362306a36Sopenharmony_ci			},
409462306a36Sopenharmony_ci			{
409562306a36Sopenharmony_ci				.ifnum = -1
409662306a36Sopenharmony_ci			}
409762306a36Sopenharmony_ci		}
409862306a36Sopenharmony_ci	}
409962306a36Sopenharmony_ci},
410062306a36Sopenharmony_ci{
410162306a36Sopenharmony_ci	/*
410262306a36Sopenharmony_ci	 * Pioneer DJ DJM-750MK2
410362306a36Sopenharmony_ci	 * 10 channels playback & 12 channels capture @ 48kHz S24LE
410462306a36Sopenharmony_ci	 */
410562306a36Sopenharmony_ci	USB_DEVICE_VENDOR_SPEC(0x2b73, 0x001b),
410662306a36Sopenharmony_ci	.driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
410762306a36Sopenharmony_ci		.ifnum = QUIRK_ANY_INTERFACE,
410862306a36Sopenharmony_ci		.type = QUIRK_COMPOSITE,
410962306a36Sopenharmony_ci		.data = (const struct snd_usb_audio_quirk[]) {
411062306a36Sopenharmony_ci			{
411162306a36Sopenharmony_ci				.ifnum = 0,
411262306a36Sopenharmony_ci				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
411362306a36Sopenharmony_ci				.data = &(const struct audioformat) {
411462306a36Sopenharmony_ci					.formats = SNDRV_PCM_FMTBIT_S24_3LE,
411562306a36Sopenharmony_ci					.channels = 10,
411662306a36Sopenharmony_ci					.iface = 0,
411762306a36Sopenharmony_ci					.altsetting = 1,
411862306a36Sopenharmony_ci					.altset_idx = 1,
411962306a36Sopenharmony_ci					.endpoint = 0x01,
412062306a36Sopenharmony_ci					.ep_attr = USB_ENDPOINT_XFER_ISOC|
412162306a36Sopenharmony_ci					    USB_ENDPOINT_SYNC_ASYNC,
412262306a36Sopenharmony_ci					.rates = SNDRV_PCM_RATE_48000,
412362306a36Sopenharmony_ci					.rate_min = 48000,
412462306a36Sopenharmony_ci					.rate_max = 48000,
412562306a36Sopenharmony_ci					.nr_rates = 1,
412662306a36Sopenharmony_ci					.rate_table = (unsigned int[]) {
412762306a36Sopenharmony_ci						48000
412862306a36Sopenharmony_ci					}
412962306a36Sopenharmony_ci				}
413062306a36Sopenharmony_ci			},
413162306a36Sopenharmony_ci			{
413262306a36Sopenharmony_ci				.ifnum = 0,
413362306a36Sopenharmony_ci				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
413462306a36Sopenharmony_ci				.data = &(const struct audioformat) {
413562306a36Sopenharmony_ci					.formats = SNDRV_PCM_FMTBIT_S24_3LE,
413662306a36Sopenharmony_ci					.channels = 12,
413762306a36Sopenharmony_ci					.iface = 0,
413862306a36Sopenharmony_ci					.altsetting = 1,
413962306a36Sopenharmony_ci					.altset_idx = 1,
414062306a36Sopenharmony_ci					.endpoint = 0x82,
414162306a36Sopenharmony_ci					.ep_idx = 1,
414262306a36Sopenharmony_ci					.ep_attr = USB_ENDPOINT_XFER_ISOC|
414362306a36Sopenharmony_ci						USB_ENDPOINT_SYNC_ASYNC|
414462306a36Sopenharmony_ci						USB_ENDPOINT_USAGE_IMPLICIT_FB,
414562306a36Sopenharmony_ci					.rates = SNDRV_PCM_RATE_48000,
414662306a36Sopenharmony_ci					.rate_min = 48000,
414762306a36Sopenharmony_ci					.rate_max = 48000,
414862306a36Sopenharmony_ci					.nr_rates = 1,
414962306a36Sopenharmony_ci					.rate_table = (unsigned int[]) { 48000 }
415062306a36Sopenharmony_ci				}
415162306a36Sopenharmony_ci			},
415262306a36Sopenharmony_ci			{
415362306a36Sopenharmony_ci				.ifnum = -1
415462306a36Sopenharmony_ci			}
415562306a36Sopenharmony_ci		}
415662306a36Sopenharmony_ci	}
415762306a36Sopenharmony_ci},
415862306a36Sopenharmony_ci{
415962306a36Sopenharmony_ci	/*
416062306a36Sopenharmony_ci	 * Pioneer DJ DJM-850
416162306a36Sopenharmony_ci	 * 8 channels playback and 8 channels capture @ 44.1/48/96kHz S24LE
416262306a36Sopenharmony_ci	 * Playback on EP 0x05
416362306a36Sopenharmony_ci	 * Capture on EP 0x86
416462306a36Sopenharmony_ci	 */
416562306a36Sopenharmony_ci	USB_DEVICE_VENDOR_SPEC(0x08e4, 0x0163),
416662306a36Sopenharmony_ci	.driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
416762306a36Sopenharmony_ci		.ifnum = QUIRK_ANY_INTERFACE,
416862306a36Sopenharmony_ci		.type = QUIRK_COMPOSITE,
416962306a36Sopenharmony_ci		.data = (const struct snd_usb_audio_quirk[]) {
417062306a36Sopenharmony_ci			{
417162306a36Sopenharmony_ci				.ifnum = 0,
417262306a36Sopenharmony_ci				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
417362306a36Sopenharmony_ci				.data = &(const struct audioformat) {
417462306a36Sopenharmony_ci					.formats = SNDRV_PCM_FMTBIT_S24_3LE,
417562306a36Sopenharmony_ci					.channels = 8,
417662306a36Sopenharmony_ci					.iface = 0,
417762306a36Sopenharmony_ci					.altsetting = 1,
417862306a36Sopenharmony_ci					.altset_idx = 1,
417962306a36Sopenharmony_ci					.endpoint = 0x05,
418062306a36Sopenharmony_ci					.ep_attr = USB_ENDPOINT_XFER_ISOC|
418162306a36Sopenharmony_ci					    USB_ENDPOINT_SYNC_ASYNC|
418262306a36Sopenharmony_ci						USB_ENDPOINT_USAGE_DATA,
418362306a36Sopenharmony_ci					.rates = SNDRV_PCM_RATE_44100|
418462306a36Sopenharmony_ci						SNDRV_PCM_RATE_48000|
418562306a36Sopenharmony_ci						SNDRV_PCM_RATE_96000,
418662306a36Sopenharmony_ci					.rate_min = 44100,
418762306a36Sopenharmony_ci					.rate_max = 96000,
418862306a36Sopenharmony_ci					.nr_rates = 3,
418962306a36Sopenharmony_ci					.rate_table = (unsigned int[]) { 44100, 48000, 96000 }
419062306a36Sopenharmony_ci				}
419162306a36Sopenharmony_ci			},
419262306a36Sopenharmony_ci			{
419362306a36Sopenharmony_ci				.ifnum = 0,
419462306a36Sopenharmony_ci				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
419562306a36Sopenharmony_ci				.data = &(const struct audioformat) {
419662306a36Sopenharmony_ci					.formats = SNDRV_PCM_FMTBIT_S24_3LE,
419762306a36Sopenharmony_ci					.channels = 8,
419862306a36Sopenharmony_ci					.iface = 0,
419962306a36Sopenharmony_ci					.altsetting = 1,
420062306a36Sopenharmony_ci					.altset_idx = 1,
420162306a36Sopenharmony_ci					.endpoint = 0x86,
420262306a36Sopenharmony_ci					.ep_idx = 1,
420362306a36Sopenharmony_ci					.ep_attr = USB_ENDPOINT_XFER_ISOC|
420462306a36Sopenharmony_ci						USB_ENDPOINT_SYNC_ASYNC|
420562306a36Sopenharmony_ci						USB_ENDPOINT_USAGE_DATA,
420662306a36Sopenharmony_ci					.rates = SNDRV_PCM_RATE_44100|
420762306a36Sopenharmony_ci						SNDRV_PCM_RATE_48000|
420862306a36Sopenharmony_ci						SNDRV_PCM_RATE_96000,
420962306a36Sopenharmony_ci					.rate_min = 44100,
421062306a36Sopenharmony_ci					.rate_max = 96000,
421162306a36Sopenharmony_ci					.nr_rates = 3,
421262306a36Sopenharmony_ci					.rate_table = (unsigned int[]) { 44100, 48000, 96000 }
421362306a36Sopenharmony_ci				}
421462306a36Sopenharmony_ci			},
421562306a36Sopenharmony_ci			{
421662306a36Sopenharmony_ci				.ifnum = -1
421762306a36Sopenharmony_ci			}
421862306a36Sopenharmony_ci		}
421962306a36Sopenharmony_ci	}
422062306a36Sopenharmony_ci},
422162306a36Sopenharmony_ci{
422262306a36Sopenharmony_ci	/*
422362306a36Sopenharmony_ci	 * Pioneer DJ DJM-450
422462306a36Sopenharmony_ci	 * PCM is 8 channels out @ 48 fixed (endpoint 0x01)
422562306a36Sopenharmony_ci	 * and 8 channels in @ 48 fixed (endpoint 0x82).
422662306a36Sopenharmony_ci	 */
422762306a36Sopenharmony_ci	USB_DEVICE_VENDOR_SPEC(0x2b73, 0x0013),
422862306a36Sopenharmony_ci	.driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
422962306a36Sopenharmony_ci		.ifnum = QUIRK_ANY_INTERFACE,
423062306a36Sopenharmony_ci		.type = QUIRK_COMPOSITE,
423162306a36Sopenharmony_ci		.data = (const struct snd_usb_audio_quirk[]) {
423262306a36Sopenharmony_ci			{
423362306a36Sopenharmony_ci				.ifnum = 0,
423462306a36Sopenharmony_ci				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
423562306a36Sopenharmony_ci				.data = &(const struct audioformat) {
423662306a36Sopenharmony_ci					.formats = SNDRV_PCM_FMTBIT_S24_3LE,
423762306a36Sopenharmony_ci					.channels = 8, // outputs
423862306a36Sopenharmony_ci					.iface = 0,
423962306a36Sopenharmony_ci					.altsetting = 1,
424062306a36Sopenharmony_ci					.altset_idx = 1,
424162306a36Sopenharmony_ci					.endpoint = 0x01,
424262306a36Sopenharmony_ci					.ep_attr = USB_ENDPOINT_XFER_ISOC|
424362306a36Sopenharmony_ci						USB_ENDPOINT_SYNC_ASYNC,
424462306a36Sopenharmony_ci					.rates = SNDRV_PCM_RATE_48000,
424562306a36Sopenharmony_ci					.rate_min = 48000,
424662306a36Sopenharmony_ci					.rate_max = 48000,
424762306a36Sopenharmony_ci					.nr_rates = 1,
424862306a36Sopenharmony_ci					.rate_table = (unsigned int[]) { 48000 }
424962306a36Sopenharmony_ci					}
425062306a36Sopenharmony_ci			},
425162306a36Sopenharmony_ci			{
425262306a36Sopenharmony_ci				.ifnum = 0,
425362306a36Sopenharmony_ci				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
425462306a36Sopenharmony_ci				.data = &(const struct audioformat) {
425562306a36Sopenharmony_ci					.formats = SNDRV_PCM_FMTBIT_S24_3LE,
425662306a36Sopenharmony_ci					.channels = 8, // inputs
425762306a36Sopenharmony_ci					.iface = 0,
425862306a36Sopenharmony_ci					.altsetting = 1,
425962306a36Sopenharmony_ci					.altset_idx = 1,
426062306a36Sopenharmony_ci					.endpoint = 0x82,
426162306a36Sopenharmony_ci					.ep_idx = 1,
426262306a36Sopenharmony_ci					.ep_attr = USB_ENDPOINT_XFER_ISOC|
426362306a36Sopenharmony_ci						USB_ENDPOINT_SYNC_ASYNC|
426462306a36Sopenharmony_ci						USB_ENDPOINT_USAGE_IMPLICIT_FB,
426562306a36Sopenharmony_ci					.rates = SNDRV_PCM_RATE_48000,
426662306a36Sopenharmony_ci					.rate_min = 48000,
426762306a36Sopenharmony_ci					.rate_max = 48000,
426862306a36Sopenharmony_ci					.nr_rates = 1,
426962306a36Sopenharmony_ci					.rate_table = (unsigned int[]) { 48000 }
427062306a36Sopenharmony_ci				}
427162306a36Sopenharmony_ci			},
427262306a36Sopenharmony_ci			{
427362306a36Sopenharmony_ci				.ifnum = -1
427462306a36Sopenharmony_ci			}
427562306a36Sopenharmony_ci		}
427662306a36Sopenharmony_ci	}
427762306a36Sopenharmony_ci},
427862306a36Sopenharmony_ci{
427962306a36Sopenharmony_ci	/*
428062306a36Sopenharmony_ci	 * Sennheiser GSP670
428162306a36Sopenharmony_ci	 * Change order of interfaces loaded
428262306a36Sopenharmony_ci	 */
428362306a36Sopenharmony_ci	USB_DEVICE(0x1395, 0x0300),
428462306a36Sopenharmony_ci	.bInterfaceClass = USB_CLASS_PER_INTERFACE,
428562306a36Sopenharmony_ci	.driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
428662306a36Sopenharmony_ci		.ifnum = QUIRK_ANY_INTERFACE,
428762306a36Sopenharmony_ci		.type = QUIRK_COMPOSITE,
428862306a36Sopenharmony_ci		.data = &(const struct snd_usb_audio_quirk[]) {
428962306a36Sopenharmony_ci			// Communication
429062306a36Sopenharmony_ci			{
429162306a36Sopenharmony_ci				.ifnum = 3,
429262306a36Sopenharmony_ci				.type = QUIRK_AUDIO_STANDARD_INTERFACE
429362306a36Sopenharmony_ci			},
429462306a36Sopenharmony_ci			// Recording
429562306a36Sopenharmony_ci			{
429662306a36Sopenharmony_ci				.ifnum = 4,
429762306a36Sopenharmony_ci				.type = QUIRK_AUDIO_STANDARD_INTERFACE
429862306a36Sopenharmony_ci			},
429962306a36Sopenharmony_ci			// Main
430062306a36Sopenharmony_ci			{
430162306a36Sopenharmony_ci				.ifnum = 1,
430262306a36Sopenharmony_ci				.type = QUIRK_AUDIO_STANDARD_INTERFACE
430362306a36Sopenharmony_ci			},
430462306a36Sopenharmony_ci			{
430562306a36Sopenharmony_ci				.ifnum = -1
430662306a36Sopenharmony_ci			}
430762306a36Sopenharmony_ci		}
430862306a36Sopenharmony_ci	}
430962306a36Sopenharmony_ci},
431062306a36Sopenharmony_ci{
431162306a36Sopenharmony_ci	/*
431262306a36Sopenharmony_ci	 * Fiero SC-01 (firmware v1.0.0 @ 48 kHz)
431362306a36Sopenharmony_ci	 */
431462306a36Sopenharmony_ci	USB_DEVICE(0x2b53, 0x0023),
431562306a36Sopenharmony_ci	.driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
431662306a36Sopenharmony_ci		.vendor_name = "Fiero",
431762306a36Sopenharmony_ci		.product_name = "SC-01",
431862306a36Sopenharmony_ci		.ifnum = QUIRK_ANY_INTERFACE,
431962306a36Sopenharmony_ci		.type = QUIRK_COMPOSITE,
432062306a36Sopenharmony_ci		.data = &(const struct snd_usb_audio_quirk[]) {
432162306a36Sopenharmony_ci			{
432262306a36Sopenharmony_ci				.ifnum = 0,
432362306a36Sopenharmony_ci				.type = QUIRK_AUDIO_STANDARD_INTERFACE
432462306a36Sopenharmony_ci			},
432562306a36Sopenharmony_ci			/* Playback */
432662306a36Sopenharmony_ci			{
432762306a36Sopenharmony_ci				.ifnum = 1,
432862306a36Sopenharmony_ci				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
432962306a36Sopenharmony_ci				.data = &(const struct audioformat) {
433062306a36Sopenharmony_ci					.formats = SNDRV_PCM_FMTBIT_S32_LE,
433162306a36Sopenharmony_ci					.channels = 2,
433262306a36Sopenharmony_ci					.fmt_bits = 24,
433362306a36Sopenharmony_ci					.iface = 1,
433462306a36Sopenharmony_ci					.altsetting = 1,
433562306a36Sopenharmony_ci					.altset_idx = 1,
433662306a36Sopenharmony_ci					.endpoint = 0x01,
433762306a36Sopenharmony_ci					.ep_attr = USB_ENDPOINT_XFER_ISOC |
433862306a36Sopenharmony_ci						   USB_ENDPOINT_SYNC_ASYNC,
433962306a36Sopenharmony_ci					.rates = SNDRV_PCM_RATE_48000,
434062306a36Sopenharmony_ci					.rate_min = 48000,
434162306a36Sopenharmony_ci					.rate_max = 48000,
434262306a36Sopenharmony_ci					.nr_rates = 1,
434362306a36Sopenharmony_ci					.rate_table = (unsigned int[]) { 48000 },
434462306a36Sopenharmony_ci					.clock = 0x29
434562306a36Sopenharmony_ci				}
434662306a36Sopenharmony_ci			},
434762306a36Sopenharmony_ci			/* Capture */
434862306a36Sopenharmony_ci			{
434962306a36Sopenharmony_ci				.ifnum = 2,
435062306a36Sopenharmony_ci				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
435162306a36Sopenharmony_ci				.data = &(const struct audioformat) {
435262306a36Sopenharmony_ci					.formats = SNDRV_PCM_FMTBIT_S32_LE,
435362306a36Sopenharmony_ci					.channels = 2,
435462306a36Sopenharmony_ci					.fmt_bits = 24,
435562306a36Sopenharmony_ci					.iface = 2,
435662306a36Sopenharmony_ci					.altsetting = 1,
435762306a36Sopenharmony_ci					.altset_idx = 1,
435862306a36Sopenharmony_ci					.endpoint = 0x82,
435962306a36Sopenharmony_ci					.ep_attr = USB_ENDPOINT_XFER_ISOC |
436062306a36Sopenharmony_ci						   USB_ENDPOINT_SYNC_ASYNC |
436162306a36Sopenharmony_ci						   USB_ENDPOINT_USAGE_IMPLICIT_FB,
436262306a36Sopenharmony_ci					.rates = SNDRV_PCM_RATE_48000,
436362306a36Sopenharmony_ci					.rate_min = 48000,
436462306a36Sopenharmony_ci					.rate_max = 48000,
436562306a36Sopenharmony_ci					.nr_rates = 1,
436662306a36Sopenharmony_ci					.rate_table = (unsigned int[]) { 48000 },
436762306a36Sopenharmony_ci					.clock = 0x29
436862306a36Sopenharmony_ci				}
436962306a36Sopenharmony_ci			},
437062306a36Sopenharmony_ci			{
437162306a36Sopenharmony_ci				.ifnum = -1
437262306a36Sopenharmony_ci			}
437362306a36Sopenharmony_ci		}
437462306a36Sopenharmony_ci	}
437562306a36Sopenharmony_ci},
437662306a36Sopenharmony_ci{
437762306a36Sopenharmony_ci	/*
437862306a36Sopenharmony_ci	 * Fiero SC-01 (firmware v1.0.0 @ 96 kHz)
437962306a36Sopenharmony_ci	 */
438062306a36Sopenharmony_ci	USB_DEVICE(0x2b53, 0x0024),
438162306a36Sopenharmony_ci	.driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
438262306a36Sopenharmony_ci		.vendor_name = "Fiero",
438362306a36Sopenharmony_ci		.product_name = "SC-01",
438462306a36Sopenharmony_ci		.ifnum = QUIRK_ANY_INTERFACE,
438562306a36Sopenharmony_ci		.type = QUIRK_COMPOSITE,
438662306a36Sopenharmony_ci		.data = &(const struct snd_usb_audio_quirk[]) {
438762306a36Sopenharmony_ci			{
438862306a36Sopenharmony_ci				.ifnum = 0,
438962306a36Sopenharmony_ci				.type = QUIRK_AUDIO_STANDARD_INTERFACE
439062306a36Sopenharmony_ci			},
439162306a36Sopenharmony_ci			/* Playback */
439262306a36Sopenharmony_ci			{
439362306a36Sopenharmony_ci				.ifnum = 1,
439462306a36Sopenharmony_ci				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
439562306a36Sopenharmony_ci				.data = &(const struct audioformat) {
439662306a36Sopenharmony_ci					.formats = SNDRV_PCM_FMTBIT_S32_LE,
439762306a36Sopenharmony_ci					.channels = 2,
439862306a36Sopenharmony_ci					.fmt_bits = 24,
439962306a36Sopenharmony_ci					.iface = 1,
440062306a36Sopenharmony_ci					.altsetting = 1,
440162306a36Sopenharmony_ci					.altset_idx = 1,
440262306a36Sopenharmony_ci					.endpoint = 0x01,
440362306a36Sopenharmony_ci					.ep_attr = USB_ENDPOINT_XFER_ISOC |
440462306a36Sopenharmony_ci						   USB_ENDPOINT_SYNC_ASYNC,
440562306a36Sopenharmony_ci					.rates = SNDRV_PCM_RATE_96000,
440662306a36Sopenharmony_ci					.rate_min = 96000,
440762306a36Sopenharmony_ci					.rate_max = 96000,
440862306a36Sopenharmony_ci					.nr_rates = 1,
440962306a36Sopenharmony_ci					.rate_table = (unsigned int[]) { 96000 },
441062306a36Sopenharmony_ci					.clock = 0x29
441162306a36Sopenharmony_ci				}
441262306a36Sopenharmony_ci			},
441362306a36Sopenharmony_ci			/* Capture */
441462306a36Sopenharmony_ci			{
441562306a36Sopenharmony_ci				.ifnum = 2,
441662306a36Sopenharmony_ci				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
441762306a36Sopenharmony_ci				.data = &(const struct audioformat) {
441862306a36Sopenharmony_ci					.formats = SNDRV_PCM_FMTBIT_S32_LE,
441962306a36Sopenharmony_ci					.channels = 2,
442062306a36Sopenharmony_ci					.fmt_bits = 24,
442162306a36Sopenharmony_ci					.iface = 2,
442262306a36Sopenharmony_ci					.altsetting = 1,
442362306a36Sopenharmony_ci					.altset_idx = 1,
442462306a36Sopenharmony_ci					.endpoint = 0x82,
442562306a36Sopenharmony_ci					.ep_attr = USB_ENDPOINT_XFER_ISOC |
442662306a36Sopenharmony_ci						   USB_ENDPOINT_SYNC_ASYNC |
442762306a36Sopenharmony_ci						   USB_ENDPOINT_USAGE_IMPLICIT_FB,
442862306a36Sopenharmony_ci					.rates = SNDRV_PCM_RATE_96000,
442962306a36Sopenharmony_ci					.rate_min = 96000,
443062306a36Sopenharmony_ci					.rate_max = 96000,
443162306a36Sopenharmony_ci					.nr_rates = 1,
443262306a36Sopenharmony_ci					.rate_table = (unsigned int[]) { 96000 },
443362306a36Sopenharmony_ci					.clock = 0x29
443462306a36Sopenharmony_ci				}
443562306a36Sopenharmony_ci			},
443662306a36Sopenharmony_ci			{
443762306a36Sopenharmony_ci				.ifnum = -1
443862306a36Sopenharmony_ci			}
443962306a36Sopenharmony_ci		}
444062306a36Sopenharmony_ci	}
444162306a36Sopenharmony_ci},
444262306a36Sopenharmony_ci{
444362306a36Sopenharmony_ci	/*
444462306a36Sopenharmony_ci	 * Fiero SC-01 (firmware v1.1.0)
444562306a36Sopenharmony_ci	 */
444662306a36Sopenharmony_ci	USB_DEVICE(0x2b53, 0x0031),
444762306a36Sopenharmony_ci	.driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
444862306a36Sopenharmony_ci		.vendor_name = "Fiero",
444962306a36Sopenharmony_ci		.product_name = "SC-01",
445062306a36Sopenharmony_ci		.ifnum = QUIRK_ANY_INTERFACE,
445162306a36Sopenharmony_ci		.type = QUIRK_COMPOSITE,
445262306a36Sopenharmony_ci		.data = &(const struct snd_usb_audio_quirk[]) {
445362306a36Sopenharmony_ci			{
445462306a36Sopenharmony_ci				.ifnum = 0,
445562306a36Sopenharmony_ci				.type = QUIRK_AUDIO_STANDARD_INTERFACE
445662306a36Sopenharmony_ci			},
445762306a36Sopenharmony_ci			/* Playback */
445862306a36Sopenharmony_ci			{
445962306a36Sopenharmony_ci				.ifnum = 1,
446062306a36Sopenharmony_ci				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
446162306a36Sopenharmony_ci				.data = &(const struct audioformat) {
446262306a36Sopenharmony_ci					.formats = SNDRV_PCM_FMTBIT_S32_LE,
446362306a36Sopenharmony_ci					.channels = 2,
446462306a36Sopenharmony_ci					.fmt_bits = 24,
446562306a36Sopenharmony_ci					.iface = 1,
446662306a36Sopenharmony_ci					.altsetting = 1,
446762306a36Sopenharmony_ci					.altset_idx = 1,
446862306a36Sopenharmony_ci					.endpoint = 0x01,
446962306a36Sopenharmony_ci					.ep_attr = USB_ENDPOINT_XFER_ISOC |
447062306a36Sopenharmony_ci						   USB_ENDPOINT_SYNC_ASYNC,
447162306a36Sopenharmony_ci					.rates = SNDRV_PCM_RATE_48000 |
447262306a36Sopenharmony_ci						 SNDRV_PCM_RATE_96000,
447362306a36Sopenharmony_ci					.rate_min = 48000,
447462306a36Sopenharmony_ci					.rate_max = 96000,
447562306a36Sopenharmony_ci					.nr_rates = 2,
447662306a36Sopenharmony_ci					.rate_table = (unsigned int[]) { 48000, 96000 },
447762306a36Sopenharmony_ci					.clock = 0x29
447862306a36Sopenharmony_ci				}
447962306a36Sopenharmony_ci			},
448062306a36Sopenharmony_ci			/* Capture */
448162306a36Sopenharmony_ci			{
448262306a36Sopenharmony_ci				.ifnum = 2,
448362306a36Sopenharmony_ci				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
448462306a36Sopenharmony_ci				.data = &(const struct audioformat) {
448562306a36Sopenharmony_ci					.formats = SNDRV_PCM_FMTBIT_S32_LE,
448662306a36Sopenharmony_ci					.channels = 2,
448762306a36Sopenharmony_ci					.fmt_bits = 24,
448862306a36Sopenharmony_ci					.iface = 2,
448962306a36Sopenharmony_ci					.altsetting = 1,
449062306a36Sopenharmony_ci					.altset_idx = 1,
449162306a36Sopenharmony_ci					.endpoint = 0x82,
449262306a36Sopenharmony_ci					.ep_attr = USB_ENDPOINT_XFER_ISOC |
449362306a36Sopenharmony_ci						   USB_ENDPOINT_SYNC_ASYNC |
449462306a36Sopenharmony_ci						   USB_ENDPOINT_USAGE_IMPLICIT_FB,
449562306a36Sopenharmony_ci					.rates = SNDRV_PCM_RATE_48000 |
449662306a36Sopenharmony_ci						 SNDRV_PCM_RATE_96000,
449762306a36Sopenharmony_ci					.rate_min = 48000,
449862306a36Sopenharmony_ci					.rate_max = 96000,
449962306a36Sopenharmony_ci					.nr_rates = 2,
450062306a36Sopenharmony_ci					.rate_table = (unsigned int[]) { 48000, 96000 },
450162306a36Sopenharmony_ci					.clock = 0x29
450262306a36Sopenharmony_ci				}
450362306a36Sopenharmony_ci			},
450462306a36Sopenharmony_ci			{
450562306a36Sopenharmony_ci				.ifnum = -1
450662306a36Sopenharmony_ci			}
450762306a36Sopenharmony_ci		}
450862306a36Sopenharmony_ci	}
450962306a36Sopenharmony_ci},
451062306a36Sopenharmony_ci{
451162306a36Sopenharmony_ci	/* Advanced modes of the Mythware XA001AU.
451262306a36Sopenharmony_ci	 * For the standard mode, Mythware XA001AU has ID ffad:a001
451362306a36Sopenharmony_ci	 */
451462306a36Sopenharmony_ci	USB_DEVICE_VENDOR_SPEC(0xffad, 0xa001),
451562306a36Sopenharmony_ci	.driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
451662306a36Sopenharmony_ci		.vendor_name = "Mythware",
451762306a36Sopenharmony_ci		.product_name = "XA001AU",
451862306a36Sopenharmony_ci		.ifnum = QUIRK_ANY_INTERFACE,
451962306a36Sopenharmony_ci		.type = QUIRK_COMPOSITE,
452062306a36Sopenharmony_ci		.data = (const struct snd_usb_audio_quirk[]) {
452162306a36Sopenharmony_ci			{
452262306a36Sopenharmony_ci				.ifnum = 0,
452362306a36Sopenharmony_ci				.type = QUIRK_IGNORE_INTERFACE,
452462306a36Sopenharmony_ci			},
452562306a36Sopenharmony_ci			{
452662306a36Sopenharmony_ci				.ifnum = 1,
452762306a36Sopenharmony_ci				.type = QUIRK_AUDIO_STANDARD_INTERFACE,
452862306a36Sopenharmony_ci			},
452962306a36Sopenharmony_ci			{
453062306a36Sopenharmony_ci				.ifnum = 2,
453162306a36Sopenharmony_ci				.type = QUIRK_AUDIO_STANDARD_INTERFACE,
453262306a36Sopenharmony_ci			},
453362306a36Sopenharmony_ci			{
453462306a36Sopenharmony_ci				.ifnum = -1
453562306a36Sopenharmony_ci			}
453662306a36Sopenharmony_ci		}
453762306a36Sopenharmony_ci	}
453862306a36Sopenharmony_ci},
453962306a36Sopenharmony_ci
454062306a36Sopenharmony_ci#undef USB_DEVICE_VENDOR_SPEC
454162306a36Sopenharmony_ci#undef USB_AUDIO_DEVICE
4542