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