]>
Commit | Line | Data |
---|---|---|
1d045db9 TI |
1 | /* |
2 | * ALC269/ALC270/ALC275/ALC276 quirk models | |
3 | * included by patch_realtek.c | |
4 | */ | |
5 | ||
6 | /* ALC269 models */ | |
7 | enum { | |
8 | ALC269_AUTO, | |
9 | ALC269_BASIC, | |
10 | ALC269_QUANTA_FL1, | |
11 | ALC269_AMIC, | |
12 | ALC269_DMIC, | |
13 | ALC269VB_AMIC, | |
14 | ALC269VB_DMIC, | |
1d045db9 TI |
15 | ALC269_MODEL_LAST /* last tag */ |
16 | }; | |
17 | ||
18 | /* | |
19 | * ALC269 channel source setting (2 channel) | |
20 | */ | |
21 | #define ALC269_DIGOUT_NID ALC880_DIGOUT_NID | |
22 | ||
23 | #define alc269_dac_nids alc260_dac_nids | |
24 | ||
25 | static const hda_nid_t alc269_adc_nids[1] = { | |
26 | /* ADC1 */ | |
27 | 0x08, | |
28 | }; | |
29 | ||
30 | static const hda_nid_t alc269_capsrc_nids[1] = { | |
31 | 0x23, | |
32 | }; | |
33 | ||
34 | static const hda_nid_t alc269vb_adc_nids[1] = { | |
35 | /* ADC1 */ | |
36 | 0x09, | |
37 | }; | |
38 | ||
39 | static const hda_nid_t alc269vb_capsrc_nids[1] = { | |
40 | 0x22, | |
41 | }; | |
42 | ||
43 | #define alc269_modes alc260_modes | |
44 | #define alc269_capture_source alc880_lg_lw_capture_source | |
45 | ||
46 | static const struct snd_kcontrol_new alc269_base_mixer[] = { | |
47 | HDA_CODEC_VOLUME("Front Playback Volume", 0x02, 0x0, HDA_OUTPUT), | |
48 | HDA_CODEC_MUTE("Front Playback Switch", 0x14, 0x0, HDA_OUTPUT), | |
49 | HDA_CODEC_VOLUME("Line Playback Volume", 0x0b, 0x02, HDA_INPUT), | |
50 | HDA_CODEC_MUTE("Line Playback Switch", 0x0b, 0x02, HDA_INPUT), | |
51 | HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x0, HDA_INPUT), | |
52 | HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x0, HDA_INPUT), | |
53 | HDA_CODEC_VOLUME("Mic Boost Volume", 0x18, 0, HDA_INPUT), | |
54 | HDA_CODEC_VOLUME("Front Mic Playback Volume", 0x0b, 0x01, HDA_INPUT), | |
55 | HDA_CODEC_MUTE("Front Mic Playback Switch", 0x0b, 0x01, HDA_INPUT), | |
56 | HDA_CODEC_VOLUME("Front Mic Boost Volume", 0x19, 0, HDA_INPUT), | |
57 | HDA_CODEC_MUTE("Headphone Playback Switch", 0x15, 0x0, HDA_OUTPUT), | |
58 | HDA_CODEC_MUTE_MONO("Mono Playback Switch", 0x16, 2, 0x0, HDA_OUTPUT), | |
59 | { } /* end */ | |
60 | }; | |
61 | ||
1d045db9 TI |
62 | static const struct snd_kcontrol_new alc269_laptop_mixer[] = { |
63 | HDA_CODEC_MUTE("Speaker Playback Switch", 0x14, 0x0, HDA_OUTPUT), | |
64 | HDA_CODEC_VOLUME("Speaker Playback Volume", 0x02, 0x0, HDA_OUTPUT), | |
65 | HDA_CODEC_MUTE("Headphone Playback Switch", 0x15, 0x0, HDA_OUTPUT), | |
66 | HDA_CODEC_VOLUME("Headphone Playback Volume", 0x03, 0x0, HDA_OUTPUT), | |
67 | { } /* end */ | |
68 | }; | |
69 | ||
70 | static const struct snd_kcontrol_new alc269vb_laptop_mixer[] = { | |
71 | HDA_CODEC_MUTE("Speaker Playback Switch", 0x14, 0x0, HDA_OUTPUT), | |
72 | HDA_CODEC_VOLUME("Speaker Playback Volume", 0x02, 0x0, HDA_OUTPUT), | |
73 | HDA_CODEC_MUTE("Headphone Playback Switch", 0x21, 0x0, HDA_OUTPUT), | |
74 | HDA_CODEC_VOLUME("Headphone Playback Volume", 0x03, 0x0, HDA_OUTPUT), | |
75 | { } /* end */ | |
76 | }; | |
77 | ||
78 | static const struct snd_kcontrol_new alc269_asus_mixer[] = { | |
79 | HDA_CODEC_VOLUME("Master Playback Volume", 0x02, 0x0, HDA_OUTPUT), | |
80 | HDA_CODEC_MUTE("Master Playback Switch", 0x0c, 0x0, HDA_INPUT), | |
81 | { } /* end */ | |
82 | }; | |
83 | ||
84 | /* capture mixer elements */ | |
85 | static const struct snd_kcontrol_new alc269_laptop_analog_capture_mixer[] = { | |
86 | HDA_CODEC_VOLUME("Capture Volume", 0x08, 0x0, HDA_INPUT), | |
87 | HDA_CODEC_MUTE("Capture Switch", 0x08, 0x0, HDA_INPUT), | |
88 | HDA_CODEC_VOLUME("Mic Boost Volume", 0x18, 0, HDA_INPUT), | |
89 | HDA_CODEC_VOLUME("Internal Mic Boost Volume", 0x19, 0, HDA_INPUT), | |
90 | { } /* end */ | |
91 | }; | |
92 | ||
93 | static const struct snd_kcontrol_new alc269_laptop_digital_capture_mixer[] = { | |
94 | HDA_CODEC_VOLUME("Capture Volume", 0x08, 0x0, HDA_INPUT), | |
95 | HDA_CODEC_MUTE("Capture Switch", 0x08, 0x0, HDA_INPUT), | |
96 | HDA_CODEC_VOLUME("Mic Boost Volume", 0x18, 0, HDA_INPUT), | |
97 | { } /* end */ | |
98 | }; | |
99 | ||
100 | static const struct snd_kcontrol_new alc269vb_laptop_analog_capture_mixer[] = { | |
101 | HDA_CODEC_VOLUME("Capture Volume", 0x09, 0x0, HDA_INPUT), | |
102 | HDA_CODEC_MUTE("Capture Switch", 0x09, 0x0, HDA_INPUT), | |
103 | HDA_CODEC_VOLUME("Mic Boost Volume", 0x18, 0, HDA_INPUT), | |
104 | HDA_CODEC_VOLUME("Internal Mic Boost Volume", 0x19, 0, HDA_INPUT), | |
105 | { } /* end */ | |
106 | }; | |
107 | ||
108 | static const struct snd_kcontrol_new alc269vb_laptop_digital_capture_mixer[] = { | |
109 | HDA_CODEC_VOLUME("Capture Volume", 0x09, 0x0, HDA_INPUT), | |
110 | HDA_CODEC_MUTE("Capture Switch", 0x09, 0x0, HDA_INPUT), | |
111 | HDA_CODEC_VOLUME("Mic Boost Volume", 0x18, 0, HDA_INPUT), | |
112 | { } /* end */ | |
113 | }; | |
114 | ||
1d045db9 TI |
115 | static const struct hda_verb alc269_laptop_dmic_init_verbs[] = { |
116 | {0x15, AC_VERB_SET_CONNECT_SEL, 0x01}, | |
117 | {0x23, AC_VERB_SET_CONNECT_SEL, 0x05}, | |
118 | {0x02, AC_VERB_SET_AMP_GAIN_MUTE, 0xb026 }, | |
119 | {0x08, AC_VERB_SET_AMP_GAIN_MUTE, (0x7019 | (0x00 << 8))}, | |
120 | {0x12, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_IN}, | |
121 | {0x18, AC_VERB_SET_UNSOLICITED_ENABLE, AC_USRSP_EN | ALC_MIC_EVENT}, | |
122 | {0x15, AC_VERB_SET_UNSOLICITED_ENABLE, AC_USRSP_EN | ALC_HP_EVENT}, | |
123 | {} | |
124 | }; | |
125 | ||
126 | static const struct hda_verb alc269_laptop_amic_init_verbs[] = { | |
127 | {0x15, AC_VERB_SET_CONNECT_SEL, 0x01}, | |
128 | {0x23, AC_VERB_SET_CONNECT_SEL, 0x01}, | |
129 | {0x02, AC_VERB_SET_AMP_GAIN_MUTE, 0xb026 }, | |
130 | {0x08, AC_VERB_SET_AMP_GAIN_MUTE, (0x701b | (0x00 << 8))}, | |
131 | {0x18, AC_VERB_SET_UNSOLICITED_ENABLE, AC_USRSP_EN | ALC_MIC_EVENT}, | |
132 | {0x15, AC_VERB_SET_UNSOLICITED_ENABLE, AC_USRSP_EN | ALC_HP_EVENT}, | |
133 | {} | |
134 | }; | |
135 | ||
136 | static const struct hda_verb alc269vb_laptop_dmic_init_verbs[] = { | |
137 | {0x21, AC_VERB_SET_CONNECT_SEL, 0x01}, | |
138 | {0x22, AC_VERB_SET_CONNECT_SEL, 0x06}, | |
139 | {0x02, AC_VERB_SET_AMP_GAIN_MUTE, 0xb026 }, | |
140 | {0x09, AC_VERB_SET_AMP_GAIN_MUTE, (0x7019 | (0x00 << 8))}, | |
141 | {0x12, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_IN}, | |
142 | {0x18, AC_VERB_SET_UNSOLICITED_ENABLE, AC_USRSP_EN | ALC_MIC_EVENT}, | |
143 | {0x21, AC_VERB_SET_UNSOLICITED_ENABLE, AC_USRSP_EN | ALC_HP_EVENT}, | |
144 | {} | |
145 | }; | |
146 | ||
147 | static const struct hda_verb alc269vb_laptop_amic_init_verbs[] = { | |
148 | {0x21, AC_VERB_SET_CONNECT_SEL, 0x01}, | |
149 | {0x22, AC_VERB_SET_CONNECT_SEL, 0x01}, | |
150 | {0x02, AC_VERB_SET_AMP_GAIN_MUTE, 0xb026 }, | |
151 | {0x09, AC_VERB_SET_AMP_GAIN_MUTE, (0x7019 | (0x00 << 8))}, | |
152 | {0x12, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_IN}, | |
153 | {0x18, AC_VERB_SET_UNSOLICITED_ENABLE, AC_USRSP_EN | ALC_MIC_EVENT}, | |
154 | {0x21, AC_VERB_SET_UNSOLICITED_ENABLE, AC_USRSP_EN | ALC_HP_EVENT}, | |
155 | {} | |
156 | }; | |
157 | ||
1d045db9 TI |
158 | static void alc269_laptop_amic_setup(struct hda_codec *codec) |
159 | { | |
160 | struct alc_spec *spec = codec->spec; | |
161 | spec->autocfg.hp_pins[0] = 0x15; | |
162 | spec->autocfg.speaker_pins[0] = 0x14; | |
163 | spec->automute_mixer_nid[0] = 0x0c; | |
164 | spec->automute = 1; | |
165 | spec->automute_mode = ALC_AUTOMUTE_MIXER; | |
166 | spec->ext_mic_pin = 0x18; | |
167 | spec->int_mic_pin = 0x19; | |
168 | spec->auto_mic = 1; | |
169 | } | |
170 | ||
171 | static void alc269_laptop_dmic_setup(struct hda_codec *codec) | |
172 | { | |
173 | struct alc_spec *spec = codec->spec; | |
174 | spec->autocfg.hp_pins[0] = 0x15; | |
175 | spec->autocfg.speaker_pins[0] = 0x14; | |
176 | spec->automute_mixer_nid[0] = 0x0c; | |
177 | spec->automute = 1; | |
178 | spec->automute_mode = ALC_AUTOMUTE_MIXER; | |
179 | spec->ext_mic_pin = 0x18; | |
180 | spec->int_mic_pin = 0x12; | |
181 | spec->auto_mic = 1; | |
182 | } | |
183 | ||
184 | static void alc269vb_laptop_amic_setup(struct hda_codec *codec) | |
185 | { | |
186 | struct alc_spec *spec = codec->spec; | |
187 | spec->autocfg.hp_pins[0] = 0x21; | |
188 | spec->autocfg.speaker_pins[0] = 0x14; | |
189 | spec->automute_mixer_nid[0] = 0x0c; | |
190 | spec->automute = 1; | |
191 | spec->automute_mode = ALC_AUTOMUTE_MIXER; | |
192 | spec->ext_mic_pin = 0x18; | |
193 | spec->int_mic_pin = 0x19; | |
194 | spec->auto_mic = 1; | |
195 | } | |
196 | ||
197 | static void alc269vb_laptop_dmic_setup(struct hda_codec *codec) | |
198 | { | |
199 | struct alc_spec *spec = codec->spec; | |
200 | spec->autocfg.hp_pins[0] = 0x21; | |
201 | spec->autocfg.speaker_pins[0] = 0x14; | |
202 | spec->automute_mixer_nid[0] = 0x0c; | |
203 | spec->automute = 1; | |
204 | spec->automute_mode = ALC_AUTOMUTE_MIXER; | |
205 | spec->ext_mic_pin = 0x18; | |
206 | spec->int_mic_pin = 0x12; | |
207 | spec->auto_mic = 1; | |
208 | } | |
209 | ||
210 | /* | |
211 | * generic initialization of ADC, input mixers and output mixers | |
212 | */ | |
213 | static const struct hda_verb alc269_init_verbs[] = { | |
214 | /* | |
215 | * Unmute ADC0 and set the default input to mic-in | |
216 | */ | |
217 | {0x08, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(0)}, | |
218 | ||
219 | /* | |
220 | * Set up output mixers (0x02 - 0x03) | |
221 | */ | |
222 | /* set vol=0 to output mixers */ | |
223 | {0x02, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_ZERO}, | |
224 | {0x03, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_ZERO}, | |
225 | ||
226 | /* set up input amps for analog loopback */ | |
227 | /* Amp Indices: DAC = 0, mixer = 1 */ | |
228 | {0x0c, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(0)}, | |
229 | {0x0c, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(1)}, | |
230 | {0x0d, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(0)}, | |
231 | {0x0d, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(1)}, | |
232 | {0x0e, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(0)}, | |
233 | {0x0e, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(1)}, | |
234 | ||
235 | {0x14, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT}, | |
236 | {0x15, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_HP}, | |
237 | {0x16, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT}, | |
238 | {0x18, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_VREF80}, | |
239 | {0x19, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_VREF80}, | |
240 | {0x1a, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_IN}, | |
241 | {0x1b, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_IN}, | |
242 | ||
243 | {0x14, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE}, | |
244 | {0x15, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE}, | |
245 | ||
246 | /* FIXME: use Mux-type input source selection */ | |
247 | /* Mixer elements: 0x18, 19, 1a, 1b, 1d, 0b */ | |
248 | /* Input mixer1: unmute Mic, F-Mic, Line, CD inputs */ | |
249 | {0x23, AC_VERB_SET_CONNECT_SEL, 0x00}, | |
250 | ||
251 | /* set EAPD */ | |
252 | {0x14, AC_VERB_SET_EAPD_BTLENABLE, 2}, | |
253 | { } | |
254 | }; | |
255 | ||
256 | static const struct hda_verb alc269vb_init_verbs[] = { | |
257 | /* | |
258 | * Unmute ADC0 and set the default input to mic-in | |
259 | */ | |
260 | {0x09, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(0)}, | |
261 | ||
262 | /* | |
263 | * Set up output mixers (0x02 - 0x03) | |
264 | */ | |
265 | /* set vol=0 to output mixers */ | |
266 | {0x02, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_ZERO}, | |
267 | {0x03, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_ZERO}, | |
268 | ||
269 | /* set up input amps for analog loopback */ | |
270 | /* Amp Indices: DAC = 0, mixer = 1 */ | |
271 | {0x0c, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(0)}, | |
272 | {0x0c, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(1)}, | |
273 | {0x0d, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(0)}, | |
274 | {0x0d, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(1)}, | |
275 | {0x0f, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(0)}, | |
276 | {0x0f, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(1)}, | |
277 | ||
278 | {0x14, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT}, | |
279 | {0x21, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_HP}, | |
280 | {0x16, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT}, | |
281 | {0x18, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_VREF80}, | |
282 | {0x19, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_VREF80}, | |
283 | {0x1a, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_IN}, | |
284 | {0x1b, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_IN}, | |
285 | ||
286 | {0x14, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE}, | |
287 | {0x21, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE}, | |
288 | ||
289 | /* FIXME: use Mux-type input source selection */ | |
290 | /* Mixer elements: 0x18, 19, 1a, 1b, 1d, 0b */ | |
291 | /* Input mixer1: unmute Mic, F-Mic, Line, CD inputs */ | |
292 | {0x22, AC_VERB_SET_CONNECT_SEL, 0x00}, | |
293 | ||
294 | /* set EAPD */ | |
295 | {0x14, AC_VERB_SET_EAPD_BTLENABLE, 2}, | |
296 | { } | |
297 | }; | |
298 | ||
299 | /* | |
300 | * configuration and preset | |
301 | */ | |
302 | static const char * const alc269_models[ALC269_MODEL_LAST] = { | |
303 | [ALC269_BASIC] = "basic", | |
1d045db9 TI |
304 | [ALC269_AMIC] = "laptop-amic", |
305 | [ALC269_DMIC] = "laptop-dmic", | |
1d045db9 TI |
306 | [ALC269_AUTO] = "auto", |
307 | }; | |
308 | ||
309 | static const struct snd_pci_quirk alc269_cfg_tbl[] = { | |
1d045db9 TI |
310 | SND_PCI_QUIRK(0x1043, 0x8330, "ASUS Eeepc P703 P900A", |
311 | ALC269_AMIC), | |
312 | SND_PCI_QUIRK(0x1043, 0x1013, "ASUS N61Da", ALC269VB_AMIC), | |
313 | SND_PCI_QUIRK(0x1043, 0x1113, "ASUS N63Jn", ALC269VB_AMIC), | |
314 | SND_PCI_QUIRK(0x1043, 0x1143, "ASUS B53f", ALC269VB_AMIC), | |
315 | SND_PCI_QUIRK(0x1043, 0x1133, "ASUS UJ20ft", ALC269_AMIC), | |
316 | SND_PCI_QUIRK(0x1043, 0x1183, "ASUS K72DR", ALC269VB_AMIC), | |
317 | SND_PCI_QUIRK(0x1043, 0x11b3, "ASUS K52DR", ALC269VB_AMIC), | |
318 | SND_PCI_QUIRK(0x1043, 0x11e3, "ASUS U33Jc", ALC269VB_AMIC), | |
319 | SND_PCI_QUIRK(0x1043, 0x1273, "ASUS UL80Jt", ALC269VB_AMIC), | |
320 | SND_PCI_QUIRK(0x1043, 0x1283, "ASUS U53Jc", ALC269_AMIC), | |
321 | SND_PCI_QUIRK(0x1043, 0x12b3, "ASUS N82JV", ALC269VB_AMIC), | |
322 | SND_PCI_QUIRK(0x1043, 0x12d3, "ASUS N61Jv", ALC269_AMIC), | |
323 | SND_PCI_QUIRK(0x1043, 0x13a3, "ASUS UL30Vt", ALC269_AMIC), | |
324 | SND_PCI_QUIRK(0x1043, 0x1373, "ASUS G73JX", ALC269_AMIC), | |
325 | SND_PCI_QUIRK(0x1043, 0x1383, "ASUS UJ30Jc", ALC269_AMIC), | |
326 | SND_PCI_QUIRK(0x1043, 0x13d3, "ASUS N61JA", ALC269_AMIC), | |
327 | SND_PCI_QUIRK(0x1043, 0x1413, "ASUS UL50", ALC269_AMIC), | |
328 | SND_PCI_QUIRK(0x1043, 0x1443, "ASUS UL30", ALC269_AMIC), | |
329 | SND_PCI_QUIRK(0x1043, 0x1453, "ASUS M60Jv", ALC269_AMIC), | |
330 | SND_PCI_QUIRK(0x1043, 0x1483, "ASUS UL80", ALC269_AMIC), | |
331 | SND_PCI_QUIRK(0x1043, 0x14f3, "ASUS F83Vf", ALC269_AMIC), | |
332 | SND_PCI_QUIRK(0x1043, 0x14e3, "ASUS UL20", ALC269_AMIC), | |
333 | SND_PCI_QUIRK(0x1043, 0x1513, "ASUS UX30", ALC269_AMIC), | |
334 | SND_PCI_QUIRK(0x1043, 0x1593, "ASUS N51Vn", ALC269_AMIC), | |
335 | SND_PCI_QUIRK(0x1043, 0x15a3, "ASUS N60Jv", ALC269_AMIC), | |
336 | SND_PCI_QUIRK(0x1043, 0x15b3, "ASUS N60Dp", ALC269_AMIC), | |
337 | SND_PCI_QUIRK(0x1043, 0x15c3, "ASUS N70De", ALC269_AMIC), | |
338 | SND_PCI_QUIRK(0x1043, 0x15e3, "ASUS F83T", ALC269_AMIC), | |
339 | SND_PCI_QUIRK(0x1043, 0x1643, "ASUS M60J", ALC269_AMIC), | |
340 | SND_PCI_QUIRK(0x1043, 0x1653, "ASUS U50", ALC269_AMIC), | |
341 | SND_PCI_QUIRK(0x1043, 0x1693, "ASUS F50N", ALC269_AMIC), | |
342 | SND_PCI_QUIRK(0x1043, 0x16a3, "ASUS F5Q", ALC269_AMIC), | |
1d045db9 TI |
343 | SND_PCI_QUIRK(0x1043, 0x1723, "ASUS P80", ALC269_AMIC), |
344 | SND_PCI_QUIRK(0x1043, 0x1743, "ASUS U80", ALC269_AMIC), | |
345 | SND_PCI_QUIRK(0x1043, 0x1773, "ASUS U20A", ALC269_AMIC), | |
346 | SND_PCI_QUIRK(0x1043, 0x1883, "ASUS F81Se", ALC269_AMIC), | |
1d045db9 | 347 | SND_PCI_QUIRK(0x104d, 0x9071, "Sony VAIO", ALC269_AUTO), |
1d045db9 | 348 | SND_PCI_QUIRK(0x152d, 0x1778, "Quanta ON1", ALC269_DMIC), |
1d045db9 TI |
349 | SND_PCI_QUIRK(0x17aa, 0x3be9, "Quanta Wistron", ALC269_AMIC), |
350 | SND_PCI_QUIRK(0x17aa, 0x3bf8, "Quanta FL1", ALC269_AMIC), | |
351 | SND_PCI_QUIRK(0x17ff, 0x059a, "Quanta EL3", ALC269_DMIC), | |
352 | SND_PCI_QUIRK(0x17ff, 0x059b, "Quanta JR1", ALC269_DMIC), | |
353 | {} | |
354 | }; | |
355 | ||
356 | static const struct alc_config_preset alc269_presets[] = { | |
357 | [ALC269_BASIC] = { | |
358 | .mixers = { alc269_base_mixer }, | |
359 | .init_verbs = { alc269_init_verbs }, | |
360 | .num_dacs = ARRAY_SIZE(alc269_dac_nids), | |
361 | .dac_nids = alc269_dac_nids, | |
362 | .hp_nid = 0x03, | |
363 | .num_channel_mode = ARRAY_SIZE(alc269_modes), | |
364 | .channel_mode = alc269_modes, | |
365 | .input_mux = &alc269_capture_source, | |
366 | }, | |
1d045db9 TI |
367 | [ALC269_AMIC] = { |
368 | .mixers = { alc269_laptop_mixer }, | |
369 | .cap_mixer = alc269_laptop_analog_capture_mixer, | |
370 | .init_verbs = { alc269_init_verbs, | |
371 | alc269_laptop_amic_init_verbs }, | |
372 | .num_dacs = ARRAY_SIZE(alc269_dac_nids), | |
373 | .dac_nids = alc269_dac_nids, | |
374 | .hp_nid = 0x03, | |
375 | .num_channel_mode = ARRAY_SIZE(alc269_modes), | |
376 | .channel_mode = alc269_modes, | |
377 | .unsol_event = alc_sku_unsol_event, | |
378 | .setup = alc269_laptop_amic_setup, | |
379 | .init_hook = alc_inithook, | |
380 | }, | |
381 | [ALC269_DMIC] = { | |
382 | .mixers = { alc269_laptop_mixer }, | |
383 | .cap_mixer = alc269_laptop_digital_capture_mixer, | |
384 | .init_verbs = { alc269_init_verbs, | |
385 | alc269_laptop_dmic_init_verbs }, | |
386 | .num_dacs = ARRAY_SIZE(alc269_dac_nids), | |
387 | .dac_nids = alc269_dac_nids, | |
388 | .hp_nid = 0x03, | |
389 | .num_channel_mode = ARRAY_SIZE(alc269_modes), | |
390 | .channel_mode = alc269_modes, | |
391 | .unsol_event = alc_sku_unsol_event, | |
392 | .setup = alc269_laptop_dmic_setup, | |
393 | .init_hook = alc_inithook, | |
394 | }, | |
395 | [ALC269VB_AMIC] = { | |
396 | .mixers = { alc269vb_laptop_mixer }, | |
397 | .cap_mixer = alc269vb_laptop_analog_capture_mixer, | |
398 | .init_verbs = { alc269vb_init_verbs, | |
399 | alc269vb_laptop_amic_init_verbs }, | |
400 | .num_dacs = ARRAY_SIZE(alc269_dac_nids), | |
401 | .dac_nids = alc269_dac_nids, | |
402 | .hp_nid = 0x03, | |
403 | .num_channel_mode = ARRAY_SIZE(alc269_modes), | |
404 | .channel_mode = alc269_modes, | |
405 | .unsol_event = alc_sku_unsol_event, | |
406 | .setup = alc269vb_laptop_amic_setup, | |
407 | .init_hook = alc_inithook, | |
408 | }, | |
409 | [ALC269VB_DMIC] = { | |
410 | .mixers = { alc269vb_laptop_mixer }, | |
411 | .cap_mixer = alc269vb_laptop_digital_capture_mixer, | |
412 | .init_verbs = { alc269vb_init_verbs, | |
413 | alc269vb_laptop_dmic_init_verbs }, | |
414 | .num_dacs = ARRAY_SIZE(alc269_dac_nids), | |
415 | .dac_nids = alc269_dac_nids, | |
416 | .hp_nid = 0x03, | |
417 | .num_channel_mode = ARRAY_SIZE(alc269_modes), | |
418 | .channel_mode = alc269_modes, | |
419 | .unsol_event = alc_sku_unsol_event, | |
420 | .setup = alc269vb_laptop_dmic_setup, | |
421 | .init_hook = alc_inithook, | |
422 | }, | |
1d045db9 TI |
423 | }; |
424 |