2 * ALC662/ALC663/ALC665/ALC670 quirk models
3 * included by patch_realtek.c
14 ALC662_ASUS_EEEPC_P701
,
15 ALC662_ASUS_EEEPC_EP20
,
32 #define ALC662_DIGOUT_NID 0x06
33 #define ALC662_DIGIN_NID 0x0a
35 static const hda_nid_t alc662_dac_nids
[3] = {
36 /* front, rear, clfe */
40 static const hda_nid_t alc272_dac_nids
[2] = {
44 static const hda_nid_t alc662_adc_nids
[2] = {
49 static const hda_nid_t alc272_adc_nids
[1] = {
54 static const hda_nid_t alc662_capsrc_nids
[2] = { 0x22, 0x23 };
55 static const hda_nid_t alc272_capsrc_nids
[1] = { 0x23 };
59 /* FIXME: should be a matrix-type input source selection */
60 static const struct hda_input_mux alc662_capture_source
= {
70 static const struct hda_input_mux alc662_lenovo_101e_capture_source
= {
78 static const struct hda_input_mux alc663_capture_source
= {
90 static const struct hda_channel_mode alc662_3ST_2ch_modes
[1] = {
97 static const struct hda_verb alc662_3ST_ch2_init
[] = {
98 { 0x18, AC_VERB_SET_PIN_WIDGET_CONTROL
, PIN_VREF80
},
99 { 0x18, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_OUT_MUTE
},
100 { 0x1a, AC_VERB_SET_PIN_WIDGET_CONTROL
, PIN_IN
},
101 { 0x1a, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_OUT_MUTE
},
108 static const struct hda_verb alc662_3ST_ch6_init
[] = {
109 { 0x18, AC_VERB_SET_PIN_WIDGET_CONTROL
, PIN_OUT
},
110 { 0x18, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_OUT_UNMUTE
},
111 { 0x18, AC_VERB_SET_CONNECT_SEL
, 0x02 },
112 { 0x1a, AC_VERB_SET_PIN_WIDGET_CONTROL
, PIN_OUT
},
113 { 0x1a, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_OUT_UNMUTE
},
114 { 0x1a, AC_VERB_SET_CONNECT_SEL
, 0x01 },
118 static const struct hda_channel_mode alc662_3ST_6ch_modes
[2] = {
119 { 2, alc662_3ST_ch2_init
},
120 { 6, alc662_3ST_ch6_init
},
126 static const struct hda_verb alc662_sixstack_ch6_init
[] = {
127 { 0x16, AC_VERB_SET_PIN_WIDGET_CONTROL
, 0x00 },
128 { 0x15, AC_VERB_SET_PIN_WIDGET_CONTROL
, 0x00 },
129 { 0x14, AC_VERB_SET_PIN_WIDGET_CONTROL
, PIN_OUT
},
136 static const struct hda_verb alc662_sixstack_ch8_init
[] = {
137 { 0x16, AC_VERB_SET_PIN_WIDGET_CONTROL
, PIN_OUT
},
138 { 0x15, AC_VERB_SET_PIN_WIDGET_CONTROL
, PIN_OUT
},
139 { 0x14, AC_VERB_SET_PIN_WIDGET_CONTROL
, PIN_OUT
},
143 static const struct hda_channel_mode alc662_5stack_modes
[2] = {
144 { 2, alc662_sixstack_ch6_init
},
145 { 6, alc662_sixstack_ch8_init
},
148 /* Pin assignment: Front=0x14, Rear=0x15, CLFE=0x16, Side=0x17
149 * Mic=0x18, Front Mic=0x19, Line-In=0x1a, HP=0x1b
152 static const struct snd_kcontrol_new alc662_base_mixer
[] = {
153 /* output mixer control */
154 HDA_CODEC_VOLUME("Front Playback Volume", 0x2, 0x0, HDA_OUTPUT
),
155 HDA_CODEC_MUTE("Front Playback Switch", 0x0c, 0x0, HDA_INPUT
),
156 HDA_CODEC_VOLUME("Surround Playback Volume", 0x3, 0x0, HDA_OUTPUT
),
157 HDA_CODEC_MUTE("Surround Playback Switch", 0x0d, 0x0, HDA_INPUT
),
158 HDA_CODEC_VOLUME_MONO("Center Playback Volume", 0x04, 1, 0x0, HDA_OUTPUT
),
159 HDA_CODEC_VOLUME_MONO("LFE Playback Volume", 0x04, 2, 0x0, HDA_OUTPUT
),
160 HDA_CODEC_MUTE_MONO("Center Playback Switch", 0x0e, 1, 0x0, HDA_INPUT
),
161 HDA_CODEC_MUTE_MONO("LFE Playback Switch", 0x0e, 2, 0x0, HDA_INPUT
),
162 HDA_CODEC_MUTE("Headphone Playback Switch", 0x1b, 0x0, HDA_OUTPUT
),
164 /*Input mixer control */
165 HDA_CODEC_VOLUME("CD Playback Volume", 0xb, 0x4, HDA_INPUT
),
166 HDA_CODEC_MUTE("CD Playback Switch", 0xb, 0x4, HDA_INPUT
),
167 HDA_CODEC_VOLUME("Line Playback Volume", 0xb, 0x02, HDA_INPUT
),
168 HDA_CODEC_MUTE("Line Playback Switch", 0xb, 0x02, HDA_INPUT
),
169 HDA_CODEC_VOLUME("Mic Playback Volume", 0xb, 0x0, HDA_INPUT
),
170 HDA_CODEC_MUTE("Mic Playback Switch", 0xb, 0x0, HDA_INPUT
),
171 HDA_CODEC_VOLUME("Front Mic Playback Volume", 0xb, 0x01, HDA_INPUT
),
172 HDA_CODEC_MUTE("Front Mic Playback Switch", 0xb, 0x01, HDA_INPUT
),
176 static const struct snd_kcontrol_new alc662_3ST_2ch_mixer
[] = {
177 HDA_CODEC_VOLUME("Front Playback Volume", 0x02, 0x0, HDA_OUTPUT
),
178 HDA_CODEC_MUTE("Front Playback Switch", 0x0c, 0x0, HDA_INPUT
),
179 HDA_CODEC_MUTE("Headphone Playback Switch", 0x1b, 0x0, HDA_OUTPUT
),
180 HDA_CODEC_VOLUME("CD Playback Volume", 0x0b, 0x04, HDA_INPUT
),
181 HDA_CODEC_MUTE("CD Playback Switch", 0x0b, 0x04, HDA_INPUT
),
182 HDA_CODEC_VOLUME("Line Playback Volume", 0x0b, 0x02, HDA_INPUT
),
183 HDA_CODEC_MUTE("Line Playback Switch", 0x0b, 0x02, HDA_INPUT
),
184 HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x0, HDA_INPUT
),
185 HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x0, HDA_INPUT
),
186 HDA_CODEC_VOLUME("Front Mic Playback Volume", 0x0b, 0x1, HDA_INPUT
),
187 HDA_CODEC_MUTE("Front Mic Playback Switch", 0x0b, 0x1, HDA_INPUT
),
191 static const struct snd_kcontrol_new alc662_3ST_6ch_mixer
[] = {
192 HDA_CODEC_VOLUME("Front Playback Volume", 0x02, 0x0, HDA_OUTPUT
),
193 HDA_CODEC_MUTE("Front Playback Switch", 0x0c, 0x0, HDA_INPUT
),
194 HDA_CODEC_VOLUME("Surround Playback Volume", 0x03, 0x0, HDA_OUTPUT
),
195 HDA_CODEC_MUTE("Surround Playback Switch", 0x0d, 0x0, HDA_INPUT
),
196 HDA_CODEC_VOLUME_MONO("Center Playback Volume", 0x04, 1, 0x0, HDA_OUTPUT
),
197 HDA_CODEC_VOLUME_MONO("LFE Playback Volume", 0x04, 2, 0x0, HDA_OUTPUT
),
198 HDA_CODEC_MUTE_MONO("Center Playback Switch", 0x0e, 1, 0x0, HDA_INPUT
),
199 HDA_CODEC_MUTE_MONO("LFE Playback Switch", 0x0e, 2, 0x0, HDA_INPUT
),
200 HDA_CODEC_MUTE("Headphone Playback Switch", 0x1b, 0x0, HDA_OUTPUT
),
201 HDA_CODEC_VOLUME("CD Playback Volume", 0x0b, 0x04, HDA_INPUT
),
202 HDA_CODEC_MUTE("CD Playback Switch", 0x0b, 0x04, HDA_INPUT
),
203 HDA_CODEC_VOLUME("Line Playback Volume", 0x0b, 0x02, HDA_INPUT
),
204 HDA_CODEC_MUTE("Line Playback Switch", 0x0b, 0x02, HDA_INPUT
),
205 HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x0, HDA_INPUT
),
206 HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x0, HDA_INPUT
),
207 HDA_CODEC_VOLUME("Front Mic Playback Volume", 0x0b, 0x1, HDA_INPUT
),
208 HDA_CODEC_MUTE("Front Mic Playback Switch", 0x0b, 0x1, HDA_INPUT
),
212 static const struct snd_kcontrol_new alc662_lenovo_101e_mixer
[] = {
213 HDA_CODEC_VOLUME("Front Playback Volume", 0x02, 0x0, HDA_OUTPUT
),
214 HDA_BIND_MUTE("Front Playback Switch", 0x02, 2, HDA_INPUT
),
215 HDA_CODEC_VOLUME("Speaker Playback Volume", 0x03, 0x0, HDA_OUTPUT
),
216 HDA_BIND_MUTE("Speaker Playback Switch", 0x03, 2, HDA_INPUT
),
217 HDA_CODEC_MUTE("Headphone Playback Switch", 0x1b, 0x0, HDA_OUTPUT
),
218 HDA_CODEC_VOLUME("Line Playback Volume", 0x0b, 0x02, HDA_INPUT
),
219 HDA_CODEC_MUTE("Line Playback Switch", 0x0b, 0x02, HDA_INPUT
),
220 HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x1, HDA_INPUT
),
221 HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x1, HDA_INPUT
),
225 static const struct snd_kcontrol_new alc662_eeepc_p701_mixer
[] = {
226 HDA_CODEC_VOLUME("Master Playback Volume", 0x02, 0x0, HDA_OUTPUT
),
227 ALC262_HIPPO_MASTER_SWITCH
,
229 HDA_CODEC_VOLUME("Mic Boost Volume", 0x18, 0, HDA_INPUT
),
230 HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x0, HDA_INPUT
),
231 HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x0, HDA_INPUT
),
233 HDA_CODEC_VOLUME("Internal Mic Boost Volume", 0x19, 0, HDA_INPUT
),
234 HDA_CODEC_VOLUME("Internal Mic Playback Volume", 0x0b, 0x1, HDA_INPUT
),
235 HDA_CODEC_MUTE("Internal Mic Playback Switch", 0x0b, 0x1, HDA_INPUT
),
239 static const struct snd_kcontrol_new alc662_eeepc_ep20_mixer
[] = {
240 ALC262_HIPPO_MASTER_SWITCH
,
241 HDA_CODEC_VOLUME("Front Playback Volume", 0x02, 0x0, HDA_OUTPUT
),
242 HDA_CODEC_VOLUME("Surround Playback Volume", 0x03, 0x0, HDA_OUTPUT
),
243 HDA_CODEC_VOLUME_MONO("Center Playback Volume", 0x04, 1, 0x0, HDA_OUTPUT
),
244 HDA_CODEC_VOLUME_MONO("LFE Playback Volume", 0x04, 2, 0x0, HDA_OUTPUT
),
245 HDA_BIND_MUTE("MuteCtrl Playback Switch", 0x0c, 2, HDA_INPUT
),
246 HDA_CODEC_VOLUME("Line Playback Volume", 0x0b, 0x02, HDA_INPUT
),
247 HDA_CODEC_MUTE("Line Playback Switch", 0x0b, 0x02, HDA_INPUT
),
248 HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x0, HDA_INPUT
),
249 HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x0, HDA_INPUT
),
253 static const struct hda_bind_ctls alc663_asus_bind_master_vol
= {
254 .ops
= &snd_hda_bind_vol
,
256 HDA_COMPOSE_AMP_VAL(0x02, 3, 0, HDA_OUTPUT
),
257 HDA_COMPOSE_AMP_VAL(0x03, 3, 0, HDA_OUTPUT
),
262 static const struct hda_bind_ctls alc663_asus_one_bind_switch
= {
263 .ops
= &snd_hda_bind_sw
,
265 HDA_COMPOSE_AMP_VAL(0x14, 3, 0, HDA_OUTPUT
),
266 HDA_COMPOSE_AMP_VAL(0x21, 3, 0, HDA_OUTPUT
),
271 static const struct snd_kcontrol_new alc663_m51va_mixer
[] = {
272 HDA_BIND_VOL("Master Playback Volume", &alc663_asus_bind_master_vol
),
273 HDA_BIND_SW("Master Playback Switch", &alc663_asus_one_bind_switch
),
274 HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x0, HDA_INPUT
),
275 HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x0, HDA_INPUT
),
279 static const struct hda_bind_ctls alc663_asus_tree_bind_switch
= {
280 .ops
= &snd_hda_bind_sw
,
282 HDA_COMPOSE_AMP_VAL(0x14, 3, 0, HDA_OUTPUT
),
283 HDA_COMPOSE_AMP_VAL(0x15, 3, 0, HDA_OUTPUT
),
284 HDA_COMPOSE_AMP_VAL(0x21, 3, 0, HDA_OUTPUT
),
289 static const struct snd_kcontrol_new alc663_two_hp_m1_mixer
[] = {
290 HDA_BIND_VOL("Master Playback Volume", &alc663_asus_bind_master_vol
),
291 HDA_BIND_SW("Master Playback Switch", &alc663_asus_tree_bind_switch
),
292 HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x0, HDA_INPUT
),
293 HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x0, HDA_INPUT
),
294 HDA_CODEC_VOLUME("F-Mic Playback Volume", 0x0b, 0x1, HDA_INPUT
),
295 HDA_CODEC_MUTE("F-Mic Playback Switch", 0x0b, 0x1, HDA_INPUT
),
300 static const struct hda_bind_ctls alc663_asus_four_bind_switch
= {
301 .ops
= &snd_hda_bind_sw
,
303 HDA_COMPOSE_AMP_VAL(0x14, 3, 0, HDA_OUTPUT
),
304 HDA_COMPOSE_AMP_VAL(0x15, 3, 0, HDA_OUTPUT
),
305 HDA_COMPOSE_AMP_VAL(0x1b, 3, 0, HDA_OUTPUT
),
310 static const struct snd_kcontrol_new alc663_two_hp_m2_mixer
[] = {
311 HDA_BIND_VOL("Master Playback Volume", &alc663_asus_bind_master_vol
),
312 HDA_BIND_SW("Master Playback Switch", &alc663_asus_four_bind_switch
),
313 HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x0, HDA_INPUT
),
314 HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x0, HDA_INPUT
),
315 HDA_CODEC_VOLUME("F-Mic Playback Volume", 0x0b, 0x1, HDA_INPUT
),
316 HDA_CODEC_MUTE("F-Mic Playback Switch", 0x0b, 0x1, HDA_INPUT
),
320 static const struct snd_kcontrol_new alc662_1bjd_mixer
[] = {
321 HDA_CODEC_VOLUME("Speaker Playback Volume", 0x02, 0x0, HDA_OUTPUT
),
322 HDA_CODEC_MUTE("Speaker Playback Switch", 0x14, 0x0, HDA_OUTPUT
),
323 HDA_CODEC_MUTE("Headphone Playback Switch", 0x1b, 0x0, HDA_OUTPUT
),
324 HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x0, HDA_INPUT
),
325 HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x0, HDA_INPUT
),
326 HDA_CODEC_VOLUME("F-Mic Playback Volume", 0x0b, 0x1, HDA_INPUT
),
327 HDA_CODEC_MUTE("F-Mic Playback Switch", 0x0b, 0x1, HDA_INPUT
),
331 static const struct hda_bind_ctls alc663_asus_two_bind_master_vol
= {
332 .ops
= &snd_hda_bind_vol
,
334 HDA_COMPOSE_AMP_VAL(0x02, 3, 0, HDA_OUTPUT
),
335 HDA_COMPOSE_AMP_VAL(0x04, 3, 0, HDA_OUTPUT
),
340 static const struct hda_bind_ctls alc663_asus_two_bind_switch
= {
341 .ops
= &snd_hda_bind_sw
,
343 HDA_COMPOSE_AMP_VAL(0x14, 3, 0, HDA_OUTPUT
),
344 HDA_COMPOSE_AMP_VAL(0x16, 3, 0, HDA_OUTPUT
),
349 static const struct snd_kcontrol_new alc663_asus_21jd_clfe_mixer
[] = {
350 HDA_BIND_VOL("Master Playback Volume",
351 &alc663_asus_two_bind_master_vol
),
352 HDA_BIND_SW("Master Playback Switch", &alc663_asus_two_bind_switch
),
353 HDA_CODEC_VOLUME("Headphone Playback Volume", 0x03, 0x0, HDA_OUTPUT
),
354 HDA_CODEC_MUTE("Headphone Playback Switch", 0x21, 0x0, HDA_OUTPUT
),
355 HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x0, HDA_INPUT
),
356 HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x0, HDA_INPUT
),
360 static const struct snd_kcontrol_new alc663_asus_15jd_clfe_mixer
[] = {
361 HDA_BIND_VOL("Master Playback Volume", &alc663_asus_bind_master_vol
),
362 HDA_BIND_SW("Master Playback Switch", &alc663_asus_two_bind_switch
),
363 HDA_CODEC_VOLUME("Headphone Playback Volume", 0x03, 0x0, HDA_OUTPUT
),
364 HDA_CODEC_MUTE("Headphone Playback Switch", 0x15, 0x0, HDA_OUTPUT
),
365 HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x0, HDA_INPUT
),
366 HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x0, HDA_INPUT
),
370 static const struct snd_kcontrol_new alc663_g71v_mixer
[] = {
371 HDA_CODEC_VOLUME("Speaker Playback Volume", 0x02, 0x0, HDA_OUTPUT
),
372 HDA_CODEC_MUTE("Speaker Playback Switch", 0x14, 0x0, HDA_OUTPUT
),
373 HDA_CODEC_VOLUME("Front Playback Volume", 0x03, 0x0, HDA_OUTPUT
),
374 HDA_CODEC_MUTE("Front Playback Switch", 0x15, 0x0, HDA_OUTPUT
),
375 HDA_CODEC_MUTE("Headphone Playback Switch", 0x21, 0x0, HDA_OUTPUT
),
377 HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x0, HDA_INPUT
),
378 HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x0, HDA_INPUT
),
379 HDA_CODEC_VOLUME("Internal Mic Playback Volume", 0x0b, 0x1, HDA_INPUT
),
380 HDA_CODEC_MUTE("Internal Mic Playback Switch", 0x0b, 0x1, HDA_INPUT
),
384 static const struct snd_kcontrol_new alc663_g50v_mixer
[] = {
385 HDA_CODEC_VOLUME("Speaker Playback Volume", 0x02, 0x0, HDA_OUTPUT
),
386 HDA_CODEC_MUTE("Speaker Playback Switch", 0x14, 0x0, HDA_OUTPUT
),
387 HDA_CODEC_MUTE("Headphone Playback Switch", 0x21, 0x0, HDA_OUTPUT
),
389 HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x0, HDA_INPUT
),
390 HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x0, HDA_INPUT
),
391 HDA_CODEC_VOLUME("Internal Mic Playback Volume", 0x0b, 0x1, HDA_INPUT
),
392 HDA_CODEC_MUTE("Internal Mic Playback Switch", 0x0b, 0x1, HDA_INPUT
),
393 HDA_CODEC_VOLUME("Line Playback Volume", 0x0b, 0x02, HDA_INPUT
),
394 HDA_CODEC_MUTE("Line Playback Switch", 0x0b, 0x02, HDA_INPUT
),
398 static const struct hda_bind_ctls alc663_asus_mode7_8_all_bind_switch
= {
399 .ops
= &snd_hda_bind_sw
,
401 HDA_COMPOSE_AMP_VAL(0x14, 3, 0, HDA_OUTPUT
),
402 HDA_COMPOSE_AMP_VAL(0x15, 3, 0, HDA_OUTPUT
),
403 HDA_COMPOSE_AMP_VAL(0x17, 3, 0, HDA_OUTPUT
),
404 HDA_COMPOSE_AMP_VAL(0x1b, 3, 0, HDA_OUTPUT
),
405 HDA_COMPOSE_AMP_VAL(0x21, 3, 0, HDA_OUTPUT
),
410 static const struct hda_bind_ctls alc663_asus_mode7_8_sp_bind_switch
= {
411 .ops
= &snd_hda_bind_sw
,
413 HDA_COMPOSE_AMP_VAL(0x14, 3, 0, HDA_OUTPUT
),
414 HDA_COMPOSE_AMP_VAL(0x17, 3, 0, HDA_OUTPUT
),
419 static const struct snd_kcontrol_new alc663_mode7_mixer
[] = {
420 HDA_BIND_SW("Master Playback Switch", &alc663_asus_mode7_8_all_bind_switch
),
421 HDA_BIND_VOL("Speaker Playback Volume", &alc663_asus_bind_master_vol
),
422 HDA_BIND_SW("Speaker Playback Switch", &alc663_asus_mode7_8_sp_bind_switch
),
423 HDA_CODEC_MUTE("Headphone1 Playback Switch", 0x1b, 0x0, HDA_OUTPUT
),
424 HDA_CODEC_MUTE("Headphone2 Playback Switch", 0x21, 0x0, HDA_OUTPUT
),
425 HDA_CODEC_VOLUME("IntMic Playback Volume", 0x0b, 0x0, HDA_INPUT
),
426 HDA_CODEC_MUTE("IntMic Playback Switch", 0x0b, 0x0, HDA_INPUT
),
427 HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x1, HDA_INPUT
),
428 HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x1, HDA_INPUT
),
432 static const struct snd_kcontrol_new alc663_mode8_mixer
[] = {
433 HDA_BIND_SW("Master Playback Switch", &alc663_asus_mode7_8_all_bind_switch
),
434 HDA_BIND_VOL("Speaker Playback Volume", &alc663_asus_bind_master_vol
),
435 HDA_BIND_SW("Speaker Playback Switch", &alc663_asus_mode7_8_sp_bind_switch
),
436 HDA_CODEC_MUTE("Headphone1 Playback Switch", 0x15, 0x0, HDA_OUTPUT
),
437 HDA_CODEC_MUTE("Headphone2 Playback Switch", 0x21, 0x0, HDA_OUTPUT
),
438 HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x0, HDA_INPUT
),
439 HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x0, HDA_INPUT
),
444 static const struct snd_kcontrol_new alc662_chmode_mixer
[] = {
446 .iface
= SNDRV_CTL_ELEM_IFACE_MIXER
,
447 .name
= "Channel Mode",
448 .info
= alc_ch_mode_info
,
449 .get
= alc_ch_mode_get
,
450 .put
= alc_ch_mode_put
,
455 static const struct hda_verb alc662_init_verbs
[] = {
456 /* ADC: mute amp left and right */
457 {0x09, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_MUTE(0)},
458 {0x09, AC_VERB_SET_CONNECT_SEL
, 0x00},
460 {0x0c, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_UNMUTE(0)},
461 {0x0c, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_UNMUTE(1)},
462 {0x0d, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_UNMUTE(0)},
463 {0x0d, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_UNMUTE(1)},
464 {0x0e, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_UNMUTE(0)},
465 {0x0e, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_UNMUTE(1)},
467 /* Front Pin: output 0 (0x0c) */
468 {0x14, AC_VERB_SET_PIN_WIDGET_CONTROL
, PIN_OUT
},
469 {0x14, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_OUT_UNMUTE
},
471 /* Rear Pin: output 1 (0x0d) */
472 {0x15, AC_VERB_SET_PIN_WIDGET_CONTROL
, PIN_OUT
},
473 {0x15, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_OUT_UNMUTE
},
475 /* CLFE Pin: output 2 (0x0e) */
476 {0x16, AC_VERB_SET_PIN_WIDGET_CONTROL
, PIN_OUT
},
477 {0x16, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_OUT_UNMUTE
},
479 /* Mic (rear) pin: input vref at 80% */
480 {0x18, AC_VERB_SET_PIN_WIDGET_CONTROL
, PIN_VREF80
},
481 {0x18, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_OUT_MUTE
},
482 /* Front Mic pin: input vref at 80% */
483 {0x19, AC_VERB_SET_PIN_WIDGET_CONTROL
, PIN_VREF80
},
484 {0x19, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_OUT_MUTE
},
485 /* Line In pin: input */
486 {0x1a, AC_VERB_SET_PIN_WIDGET_CONTROL
, PIN_IN
},
487 {0x1a, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_OUT_MUTE
},
488 /* Line-2 In: Headphone output (output 0 - 0x0c) */
489 {0x1b, AC_VERB_SET_PIN_WIDGET_CONTROL
, PIN_HP
},
490 {0x1b, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_OUT_UNMUTE
},
491 {0x1b, AC_VERB_SET_CONNECT_SEL
, 0x00},
492 /* CD pin widget for input */
493 {0x1c, AC_VERB_SET_PIN_WIDGET_CONTROL
, PIN_IN
},
495 /* FIXME: use matrix-type input source selection */
496 /* Mixer elements: 0x18, 19, 1a, 1b, 1c, 1d, 14, 15, 16, 17, 0b */
498 {0x22, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_UNMUTE(0)},
499 {0x23, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_UNMUTE(0)},
504 static const struct hda_verb alc662_eapd_init_verbs
[] = {
505 /* always trun on EAPD */
506 {0x14, AC_VERB_SET_EAPD_BTLENABLE
, 2},
507 {0x15, AC_VERB_SET_EAPD_BTLENABLE
, 2},
511 static const struct hda_verb alc662_sue_init_verbs
[] = {
512 {0x14, AC_VERB_SET_UNSOLICITED_ENABLE
, AC_USRSP_EN
|ALC_FRONT_EVENT
},
513 {0x1b, AC_VERB_SET_UNSOLICITED_ENABLE
, AC_USRSP_EN
|ALC_HP_EVENT
},
517 static const struct hda_verb alc662_eeepc_sue_init_verbs
[] = {
518 {0x18, AC_VERB_SET_UNSOLICITED_ENABLE
, AC_USRSP_EN
| ALC_MIC_EVENT
},
519 {0x1b, AC_VERB_SET_UNSOLICITED_ENABLE
, AC_USRSP_EN
| ALC_HP_EVENT
},
523 /* Set Unsolicited Event*/
524 static const struct hda_verb alc662_eeepc_ep20_sue_init_verbs
[] = {
525 {0x1b, AC_VERB_SET_PIN_WIDGET_CONTROL
, PIN_OUT
},
526 {0x14, AC_VERB_SET_UNSOLICITED_ENABLE
, AC_USRSP_EN
| ALC_HP_EVENT
},
530 static const struct hda_verb alc663_m51va_init_verbs
[] = {
531 {0x15, AC_VERB_SET_PIN_WIDGET_CONTROL
, PIN_IN
},
532 {0x16, AC_VERB_SET_PIN_WIDGET_CONTROL
, PIN_IN
},
533 {0x21, AC_VERB_SET_PIN_WIDGET_CONTROL
, PIN_HP
},
534 {0x21, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_OUT_UNMUTE
},
535 {0x21, AC_VERB_SET_CONNECT_SEL
, 0x01}, /* Headphone */
536 {0x22, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_MUTE(0)},
537 {0x22, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_UNMUTE(9)},
538 {0x18, AC_VERB_SET_UNSOLICITED_ENABLE
, AC_USRSP_EN
| ALC_MIC_EVENT
},
539 {0x21, AC_VERB_SET_UNSOLICITED_ENABLE
, AC_USRSP_EN
| ALC_HP_EVENT
},
543 static const struct hda_verb alc663_21jd_amic_init_verbs
[] = {
544 {0x21, AC_VERB_SET_PIN_WIDGET_CONTROL
, PIN_HP
},
545 {0x21, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_OUT_UNMUTE
},
546 {0x21, AC_VERB_SET_CONNECT_SEL
, 0x01}, /* Headphone */
547 {0x22, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_MUTE(0)},
548 {0x22, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_UNMUTE(1)},
549 {0x18, AC_VERB_SET_UNSOLICITED_ENABLE
, AC_USRSP_EN
| ALC_MIC_EVENT
},
550 {0x21, AC_VERB_SET_UNSOLICITED_ENABLE
, AC_USRSP_EN
| ALC_HP_EVENT
},
554 static const struct hda_verb alc662_1bjd_amic_init_verbs
[] = {
555 {0x16, AC_VERB_SET_PIN_WIDGET_CONTROL
, PIN_IN
},
556 {0x1b, AC_VERB_SET_PIN_WIDGET_CONTROL
, PIN_HP
},
557 {0x1b, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_OUT_UNMUTE
},
558 {0x1b, AC_VERB_SET_CONNECT_SEL
, 0x00}, /* Headphone */
559 {0x22, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_MUTE(0)},
560 {0x22, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_UNMUTE(1)},
561 {0x18, AC_VERB_SET_UNSOLICITED_ENABLE
, AC_USRSP_EN
| ALC_MIC_EVENT
},
562 {0x1b, AC_VERB_SET_UNSOLICITED_ENABLE
, AC_USRSP_EN
| ALC_HP_EVENT
},
566 static const struct hda_verb alc663_15jd_amic_init_verbs
[] = {
567 {0x15, AC_VERB_SET_PIN_WIDGET_CONTROL
, PIN_HP
},
568 {0x15, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_OUT_UNMUTE
},
569 {0x15, AC_VERB_SET_CONNECT_SEL
, 0x01}, /* Headphone */
570 {0x22, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_MUTE(0)},
571 {0x22, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_UNMUTE(1)},
572 {0x18, AC_VERB_SET_UNSOLICITED_ENABLE
, AC_USRSP_EN
| ALC_MIC_EVENT
},
573 {0x15, AC_VERB_SET_UNSOLICITED_ENABLE
, AC_USRSP_EN
| ALC_HP_EVENT
},
577 static const struct hda_verb alc663_two_hp_amic_m1_init_verbs
[] = {
578 {0x16, AC_VERB_SET_PIN_WIDGET_CONTROL
, PIN_IN
},
579 {0x21, AC_VERB_SET_PIN_WIDGET_CONTROL
, PIN_HP
},
580 {0x21, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_OUT_UNMUTE
},
581 {0x21, AC_VERB_SET_CONNECT_SEL
, 0x0}, /* Headphone */
582 {0x15, AC_VERB_SET_PIN_WIDGET_CONTROL
, PIN_HP
},
583 {0x15, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_OUT_UNMUTE
},
584 {0x15, AC_VERB_SET_CONNECT_SEL
, 0x0}, /* Headphone */
585 {0x22, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_MUTE(0)},
586 {0x22, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_UNMUTE(1)},
587 {0x18, AC_VERB_SET_UNSOLICITED_ENABLE
, AC_USRSP_EN
| ALC_MIC_EVENT
},
588 {0x21, AC_VERB_SET_UNSOLICITED_ENABLE
, AC_USRSP_EN
| ALC_HP_EVENT
},
589 {0x15, AC_VERB_SET_UNSOLICITED_ENABLE
, AC_USRSP_EN
| ALC_HP_EVENT
},
593 static const struct hda_verb alc663_two_hp_amic_m2_init_verbs
[] = {
594 {0x16, AC_VERB_SET_PIN_WIDGET_CONTROL
, PIN_IN
},
595 {0x1b, AC_VERB_SET_PIN_WIDGET_CONTROL
, PIN_HP
},
596 {0x1b, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_OUT_UNMUTE
},
597 {0x1b, AC_VERB_SET_CONNECT_SEL
, 0x01}, /* Headphone */
598 {0x15, AC_VERB_SET_PIN_WIDGET_CONTROL
, PIN_HP
},
599 {0x15, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_OUT_UNMUTE
},
600 {0x15, AC_VERB_SET_CONNECT_SEL
, 0x01}, /* Headphone */
601 {0x22, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_MUTE(0)},
602 {0x22, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_UNMUTE(1)},
603 {0x18, AC_VERB_SET_UNSOLICITED_ENABLE
, AC_USRSP_EN
| ALC_MIC_EVENT
},
604 {0x1b, AC_VERB_SET_UNSOLICITED_ENABLE
, AC_USRSP_EN
| ALC_HP_EVENT
},
605 {0x15, AC_VERB_SET_UNSOLICITED_ENABLE
, AC_USRSP_EN
| ALC_HP_EVENT
},
609 static const struct hda_verb alc663_g71v_init_verbs
[] = {
610 {0x15, AC_VERB_SET_PIN_WIDGET_CONTROL
, PIN_HP
},
611 /* {0x15, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE}, */
612 /* {0x15, AC_VERB_SET_CONNECT_SEL, 0x01}, */ /* Headphone */
614 {0x21, AC_VERB_SET_PIN_WIDGET_CONTROL
, PIN_HP
},
615 {0x21, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_OUT_UNMUTE
},
616 {0x21, AC_VERB_SET_CONNECT_SEL
, 0x00}, /* Headphone */
618 {0x15, AC_VERB_SET_UNSOLICITED_ENABLE
, AC_USRSP_EN
|ALC_FRONT_EVENT
},
619 {0x18, AC_VERB_SET_UNSOLICITED_ENABLE
, AC_USRSP_EN
|ALC_MIC_EVENT
},
620 {0x21, AC_VERB_SET_UNSOLICITED_ENABLE
, AC_USRSP_EN
|ALC_HP_EVENT
},
624 static const struct hda_verb alc663_g50v_init_verbs
[] = {
625 {0x21, AC_VERB_SET_PIN_WIDGET_CONTROL
, PIN_HP
},
626 {0x21, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_OUT_UNMUTE
},
627 {0x21, AC_VERB_SET_CONNECT_SEL
, 0x00}, /* Headphone */
629 {0x18, AC_VERB_SET_UNSOLICITED_ENABLE
, AC_USRSP_EN
| ALC_MIC_EVENT
},
630 {0x21, AC_VERB_SET_UNSOLICITED_ENABLE
, AC_USRSP_EN
| ALC_HP_EVENT
},
634 static const struct hda_verb alc662_ecs_init_verbs
[] = {
635 {0x09, AC_VERB_SET_AMP_GAIN_MUTE
, 0x701f},
636 {0x22, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_MUTE(0)},
637 {0x18, AC_VERB_SET_UNSOLICITED_ENABLE
, AC_USRSP_EN
| ALC_MIC_EVENT
},
638 {0x1b, AC_VERB_SET_UNSOLICITED_ENABLE
, AC_USRSP_EN
| ALC_HP_EVENT
},
642 static const struct hda_verb alc663_mode7_init_verbs
[] = {
643 {0x15, AC_VERB_SET_PIN_WIDGET_CONTROL
, PIN_IN
},
644 {0x16, AC_VERB_SET_PIN_WIDGET_CONTROL
, PIN_IN
},
645 {0x17, AC_VERB_SET_PIN_WIDGET_CONTROL
, PIN_OUT
},
646 {0x17, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_OUT_UNMUTE
},
647 {0x1b, AC_VERB_SET_PIN_WIDGET_CONTROL
, PIN_HP
},
648 {0x1b, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_OUT_UNMUTE
},
649 {0x1b, AC_VERB_SET_CONNECT_SEL
, 0x01},
650 {0x21, AC_VERB_SET_PIN_WIDGET_CONTROL
, PIN_HP
},
651 {0x21, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_OUT_UNMUTE
},
652 {0x21, AC_VERB_SET_CONNECT_SEL
, 0x01}, /* Headphone */
653 {0x22, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_MUTE(0)},
654 {0x22, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_UNMUTE(9)},
655 {0x19, AC_VERB_SET_UNSOLICITED_ENABLE
, AC_USRSP_EN
| ALC_MIC_EVENT
},
656 {0x1b, AC_VERB_SET_UNSOLICITED_ENABLE
, AC_USRSP_EN
| ALC_HP_EVENT
},
657 {0x21, AC_VERB_SET_UNSOLICITED_ENABLE
, AC_USRSP_EN
| ALC_HP_EVENT
},
661 static const struct hda_verb alc663_mode8_init_verbs
[] = {
662 {0x12, AC_VERB_SET_PIN_WIDGET_CONTROL
, PIN_IN
},
663 {0x15, AC_VERB_SET_PIN_WIDGET_CONTROL
, PIN_HP
},
664 {0x15, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_OUT_UNMUTE
},
665 {0x15, AC_VERB_SET_CONNECT_SEL
, 0x01},
666 {0x16, AC_VERB_SET_PIN_WIDGET_CONTROL
, PIN_IN
},
667 {0x17, AC_VERB_SET_PIN_WIDGET_CONTROL
, PIN_OUT
},
668 {0x17, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_OUT_UNMUTE
},
669 {0x1b, AC_VERB_SET_PIN_WIDGET_CONTROL
, PIN_IN
},
670 {0x21, AC_VERB_SET_PIN_WIDGET_CONTROL
, PIN_HP
},
671 {0x21, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_OUT_UNMUTE
},
672 {0x21, AC_VERB_SET_CONNECT_SEL
, 0x01}, /* Headphone */
673 {0x22, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_MUTE(0)},
674 {0x22, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_UNMUTE(9)},
675 {0x15, AC_VERB_SET_UNSOLICITED_ENABLE
, AC_USRSP_EN
| ALC_HP_EVENT
},
676 {0x18, AC_VERB_SET_UNSOLICITED_ENABLE
, AC_USRSP_EN
| ALC_MIC_EVENT
},
677 {0x21, AC_VERB_SET_UNSOLICITED_ENABLE
, AC_USRSP_EN
| ALC_HP_EVENT
},
681 static const struct snd_kcontrol_new alc662_auto_capture_mixer
[] = {
682 HDA_CODEC_VOLUME("Capture Volume", 0x09, 0x0, HDA_INPUT
),
683 HDA_CODEC_MUTE("Capture Switch", 0x09, 0x0, HDA_INPUT
),
687 static const struct snd_kcontrol_new alc272_auto_capture_mixer
[] = {
688 HDA_CODEC_VOLUME("Capture Volume", 0x08, 0x0, HDA_INPUT
),
689 HDA_CODEC_MUTE("Capture Switch", 0x08, 0x0, HDA_INPUT
),
693 static void alc662_lenovo_101e_setup(struct hda_codec
*codec
)
695 struct alc_spec
*spec
= codec
->spec
;
697 spec
->autocfg
.hp_pins
[0] = 0x1b;
698 spec
->autocfg
.line_out_pins
[0] = 0x14;
699 spec
->autocfg
.speaker_pins
[0] = 0x15;
701 spec
->detect_line
= 1;
702 spec
->automute_lines
= 1;
703 spec
->automute_mode
= ALC_AUTOMUTE_AMP
;
706 static void alc662_eeepc_setup(struct hda_codec
*codec
)
708 struct alc_spec
*spec
= codec
->spec
;
710 alc262_hippo1_setup(codec
);
711 spec
->ext_mic_pin
= 0x18;
712 spec
->int_mic_pin
= 0x19;
716 static void alc662_eeepc_ep20_setup(struct hda_codec
*codec
)
718 struct alc_spec
*spec
= codec
->spec
;
720 spec
->autocfg
.hp_pins
[0] = 0x14;
721 spec
->autocfg
.speaker_pins
[0] = 0x1b;
723 spec
->automute_mode
= ALC_AUTOMUTE_AMP
;
726 static void alc663_m51va_setup(struct hda_codec
*codec
)
728 struct alc_spec
*spec
= codec
->spec
;
729 spec
->autocfg
.hp_pins
[0] = 0x21;
730 spec
->autocfg
.speaker_pins
[0] = 0x14;
731 spec
->automute_mixer_nid
[0] = 0x0c;
733 spec
->automute_mode
= ALC_AUTOMUTE_MIXER
;
734 spec
->ext_mic_pin
= 0x18;
735 spec
->int_mic_pin
= 0x12;
739 /* ***************** Mode1 ******************************/
740 static void alc663_mode1_setup(struct hda_codec
*codec
)
742 struct alc_spec
*spec
= codec
->spec
;
743 spec
->autocfg
.hp_pins
[0] = 0x21;
744 spec
->autocfg
.speaker_pins
[0] = 0x14;
745 spec
->automute_mixer_nid
[0] = 0x0c;
747 spec
->automute_mode
= ALC_AUTOMUTE_MIXER
;
748 spec
->ext_mic_pin
= 0x18;
749 spec
->int_mic_pin
= 0x19;
753 /* ***************** Mode2 ******************************/
754 static void alc662_mode2_setup(struct hda_codec
*codec
)
756 struct alc_spec
*spec
= codec
->spec
;
757 spec
->autocfg
.hp_pins
[0] = 0x1b;
758 spec
->autocfg
.speaker_pins
[0] = 0x14;
760 spec
->automute_mode
= ALC_AUTOMUTE_PIN
;
761 spec
->ext_mic_pin
= 0x18;
762 spec
->int_mic_pin
= 0x19;
766 /* ***************** Mode3 ******************************/
767 static void alc663_mode3_setup(struct hda_codec
*codec
)
769 struct alc_spec
*spec
= codec
->spec
;
770 spec
->autocfg
.hp_pins
[0] = 0x21;
771 spec
->autocfg
.hp_pins
[0] = 0x15;
772 spec
->autocfg
.speaker_pins
[0] = 0x14;
774 spec
->automute_mode
= ALC_AUTOMUTE_PIN
;
775 spec
->ext_mic_pin
= 0x18;
776 spec
->int_mic_pin
= 0x19;
780 /* ***************** Mode4 ******************************/
781 static void alc663_mode4_setup(struct hda_codec
*codec
)
783 struct alc_spec
*spec
= codec
->spec
;
784 spec
->autocfg
.hp_pins
[0] = 0x21;
785 spec
->autocfg
.speaker_pins
[0] = 0x14;
786 spec
->autocfg
.speaker_pins
[1] = 0x16;
787 spec
->automute_mixer_nid
[0] = 0x0c;
788 spec
->automute_mixer_nid
[1] = 0x0e;
790 spec
->automute_mode
= ALC_AUTOMUTE_MIXER
;
791 spec
->ext_mic_pin
= 0x18;
792 spec
->int_mic_pin
= 0x19;
796 /* ***************** Mode5 ******************************/
797 static void alc663_mode5_setup(struct hda_codec
*codec
)
799 struct alc_spec
*spec
= codec
->spec
;
800 spec
->autocfg
.hp_pins
[0] = 0x15;
801 spec
->autocfg
.speaker_pins
[0] = 0x14;
802 spec
->autocfg
.speaker_pins
[1] = 0x16;
803 spec
->automute_mixer_nid
[0] = 0x0c;
804 spec
->automute_mixer_nid
[1] = 0x0e;
806 spec
->automute_mode
= ALC_AUTOMUTE_MIXER
;
807 spec
->ext_mic_pin
= 0x18;
808 spec
->int_mic_pin
= 0x19;
812 /* ***************** Mode6 ******************************/
813 static void alc663_mode6_setup(struct hda_codec
*codec
)
815 struct alc_spec
*spec
= codec
->spec
;
816 spec
->autocfg
.hp_pins
[0] = 0x1b;
817 spec
->autocfg
.hp_pins
[0] = 0x15;
818 spec
->autocfg
.speaker_pins
[0] = 0x14;
819 spec
->automute_mixer_nid
[0] = 0x0c;
821 spec
->automute_mode
= ALC_AUTOMUTE_MIXER
;
822 spec
->ext_mic_pin
= 0x18;
823 spec
->int_mic_pin
= 0x19;
827 /* ***************** Mode7 ******************************/
828 static void alc663_mode7_setup(struct hda_codec
*codec
)
830 struct alc_spec
*spec
= codec
->spec
;
831 spec
->autocfg
.hp_pins
[0] = 0x1b;
832 spec
->autocfg
.hp_pins
[0] = 0x21;
833 spec
->autocfg
.speaker_pins
[0] = 0x14;
834 spec
->autocfg
.speaker_pins
[0] = 0x17;
836 spec
->automute_mode
= ALC_AUTOMUTE_PIN
;
837 spec
->ext_mic_pin
= 0x18;
838 spec
->int_mic_pin
= 0x19;
842 /* ***************** Mode8 ******************************/
843 static void alc663_mode8_setup(struct hda_codec
*codec
)
845 struct alc_spec
*spec
= codec
->spec
;
846 spec
->autocfg
.hp_pins
[0] = 0x21;
847 spec
->autocfg
.hp_pins
[1] = 0x15;
848 spec
->autocfg
.speaker_pins
[0] = 0x14;
849 spec
->autocfg
.speaker_pins
[0] = 0x17;
851 spec
->automute_mode
= ALC_AUTOMUTE_PIN
;
852 spec
->ext_mic_pin
= 0x18;
853 spec
->int_mic_pin
= 0x12;
857 static void alc663_g71v_setup(struct hda_codec
*codec
)
859 struct alc_spec
*spec
= codec
->spec
;
860 spec
->autocfg
.hp_pins
[0] = 0x21;
861 spec
->autocfg
.line_out_pins
[0] = 0x15;
862 spec
->autocfg
.speaker_pins
[0] = 0x14;
864 spec
->automute_mode
= ALC_AUTOMUTE_AMP
;
865 spec
->detect_line
= 1;
866 spec
->automute_lines
= 1;
867 spec
->ext_mic_pin
= 0x18;
868 spec
->int_mic_pin
= 0x12;
872 #define alc663_g50v_setup alc663_m51va_setup
874 static const struct snd_kcontrol_new alc662_ecs_mixer
[] = {
875 HDA_CODEC_VOLUME("Master Playback Volume", 0x02, 0x0, HDA_OUTPUT
),
876 ALC262_HIPPO_MASTER_SWITCH
,
878 HDA_CODEC_VOLUME("Mic/LineIn Boost Volume", 0x18, 0, HDA_INPUT
),
879 HDA_CODEC_VOLUME("Mic/LineIn Playback Volume", 0x0b, 0x0, HDA_INPUT
),
880 HDA_CODEC_MUTE("Mic/LineIn Playback Switch", 0x0b, 0x0, HDA_INPUT
),
882 HDA_CODEC_VOLUME("Internal Mic Boost Volume", 0x19, 0, HDA_INPUT
),
883 HDA_CODEC_VOLUME("Internal Mic Playback Volume", 0x0b, 0x1, HDA_INPUT
),
884 HDA_CODEC_MUTE("Internal Mic Playback Switch", 0x0b, 0x1, HDA_INPUT
),
889 * configuration and preset
891 static const char * const alc662_models
[ALC662_MODEL_LAST
] = {
892 [ALC662_3ST_2ch_DIG
] = "3stack-dig",
893 [ALC662_3ST_6ch_DIG
] = "3stack-6ch-dig",
894 [ALC662_3ST_6ch
] = "3stack-6ch",
895 [ALC662_5ST_DIG
] = "5stack-dig",
896 [ALC662_LENOVO_101E
] = "lenovo-101e",
897 [ALC662_ASUS_EEEPC_P701
] = "eeepc-p701",
898 [ALC662_ASUS_EEEPC_EP20
] = "eeepc-ep20",
899 [ALC662_ECS
] = "ecs",
900 [ALC663_ASUS_M51VA
] = "m51va",
901 [ALC663_ASUS_G71V
] = "g71v",
902 [ALC663_ASUS_H13
] = "h13",
903 [ALC663_ASUS_G50V
] = "g50v",
904 [ALC663_ASUS_MODE1
] = "asus-mode1",
905 [ALC662_ASUS_MODE2
] = "asus-mode2",
906 [ALC663_ASUS_MODE3
] = "asus-mode3",
907 [ALC663_ASUS_MODE4
] = "asus-mode4",
908 [ALC663_ASUS_MODE5
] = "asus-mode5",
909 [ALC663_ASUS_MODE6
] = "asus-mode6",
910 [ALC663_ASUS_MODE7
] = "asus-mode7",
911 [ALC663_ASUS_MODE8
] = "asus-mode8",
912 [ALC662_AUTO
] = "auto",
915 static const struct snd_pci_quirk alc662_cfg_tbl
[] = {
916 SND_PCI_QUIRK(0x1019, 0x9087, "ECS", ALC662_ECS
),
917 SND_PCI_QUIRK(0x1043, 0x1000, "ASUS N50Vm", ALC663_ASUS_MODE1
),
918 SND_PCI_QUIRK(0x1043, 0x1092, "ASUS NB", ALC663_ASUS_MODE3
),
919 SND_PCI_QUIRK(0x1043, 0x1173, "ASUS K73Jn", ALC663_ASUS_MODE1
),
920 SND_PCI_QUIRK(0x1043, 0x11c3, "ASUS M70V", ALC663_ASUS_MODE3
),
921 SND_PCI_QUIRK(0x1043, 0x11d3, "ASUS NB", ALC663_ASUS_MODE1
),
922 SND_PCI_QUIRK(0x1043, 0x11f3, "ASUS NB", ALC662_ASUS_MODE2
),
923 SND_PCI_QUIRK(0x1043, 0x1203, "ASUS NB", ALC663_ASUS_MODE1
),
924 SND_PCI_QUIRK(0x1043, 0x1303, "ASUS G60J", ALC663_ASUS_MODE1
),
925 SND_PCI_QUIRK(0x1043, 0x1333, "ASUS G60Jx", ALC663_ASUS_MODE1
),
926 SND_PCI_QUIRK(0x1043, 0x1339, "ASUS NB", ALC662_ASUS_MODE2
),
927 SND_PCI_QUIRK(0x1043, 0x13e3, "ASUS N71JA", ALC663_ASUS_MODE7
),
928 SND_PCI_QUIRK(0x1043, 0x1463, "ASUS N71", ALC663_ASUS_MODE7
),
929 SND_PCI_QUIRK(0x1043, 0x14d3, "ASUS G72", ALC663_ASUS_MODE8
),
930 SND_PCI_QUIRK(0x1043, 0x1563, "ASUS N90", ALC663_ASUS_MODE3
),
931 SND_PCI_QUIRK(0x1043, 0x15d3, "ASUS N50SF F50SF", ALC663_ASUS_MODE1
),
932 SND_PCI_QUIRK(0x1043, 0x16c3, "ASUS NB", ALC662_ASUS_MODE2
),
933 SND_PCI_QUIRK(0x1043, 0x16f3, "ASUS K40C K50C", ALC662_ASUS_MODE2
),
934 SND_PCI_QUIRK(0x1043, 0x1733, "ASUS N81De", ALC663_ASUS_MODE1
),
935 SND_PCI_QUIRK(0x1043, 0x1753, "ASUS NB", ALC662_ASUS_MODE2
),
936 SND_PCI_QUIRK(0x1043, 0x1763, "ASUS NB", ALC663_ASUS_MODE6
),
937 SND_PCI_QUIRK(0x1043, 0x1765, "ASUS NB", ALC663_ASUS_MODE6
),
938 SND_PCI_QUIRK(0x1043, 0x1783, "ASUS NB", ALC662_ASUS_MODE2
),
939 SND_PCI_QUIRK(0x1043, 0x1793, "ASUS F50GX", ALC663_ASUS_MODE1
),
940 SND_PCI_QUIRK(0x1043, 0x17b3, "ASUS F70SL", ALC663_ASUS_MODE3
),
941 SND_PCI_QUIRK(0x1043, 0x17c3, "ASUS UX20", ALC663_ASUS_M51VA
),
942 SND_PCI_QUIRK(0x1043, 0x17f3, "ASUS X58LE", ALC662_ASUS_MODE2
),
943 SND_PCI_QUIRK(0x1043, 0x1813, "ASUS NB", ALC662_ASUS_MODE2
),
944 SND_PCI_QUIRK(0x1043, 0x1823, "ASUS NB", ALC663_ASUS_MODE5
),
945 SND_PCI_QUIRK(0x1043, 0x1833, "ASUS NB", ALC663_ASUS_MODE6
),
946 SND_PCI_QUIRK(0x1043, 0x1843, "ASUS NB", ALC662_ASUS_MODE2
),
947 SND_PCI_QUIRK(0x1043, 0x1853, "ASUS F50Z", ALC663_ASUS_MODE1
),
948 SND_PCI_QUIRK(0x1043, 0x1864, "ASUS NB", ALC662_ASUS_MODE2
),
949 SND_PCI_QUIRK(0x1043, 0x1876, "ASUS NB", ALC662_ASUS_MODE2
),
950 SND_PCI_QUIRK(0x1043, 0x1878, "ASUS M51VA", ALC663_ASUS_M51VA
),
951 /*SND_PCI_QUIRK(0x1043, 0x1878, "ASUS M50Vr", ALC663_ASUS_MODE1),*/
952 SND_PCI_QUIRK(0x1043, 0x1893, "ASUS M50Vm", ALC663_ASUS_MODE3
),
953 SND_PCI_QUIRK(0x1043, 0x1894, "ASUS X55", ALC663_ASUS_MODE3
),
954 SND_PCI_QUIRK(0x1043, 0x18b3, "ASUS N80Vc", ALC663_ASUS_MODE1
),
955 SND_PCI_QUIRK(0x1043, 0x18c3, "ASUS VX5", ALC663_ASUS_MODE1
),
956 SND_PCI_QUIRK(0x1043, 0x18d3, "ASUS N81Te", ALC663_ASUS_MODE1
),
957 SND_PCI_QUIRK(0x1043, 0x18f3, "ASUS N505Tp", ALC663_ASUS_MODE1
),
958 SND_PCI_QUIRK(0x1043, 0x1903, "ASUS F5GL", ALC663_ASUS_MODE1
),
959 SND_PCI_QUIRK(0x1043, 0x1913, "ASUS NB", ALC662_ASUS_MODE2
),
960 SND_PCI_QUIRK(0x1043, 0x1933, "ASUS F80Q", ALC662_ASUS_MODE2
),
961 SND_PCI_QUIRK(0x1043, 0x1943, "ASUS Vx3V", ALC663_ASUS_MODE1
),
962 SND_PCI_QUIRK(0x1043, 0x1953, "ASUS NB", ALC663_ASUS_MODE1
),
963 SND_PCI_QUIRK(0x1043, 0x1963, "ASUS X71C", ALC663_ASUS_MODE3
),
964 SND_PCI_QUIRK(0x1043, 0x1983, "ASUS N5051A", ALC663_ASUS_MODE1
),
965 SND_PCI_QUIRK(0x1043, 0x1993, "ASUS N20", ALC663_ASUS_MODE1
),
966 SND_PCI_QUIRK(0x1043, 0x19a3, "ASUS G50V", ALC663_ASUS_G50V
),
967 /*SND_PCI_QUIRK(0x1043, 0x19a3, "ASUS NB", ALC663_ASUS_MODE1),*/
968 SND_PCI_QUIRK(0x1043, 0x19b3, "ASUS F7Z", ALC663_ASUS_MODE1
),
969 SND_PCI_QUIRK(0x1043, 0x19c3, "ASUS F5Z/F6x", ALC662_ASUS_MODE2
),
970 SND_PCI_QUIRK(0x1043, 0x19d3, "ASUS NB", ALC663_ASUS_M51VA
),
971 SND_PCI_QUIRK(0x1043, 0x19e3, "ASUS NB", ALC663_ASUS_MODE1
),
972 SND_PCI_QUIRK(0x1043, 0x19f3, "ASUS NB", ALC663_ASUS_MODE4
),
973 SND_PCI_QUIRK(0x1043, 0x8290, "ASUS P5GC-MX", ALC662_3ST_6ch_DIG
),
974 SND_PCI_QUIRK(0x1043, 0x82a1, "ASUS Eeepc", ALC662_ASUS_EEEPC_P701
),
975 SND_PCI_QUIRK(0x1043, 0x82d1, "ASUS Eeepc EP20", ALC662_ASUS_EEEPC_EP20
),
976 SND_PCI_QUIRK(0x105b, 0x0cd6, "Foxconn", ALC662_ECS
),
977 SND_PCI_QUIRK(0x105b, 0x0d47, "Foxconn 45CMX/45GMX/45CMX-K",
979 SND_PCI_QUIRK(0x1179, 0xff6e, "Toshiba NB20x", ALC662_AUTO
),
980 SND_PCI_QUIRK(0x1458, 0xa002, "Gigabyte 945GCM-S2L",
982 SND_PCI_QUIRK(0x152d, 0x2304, "Quanta WH1", ALC663_ASUS_H13
),
983 SND_PCI_QUIRK(0x1565, 0x820f, "Biostar TA780G M2+", ALC662_3ST_6ch_DIG
),
984 SND_PCI_QUIRK(0x1631, 0xc10c, "PB RS65", ALC663_ASUS_M51VA
),
985 SND_PCI_QUIRK(0x17aa, 0x101e, "Lenovo", ALC662_LENOVO_101E
),
986 SND_PCI_QUIRK(0x1849, 0x3662, "ASROCK K10N78FullHD-hSLI R3.0",
988 SND_PCI_QUIRK_MASK(0x1854, 0xf000, 0x2000, "ASUS H13-200x",
990 SND_PCI_QUIRK(0x1991, 0x5628, "Ordissimo EVE", ALC662_LENOVO_101E
),
994 static const struct alc_config_preset alc662_presets
[] = {
995 [ALC662_3ST_2ch_DIG
] = {
996 .mixers
= { alc662_3ST_2ch_mixer
},
997 .init_verbs
= { alc662_init_verbs
, alc662_eapd_init_verbs
},
998 .num_dacs
= ARRAY_SIZE(alc662_dac_nids
),
999 .dac_nids
= alc662_dac_nids
,
1000 .dig_out_nid
= ALC662_DIGOUT_NID
,
1001 .dig_in_nid
= ALC662_DIGIN_NID
,
1002 .num_channel_mode
= ARRAY_SIZE(alc662_3ST_2ch_modes
),
1003 .channel_mode
= alc662_3ST_2ch_modes
,
1004 .input_mux
= &alc662_capture_source
,
1006 [ALC662_3ST_6ch_DIG
] = {
1007 .mixers
= { alc662_3ST_6ch_mixer
, alc662_chmode_mixer
},
1008 .init_verbs
= { alc662_init_verbs
, alc662_eapd_init_verbs
},
1009 .num_dacs
= ARRAY_SIZE(alc662_dac_nids
),
1010 .dac_nids
= alc662_dac_nids
,
1011 .dig_out_nid
= ALC662_DIGOUT_NID
,
1012 .dig_in_nid
= ALC662_DIGIN_NID
,
1013 .num_channel_mode
= ARRAY_SIZE(alc662_3ST_6ch_modes
),
1014 .channel_mode
= alc662_3ST_6ch_modes
,
1016 .input_mux
= &alc662_capture_source
,
1018 [ALC662_3ST_6ch
] = {
1019 .mixers
= { alc662_3ST_6ch_mixer
, alc662_chmode_mixer
},
1020 .init_verbs
= { alc662_init_verbs
, alc662_eapd_init_verbs
},
1021 .num_dacs
= ARRAY_SIZE(alc662_dac_nids
),
1022 .dac_nids
= alc662_dac_nids
,
1023 .num_channel_mode
= ARRAY_SIZE(alc662_3ST_6ch_modes
),
1024 .channel_mode
= alc662_3ST_6ch_modes
,
1026 .input_mux
= &alc662_capture_source
,
1028 [ALC662_5ST_DIG
] = {
1029 .mixers
= { alc662_base_mixer
, alc662_chmode_mixer
},
1030 .init_verbs
= { alc662_init_verbs
, alc662_eapd_init_verbs
},
1031 .num_dacs
= ARRAY_SIZE(alc662_dac_nids
),
1032 .dac_nids
= alc662_dac_nids
,
1033 .dig_out_nid
= ALC662_DIGOUT_NID
,
1034 .dig_in_nid
= ALC662_DIGIN_NID
,
1035 .num_channel_mode
= ARRAY_SIZE(alc662_5stack_modes
),
1036 .channel_mode
= alc662_5stack_modes
,
1037 .input_mux
= &alc662_capture_source
,
1039 [ALC662_LENOVO_101E
] = {
1040 .mixers
= { alc662_lenovo_101e_mixer
},
1041 .init_verbs
= { alc662_init_verbs
,
1042 alc662_eapd_init_verbs
,
1043 alc662_sue_init_verbs
},
1044 .num_dacs
= ARRAY_SIZE(alc662_dac_nids
),
1045 .dac_nids
= alc662_dac_nids
,
1046 .num_channel_mode
= ARRAY_SIZE(alc662_3ST_2ch_modes
),
1047 .channel_mode
= alc662_3ST_2ch_modes
,
1048 .input_mux
= &alc662_lenovo_101e_capture_source
,
1049 .unsol_event
= alc_sku_unsol_event
,
1050 .setup
= alc662_lenovo_101e_setup
,
1051 .init_hook
= alc_inithook
,
1053 [ALC662_ASUS_EEEPC_P701
] = {
1054 .mixers
= { alc662_eeepc_p701_mixer
},
1055 .init_verbs
= { alc662_init_verbs
,
1056 alc662_eapd_init_verbs
,
1057 alc662_eeepc_sue_init_verbs
},
1058 .num_dacs
= ARRAY_SIZE(alc662_dac_nids
),
1059 .dac_nids
= alc662_dac_nids
,
1060 .num_channel_mode
= ARRAY_SIZE(alc662_3ST_2ch_modes
),
1061 .channel_mode
= alc662_3ST_2ch_modes
,
1062 .unsol_event
= alc_sku_unsol_event
,
1063 .setup
= alc662_eeepc_setup
,
1064 .init_hook
= alc_inithook
,
1066 [ALC662_ASUS_EEEPC_EP20
] = {
1067 .mixers
= { alc662_eeepc_ep20_mixer
,
1068 alc662_chmode_mixer
},
1069 .init_verbs
= { alc662_init_verbs
,
1070 alc662_eapd_init_verbs
,
1071 alc662_eeepc_ep20_sue_init_verbs
},
1072 .num_dacs
= ARRAY_SIZE(alc662_dac_nids
),
1073 .dac_nids
= alc662_dac_nids
,
1074 .num_channel_mode
= ARRAY_SIZE(alc662_3ST_6ch_modes
),
1075 .channel_mode
= alc662_3ST_6ch_modes
,
1076 .input_mux
= &alc662_lenovo_101e_capture_source
,
1077 .unsol_event
= alc_sku_unsol_event
,
1078 .setup
= alc662_eeepc_ep20_setup
,
1079 .init_hook
= alc_inithook
,
1082 .mixers
= { alc662_ecs_mixer
},
1083 .init_verbs
= { alc662_init_verbs
,
1084 alc662_eapd_init_verbs
,
1085 alc662_ecs_init_verbs
},
1086 .num_dacs
= ARRAY_SIZE(alc662_dac_nids
),
1087 .dac_nids
= alc662_dac_nids
,
1088 .num_channel_mode
= ARRAY_SIZE(alc662_3ST_2ch_modes
),
1089 .channel_mode
= alc662_3ST_2ch_modes
,
1090 .unsol_event
= alc_sku_unsol_event
,
1091 .setup
= alc662_eeepc_setup
,
1092 .init_hook
= alc_inithook
,
1094 [ALC663_ASUS_M51VA
] = {
1095 .mixers
= { alc663_m51va_mixer
},
1096 .init_verbs
= { alc662_init_verbs
,
1097 alc662_eapd_init_verbs
,
1098 alc663_m51va_init_verbs
},
1099 .num_dacs
= ARRAY_SIZE(alc662_dac_nids
),
1100 .dac_nids
= alc662_dac_nids
,
1101 .dig_out_nid
= ALC662_DIGOUT_NID
,
1102 .num_channel_mode
= ARRAY_SIZE(alc662_3ST_2ch_modes
),
1103 .channel_mode
= alc662_3ST_2ch_modes
,
1104 .unsol_event
= alc_sku_unsol_event
,
1105 .setup
= alc663_m51va_setup
,
1106 .init_hook
= alc_inithook
,
1108 [ALC663_ASUS_G71V
] = {
1109 .mixers
= { alc663_g71v_mixer
},
1110 .init_verbs
= { alc662_init_verbs
,
1111 alc662_eapd_init_verbs
,
1112 alc663_g71v_init_verbs
},
1113 .num_dacs
= ARRAY_SIZE(alc662_dac_nids
),
1114 .dac_nids
= alc662_dac_nids
,
1115 .dig_out_nid
= ALC662_DIGOUT_NID
,
1116 .num_channel_mode
= ARRAY_SIZE(alc662_3ST_2ch_modes
),
1117 .channel_mode
= alc662_3ST_2ch_modes
,
1118 .unsol_event
= alc_sku_unsol_event
,
1119 .setup
= alc663_g71v_setup
,
1120 .init_hook
= alc_inithook
,
1122 [ALC663_ASUS_H13
] = {
1123 .mixers
= { alc663_m51va_mixer
},
1124 .init_verbs
= { alc662_init_verbs
,
1125 alc662_eapd_init_verbs
,
1126 alc663_m51va_init_verbs
},
1127 .num_dacs
= ARRAY_SIZE(alc662_dac_nids
),
1128 .dac_nids
= alc662_dac_nids
,
1129 .num_channel_mode
= ARRAY_SIZE(alc662_3ST_2ch_modes
),
1130 .channel_mode
= alc662_3ST_2ch_modes
,
1131 .setup
= alc663_m51va_setup
,
1132 .unsol_event
= alc_sku_unsol_event
,
1133 .init_hook
= alc_inithook
,
1135 [ALC663_ASUS_G50V
] = {
1136 .mixers
= { alc663_g50v_mixer
},
1137 .init_verbs
= { alc662_init_verbs
,
1138 alc662_eapd_init_verbs
,
1139 alc663_g50v_init_verbs
},
1140 .num_dacs
= ARRAY_SIZE(alc662_dac_nids
),
1141 .dac_nids
= alc662_dac_nids
,
1142 .dig_out_nid
= ALC662_DIGOUT_NID
,
1143 .num_channel_mode
= ARRAY_SIZE(alc662_3ST_6ch_modes
),
1144 .channel_mode
= alc662_3ST_6ch_modes
,
1145 .input_mux
= &alc663_capture_source
,
1146 .unsol_event
= alc_sku_unsol_event
,
1147 .setup
= alc663_g50v_setup
,
1148 .init_hook
= alc_inithook
,
1150 [ALC663_ASUS_MODE1
] = {
1151 .mixers
= { alc663_m51va_mixer
},
1152 .cap_mixer
= alc662_auto_capture_mixer
,
1153 .init_verbs
= { alc662_init_verbs
,
1154 alc662_eapd_init_verbs
,
1155 alc663_21jd_amic_init_verbs
},
1156 .num_dacs
= ARRAY_SIZE(alc662_dac_nids
),
1158 .dac_nids
= alc662_dac_nids
,
1159 .dig_out_nid
= ALC662_DIGOUT_NID
,
1160 .num_channel_mode
= ARRAY_SIZE(alc662_3ST_2ch_modes
),
1161 .channel_mode
= alc662_3ST_2ch_modes
,
1162 .unsol_event
= alc_sku_unsol_event
,
1163 .setup
= alc663_mode1_setup
,
1164 .init_hook
= alc_inithook
,
1166 [ALC662_ASUS_MODE2
] = {
1167 .mixers
= { alc662_1bjd_mixer
},
1168 .cap_mixer
= alc662_auto_capture_mixer
,
1169 .init_verbs
= { alc662_init_verbs
,
1170 alc662_eapd_init_verbs
,
1171 alc662_1bjd_amic_init_verbs
},
1172 .num_dacs
= ARRAY_SIZE(alc662_dac_nids
),
1173 .dac_nids
= alc662_dac_nids
,
1174 .dig_out_nid
= ALC662_DIGOUT_NID
,
1175 .num_channel_mode
= ARRAY_SIZE(alc662_3ST_2ch_modes
),
1176 .channel_mode
= alc662_3ST_2ch_modes
,
1177 .unsol_event
= alc_sku_unsol_event
,
1178 .setup
= alc662_mode2_setup
,
1179 .init_hook
= alc_inithook
,
1181 [ALC663_ASUS_MODE3
] = {
1182 .mixers
= { alc663_two_hp_m1_mixer
},
1183 .cap_mixer
= alc662_auto_capture_mixer
,
1184 .init_verbs
= { alc662_init_verbs
,
1185 alc662_eapd_init_verbs
,
1186 alc663_two_hp_amic_m1_init_verbs
},
1187 .num_dacs
= ARRAY_SIZE(alc662_dac_nids
),
1189 .dac_nids
= alc662_dac_nids
,
1190 .dig_out_nid
= ALC662_DIGOUT_NID
,
1191 .num_channel_mode
= ARRAY_SIZE(alc662_3ST_2ch_modes
),
1192 .channel_mode
= alc662_3ST_2ch_modes
,
1193 .unsol_event
= alc_sku_unsol_event
,
1194 .setup
= alc663_mode3_setup
,
1195 .init_hook
= alc_inithook
,
1197 [ALC663_ASUS_MODE4
] = {
1198 .mixers
= { alc663_asus_21jd_clfe_mixer
},
1199 .cap_mixer
= alc662_auto_capture_mixer
,
1200 .init_verbs
= { alc662_init_verbs
,
1201 alc662_eapd_init_verbs
,
1202 alc663_21jd_amic_init_verbs
},
1203 .num_dacs
= ARRAY_SIZE(alc662_dac_nids
),
1205 .dac_nids
= alc662_dac_nids
,
1206 .dig_out_nid
= ALC662_DIGOUT_NID
,
1207 .num_channel_mode
= ARRAY_SIZE(alc662_3ST_2ch_modes
),
1208 .channel_mode
= alc662_3ST_2ch_modes
,
1209 .unsol_event
= alc_sku_unsol_event
,
1210 .setup
= alc663_mode4_setup
,
1211 .init_hook
= alc_inithook
,
1213 [ALC663_ASUS_MODE5
] = {
1214 .mixers
= { alc663_asus_15jd_clfe_mixer
},
1215 .cap_mixer
= alc662_auto_capture_mixer
,
1216 .init_verbs
= { alc662_init_verbs
,
1217 alc662_eapd_init_verbs
,
1218 alc663_15jd_amic_init_verbs
},
1219 .num_dacs
= ARRAY_SIZE(alc662_dac_nids
),
1221 .dac_nids
= alc662_dac_nids
,
1222 .dig_out_nid
= ALC662_DIGOUT_NID
,
1223 .num_channel_mode
= ARRAY_SIZE(alc662_3ST_2ch_modes
),
1224 .channel_mode
= alc662_3ST_2ch_modes
,
1225 .unsol_event
= alc_sku_unsol_event
,
1226 .setup
= alc663_mode5_setup
,
1227 .init_hook
= alc_inithook
,
1229 [ALC663_ASUS_MODE6
] = {
1230 .mixers
= { alc663_two_hp_m2_mixer
},
1231 .cap_mixer
= alc662_auto_capture_mixer
,
1232 .init_verbs
= { alc662_init_verbs
,
1233 alc662_eapd_init_verbs
,
1234 alc663_two_hp_amic_m2_init_verbs
},
1235 .num_dacs
= ARRAY_SIZE(alc662_dac_nids
),
1237 .dac_nids
= alc662_dac_nids
,
1238 .dig_out_nid
= ALC662_DIGOUT_NID
,
1239 .num_channel_mode
= ARRAY_SIZE(alc662_3ST_2ch_modes
),
1240 .channel_mode
= alc662_3ST_2ch_modes
,
1241 .unsol_event
= alc_sku_unsol_event
,
1242 .setup
= alc663_mode6_setup
,
1243 .init_hook
= alc_inithook
,
1245 [ALC663_ASUS_MODE7
] = {
1246 .mixers
= { alc663_mode7_mixer
},
1247 .cap_mixer
= alc662_auto_capture_mixer
,
1248 .init_verbs
= { alc662_init_verbs
,
1249 alc662_eapd_init_verbs
,
1250 alc663_mode7_init_verbs
},
1251 .num_dacs
= ARRAY_SIZE(alc662_dac_nids
),
1253 .dac_nids
= alc662_dac_nids
,
1254 .dig_out_nid
= ALC662_DIGOUT_NID
,
1255 .num_channel_mode
= ARRAY_SIZE(alc662_3ST_2ch_modes
),
1256 .channel_mode
= alc662_3ST_2ch_modes
,
1257 .unsol_event
= alc_sku_unsol_event
,
1258 .setup
= alc663_mode7_setup
,
1259 .init_hook
= alc_inithook
,
1261 [ALC663_ASUS_MODE8
] = {
1262 .mixers
= { alc663_mode8_mixer
},
1263 .cap_mixer
= alc662_auto_capture_mixer
,
1264 .init_verbs
= { alc662_init_verbs
,
1265 alc662_eapd_init_verbs
,
1266 alc663_mode8_init_verbs
},
1267 .num_dacs
= ARRAY_SIZE(alc662_dac_nids
),
1269 .dac_nids
= alc662_dac_nids
,
1270 .dig_out_nid
= ALC662_DIGOUT_NID
,
1271 .num_channel_mode
= ARRAY_SIZE(alc662_3ST_2ch_modes
),
1272 .channel_mode
= alc662_3ST_2ch_modes
,
1273 .unsol_event
= alc_sku_unsol_event
,
1274 .setup
= alc663_mode8_setup
,
1275 .init_hook
= alc_inithook
,