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