.. | .. |
---|
| 1 | +/* SPDX-License-Identifier: GPL-2.0-or-later */ |
---|
1 | 2 | /* |
---|
2 | 3 | * ALSA USB Audio Driver |
---|
3 | 4 | * |
---|
4 | 5 | * Copyright (c) 2002 by Takashi Iwai <tiwai@suse.de>, |
---|
5 | 6 | * Clemens Ladisch <clemens@ladisch.de> |
---|
6 | | - * |
---|
7 | | - * |
---|
8 | | - * This program is free software; you can redistribute it and/or modify |
---|
9 | | - * it under the terms of the GNU General Public License as published by |
---|
10 | | - * the Free Software Foundation; either version 2 of the License, or |
---|
11 | | - * (at your option) any later version. |
---|
12 | | - * |
---|
13 | | - * This program is distributed in the hope that it will be useful, |
---|
14 | | - * but WITHOUT ANY WARRANTY; without even the implied warranty of |
---|
15 | | - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
---|
16 | | - * GNU General Public License for more details. |
---|
17 | | - * |
---|
18 | | - * You should have received a copy of the GNU General Public License |
---|
19 | | - * along with this program; if not, write to the Free Software |
---|
20 | | - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
---|
21 | 7 | */ |
---|
22 | 8 | |
---|
23 | 9 | /* |
---|
.. | .. |
---|
39 | 25 | .idProduct = prod, \ |
---|
40 | 26 | .bInterfaceClass = USB_CLASS_VENDOR_SPEC |
---|
41 | 27 | |
---|
42 | | -/* HP Thunderbolt Dock Audio Headset */ |
---|
43 | | -{ |
---|
44 | | - USB_DEVICE(0x03f0, 0x0269), |
---|
45 | | - .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) { |
---|
46 | | - .vendor_name = "HP", |
---|
47 | | - .product_name = "Thunderbolt Dock Audio Headset", |
---|
48 | | - .profile_name = "HP-Thunderbolt-Dock-Audio-Headset", |
---|
49 | | - .ifnum = QUIRK_NO_INTERFACE |
---|
50 | | - } |
---|
51 | | -}, |
---|
52 | | -/* HP Thunderbolt Dock Audio Module */ |
---|
53 | | -{ |
---|
54 | | - USB_DEVICE(0x03f0, 0x0567), |
---|
55 | | - .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) { |
---|
56 | | - .vendor_name = "HP", |
---|
57 | | - .product_name = "Thunderbolt Dock Audio Module", |
---|
58 | | - .profile_name = "HP-Thunderbolt-Dock-Audio-Module", |
---|
59 | | - .ifnum = QUIRK_NO_INTERFACE |
---|
60 | | - } |
---|
61 | | -}, |
---|
| 28 | +/* A standard entry matching with vid/pid and the audio class/subclass */ |
---|
| 29 | +#define USB_AUDIO_DEVICE(vend, prod) \ |
---|
| 30 | + .match_flags = USB_DEVICE_ID_MATCH_DEVICE | \ |
---|
| 31 | + USB_DEVICE_ID_MATCH_INT_CLASS | \ |
---|
| 32 | + USB_DEVICE_ID_MATCH_INT_SUBCLASS, \ |
---|
| 33 | + .idVendor = vend, \ |
---|
| 34 | + .idProduct = prod, \ |
---|
| 35 | + .bInterfaceClass = USB_CLASS_AUDIO, \ |
---|
| 36 | + .bInterfaceSubClass = USB_SUBCLASS_AUDIOCONTROL |
---|
| 37 | + |
---|
62 | 38 | /* FTDI devices */ |
---|
63 | 39 | { |
---|
64 | 40 | USB_DEVICE(0x0403, 0xb8d8), |
---|
.. | .. |
---|
92 | 68 | } |
---|
93 | 69 | }, |
---|
94 | 70 | |
---|
95 | | -/* Creative/E-Mu devices */ |
---|
| 71 | +/* E-Mu 0202 USB */ |
---|
| 72 | +{ USB_DEVICE_VENDOR_SPEC(0x041e, 0x3f02) }, |
---|
| 73 | +/* E-Mu 0404 USB */ |
---|
| 74 | +{ USB_DEVICE_VENDOR_SPEC(0x041e, 0x3f04) }, |
---|
| 75 | +/* E-Mu Tracker Pre */ |
---|
| 76 | +{ USB_DEVICE_VENDOR_SPEC(0x041e, 0x3f0a) }, |
---|
| 77 | +/* E-Mu 0204 USB */ |
---|
| 78 | +{ USB_DEVICE_VENDOR_SPEC(0x041e, 0x3f19) }, |
---|
| 79 | +/* Ktmicro Usb_audio device */ |
---|
| 80 | +{ USB_DEVICE_VENDOR_SPEC(0x31b2, 0x0011) }, |
---|
| 81 | + |
---|
| 82 | +/* |
---|
| 83 | + * Creative Technology, Ltd Live! Cam Sync HD [VF0770] |
---|
| 84 | + * The device advertises 8 formats, but only a rate of 48kHz is honored by the |
---|
| 85 | + * hardware and 24 bits give chopped audio, so only report the one working |
---|
| 86 | + * combination. |
---|
| 87 | + */ |
---|
96 | 88 | { |
---|
97 | | - USB_DEVICE(0x041e, 0x3010), |
---|
98 | | - .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { |
---|
99 | | - .vendor_name = "Creative Labs", |
---|
100 | | - .product_name = "Sound Blaster MP3+", |
---|
101 | | - .ifnum = QUIRK_NO_INTERFACE |
---|
102 | | - } |
---|
103 | | -}, |
---|
104 | | -/* Creative/Toshiba Multimedia Center SB-0500 */ |
---|
105 | | -{ |
---|
106 | | - USB_DEVICE(0x041e, 0x3048), |
---|
107 | | - .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { |
---|
108 | | - .vendor_name = "Toshiba", |
---|
109 | | - .product_name = "SB-0500", |
---|
110 | | - .ifnum = QUIRK_NO_INTERFACE |
---|
111 | | - } |
---|
112 | | -}, |
---|
113 | | -{ |
---|
114 | | - /* E-Mu 0202 USB */ |
---|
115 | | - .match_flags = USB_DEVICE_ID_MATCH_DEVICE, |
---|
116 | | - .idVendor = 0x041e, |
---|
117 | | - .idProduct = 0x3f02, |
---|
118 | | - .bInterfaceClass = USB_CLASS_AUDIO, |
---|
119 | | -}, |
---|
120 | | -{ |
---|
121 | | - /* E-Mu 0404 USB */ |
---|
122 | | - .match_flags = USB_DEVICE_ID_MATCH_DEVICE, |
---|
123 | | - .idVendor = 0x041e, |
---|
124 | | - .idProduct = 0x3f04, |
---|
125 | | - .bInterfaceClass = USB_CLASS_AUDIO, |
---|
126 | | -}, |
---|
127 | | -{ |
---|
128 | | - /* E-Mu Tracker Pre */ |
---|
129 | | - .match_flags = USB_DEVICE_ID_MATCH_DEVICE, |
---|
130 | | - .idVendor = 0x041e, |
---|
131 | | - .idProduct = 0x3f0a, |
---|
132 | | - .bInterfaceClass = USB_CLASS_AUDIO, |
---|
133 | | -}, |
---|
134 | | -{ |
---|
135 | | - /* E-Mu 0204 USB */ |
---|
136 | | - .match_flags = USB_DEVICE_ID_MATCH_DEVICE, |
---|
137 | | - .idVendor = 0x041e, |
---|
138 | | - .idProduct = 0x3f19, |
---|
139 | | - .bInterfaceClass = USB_CLASS_AUDIO, |
---|
| 89 | + USB_AUDIO_DEVICE(0x041e, 0x4095), |
---|
| 90 | + .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) { |
---|
| 91 | + .ifnum = QUIRK_ANY_INTERFACE, |
---|
| 92 | + .type = QUIRK_COMPOSITE, |
---|
| 93 | + .data = &(const struct snd_usb_audio_quirk[]) { |
---|
| 94 | + { |
---|
| 95 | + .ifnum = 2, |
---|
| 96 | + .type = QUIRK_AUDIO_STANDARD_MIXER, |
---|
| 97 | + }, |
---|
| 98 | + { |
---|
| 99 | + .ifnum = 3, |
---|
| 100 | + .type = QUIRK_AUDIO_FIXED_ENDPOINT, |
---|
| 101 | + .data = &(const struct audioformat) { |
---|
| 102 | + .formats = SNDRV_PCM_FMTBIT_S16_LE, |
---|
| 103 | + .channels = 2, |
---|
| 104 | + .fmt_bits = 16, |
---|
| 105 | + .iface = 3, |
---|
| 106 | + .altsetting = 4, |
---|
| 107 | + .altset_idx = 4, |
---|
| 108 | + .endpoint = 0x82, |
---|
| 109 | + .ep_attr = 0x05, |
---|
| 110 | + .rates = SNDRV_PCM_RATE_48000, |
---|
| 111 | + .rate_min = 48000, |
---|
| 112 | + .rate_max = 48000, |
---|
| 113 | + .nr_rates = 1, |
---|
| 114 | + .rate_table = (unsigned int[]) { 48000 }, |
---|
| 115 | + }, |
---|
| 116 | + }, |
---|
| 117 | + { |
---|
| 118 | + .ifnum = -1 |
---|
| 119 | + }, |
---|
| 120 | + }, |
---|
| 121 | + }, |
---|
140 | 122 | }, |
---|
141 | 123 | |
---|
142 | 124 | /* |
---|
143 | 125 | * HP Wireless Audio |
---|
144 | 126 | * When not ignored, causes instability issues for some users, forcing them to |
---|
145 | | - * blacklist the entire module. |
---|
| 127 | + * skip the entire module. |
---|
146 | 128 | */ |
---|
147 | 129 | { |
---|
148 | 130 | USB_DEVICE(0x0424, 0xb832), |
---|
.. | .. |
---|
179 | 161 | * Logitech QuickCam: bDeviceClass is vendor-specific, so generic interface |
---|
180 | 162 | * class matches do not take effect without an explicit ID match. |
---|
181 | 163 | */ |
---|
182 | | -{ |
---|
183 | | - .match_flags = USB_DEVICE_ID_MATCH_DEVICE | |
---|
184 | | - USB_DEVICE_ID_MATCH_INT_CLASS | |
---|
185 | | - USB_DEVICE_ID_MATCH_INT_SUBCLASS, |
---|
186 | | - .idVendor = 0x046d, |
---|
187 | | - .idProduct = 0x0850, |
---|
188 | | - .bInterfaceClass = USB_CLASS_AUDIO, |
---|
189 | | - .bInterfaceSubClass = USB_SUBCLASS_AUDIOCONTROL |
---|
190 | | -}, |
---|
191 | | -{ |
---|
192 | | - .match_flags = USB_DEVICE_ID_MATCH_DEVICE | |
---|
193 | | - USB_DEVICE_ID_MATCH_INT_CLASS | |
---|
194 | | - USB_DEVICE_ID_MATCH_INT_SUBCLASS, |
---|
195 | | - .idVendor = 0x046d, |
---|
196 | | - .idProduct = 0x08ae, |
---|
197 | | - .bInterfaceClass = USB_CLASS_AUDIO, |
---|
198 | | - .bInterfaceSubClass = USB_SUBCLASS_AUDIOCONTROL |
---|
199 | | -}, |
---|
200 | | -{ |
---|
201 | | - .match_flags = USB_DEVICE_ID_MATCH_DEVICE | |
---|
202 | | - USB_DEVICE_ID_MATCH_INT_CLASS | |
---|
203 | | - USB_DEVICE_ID_MATCH_INT_SUBCLASS, |
---|
204 | | - .idVendor = 0x046d, |
---|
205 | | - .idProduct = 0x08c6, |
---|
206 | | - .bInterfaceClass = USB_CLASS_AUDIO, |
---|
207 | | - .bInterfaceSubClass = USB_SUBCLASS_AUDIOCONTROL |
---|
208 | | -}, |
---|
209 | | -{ |
---|
210 | | - .match_flags = USB_DEVICE_ID_MATCH_DEVICE | |
---|
211 | | - USB_DEVICE_ID_MATCH_INT_CLASS | |
---|
212 | | - USB_DEVICE_ID_MATCH_INT_SUBCLASS, |
---|
213 | | - .idVendor = 0x046d, |
---|
214 | | - .idProduct = 0x08f0, |
---|
215 | | - .bInterfaceClass = USB_CLASS_AUDIO, |
---|
216 | | - .bInterfaceSubClass = USB_SUBCLASS_AUDIOCONTROL |
---|
217 | | -}, |
---|
218 | | -{ |
---|
219 | | - .match_flags = USB_DEVICE_ID_MATCH_DEVICE | |
---|
220 | | - USB_DEVICE_ID_MATCH_INT_CLASS | |
---|
221 | | - USB_DEVICE_ID_MATCH_INT_SUBCLASS, |
---|
222 | | - .idVendor = 0x046d, |
---|
223 | | - .idProduct = 0x08f5, |
---|
224 | | - .bInterfaceClass = USB_CLASS_AUDIO, |
---|
225 | | - .bInterfaceSubClass = USB_SUBCLASS_AUDIOCONTROL |
---|
226 | | -}, |
---|
227 | | -{ |
---|
228 | | - .match_flags = USB_DEVICE_ID_MATCH_DEVICE | |
---|
229 | | - USB_DEVICE_ID_MATCH_INT_CLASS | |
---|
230 | | - USB_DEVICE_ID_MATCH_INT_SUBCLASS, |
---|
231 | | - .idVendor = 0x046d, |
---|
232 | | - .idProduct = 0x08f6, |
---|
233 | | - .bInterfaceClass = USB_CLASS_AUDIO, |
---|
234 | | - .bInterfaceSubClass = USB_SUBCLASS_AUDIOCONTROL |
---|
235 | | -}, |
---|
236 | | -{ |
---|
237 | | - .match_flags = USB_DEVICE_ID_MATCH_DEVICE | |
---|
238 | | - USB_DEVICE_ID_MATCH_INT_CLASS | |
---|
239 | | - USB_DEVICE_ID_MATCH_INT_SUBCLASS, |
---|
240 | | - .idVendor = 0x046d, |
---|
241 | | - .idProduct = 0x0990, |
---|
242 | | - .bInterfaceClass = USB_CLASS_AUDIO, |
---|
243 | | - .bInterfaceSubClass = USB_SUBCLASS_AUDIOCONTROL, |
---|
244 | | - .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { |
---|
245 | | - .vendor_name = "Logitech, Inc.", |
---|
246 | | - .product_name = "QuickCam Pro 9000", |
---|
247 | | - .ifnum = QUIRK_NO_INTERFACE |
---|
248 | | - } |
---|
249 | | -}, |
---|
| 164 | +{ USB_AUDIO_DEVICE(0x046d, 0x0850) }, |
---|
| 165 | +{ USB_AUDIO_DEVICE(0x046d, 0x08ae) }, |
---|
| 166 | +{ USB_AUDIO_DEVICE(0x046d, 0x08c6) }, |
---|
| 167 | +{ USB_AUDIO_DEVICE(0x046d, 0x08f0) }, |
---|
| 168 | +{ USB_AUDIO_DEVICE(0x046d, 0x08f5) }, |
---|
| 169 | +{ USB_AUDIO_DEVICE(0x046d, 0x08f6) }, |
---|
| 170 | +{ USB_AUDIO_DEVICE(0x046d, 0x0990) }, |
---|
250 | 171 | |
---|
251 | 172 | /* |
---|
252 | 173 | * Yamaha devices |
---|
.. | .. |
---|
2110 | 2031 | } |
---|
2111 | 2032 | }, |
---|
2112 | 2033 | { |
---|
| 2034 | + /* M-Audio Micro */ |
---|
| 2035 | + USB_DEVICE_VENDOR_SPEC(0x0763, 0x201a), |
---|
| 2036 | +}, |
---|
| 2037 | +{ |
---|
2113 | 2038 | USB_DEVICE_VENDOR_SPEC(0x0763, 0x2030), |
---|
2114 | 2039 | .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) { |
---|
2115 | 2040 | /* .vendor_name = "M-Audio", */ |
---|
.. | .. |
---|
2442 | 2367 | USB_DEVICE(0x086a, 0x0001), |
---|
2443 | 2368 | .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { |
---|
2444 | 2369 | .vendor_name = "Emagic", |
---|
2445 | | - /* .product_name = "Unitor8", */ |
---|
| 2370 | + .product_name = "Unitor8", |
---|
2446 | 2371 | .ifnum = 2, |
---|
2447 | 2372 | .type = QUIRK_MIDI_EMAGIC, |
---|
2448 | 2373 | .data = & (const struct snd_usb_midi_endpoint_info) { |
---|
.. | .. |
---|
2639 | 2564 | } |
---|
2640 | 2565 | }, |
---|
2641 | 2566 | { |
---|
2642 | | - USB_DEVICE(0x0ccd, 0x0028), |
---|
2643 | | - .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { |
---|
2644 | | - .vendor_name = "TerraTec", |
---|
2645 | | - .product_name = "Aureon5.1MkII", |
---|
2646 | | - .ifnum = QUIRK_NO_INTERFACE |
---|
2647 | | - } |
---|
2648 | | -}, |
---|
2649 | | -{ |
---|
2650 | 2567 | USB_DEVICE(0x0ccd, 0x0035), |
---|
2651 | 2568 | .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { |
---|
2652 | 2569 | .vendor_name = "Miditech", |
---|
2653 | 2570 | .product_name = "Play'n Roll", |
---|
2654 | 2571 | .ifnum = 0, |
---|
2655 | 2572 | .type = QUIRK_MIDI_CME |
---|
2656 | | - } |
---|
2657 | | -}, |
---|
2658 | | - |
---|
2659 | | -/* Stanton/N2IT Final Scratch v1 device ('Scratchamp') */ |
---|
2660 | | -{ |
---|
2661 | | - USB_DEVICE(0x103d, 0x0100), |
---|
2662 | | - .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { |
---|
2663 | | - .vendor_name = "Stanton", |
---|
2664 | | - .product_name = "ScratchAmp", |
---|
2665 | | - .ifnum = QUIRK_NO_INTERFACE |
---|
2666 | | - } |
---|
2667 | | -}, |
---|
2668 | | -{ |
---|
2669 | | - USB_DEVICE(0x103d, 0x0101), |
---|
2670 | | - .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { |
---|
2671 | | - .vendor_name = "Stanton", |
---|
2672 | | - .product_name = "ScratchAmp", |
---|
2673 | | - .ifnum = QUIRK_NO_INTERFACE |
---|
2674 | 2573 | } |
---|
2675 | 2574 | }, |
---|
2676 | 2575 | |
---|
.. | .. |
---|
2721 | 2620 | .data = (const struct snd_usb_audio_quirk[]) { |
---|
2722 | 2621 | { |
---|
2723 | 2622 | .ifnum = 0, |
---|
| 2623 | + .type = QUIRK_AUDIO_STANDARD_MIXER, |
---|
| 2624 | + }, |
---|
| 2625 | + { |
---|
| 2626 | + .ifnum = 0, |
---|
2724 | 2627 | .type = QUIRK_AUDIO_FIXED_ENDPOINT, |
---|
2725 | 2628 | .data = &(const struct audioformat) { |
---|
2726 | 2629 | .formats = SNDRV_PCM_FMTBIT_S24_3LE, |
---|
.. | .. |
---|
2731 | 2634 | .attributes = UAC_EP_CS_ATTR_SAMPLE_RATE, |
---|
2732 | 2635 | .endpoint = 0x01, |
---|
2733 | 2636 | .ep_attr = USB_ENDPOINT_XFER_ISOC, |
---|
| 2637 | + .datainterval = 1, |
---|
| 2638 | + .maxpacksize = 0x024c, |
---|
| 2639 | + .rates = SNDRV_PCM_RATE_44100 | |
---|
| 2640 | + SNDRV_PCM_RATE_48000, |
---|
| 2641 | + .rate_min = 44100, |
---|
| 2642 | + .rate_max = 48000, |
---|
| 2643 | + .nr_rates = 2, |
---|
| 2644 | + .rate_table = (unsigned int[]) { |
---|
| 2645 | + 44100, 48000 |
---|
| 2646 | + } |
---|
| 2647 | + } |
---|
| 2648 | + }, |
---|
| 2649 | + { |
---|
| 2650 | + .ifnum = 0, |
---|
| 2651 | + .type = QUIRK_AUDIO_FIXED_ENDPOINT, |
---|
| 2652 | + .data = &(const struct audioformat) { |
---|
| 2653 | + .formats = SNDRV_PCM_FMTBIT_S24_3LE, |
---|
| 2654 | + .channels = 2, |
---|
| 2655 | + .iface = 0, |
---|
| 2656 | + .altsetting = 1, |
---|
| 2657 | + .altset_idx = 1, |
---|
| 2658 | + .attributes = 0, |
---|
| 2659 | + .endpoint = 0x82, |
---|
| 2660 | + .ep_attr = USB_ENDPOINT_XFER_ISOC, |
---|
| 2661 | + .datainterval = 1, |
---|
| 2662 | + .maxpacksize = 0x0126, |
---|
2734 | 2663 | .rates = SNDRV_PCM_RATE_44100 | |
---|
2735 | 2664 | SNDRV_PCM_RATE_48000, |
---|
2736 | 2665 | .rate_min = 44100, |
---|
.. | .. |
---|
2828 | 2757 | } |
---|
2829 | 2758 | }, |
---|
2830 | 2759 | |
---|
2831 | | -/* */ |
---|
| 2760 | +/* Lenovo ThinkStation P620 Rear Line-in, Line-out and Microphone */ |
---|
2832 | 2761 | { |
---|
2833 | | - /* aka. Serato Scratch Live DJ Box */ |
---|
2834 | | - USB_DEVICE(0x13e5, 0x0001), |
---|
| 2762 | + USB_DEVICE(0x17aa, 0x1046), |
---|
2835 | 2763 | .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { |
---|
2836 | | - .vendor_name = "Rane", |
---|
2837 | | - .product_name = "SL-1", |
---|
2838 | | - .ifnum = QUIRK_NO_INTERFACE |
---|
| 2764 | + .ifnum = QUIRK_ANY_INTERFACE, |
---|
| 2765 | + .type = QUIRK_SETUP_DISABLE_AUTOSUSPEND |
---|
| 2766 | + } |
---|
| 2767 | +}, |
---|
| 2768 | +/* Lenovo ThinkStation P620 Internal Speaker + Front Headset */ |
---|
| 2769 | +{ |
---|
| 2770 | + USB_DEVICE(0x17aa, 0x104d), |
---|
| 2771 | + .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { |
---|
| 2772 | + .ifnum = QUIRK_ANY_INTERFACE, |
---|
| 2773 | + .type = QUIRK_SETUP_DISABLE_AUTOSUSPEND |
---|
2839 | 2774 | } |
---|
2840 | 2775 | }, |
---|
2841 | 2776 | |
---|
.. | .. |
---|
2871 | 2806 | }, |
---|
2872 | 2807 | |
---|
2873 | 2808 | /* KeithMcMillen Stringport */ |
---|
2874 | | -{ |
---|
2875 | | - USB_DEVICE(0x1f38, 0x0001), |
---|
2876 | | - .bInterfaceClass = USB_CLASS_AUDIO, |
---|
2877 | | -}, |
---|
| 2809 | +{ USB_DEVICE(0x1f38, 0x0001) }, /* FIXME: should be more restrictive matching */ |
---|
2878 | 2810 | |
---|
2879 | 2811 | /* Miditech devices */ |
---|
2880 | 2812 | { |
---|
.. | .. |
---|
2905 | 2837 | */ |
---|
2906 | 2838 | |
---|
2907 | 2839 | #define AU0828_DEVICE(vid, pid, vname, pname) { \ |
---|
2908 | | - .idVendor = vid, \ |
---|
2909 | | - .idProduct = pid, \ |
---|
2910 | | - .match_flags = USB_DEVICE_ID_MATCH_DEVICE | \ |
---|
2911 | | - USB_DEVICE_ID_MATCH_INT_CLASS | \ |
---|
2912 | | - USB_DEVICE_ID_MATCH_INT_SUBCLASS, \ |
---|
2913 | | - .bInterfaceClass = USB_CLASS_AUDIO, \ |
---|
2914 | | - .bInterfaceSubClass = USB_SUBCLASS_AUDIOCONTROL, \ |
---|
| 2840 | + USB_AUDIO_DEVICE(vid, pid), \ |
---|
2915 | 2841 | .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) { \ |
---|
2916 | 2842 | .vendor_name = vname, \ |
---|
2917 | 2843 | .product_name = pname, \ |
---|
2918 | 2844 | .ifnum = QUIRK_ANY_INTERFACE, \ |
---|
2919 | 2845 | .type = QUIRK_AUDIO_ALIGN_TRANSFER, \ |
---|
| 2846 | + .shares_media_device = 1, \ |
---|
2920 | 2847 | } \ |
---|
2921 | 2848 | } |
---|
2922 | 2849 | |
---|
.. | .. |
---|
2940 | 2867 | |
---|
2941 | 2868 | /* Syntek STK1160 */ |
---|
2942 | 2869 | { |
---|
2943 | | - .match_flags = USB_DEVICE_ID_MATCH_DEVICE | |
---|
2944 | | - USB_DEVICE_ID_MATCH_INT_CLASS | |
---|
2945 | | - USB_DEVICE_ID_MATCH_INT_SUBCLASS, |
---|
2946 | | - .idVendor = 0x05e1, |
---|
2947 | | - .idProduct = 0x0408, |
---|
2948 | | - .bInterfaceClass = USB_CLASS_AUDIO, |
---|
2949 | | - .bInterfaceSubClass = USB_SUBCLASS_AUDIOCONTROL, |
---|
| 2870 | + USB_AUDIO_DEVICE(0x05e1, 0x0408), |
---|
2950 | 2871 | .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) { |
---|
2951 | 2872 | .vendor_name = "Syntek", |
---|
2952 | 2873 | .product_name = "STK1160", |
---|
.. | .. |
---|
3108 | 3029 | }, |
---|
3109 | 3030 | { |
---|
3110 | 3031 | /* Tascam US122 MKII - playback-only support */ |
---|
3111 | | - .match_flags = USB_DEVICE_ID_MATCH_DEVICE, |
---|
3112 | | - .idVendor = 0x0644, |
---|
3113 | | - .idProduct = 0x8021, |
---|
3114 | | - .bInterfaceClass = USB_CLASS_AUDIO, |
---|
| 3032 | + USB_DEVICE_VENDOR_SPEC(0x0644, 0x8021), |
---|
3115 | 3033 | .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) { |
---|
3116 | 3034 | .vendor_name = "TASCAM", |
---|
3117 | 3035 | .product_name = "US122 MKII", |
---|
.. | .. |
---|
3296 | 3214 | } |
---|
3297 | 3215 | }, |
---|
3298 | 3216 | |
---|
| 3217 | +/* Rane SL-1 */ |
---|
3299 | 3218 | { |
---|
3300 | | - /* |
---|
3301 | | - * The original product_name is "USB Sound Device", however this name |
---|
3302 | | - * is also used by the CM106 based cards, so make it unique. |
---|
3303 | | - */ |
---|
3304 | | - USB_DEVICE(0x0d8c, 0x0103), |
---|
3305 | | - .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) { |
---|
3306 | | - .product_name = "Audio Advantage MicroII", |
---|
3307 | | - .ifnum = QUIRK_NO_INTERFACE |
---|
3308 | | - } |
---|
| 3219 | + USB_DEVICE(0x13e5, 0x0001), |
---|
| 3220 | + .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { |
---|
| 3221 | + .ifnum = QUIRK_ANY_INTERFACE, |
---|
| 3222 | + .type = QUIRK_AUDIO_STANDARD_INTERFACE |
---|
| 3223 | + } |
---|
3309 | 3224 | }, |
---|
3310 | 3225 | |
---|
3311 | 3226 | /* disabled due to regression for other devices; |
---|
.. | .. |
---|
3408 | 3323 | } |
---|
3409 | 3324 | } |
---|
3410 | 3325 | }, |
---|
3411 | | -/* Dell WD15 Dock */ |
---|
3412 | | -{ |
---|
3413 | | - USB_DEVICE(0x0bda, 0x4014), |
---|
3414 | | - .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { |
---|
3415 | | - .vendor_name = "Dell", |
---|
3416 | | - .product_name = "WD15 Dock", |
---|
3417 | | - .profile_name = "Dell-WD15-Dock", |
---|
3418 | | - .ifnum = QUIRK_NO_INTERFACE |
---|
3419 | | - } |
---|
3420 | | -}, |
---|
3421 | 3326 | /* Dell WD19 Dock */ |
---|
3422 | 3327 | { |
---|
3423 | 3328 | USB_DEVICE(0x0bda, 0x402e), |
---|
3424 | 3329 | .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { |
---|
3425 | | - .vendor_name = "Dell", |
---|
3426 | | - .product_name = "WD19 Dock", |
---|
3427 | | - .profile_name = "Dell-WD15-Dock", |
---|
3428 | 3330 | .ifnum = QUIRK_ANY_INTERFACE, |
---|
3429 | 3331 | .type = QUIRK_SETUP_FMT_AFTER_RESUME |
---|
| 3332 | + } |
---|
| 3333 | +}, |
---|
| 3334 | +/* MOTU Microbook II */ |
---|
| 3335 | +{ |
---|
| 3336 | + USB_DEVICE_VENDOR_SPEC(0x07fd, 0x0004), |
---|
| 3337 | + .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) { |
---|
| 3338 | + .vendor_name = "MOTU", |
---|
| 3339 | + .product_name = "MicroBookII", |
---|
| 3340 | + .ifnum = QUIRK_ANY_INTERFACE, |
---|
| 3341 | + .type = QUIRK_COMPOSITE, |
---|
| 3342 | + .data = (const struct snd_usb_audio_quirk[]) { |
---|
| 3343 | + { |
---|
| 3344 | + .ifnum = 0, |
---|
| 3345 | + .type = QUIRK_AUDIO_STANDARD_MIXER, |
---|
| 3346 | + }, |
---|
| 3347 | + { |
---|
| 3348 | + .ifnum = 0, |
---|
| 3349 | + .type = QUIRK_AUDIO_FIXED_ENDPOINT, |
---|
| 3350 | + .data = &(const struct audioformat) { |
---|
| 3351 | + .formats = SNDRV_PCM_FMTBIT_S24_3BE, |
---|
| 3352 | + .channels = 6, |
---|
| 3353 | + .iface = 0, |
---|
| 3354 | + .altsetting = 1, |
---|
| 3355 | + .altset_idx = 1, |
---|
| 3356 | + .attributes = 0, |
---|
| 3357 | + .endpoint = 0x84, |
---|
| 3358 | + .rates = SNDRV_PCM_RATE_96000, |
---|
| 3359 | + .ep_attr = USB_ENDPOINT_XFER_ISOC | |
---|
| 3360 | + USB_ENDPOINT_SYNC_ASYNC, |
---|
| 3361 | + .rate_min = 96000, |
---|
| 3362 | + .rate_max = 96000, |
---|
| 3363 | + .nr_rates = 1, |
---|
| 3364 | + .maxpacksize = 0x00d8, |
---|
| 3365 | + .rate_table = (unsigned int[]) { |
---|
| 3366 | + 96000 |
---|
| 3367 | + } |
---|
| 3368 | + } |
---|
| 3369 | + }, |
---|
| 3370 | + { |
---|
| 3371 | + .ifnum = 0, |
---|
| 3372 | + .type = QUIRK_AUDIO_FIXED_ENDPOINT, |
---|
| 3373 | + .data = &(const struct audioformat) { |
---|
| 3374 | + .formats = SNDRV_PCM_FMTBIT_S24_3BE, |
---|
| 3375 | + .channels = 8, |
---|
| 3376 | + .iface = 0, |
---|
| 3377 | + .altsetting = 1, |
---|
| 3378 | + .altset_idx = 1, |
---|
| 3379 | + .attributes = 0, |
---|
| 3380 | + .endpoint = 0x03, |
---|
| 3381 | + .rates = SNDRV_PCM_RATE_96000, |
---|
| 3382 | + .ep_attr = USB_ENDPOINT_XFER_ISOC | |
---|
| 3383 | + USB_ENDPOINT_SYNC_ASYNC, |
---|
| 3384 | + .rate_min = 96000, |
---|
| 3385 | + .rate_max = 96000, |
---|
| 3386 | + .nr_rates = 1, |
---|
| 3387 | + .maxpacksize = 0x0120, |
---|
| 3388 | + .rate_table = (unsigned int[]) { |
---|
| 3389 | + 96000 |
---|
| 3390 | + } |
---|
| 3391 | + } |
---|
| 3392 | + }, |
---|
| 3393 | + { |
---|
| 3394 | + .ifnum = -1 |
---|
| 3395 | + } |
---|
| 3396 | + } |
---|
| 3397 | + } |
---|
| 3398 | +}, |
---|
| 3399 | +{ |
---|
| 3400 | + /* |
---|
| 3401 | + * PIONEER DJ DDJ-SX3 |
---|
| 3402 | + * PCM is 12 channels out, 10 channels in @ 44.1 fixed |
---|
| 3403 | + * interface 0, vendor class alt setting 1 for endpoints 5 and 0x86 |
---|
| 3404 | + * The feedback for the output is the input. |
---|
| 3405 | + */ |
---|
| 3406 | + USB_DEVICE_VENDOR_SPEC(0x2b73, 0x0023), |
---|
| 3407 | + .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) { |
---|
| 3408 | + .ifnum = QUIRK_ANY_INTERFACE, |
---|
| 3409 | + .type = QUIRK_COMPOSITE, |
---|
| 3410 | + .data = (const struct snd_usb_audio_quirk[]) { |
---|
| 3411 | + { |
---|
| 3412 | + .ifnum = 0, |
---|
| 3413 | + .type = QUIRK_AUDIO_FIXED_ENDPOINT, |
---|
| 3414 | + .data = &(const struct audioformat) { |
---|
| 3415 | + .formats = SNDRV_PCM_FMTBIT_S32_LE, |
---|
| 3416 | + .channels = 12, |
---|
| 3417 | + .iface = 0, |
---|
| 3418 | + .altsetting = 1, |
---|
| 3419 | + .altset_idx = 1, |
---|
| 3420 | + .endpoint = 0x05, |
---|
| 3421 | + .ep_attr = USB_ENDPOINT_XFER_ISOC| |
---|
| 3422 | + USB_ENDPOINT_SYNC_ASYNC, |
---|
| 3423 | + .rates = SNDRV_PCM_RATE_44100, |
---|
| 3424 | + .rate_min = 44100, |
---|
| 3425 | + .rate_max = 44100, |
---|
| 3426 | + .nr_rates = 1, |
---|
| 3427 | + .rate_table = (unsigned int[]) { 44100 } |
---|
| 3428 | + } |
---|
| 3429 | + }, |
---|
| 3430 | + { |
---|
| 3431 | + .ifnum = 0, |
---|
| 3432 | + .type = QUIRK_AUDIO_FIXED_ENDPOINT, |
---|
| 3433 | + .data = &(const struct audioformat) { |
---|
| 3434 | + .formats = SNDRV_PCM_FMTBIT_S32_LE, |
---|
| 3435 | + .channels = 10, |
---|
| 3436 | + .iface = 0, |
---|
| 3437 | + .altsetting = 1, |
---|
| 3438 | + .altset_idx = 1, |
---|
| 3439 | + .endpoint = 0x86, |
---|
| 3440 | + .ep_attr = USB_ENDPOINT_XFER_ISOC| |
---|
| 3441 | + USB_ENDPOINT_SYNC_ASYNC| |
---|
| 3442 | + USB_ENDPOINT_USAGE_IMPLICIT_FB, |
---|
| 3443 | + .rates = SNDRV_PCM_RATE_44100, |
---|
| 3444 | + .rate_min = 44100, |
---|
| 3445 | + .rate_max = 44100, |
---|
| 3446 | + .nr_rates = 1, |
---|
| 3447 | + .rate_table = (unsigned int[]) { 44100 } |
---|
| 3448 | + } |
---|
| 3449 | + }, |
---|
| 3450 | + { |
---|
| 3451 | + .ifnum = -1 |
---|
| 3452 | + } |
---|
| 3453 | + } |
---|
| 3454 | + } |
---|
| 3455 | +}, |
---|
| 3456 | +{ |
---|
| 3457 | + /* |
---|
| 3458 | + * Pioneer DJ DJM-250MK2 |
---|
| 3459 | + * PCM is 8 channels out @ 48 fixed (endpoint 0x01) |
---|
| 3460 | + * and 8 channels in @ 48 fixed (endpoint 0x82). |
---|
| 3461 | + * |
---|
| 3462 | + * Both playback and recording is working, even simultaneously. |
---|
| 3463 | + * |
---|
| 3464 | + * Playback channels could be mapped to: |
---|
| 3465 | + * - CH1 |
---|
| 3466 | + * - CH2 |
---|
| 3467 | + * - AUX |
---|
| 3468 | + * |
---|
| 3469 | + * Recording channels could be mapped to: |
---|
| 3470 | + * - Post CH1 Fader |
---|
| 3471 | + * - Post CH2 Fader |
---|
| 3472 | + * - Cross Fader A |
---|
| 3473 | + * - Cross Fader B |
---|
| 3474 | + * - MIC |
---|
| 3475 | + * - AUX |
---|
| 3476 | + * - REC OUT |
---|
| 3477 | + * |
---|
| 3478 | + * There is remaining problem with recording directly from PHONO/LINE. |
---|
| 3479 | + * If we map a channel to: |
---|
| 3480 | + * - CH1 Control Tone PHONO |
---|
| 3481 | + * - CH1 Control Tone LINE |
---|
| 3482 | + * - CH2 Control Tone PHONO |
---|
| 3483 | + * - CH2 Control Tone LINE |
---|
| 3484 | + * it is silent. |
---|
| 3485 | + * There is no signal even on other operating systems with official drivers. |
---|
| 3486 | + * The signal appears only when a supported application is started. |
---|
| 3487 | + * This needs to be investigated yet... |
---|
| 3488 | + * (there is quite a lot communication on the USB in both directions) |
---|
| 3489 | + * |
---|
| 3490 | + * In current version this mixer could be used for playback |
---|
| 3491 | + * and for recording from vinyls (through Post CH* Fader) |
---|
| 3492 | + * but not for DVS (Digital Vinyl Systems) like in Mixxx. |
---|
| 3493 | + */ |
---|
| 3494 | + USB_DEVICE_VENDOR_SPEC(0x2b73, 0x0017), |
---|
| 3495 | + .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) { |
---|
| 3496 | + .ifnum = QUIRK_ANY_INTERFACE, |
---|
| 3497 | + .type = QUIRK_COMPOSITE, |
---|
| 3498 | + .data = (const struct snd_usb_audio_quirk[]) { |
---|
| 3499 | + { |
---|
| 3500 | + .ifnum = 0, |
---|
| 3501 | + .type = QUIRK_AUDIO_FIXED_ENDPOINT, |
---|
| 3502 | + .data = &(const struct audioformat) { |
---|
| 3503 | + .formats = SNDRV_PCM_FMTBIT_S24_3LE, |
---|
| 3504 | + .channels = 8, // outputs |
---|
| 3505 | + .iface = 0, |
---|
| 3506 | + .altsetting = 1, |
---|
| 3507 | + .altset_idx = 1, |
---|
| 3508 | + .endpoint = 0x01, |
---|
| 3509 | + .ep_attr = USB_ENDPOINT_XFER_ISOC| |
---|
| 3510 | + USB_ENDPOINT_SYNC_ASYNC, |
---|
| 3511 | + .rates = SNDRV_PCM_RATE_48000, |
---|
| 3512 | + .rate_min = 48000, |
---|
| 3513 | + .rate_max = 48000, |
---|
| 3514 | + .nr_rates = 1, |
---|
| 3515 | + .rate_table = (unsigned int[]) { 48000 } |
---|
| 3516 | + } |
---|
| 3517 | + }, |
---|
| 3518 | + { |
---|
| 3519 | + .ifnum = 0, |
---|
| 3520 | + .type = QUIRK_AUDIO_FIXED_ENDPOINT, |
---|
| 3521 | + .data = &(const struct audioformat) { |
---|
| 3522 | + .formats = SNDRV_PCM_FMTBIT_S24_3LE, |
---|
| 3523 | + .channels = 8, // inputs |
---|
| 3524 | + .iface = 0, |
---|
| 3525 | + .altsetting = 1, |
---|
| 3526 | + .altset_idx = 1, |
---|
| 3527 | + .endpoint = 0x82, |
---|
| 3528 | + .ep_attr = USB_ENDPOINT_XFER_ISOC| |
---|
| 3529 | + USB_ENDPOINT_SYNC_ASYNC| |
---|
| 3530 | + USB_ENDPOINT_USAGE_IMPLICIT_FB, |
---|
| 3531 | + .rates = SNDRV_PCM_RATE_48000, |
---|
| 3532 | + .rate_min = 48000, |
---|
| 3533 | + .rate_max = 48000, |
---|
| 3534 | + .nr_rates = 1, |
---|
| 3535 | + .rate_table = (unsigned int[]) { 48000 } |
---|
| 3536 | + } |
---|
| 3537 | + }, |
---|
| 3538 | + { |
---|
| 3539 | + .ifnum = -1 |
---|
| 3540 | + } |
---|
| 3541 | + } |
---|
3430 | 3542 | } |
---|
3431 | 3543 | }, |
---|
3432 | 3544 | { |
---|
.. | .. |
---|
3486 | 3598 | } |
---|
3487 | 3599 | }, |
---|
3488 | 3600 | |
---|
3489 | | -#define ALC1220_VB_DESKTOP(vend, prod) { \ |
---|
3490 | | - USB_DEVICE(vend, prod), \ |
---|
3491 | | - .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { \ |
---|
3492 | | - .vendor_name = "Realtek", \ |
---|
3493 | | - .product_name = "ALC1220-VB-DT", \ |
---|
3494 | | - .profile_name = "Realtek-ALC1220-VB-Desktop", \ |
---|
3495 | | - .ifnum = QUIRK_NO_INTERFACE \ |
---|
3496 | | - } \ |
---|
3497 | | -} |
---|
3498 | | -ALC1220_VB_DESKTOP(0x0414, 0xa002), /* Gigabyte TRX40 Aorus Pro WiFi */ |
---|
3499 | | -ALC1220_VB_DESKTOP(0x0db0, 0x0d64), /* MSI TRX40 Creator */ |
---|
3500 | | -ALC1220_VB_DESKTOP(0x0db0, 0x543d), /* MSI TRX40 */ |
---|
3501 | | -ALC1220_VB_DESKTOP(0x26ce, 0x0a01), /* Asrock TRX40 Creator */ |
---|
3502 | | -#undef ALC1220_VB_DESKTOP |
---|
3503 | | - |
---|
3504 | | -/* Two entries for Gigabyte TRX40 Aorus Master: |
---|
3505 | | - * TRX40 Aorus Master has two USB-audio devices, one for the front headphone |
---|
3506 | | - * with ESS SABRE9218 DAC chip, while another for the rest I/O (the rear |
---|
3507 | | - * panel and the front mic) with Realtek ALC1220-VB. |
---|
3508 | | - * Here we provide two distinct names for making UCM profiles easier. |
---|
3509 | | - */ |
---|
3510 | 3601 | { |
---|
3511 | | - USB_DEVICE(0x0414, 0xa000), |
---|
3512 | | - .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { |
---|
3513 | | - .vendor_name = "Gigabyte", |
---|
3514 | | - .product_name = "Aorus Master Front Headphone", |
---|
3515 | | - .profile_name = "Gigabyte-Aorus-Master-Front-Headphone", |
---|
3516 | | - .ifnum = QUIRK_NO_INTERFACE |
---|
| 3602 | + /* |
---|
| 3603 | + * Pioneer DJ DJM-900NXS2 |
---|
| 3604 | + * 10 channels playback & 12 channels capture @ 44.1/48/96kHz S24LE |
---|
| 3605 | + */ |
---|
| 3606 | + USB_DEVICE_VENDOR_SPEC(0x2b73, 0x000a), |
---|
| 3607 | + .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) { |
---|
| 3608 | + .ifnum = QUIRK_ANY_INTERFACE, |
---|
| 3609 | + .type = QUIRK_COMPOSITE, |
---|
| 3610 | + .data = (const struct snd_usb_audio_quirk[]) { |
---|
| 3611 | + { |
---|
| 3612 | + .ifnum = 0, |
---|
| 3613 | + .type = QUIRK_AUDIO_FIXED_ENDPOINT, |
---|
| 3614 | + .data = &(const struct audioformat) { |
---|
| 3615 | + .formats = SNDRV_PCM_FMTBIT_S24_3LE, |
---|
| 3616 | + .channels = 10, |
---|
| 3617 | + .iface = 0, |
---|
| 3618 | + .altsetting = 1, |
---|
| 3619 | + .altset_idx = 1, |
---|
| 3620 | + .endpoint = 0x01, |
---|
| 3621 | + .ep_attr = USB_ENDPOINT_XFER_ISOC| |
---|
| 3622 | + USB_ENDPOINT_SYNC_ASYNC, |
---|
| 3623 | + .rates = SNDRV_PCM_RATE_44100| |
---|
| 3624 | + SNDRV_PCM_RATE_48000| |
---|
| 3625 | + SNDRV_PCM_RATE_96000, |
---|
| 3626 | + .rate_min = 44100, |
---|
| 3627 | + .rate_max = 96000, |
---|
| 3628 | + .nr_rates = 3, |
---|
| 3629 | + .rate_table = (unsigned int[]) { |
---|
| 3630 | + 44100, 48000, 96000 |
---|
| 3631 | + } |
---|
| 3632 | + } |
---|
| 3633 | + }, |
---|
| 3634 | + { |
---|
| 3635 | + .ifnum = 0, |
---|
| 3636 | + .type = QUIRK_AUDIO_FIXED_ENDPOINT, |
---|
| 3637 | + .data = &(const struct audioformat) { |
---|
| 3638 | + .formats = SNDRV_PCM_FMTBIT_S24_3LE, |
---|
| 3639 | + .channels = 12, |
---|
| 3640 | + .iface = 0, |
---|
| 3641 | + .altsetting = 1, |
---|
| 3642 | + .altset_idx = 1, |
---|
| 3643 | + .endpoint = 0x82, |
---|
| 3644 | + .ep_attr = USB_ENDPOINT_XFER_ISOC| |
---|
| 3645 | + USB_ENDPOINT_SYNC_ASYNC| |
---|
| 3646 | + USB_ENDPOINT_USAGE_IMPLICIT_FB, |
---|
| 3647 | + .rates = SNDRV_PCM_RATE_44100| |
---|
| 3648 | + SNDRV_PCM_RATE_48000| |
---|
| 3649 | + SNDRV_PCM_RATE_96000, |
---|
| 3650 | + .rate_min = 44100, |
---|
| 3651 | + .rate_max = 96000, |
---|
| 3652 | + .nr_rates = 3, |
---|
| 3653 | + .rate_table = (unsigned int[]) { |
---|
| 3654 | + 44100, 48000, 96000 |
---|
| 3655 | + } |
---|
| 3656 | + } |
---|
| 3657 | + }, |
---|
| 3658 | + { |
---|
| 3659 | + .ifnum = -1 |
---|
| 3660 | + } |
---|
| 3661 | + } |
---|
3517 | 3662 | } |
---|
3518 | 3663 | }, |
---|
| 3664 | + |
---|
| 3665 | +/* |
---|
| 3666 | + * MacroSilicon MS2100/MS2106 based AV capture cards |
---|
| 3667 | + * |
---|
| 3668 | + * These claim 96kHz 1ch in the descriptors, but are actually 48kHz 2ch. |
---|
| 3669 | + * They also need QUIRK_AUDIO_ALIGN_TRANSFER, which makes one wonder if |
---|
| 3670 | + * they pretend to be 96kHz mono as a workaround for stereo being broken |
---|
| 3671 | + * by that... |
---|
| 3672 | + * |
---|
| 3673 | + * They also have an issue with initial stream alignment that causes the |
---|
| 3674 | + * channels to be swapped and out of phase, which is dealt with in quirks.c. |
---|
| 3675 | + */ |
---|
3519 | 3676 | { |
---|
3520 | | - USB_DEVICE(0x0414, 0xa001), |
---|
3521 | | - .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { |
---|
3522 | | - .vendor_name = "Gigabyte", |
---|
3523 | | - .product_name = "Aorus Master Main Audio", |
---|
3524 | | - .profile_name = "Gigabyte-Aorus-Master-Main-Audio", |
---|
3525 | | - .ifnum = QUIRK_NO_INTERFACE |
---|
| 3677 | + USB_AUDIO_DEVICE(0x534d, 0x0021), |
---|
| 3678 | + .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) { |
---|
| 3679 | + .vendor_name = "MacroSilicon", |
---|
| 3680 | + .product_name = "MS210x", |
---|
| 3681 | + .ifnum = QUIRK_ANY_INTERFACE, |
---|
| 3682 | + .type = QUIRK_COMPOSITE, |
---|
| 3683 | + .data = &(const struct snd_usb_audio_quirk[]) { |
---|
| 3684 | + { |
---|
| 3685 | + .ifnum = 2, |
---|
| 3686 | + .type = QUIRK_AUDIO_ALIGN_TRANSFER, |
---|
| 3687 | + }, |
---|
| 3688 | + { |
---|
| 3689 | + .ifnum = 2, |
---|
| 3690 | + .type = QUIRK_AUDIO_STANDARD_MIXER, |
---|
| 3691 | + }, |
---|
| 3692 | + { |
---|
| 3693 | + .ifnum = 3, |
---|
| 3694 | + .type = QUIRK_AUDIO_FIXED_ENDPOINT, |
---|
| 3695 | + .data = &(const struct audioformat) { |
---|
| 3696 | + .formats = SNDRV_PCM_FMTBIT_S16_LE, |
---|
| 3697 | + .channels = 2, |
---|
| 3698 | + .iface = 3, |
---|
| 3699 | + .altsetting = 1, |
---|
| 3700 | + .altset_idx = 1, |
---|
| 3701 | + .attributes = 0, |
---|
| 3702 | + .endpoint = 0x82, |
---|
| 3703 | + .ep_attr = USB_ENDPOINT_XFER_ISOC | |
---|
| 3704 | + USB_ENDPOINT_SYNC_ASYNC, |
---|
| 3705 | + .rates = SNDRV_PCM_RATE_CONTINUOUS, |
---|
| 3706 | + .rate_min = 48000, |
---|
| 3707 | + .rate_max = 48000, |
---|
| 3708 | + } |
---|
| 3709 | + }, |
---|
| 3710 | + { |
---|
| 3711 | + .ifnum = -1 |
---|
| 3712 | + } |
---|
| 3713 | + } |
---|
3526 | 3714 | } |
---|
3527 | 3715 | }, |
---|
3528 | 3716 | |
---|
.. | .. |
---|
3538 | 3726 | * channels to be swapped and out of phase, which is dealt with in quirks.c. |
---|
3539 | 3727 | */ |
---|
3540 | 3728 | { |
---|
3541 | | - .match_flags = USB_DEVICE_ID_MATCH_DEVICE | |
---|
3542 | | - USB_DEVICE_ID_MATCH_INT_CLASS | |
---|
3543 | | - USB_DEVICE_ID_MATCH_INT_SUBCLASS, |
---|
3544 | | - .idVendor = 0x534d, |
---|
3545 | | - .idProduct = 0x2109, |
---|
3546 | | - .bInterfaceClass = USB_CLASS_AUDIO, |
---|
3547 | | - .bInterfaceSubClass = USB_SUBCLASS_AUDIOCONTROL, |
---|
| 3729 | + USB_AUDIO_DEVICE(0x534d, 0x2109), |
---|
3548 | 3730 | .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) { |
---|
3549 | 3731 | .vendor_name = "MacroSilicon", |
---|
3550 | 3732 | .product_name = "MS2109", |
---|
.. | .. |
---|
3615 | 3797 | } |
---|
3616 | 3798 | } |
---|
3617 | 3799 | }, |
---|
| 3800 | +{ |
---|
| 3801 | + /* Advanced modes of the Mythware XA001AU. |
---|
| 3802 | + * For the standard mode, Mythware XA001AU has ID ffad:a001 |
---|
| 3803 | + */ |
---|
| 3804 | + USB_DEVICE_VENDOR_SPEC(0xffad, 0xa001), |
---|
| 3805 | + .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) { |
---|
| 3806 | + .vendor_name = "Mythware", |
---|
| 3807 | + .product_name = "XA001AU", |
---|
| 3808 | + .ifnum = QUIRK_ANY_INTERFACE, |
---|
| 3809 | + .type = QUIRK_COMPOSITE, |
---|
| 3810 | + .data = (const struct snd_usb_audio_quirk[]) { |
---|
| 3811 | + { |
---|
| 3812 | + .ifnum = 0, |
---|
| 3813 | + .type = QUIRK_IGNORE_INTERFACE, |
---|
| 3814 | + }, |
---|
| 3815 | + { |
---|
| 3816 | + .ifnum = 1, |
---|
| 3817 | + .type = QUIRK_AUDIO_STANDARD_INTERFACE, |
---|
| 3818 | + }, |
---|
| 3819 | + { |
---|
| 3820 | + .ifnum = 2, |
---|
| 3821 | + .type = QUIRK_AUDIO_STANDARD_INTERFACE, |
---|
| 3822 | + }, |
---|
| 3823 | + { |
---|
| 3824 | + .ifnum = -1 |
---|
| 3825 | + } |
---|
| 3826 | + } |
---|
| 3827 | + } |
---|
| 3828 | +}, |
---|
3618 | 3829 | |
---|
3619 | 3830 | #undef USB_DEVICE_VENDOR_SPEC |
---|
| 3831 | +#undef USB_AUDIO_DEVICE |
---|