]> git.proxmox.com Git - mirror_ubuntu-bionic-kernel.git/blob - sound/pci/hda/alc269_quirks.c
7d33f05bfc70b74ef47b2d347c1448d7adfa505a
[mirror_ubuntu-bionic-kernel.git] / sound / pci / hda / alc269_quirks.c
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,
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
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
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
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",
304 [ALC269_AMIC] = "laptop-amic",
305 [ALC269_DMIC] = "laptop-dmic",
306 [ALC269_AUTO] = "auto",
307 };
308
309 static const struct snd_pci_quirk alc269_cfg_tbl[] = {
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),
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),
347 SND_PCI_QUIRK(0x104d, 0x9071, "Sony VAIO", ALC269_AUTO),
348 SND_PCI_QUIRK(0x152d, 0x1778, "Quanta ON1", ALC269_DMIC),
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 },
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 },
423 };
424