2 * ALC269/ALC270/ALC275/ALC276 quirk models
3 * included by patch_realtek.c
15 ALC269_MODEL_LAST
/* last tag */
19 * ALC269 channel source setting (2 channel)
21 #define ALC269_DIGOUT_NID ALC880_DIGOUT_NID
23 #define alc269_dac_nids alc260_dac_nids
25 static const hda_nid_t alc269_adc_nids
[1] = {
30 static const hda_nid_t alc269_capsrc_nids
[1] = {
34 static const hda_nid_t alc269vb_adc_nids
[1] = {
39 static const hda_nid_t alc269vb_capsrc_nids
[1] = {
43 #define alc269_modes alc260_modes
44 #define alc269_capture_source alc880_lg_lw_capture_source
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
),
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
),
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
),
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
),
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
),
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
),
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
),
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
),
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
},
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
},
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
},
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
},
158 static void alc269_laptop_amic_setup(struct hda_codec
*codec
)
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;
165 spec
->automute_mode
= ALC_AUTOMUTE_MIXER
;
166 spec
->ext_mic_pin
= 0x18;
167 spec
->int_mic_pin
= 0x19;
171 static void alc269_laptop_dmic_setup(struct hda_codec
*codec
)
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;
178 spec
->automute_mode
= ALC_AUTOMUTE_MIXER
;
179 spec
->ext_mic_pin
= 0x18;
180 spec
->int_mic_pin
= 0x12;
184 static void alc269vb_laptop_amic_setup(struct hda_codec
*codec
)
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;
191 spec
->automute_mode
= ALC_AUTOMUTE_MIXER
;
192 spec
->ext_mic_pin
= 0x18;
193 spec
->int_mic_pin
= 0x19;
197 static void alc269vb_laptop_dmic_setup(struct hda_codec
*codec
)
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;
204 spec
->automute_mode
= ALC_AUTOMUTE_MIXER
;
205 spec
->ext_mic_pin
= 0x18;
206 spec
->int_mic_pin
= 0x12;
211 * generic initialization of ADC, input mixers and output mixers
213 static const struct hda_verb alc269_init_verbs
[] = {
215 * Unmute ADC0 and set the default input to mic-in
217 {0x08, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_UNMUTE(0)},
220 * Set up output mixers (0x02 - 0x03)
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
},
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)},
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
},
243 {0x14, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_OUT_UNMUTE
},
244 {0x15, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_OUT_UNMUTE
},
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},
252 {0x14, AC_VERB_SET_EAPD_BTLENABLE
, 2},
256 static const struct hda_verb alc269vb_init_verbs
[] = {
258 * Unmute ADC0 and set the default input to mic-in
260 {0x09, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_UNMUTE(0)},
263 * Set up output mixers (0x02 - 0x03)
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
},
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)},
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
},
286 {0x14, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_OUT_UNMUTE
},
287 {0x21, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_OUT_UNMUTE
},
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},
295 {0x14, AC_VERB_SET_EAPD_BTLENABLE
, 2},
300 * configuration and preset
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",
309 static const struct snd_pci_quirk alc269_cfg_tbl
[] = {
310 SND_PCI_QUIRK(0x1043, 0x8330, "ASUS Eeepc P703 P900A",
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
),
356 static const struct alc_config_preset alc269_presets
[] = {
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
,
363 .num_channel_mode
= ARRAY_SIZE(alc269_modes
),
364 .channel_mode
= alc269_modes
,
365 .input_mux
= &alc269_capture_source
,
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
,
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
,
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
,
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
,
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
,
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
,
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
,
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
,