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