2 * ALC662/ALC663/ALC665/ALC670 quirk models
3 * included by patch_realtek.c
14 ALC662_ASUS_EEEPC_P701
,
15 ALC662_ASUS_EEEPC_EP20
,
35 #define ALC662_DIGOUT_NID 0x06
36 #define ALC662_DIGIN_NID 0x0a
38 static const hda_nid_t alc662_dac_nids
[3] = {
39 /* front, rear, clfe */
43 static const hda_nid_t alc272_dac_nids
[2] = {
47 static const hda_nid_t alc662_adc_nids
[2] = {
52 static const hda_nid_t alc272_adc_nids
[1] = {
57 static const hda_nid_t alc662_capsrc_nids
[2] = { 0x22, 0x23 };
58 static const hda_nid_t alc272_capsrc_nids
[1] = { 0x23 };
62 /* FIXME: should be a matrix-type input source selection */
63 static const struct hda_input_mux alc662_capture_source
= {
73 static const struct hda_input_mux alc662_lenovo_101e_capture_source
= {
81 static const struct hda_input_mux alc663_capture_source
= {
90 #if 0 /* set to 1 for testing other input sources below */
91 static const struct hda_input_mux alc272_nc10_capture_source
= {
94 { "Autoselect Mic", 0x0 },
95 { "Internal Mic", 0x1 },
117 static const struct hda_channel_mode alc662_3ST_2ch_modes
[1] = {
124 static const struct hda_verb alc662_3ST_ch2_init
[] = {
125 { 0x18, AC_VERB_SET_PIN_WIDGET_CONTROL
, PIN_VREF80
},
126 { 0x18, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_OUT_MUTE
},
127 { 0x1a, AC_VERB_SET_PIN_WIDGET_CONTROL
, PIN_IN
},
128 { 0x1a, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_OUT_MUTE
},
135 static const struct hda_verb alc662_3ST_ch6_init
[] = {
136 { 0x18, AC_VERB_SET_PIN_WIDGET_CONTROL
, PIN_OUT
},
137 { 0x18, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_OUT_UNMUTE
},
138 { 0x18, AC_VERB_SET_CONNECT_SEL
, 0x02 },
139 { 0x1a, AC_VERB_SET_PIN_WIDGET_CONTROL
, PIN_OUT
},
140 { 0x1a, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_OUT_UNMUTE
},
141 { 0x1a, AC_VERB_SET_CONNECT_SEL
, 0x01 },
145 static const struct hda_channel_mode alc662_3ST_6ch_modes
[2] = {
146 { 2, alc662_3ST_ch2_init
},
147 { 6, alc662_3ST_ch6_init
},
153 static const struct hda_verb alc662_sixstack_ch6_init
[] = {
154 { 0x16, AC_VERB_SET_PIN_WIDGET_CONTROL
, 0x00 },
155 { 0x15, AC_VERB_SET_PIN_WIDGET_CONTROL
, 0x00 },
156 { 0x14, AC_VERB_SET_PIN_WIDGET_CONTROL
, PIN_OUT
},
163 static const struct hda_verb alc662_sixstack_ch8_init
[] = {
164 { 0x16, AC_VERB_SET_PIN_WIDGET_CONTROL
, PIN_OUT
},
165 { 0x15, AC_VERB_SET_PIN_WIDGET_CONTROL
, PIN_OUT
},
166 { 0x14, AC_VERB_SET_PIN_WIDGET_CONTROL
, PIN_OUT
},
170 static const struct hda_channel_mode alc662_5stack_modes
[2] = {
171 { 2, alc662_sixstack_ch6_init
},
172 { 6, alc662_sixstack_ch8_init
},
175 /* Pin assignment: Front=0x14, Rear=0x15, CLFE=0x16, Side=0x17
176 * Mic=0x18, Front Mic=0x19, Line-In=0x1a, HP=0x1b
179 static const struct snd_kcontrol_new alc662_base_mixer
[] = {
180 /* output mixer control */
181 HDA_CODEC_VOLUME("Front Playback Volume", 0x2, 0x0, HDA_OUTPUT
),
182 HDA_CODEC_MUTE("Front Playback Switch", 0x0c, 0x0, HDA_INPUT
),
183 HDA_CODEC_VOLUME("Surround Playback Volume", 0x3, 0x0, HDA_OUTPUT
),
184 HDA_CODEC_MUTE("Surround Playback Switch", 0x0d, 0x0, HDA_INPUT
),
185 HDA_CODEC_VOLUME_MONO("Center Playback Volume", 0x04, 1, 0x0, HDA_OUTPUT
),
186 HDA_CODEC_VOLUME_MONO("LFE Playback Volume", 0x04, 2, 0x0, HDA_OUTPUT
),
187 HDA_CODEC_MUTE_MONO("Center Playback Switch", 0x0e, 1, 0x0, HDA_INPUT
),
188 HDA_CODEC_MUTE_MONO("LFE Playback Switch", 0x0e, 2, 0x0, HDA_INPUT
),
189 HDA_CODEC_MUTE("Headphone Playback Switch", 0x1b, 0x0, HDA_OUTPUT
),
191 /*Input mixer control */
192 HDA_CODEC_VOLUME("CD Playback Volume", 0xb, 0x4, HDA_INPUT
),
193 HDA_CODEC_MUTE("CD Playback Switch", 0xb, 0x4, HDA_INPUT
),
194 HDA_CODEC_VOLUME("Line Playback Volume", 0xb, 0x02, HDA_INPUT
),
195 HDA_CODEC_MUTE("Line Playback Switch", 0xb, 0x02, HDA_INPUT
),
196 HDA_CODEC_VOLUME("Mic Playback Volume", 0xb, 0x0, HDA_INPUT
),
197 HDA_CODEC_MUTE("Mic Playback Switch", 0xb, 0x0, HDA_INPUT
),
198 HDA_CODEC_VOLUME("Front Mic Playback Volume", 0xb, 0x01, HDA_INPUT
),
199 HDA_CODEC_MUTE("Front Mic Playback Switch", 0xb, 0x01, HDA_INPUT
),
203 static const struct snd_kcontrol_new alc662_3ST_2ch_mixer
[] = {
204 HDA_CODEC_VOLUME("Front Playback Volume", 0x02, 0x0, HDA_OUTPUT
),
205 HDA_CODEC_MUTE("Front Playback Switch", 0x0c, 0x0, HDA_INPUT
),
206 HDA_CODEC_MUTE("Headphone Playback Switch", 0x1b, 0x0, HDA_OUTPUT
),
207 HDA_CODEC_VOLUME("CD Playback Volume", 0x0b, 0x04, HDA_INPUT
),
208 HDA_CODEC_MUTE("CD Playback Switch", 0x0b, 0x04, HDA_INPUT
),
209 HDA_CODEC_VOLUME("Line Playback Volume", 0x0b, 0x02, HDA_INPUT
),
210 HDA_CODEC_MUTE("Line Playback Switch", 0x0b, 0x02, HDA_INPUT
),
211 HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x0, HDA_INPUT
),
212 HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x0, HDA_INPUT
),
213 HDA_CODEC_VOLUME("Front Mic Playback Volume", 0x0b, 0x1, HDA_INPUT
),
214 HDA_CODEC_MUTE("Front Mic Playback Switch", 0x0b, 0x1, HDA_INPUT
),
218 static const struct snd_kcontrol_new alc662_3ST_6ch_mixer
[] = {
219 HDA_CODEC_VOLUME("Front Playback Volume", 0x02, 0x0, HDA_OUTPUT
),
220 HDA_CODEC_MUTE("Front Playback Switch", 0x0c, 0x0, HDA_INPUT
),
221 HDA_CODEC_VOLUME("Surround Playback Volume", 0x03, 0x0, HDA_OUTPUT
),
222 HDA_CODEC_MUTE("Surround Playback Switch", 0x0d, 0x0, HDA_INPUT
),
223 HDA_CODEC_VOLUME_MONO("Center Playback Volume", 0x04, 1, 0x0, HDA_OUTPUT
),
224 HDA_CODEC_VOLUME_MONO("LFE Playback Volume", 0x04, 2, 0x0, HDA_OUTPUT
),
225 HDA_CODEC_MUTE_MONO("Center Playback Switch", 0x0e, 1, 0x0, HDA_INPUT
),
226 HDA_CODEC_MUTE_MONO("LFE Playback Switch", 0x0e, 2, 0x0, HDA_INPUT
),
227 HDA_CODEC_MUTE("Headphone Playback Switch", 0x1b, 0x0, HDA_OUTPUT
),
228 HDA_CODEC_VOLUME("CD Playback Volume", 0x0b, 0x04, HDA_INPUT
),
229 HDA_CODEC_MUTE("CD Playback Switch", 0x0b, 0x04, HDA_INPUT
),
230 HDA_CODEC_VOLUME("Line Playback Volume", 0x0b, 0x02, HDA_INPUT
),
231 HDA_CODEC_MUTE("Line Playback Switch", 0x0b, 0x02, HDA_INPUT
),
232 HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x0, HDA_INPUT
),
233 HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x0, HDA_INPUT
),
234 HDA_CODEC_VOLUME("Front Mic Playback Volume", 0x0b, 0x1, HDA_INPUT
),
235 HDA_CODEC_MUTE("Front Mic Playback Switch", 0x0b, 0x1, HDA_INPUT
),
239 static const struct snd_kcontrol_new alc662_lenovo_101e_mixer
[] = {
240 HDA_CODEC_VOLUME("Front Playback Volume", 0x02, 0x0, HDA_OUTPUT
),
241 HDA_BIND_MUTE("Front Playback Switch", 0x02, 2, HDA_INPUT
),
242 HDA_CODEC_VOLUME("Speaker Playback Volume", 0x03, 0x0, HDA_OUTPUT
),
243 HDA_BIND_MUTE("Speaker Playback Switch", 0x03, 2, HDA_INPUT
),
244 HDA_CODEC_MUTE("Headphone Playback Switch", 0x1b, 0x0, HDA_OUTPUT
),
245 HDA_CODEC_VOLUME("Line Playback Volume", 0x0b, 0x02, HDA_INPUT
),
246 HDA_CODEC_MUTE("Line Playback Switch", 0x0b, 0x02, HDA_INPUT
),
247 HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x1, HDA_INPUT
),
248 HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x1, HDA_INPUT
),
252 static const struct snd_kcontrol_new alc662_eeepc_p701_mixer
[] = {
253 HDA_CODEC_VOLUME("Master Playback Volume", 0x02, 0x0, HDA_OUTPUT
),
254 ALC262_HIPPO_MASTER_SWITCH
,
256 HDA_CODEC_VOLUME("Mic Boost Volume", 0x18, 0, HDA_INPUT
),
257 HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x0, HDA_INPUT
),
258 HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x0, HDA_INPUT
),
260 HDA_CODEC_VOLUME("Internal Mic Boost Volume", 0x19, 0, HDA_INPUT
),
261 HDA_CODEC_VOLUME("Internal Mic Playback Volume", 0x0b, 0x1, HDA_INPUT
),
262 HDA_CODEC_MUTE("Internal Mic Playback Switch", 0x0b, 0x1, HDA_INPUT
),
266 static const struct snd_kcontrol_new alc662_eeepc_ep20_mixer
[] = {
267 ALC262_HIPPO_MASTER_SWITCH
,
268 HDA_CODEC_VOLUME("Front Playback Volume", 0x02, 0x0, HDA_OUTPUT
),
269 HDA_CODEC_VOLUME("Surround Playback Volume", 0x03, 0x0, HDA_OUTPUT
),
270 HDA_CODEC_VOLUME_MONO("Center Playback Volume", 0x04, 1, 0x0, HDA_OUTPUT
),
271 HDA_CODEC_VOLUME_MONO("LFE Playback Volume", 0x04, 2, 0x0, HDA_OUTPUT
),
272 HDA_BIND_MUTE("MuteCtrl Playback Switch", 0x0c, 2, HDA_INPUT
),
273 HDA_CODEC_VOLUME("Line Playback Volume", 0x0b, 0x02, HDA_INPUT
),
274 HDA_CODEC_MUTE("Line Playback Switch", 0x0b, 0x02, HDA_INPUT
),
275 HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x0, HDA_INPUT
),
276 HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x0, HDA_INPUT
),
280 static const struct hda_bind_ctls alc663_asus_bind_master_vol
= {
281 .ops
= &snd_hda_bind_vol
,
283 HDA_COMPOSE_AMP_VAL(0x02, 3, 0, HDA_OUTPUT
),
284 HDA_COMPOSE_AMP_VAL(0x03, 3, 0, HDA_OUTPUT
),
289 static const struct hda_bind_ctls alc663_asus_one_bind_switch
= {
290 .ops
= &snd_hda_bind_sw
,
292 HDA_COMPOSE_AMP_VAL(0x14, 3, 0, HDA_OUTPUT
),
293 HDA_COMPOSE_AMP_VAL(0x21, 3, 0, HDA_OUTPUT
),
298 static const struct snd_kcontrol_new alc663_m51va_mixer
[] = {
299 HDA_BIND_VOL("Master Playback Volume", &alc663_asus_bind_master_vol
),
300 HDA_BIND_SW("Master Playback Switch", &alc663_asus_one_bind_switch
),
301 HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x0, HDA_INPUT
),
302 HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x0, HDA_INPUT
),
306 static const struct hda_bind_ctls alc663_asus_tree_bind_switch
= {
307 .ops
= &snd_hda_bind_sw
,
309 HDA_COMPOSE_AMP_VAL(0x14, 3, 0, HDA_OUTPUT
),
310 HDA_COMPOSE_AMP_VAL(0x15, 3, 0, HDA_OUTPUT
),
311 HDA_COMPOSE_AMP_VAL(0x21, 3, 0, HDA_OUTPUT
),
316 static const struct snd_kcontrol_new alc663_two_hp_m1_mixer
[] = {
317 HDA_BIND_VOL("Master Playback Volume", &alc663_asus_bind_master_vol
),
318 HDA_BIND_SW("Master Playback Switch", &alc663_asus_tree_bind_switch
),
319 HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x0, HDA_INPUT
),
320 HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x0, HDA_INPUT
),
321 HDA_CODEC_VOLUME("F-Mic Playback Volume", 0x0b, 0x1, HDA_INPUT
),
322 HDA_CODEC_MUTE("F-Mic Playback Switch", 0x0b, 0x1, HDA_INPUT
),
327 static const struct hda_bind_ctls alc663_asus_four_bind_switch
= {
328 .ops
= &snd_hda_bind_sw
,
330 HDA_COMPOSE_AMP_VAL(0x14, 3, 0, HDA_OUTPUT
),
331 HDA_COMPOSE_AMP_VAL(0x15, 3, 0, HDA_OUTPUT
),
332 HDA_COMPOSE_AMP_VAL(0x1b, 3, 0, HDA_OUTPUT
),
337 static const struct snd_kcontrol_new alc663_two_hp_m2_mixer
[] = {
338 HDA_BIND_VOL("Master Playback Volume", &alc663_asus_bind_master_vol
),
339 HDA_BIND_SW("Master Playback Switch", &alc663_asus_four_bind_switch
),
340 HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x0, HDA_INPUT
),
341 HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x0, HDA_INPUT
),
342 HDA_CODEC_VOLUME("F-Mic Playback Volume", 0x0b, 0x1, HDA_INPUT
),
343 HDA_CODEC_MUTE("F-Mic Playback Switch", 0x0b, 0x1, HDA_INPUT
),
347 static const struct snd_kcontrol_new alc662_1bjd_mixer
[] = {
348 HDA_CODEC_VOLUME("Speaker Playback Volume", 0x02, 0x0, HDA_OUTPUT
),
349 HDA_CODEC_MUTE("Speaker Playback Switch", 0x14, 0x0, HDA_OUTPUT
),
350 HDA_CODEC_MUTE("Headphone Playback Switch", 0x1b, 0x0, HDA_OUTPUT
),
351 HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x0, HDA_INPUT
),
352 HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x0, HDA_INPUT
),
353 HDA_CODEC_VOLUME("F-Mic Playback Volume", 0x0b, 0x1, HDA_INPUT
),
354 HDA_CODEC_MUTE("F-Mic Playback Switch", 0x0b, 0x1, HDA_INPUT
),
358 static const struct hda_bind_ctls alc663_asus_two_bind_master_vol
= {
359 .ops
= &snd_hda_bind_vol
,
361 HDA_COMPOSE_AMP_VAL(0x02, 3, 0, HDA_OUTPUT
),
362 HDA_COMPOSE_AMP_VAL(0x04, 3, 0, HDA_OUTPUT
),
367 static const struct hda_bind_ctls alc663_asus_two_bind_switch
= {
368 .ops
= &snd_hda_bind_sw
,
370 HDA_COMPOSE_AMP_VAL(0x14, 3, 0, HDA_OUTPUT
),
371 HDA_COMPOSE_AMP_VAL(0x16, 3, 0, HDA_OUTPUT
),
376 static const struct snd_kcontrol_new alc663_asus_21jd_clfe_mixer
[] = {
377 HDA_BIND_VOL("Master Playback Volume",
378 &alc663_asus_two_bind_master_vol
),
379 HDA_BIND_SW("Master Playback Switch", &alc663_asus_two_bind_switch
),
380 HDA_CODEC_VOLUME("Headphone Playback Volume", 0x03, 0x0, HDA_OUTPUT
),
381 HDA_CODEC_MUTE("Headphone Playback Switch", 0x21, 0x0, HDA_OUTPUT
),
382 HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x0, HDA_INPUT
),
383 HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x0, HDA_INPUT
),
387 static const struct snd_kcontrol_new alc663_asus_15jd_clfe_mixer
[] = {
388 HDA_BIND_VOL("Master Playback Volume", &alc663_asus_bind_master_vol
),
389 HDA_BIND_SW("Master Playback Switch", &alc663_asus_two_bind_switch
),
390 HDA_CODEC_VOLUME("Headphone Playback Volume", 0x03, 0x0, HDA_OUTPUT
),
391 HDA_CODEC_MUTE("Headphone Playback Switch", 0x15, 0x0, HDA_OUTPUT
),
392 HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x0, HDA_INPUT
),
393 HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x0, HDA_INPUT
),
397 static const struct snd_kcontrol_new alc663_g71v_mixer
[] = {
398 HDA_CODEC_VOLUME("Speaker Playback Volume", 0x02, 0x0, HDA_OUTPUT
),
399 HDA_CODEC_MUTE("Speaker Playback Switch", 0x14, 0x0, HDA_OUTPUT
),
400 HDA_CODEC_VOLUME("Front Playback Volume", 0x03, 0x0, HDA_OUTPUT
),
401 HDA_CODEC_MUTE("Front Playback Switch", 0x15, 0x0, HDA_OUTPUT
),
402 HDA_CODEC_MUTE("Headphone Playback Switch", 0x21, 0x0, HDA_OUTPUT
),
404 HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x0, HDA_INPUT
),
405 HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x0, HDA_INPUT
),
406 HDA_CODEC_VOLUME("Internal Mic Playback Volume", 0x0b, 0x1, HDA_INPUT
),
407 HDA_CODEC_MUTE("Internal Mic Playback Switch", 0x0b, 0x1, HDA_INPUT
),
411 static const struct snd_kcontrol_new alc663_g50v_mixer
[] = {
412 HDA_CODEC_VOLUME("Speaker Playback Volume", 0x02, 0x0, HDA_OUTPUT
),
413 HDA_CODEC_MUTE("Speaker Playback Switch", 0x14, 0x0, HDA_OUTPUT
),
414 HDA_CODEC_MUTE("Headphone Playback Switch", 0x21, 0x0, HDA_OUTPUT
),
416 HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x0, HDA_INPUT
),
417 HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x0, HDA_INPUT
),
418 HDA_CODEC_VOLUME("Internal Mic Playback Volume", 0x0b, 0x1, HDA_INPUT
),
419 HDA_CODEC_MUTE("Internal Mic Playback Switch", 0x0b, 0x1, HDA_INPUT
),
420 HDA_CODEC_VOLUME("Line Playback Volume", 0x0b, 0x02, HDA_INPUT
),
421 HDA_CODEC_MUTE("Line Playback Switch", 0x0b, 0x02, HDA_INPUT
),
425 static const struct hda_bind_ctls alc663_asus_mode7_8_all_bind_switch
= {
426 .ops
= &snd_hda_bind_sw
,
428 HDA_COMPOSE_AMP_VAL(0x14, 3, 0, HDA_OUTPUT
),
429 HDA_COMPOSE_AMP_VAL(0x15, 3, 0, HDA_OUTPUT
),
430 HDA_COMPOSE_AMP_VAL(0x17, 3, 0, HDA_OUTPUT
),
431 HDA_COMPOSE_AMP_VAL(0x1b, 3, 0, HDA_OUTPUT
),
432 HDA_COMPOSE_AMP_VAL(0x21, 3, 0, HDA_OUTPUT
),
437 static const struct hda_bind_ctls alc663_asus_mode7_8_sp_bind_switch
= {
438 .ops
= &snd_hda_bind_sw
,
440 HDA_COMPOSE_AMP_VAL(0x14, 3, 0, HDA_OUTPUT
),
441 HDA_COMPOSE_AMP_VAL(0x17, 3, 0, HDA_OUTPUT
),
446 static const struct snd_kcontrol_new alc663_mode7_mixer
[] = {
447 HDA_BIND_SW("Master Playback Switch", &alc663_asus_mode7_8_all_bind_switch
),
448 HDA_BIND_VOL("Speaker Playback Volume", &alc663_asus_bind_master_vol
),
449 HDA_BIND_SW("Speaker Playback Switch", &alc663_asus_mode7_8_sp_bind_switch
),
450 HDA_CODEC_MUTE("Headphone1 Playback Switch", 0x1b, 0x0, HDA_OUTPUT
),
451 HDA_CODEC_MUTE("Headphone2 Playback Switch", 0x21, 0x0, HDA_OUTPUT
),
452 HDA_CODEC_VOLUME("IntMic Playback Volume", 0x0b, 0x0, HDA_INPUT
),
453 HDA_CODEC_MUTE("IntMic Playback Switch", 0x0b, 0x0, HDA_INPUT
),
454 HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x1, HDA_INPUT
),
455 HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x1, HDA_INPUT
),
459 static const struct snd_kcontrol_new alc663_mode8_mixer
[] = {
460 HDA_BIND_SW("Master Playback Switch", &alc663_asus_mode7_8_all_bind_switch
),
461 HDA_BIND_VOL("Speaker Playback Volume", &alc663_asus_bind_master_vol
),
462 HDA_BIND_SW("Speaker Playback Switch", &alc663_asus_mode7_8_sp_bind_switch
),
463 HDA_CODEC_MUTE("Headphone1 Playback Switch", 0x15, 0x0, HDA_OUTPUT
),
464 HDA_CODEC_MUTE("Headphone2 Playback Switch", 0x21, 0x0, HDA_OUTPUT
),
465 HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x0, HDA_INPUT
),
466 HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x0, HDA_INPUT
),
471 static const struct snd_kcontrol_new alc662_chmode_mixer
[] = {
473 .iface
= SNDRV_CTL_ELEM_IFACE_MIXER
,
474 .name
= "Channel Mode",
475 .info
= alc_ch_mode_info
,
476 .get
= alc_ch_mode_get
,
477 .put
= alc_ch_mode_put
,
482 static const struct hda_verb alc662_init_verbs
[] = {
483 /* ADC: mute amp left and right */
484 {0x09, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_MUTE(0)},
485 {0x09, AC_VERB_SET_CONNECT_SEL
, 0x00},
487 {0x0c, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_UNMUTE(0)},
488 {0x0c, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_UNMUTE(1)},
489 {0x0d, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_UNMUTE(0)},
490 {0x0d, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_UNMUTE(1)},
491 {0x0e, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_UNMUTE(0)},
492 {0x0e, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_UNMUTE(1)},
494 /* Front Pin: output 0 (0x0c) */
495 {0x14, AC_VERB_SET_PIN_WIDGET_CONTROL
, PIN_OUT
},
496 {0x14, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_OUT_UNMUTE
},
498 /* Rear Pin: output 1 (0x0d) */
499 {0x15, AC_VERB_SET_PIN_WIDGET_CONTROL
, PIN_OUT
},
500 {0x15, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_OUT_UNMUTE
},
502 /* CLFE Pin: output 2 (0x0e) */
503 {0x16, AC_VERB_SET_PIN_WIDGET_CONTROL
, PIN_OUT
},
504 {0x16, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_OUT_UNMUTE
},
506 /* Mic (rear) pin: input vref at 80% */
507 {0x18, AC_VERB_SET_PIN_WIDGET_CONTROL
, PIN_VREF80
},
508 {0x18, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_OUT_MUTE
},
509 /* Front Mic pin: input vref at 80% */
510 {0x19, AC_VERB_SET_PIN_WIDGET_CONTROL
, PIN_VREF80
},
511 {0x19, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_OUT_MUTE
},
512 /* Line In pin: input */
513 {0x1a, AC_VERB_SET_PIN_WIDGET_CONTROL
, PIN_IN
},
514 {0x1a, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_OUT_MUTE
},
515 /* Line-2 In: Headphone output (output 0 - 0x0c) */
516 {0x1b, AC_VERB_SET_PIN_WIDGET_CONTROL
, PIN_HP
},
517 {0x1b, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_OUT_UNMUTE
},
518 {0x1b, AC_VERB_SET_CONNECT_SEL
, 0x00},
519 /* CD pin widget for input */
520 {0x1c, AC_VERB_SET_PIN_WIDGET_CONTROL
, PIN_IN
},
522 /* FIXME: use matrix-type input source selection */
523 /* Mixer elements: 0x18, 19, 1a, 1b, 1c, 1d, 14, 15, 16, 17, 0b */
525 {0x22, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_UNMUTE(0)},
526 {0x23, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_UNMUTE(0)},
531 static const struct hda_verb alc662_eapd_init_verbs
[] = {
532 /* always trun on EAPD */
533 {0x14, AC_VERB_SET_EAPD_BTLENABLE
, 2},
534 {0x15, AC_VERB_SET_EAPD_BTLENABLE
, 2},
538 static const struct hda_verb alc662_sue_init_verbs
[] = {
539 {0x14, AC_VERB_SET_UNSOLICITED_ENABLE
, AC_USRSP_EN
|ALC_FRONT_EVENT
},
540 {0x1b, AC_VERB_SET_UNSOLICITED_ENABLE
, AC_USRSP_EN
|ALC_HP_EVENT
},
544 static const struct hda_verb alc662_eeepc_sue_init_verbs
[] = {
545 {0x18, AC_VERB_SET_UNSOLICITED_ENABLE
, AC_USRSP_EN
| ALC_MIC_EVENT
},
546 {0x1b, AC_VERB_SET_UNSOLICITED_ENABLE
, AC_USRSP_EN
| ALC_HP_EVENT
},
550 /* Set Unsolicited Event*/
551 static const struct hda_verb alc662_eeepc_ep20_sue_init_verbs
[] = {
552 {0x1b, AC_VERB_SET_PIN_WIDGET_CONTROL
, PIN_OUT
},
553 {0x14, AC_VERB_SET_UNSOLICITED_ENABLE
, AC_USRSP_EN
| ALC_HP_EVENT
},
557 static const struct hda_verb alc663_m51va_init_verbs
[] = {
558 {0x15, AC_VERB_SET_PIN_WIDGET_CONTROL
, PIN_IN
},
559 {0x16, AC_VERB_SET_PIN_WIDGET_CONTROL
, PIN_IN
},
560 {0x21, AC_VERB_SET_PIN_WIDGET_CONTROL
, PIN_HP
},
561 {0x21, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_OUT_UNMUTE
},
562 {0x21, AC_VERB_SET_CONNECT_SEL
, 0x01}, /* Headphone */
563 {0x22, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_MUTE(0)},
564 {0x22, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_UNMUTE(9)},
565 {0x18, AC_VERB_SET_UNSOLICITED_ENABLE
, AC_USRSP_EN
| ALC_MIC_EVENT
},
566 {0x21, AC_VERB_SET_UNSOLICITED_ENABLE
, AC_USRSP_EN
| ALC_HP_EVENT
},
570 static const struct hda_verb alc663_21jd_amic_init_verbs
[] = {
571 {0x21, AC_VERB_SET_PIN_WIDGET_CONTROL
, PIN_HP
},
572 {0x21, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_OUT_UNMUTE
},
573 {0x21, AC_VERB_SET_CONNECT_SEL
, 0x01}, /* Headphone */
574 {0x22, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_MUTE(0)},
575 {0x22, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_UNMUTE(1)},
576 {0x18, AC_VERB_SET_UNSOLICITED_ENABLE
, AC_USRSP_EN
| ALC_MIC_EVENT
},
577 {0x21, AC_VERB_SET_UNSOLICITED_ENABLE
, AC_USRSP_EN
| ALC_HP_EVENT
},
581 static const struct hda_verb alc662_1bjd_amic_init_verbs
[] = {
582 {0x16, AC_VERB_SET_PIN_WIDGET_CONTROL
, PIN_IN
},
583 {0x1b, AC_VERB_SET_PIN_WIDGET_CONTROL
, PIN_HP
},
584 {0x1b, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_OUT_UNMUTE
},
585 {0x1b, AC_VERB_SET_CONNECT_SEL
, 0x00}, /* Headphone */
586 {0x22, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_MUTE(0)},
587 {0x22, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_UNMUTE(1)},
588 {0x18, AC_VERB_SET_UNSOLICITED_ENABLE
, AC_USRSP_EN
| ALC_MIC_EVENT
},
589 {0x1b, AC_VERB_SET_UNSOLICITED_ENABLE
, AC_USRSP_EN
| ALC_HP_EVENT
},
593 static const struct hda_verb alc663_15jd_amic_init_verbs
[] = {
594 {0x15, AC_VERB_SET_PIN_WIDGET_CONTROL
, PIN_HP
},
595 {0x15, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_OUT_UNMUTE
},
596 {0x15, AC_VERB_SET_CONNECT_SEL
, 0x01}, /* Headphone */
597 {0x22, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_MUTE(0)},
598 {0x22, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_UNMUTE(1)},
599 {0x18, AC_VERB_SET_UNSOLICITED_ENABLE
, AC_USRSP_EN
| ALC_MIC_EVENT
},
600 {0x15, AC_VERB_SET_UNSOLICITED_ENABLE
, AC_USRSP_EN
| ALC_HP_EVENT
},
604 static const struct hda_verb alc663_two_hp_amic_m1_init_verbs
[] = {
605 {0x16, AC_VERB_SET_PIN_WIDGET_CONTROL
, PIN_IN
},
606 {0x21, AC_VERB_SET_PIN_WIDGET_CONTROL
, PIN_HP
},
607 {0x21, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_OUT_UNMUTE
},
608 {0x21, AC_VERB_SET_CONNECT_SEL
, 0x0}, /* Headphone */
609 {0x15, AC_VERB_SET_PIN_WIDGET_CONTROL
, PIN_HP
},
610 {0x15, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_OUT_UNMUTE
},
611 {0x15, AC_VERB_SET_CONNECT_SEL
, 0x0}, /* Headphone */
612 {0x22, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_MUTE(0)},
613 {0x22, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_UNMUTE(1)},
614 {0x18, AC_VERB_SET_UNSOLICITED_ENABLE
, AC_USRSP_EN
| ALC_MIC_EVENT
},
615 {0x21, AC_VERB_SET_UNSOLICITED_ENABLE
, AC_USRSP_EN
| ALC_HP_EVENT
},
616 {0x15, AC_VERB_SET_UNSOLICITED_ENABLE
, AC_USRSP_EN
| ALC_HP_EVENT
},
620 static const struct hda_verb alc663_two_hp_amic_m2_init_verbs
[] = {
621 {0x16, AC_VERB_SET_PIN_WIDGET_CONTROL
, PIN_IN
},
622 {0x1b, AC_VERB_SET_PIN_WIDGET_CONTROL
, PIN_HP
},
623 {0x1b, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_OUT_UNMUTE
},
624 {0x1b, AC_VERB_SET_CONNECT_SEL
, 0x01}, /* Headphone */
625 {0x15, AC_VERB_SET_PIN_WIDGET_CONTROL
, PIN_HP
},
626 {0x15, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_OUT_UNMUTE
},
627 {0x15, AC_VERB_SET_CONNECT_SEL
, 0x01}, /* Headphone */
628 {0x22, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_MUTE(0)},
629 {0x22, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_UNMUTE(1)},
630 {0x18, AC_VERB_SET_UNSOLICITED_ENABLE
, AC_USRSP_EN
| ALC_MIC_EVENT
},
631 {0x1b, AC_VERB_SET_UNSOLICITED_ENABLE
, AC_USRSP_EN
| ALC_HP_EVENT
},
632 {0x15, AC_VERB_SET_UNSOLICITED_ENABLE
, AC_USRSP_EN
| ALC_HP_EVENT
},
636 static const struct hda_verb alc663_g71v_init_verbs
[] = {
637 {0x15, AC_VERB_SET_PIN_WIDGET_CONTROL
, PIN_HP
},
638 /* {0x15, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE}, */
639 /* {0x15, AC_VERB_SET_CONNECT_SEL, 0x01}, */ /* Headphone */
641 {0x21, AC_VERB_SET_PIN_WIDGET_CONTROL
, PIN_HP
},
642 {0x21, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_OUT_UNMUTE
},
643 {0x21, AC_VERB_SET_CONNECT_SEL
, 0x00}, /* Headphone */
645 {0x15, AC_VERB_SET_UNSOLICITED_ENABLE
, AC_USRSP_EN
|ALC_FRONT_EVENT
},
646 {0x18, AC_VERB_SET_UNSOLICITED_ENABLE
, AC_USRSP_EN
|ALC_MIC_EVENT
},
647 {0x21, AC_VERB_SET_UNSOLICITED_ENABLE
, AC_USRSP_EN
|ALC_HP_EVENT
},
651 static const struct hda_verb alc663_g50v_init_verbs
[] = {
652 {0x21, AC_VERB_SET_PIN_WIDGET_CONTROL
, PIN_HP
},
653 {0x21, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_OUT_UNMUTE
},
654 {0x21, AC_VERB_SET_CONNECT_SEL
, 0x00}, /* Headphone */
656 {0x18, AC_VERB_SET_UNSOLICITED_ENABLE
, AC_USRSP_EN
| ALC_MIC_EVENT
},
657 {0x21, AC_VERB_SET_UNSOLICITED_ENABLE
, AC_USRSP_EN
| ALC_HP_EVENT
},
661 static const struct hda_verb alc662_ecs_init_verbs
[] = {
662 {0x09, AC_VERB_SET_AMP_GAIN_MUTE
, 0x701f},
663 {0x22, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_MUTE(0)},
664 {0x18, AC_VERB_SET_UNSOLICITED_ENABLE
, AC_USRSP_EN
| ALC_MIC_EVENT
},
665 {0x1b, AC_VERB_SET_UNSOLICITED_ENABLE
, AC_USRSP_EN
| ALC_HP_EVENT
},
669 static const struct hda_verb alc272_dell_zm1_init_verbs
[] = {
670 {0x12, AC_VERB_SET_PIN_WIDGET_CONTROL
, PIN_IN
},
671 {0x13, AC_VERB_SET_PIN_WIDGET_CONTROL
, PIN_IN
},
672 {0x15, AC_VERB_SET_PIN_WIDGET_CONTROL
, PIN_IN
},
673 {0x16, AC_VERB_SET_PIN_WIDGET_CONTROL
, PIN_IN
},
674 {0x21, AC_VERB_SET_PIN_WIDGET_CONTROL
, PIN_HP
},
675 {0x21, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_OUT_UNMUTE
},
676 {0x21, AC_VERB_SET_CONNECT_SEL
, 0x01}, /* Headphone */
677 {0x22, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_MUTE(0)},
678 {0x22, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_UNMUTE(9)},
679 {0x18, AC_VERB_SET_UNSOLICITED_ENABLE
, AC_USRSP_EN
| ALC_MIC_EVENT
},
680 {0x21, AC_VERB_SET_UNSOLICITED_ENABLE
, AC_USRSP_EN
| ALC_HP_EVENT
},
684 static const struct hda_verb alc272_dell_init_verbs
[] = {
685 {0x12, AC_VERB_SET_PIN_WIDGET_CONTROL
, PIN_IN
},
686 {0x13, AC_VERB_SET_PIN_WIDGET_CONTROL
, PIN_IN
},
687 {0x15, AC_VERB_SET_PIN_WIDGET_CONTROL
, PIN_IN
},
688 {0x16, AC_VERB_SET_PIN_WIDGET_CONTROL
, PIN_IN
},
689 {0x21, AC_VERB_SET_PIN_WIDGET_CONTROL
, PIN_HP
},
690 {0x21, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_OUT_UNMUTE
},
691 {0x21, AC_VERB_SET_CONNECT_SEL
, 0x01}, /* Headphone */
692 {0x23, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_MUTE(0)},
693 {0x23, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_UNMUTE(9)},
694 {0x18, AC_VERB_SET_UNSOLICITED_ENABLE
, AC_USRSP_EN
| ALC_MIC_EVENT
},
695 {0x21, AC_VERB_SET_UNSOLICITED_ENABLE
, AC_USRSP_EN
| ALC_HP_EVENT
},
699 static const struct hda_verb alc663_mode7_init_verbs
[] = {
700 {0x15, AC_VERB_SET_PIN_WIDGET_CONTROL
, PIN_IN
},
701 {0x16, AC_VERB_SET_PIN_WIDGET_CONTROL
, PIN_IN
},
702 {0x17, AC_VERB_SET_PIN_WIDGET_CONTROL
, PIN_OUT
},
703 {0x17, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_OUT_UNMUTE
},
704 {0x1b, AC_VERB_SET_PIN_WIDGET_CONTROL
, PIN_HP
},
705 {0x1b, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_OUT_UNMUTE
},
706 {0x1b, AC_VERB_SET_CONNECT_SEL
, 0x01},
707 {0x21, AC_VERB_SET_PIN_WIDGET_CONTROL
, PIN_HP
},
708 {0x21, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_OUT_UNMUTE
},
709 {0x21, AC_VERB_SET_CONNECT_SEL
, 0x01}, /* Headphone */
710 {0x22, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_MUTE(0)},
711 {0x22, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_UNMUTE(9)},
712 {0x19, AC_VERB_SET_UNSOLICITED_ENABLE
, AC_USRSP_EN
| ALC_MIC_EVENT
},
713 {0x1b, AC_VERB_SET_UNSOLICITED_ENABLE
, AC_USRSP_EN
| ALC_HP_EVENT
},
714 {0x21, AC_VERB_SET_UNSOLICITED_ENABLE
, AC_USRSP_EN
| ALC_HP_EVENT
},
718 static const struct hda_verb alc663_mode8_init_verbs
[] = {
719 {0x12, AC_VERB_SET_PIN_WIDGET_CONTROL
, PIN_IN
},
720 {0x15, AC_VERB_SET_PIN_WIDGET_CONTROL
, PIN_HP
},
721 {0x15, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_OUT_UNMUTE
},
722 {0x15, AC_VERB_SET_CONNECT_SEL
, 0x01},
723 {0x16, AC_VERB_SET_PIN_WIDGET_CONTROL
, PIN_IN
},
724 {0x17, AC_VERB_SET_PIN_WIDGET_CONTROL
, PIN_OUT
},
725 {0x17, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_OUT_UNMUTE
},
726 {0x1b, AC_VERB_SET_PIN_WIDGET_CONTROL
, PIN_IN
},
727 {0x21, AC_VERB_SET_PIN_WIDGET_CONTROL
, PIN_HP
},
728 {0x21, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_OUT_UNMUTE
},
729 {0x21, AC_VERB_SET_CONNECT_SEL
, 0x01}, /* Headphone */
730 {0x22, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_MUTE(0)},
731 {0x22, AC_VERB_SET_AMP_GAIN_MUTE
, AMP_IN_UNMUTE(9)},
732 {0x15, AC_VERB_SET_UNSOLICITED_ENABLE
, AC_USRSP_EN
| ALC_HP_EVENT
},
733 {0x18, AC_VERB_SET_UNSOLICITED_ENABLE
, AC_USRSP_EN
| ALC_MIC_EVENT
},
734 {0x21, AC_VERB_SET_UNSOLICITED_ENABLE
, AC_USRSP_EN
| ALC_HP_EVENT
},
738 static const struct snd_kcontrol_new alc662_auto_capture_mixer
[] = {
739 HDA_CODEC_VOLUME("Capture Volume", 0x09, 0x0, HDA_INPUT
),
740 HDA_CODEC_MUTE("Capture Switch", 0x09, 0x0, HDA_INPUT
),
744 static const struct snd_kcontrol_new alc272_auto_capture_mixer
[] = {
745 HDA_CODEC_VOLUME("Capture Volume", 0x08, 0x0, HDA_INPUT
),
746 HDA_CODEC_MUTE("Capture Switch", 0x08, 0x0, HDA_INPUT
),
750 static void alc662_lenovo_101e_setup(struct hda_codec
*codec
)
752 struct alc_spec
*spec
= codec
->spec
;
754 spec
->autocfg
.hp_pins
[0] = 0x1b;
755 spec
->autocfg
.line_out_pins
[0] = 0x14;
756 spec
->autocfg
.speaker_pins
[0] = 0x15;
758 spec
->detect_line
= 1;
759 spec
->automute_lines
= 1;
760 spec
->automute_mode
= ALC_AUTOMUTE_AMP
;
763 static void alc662_eeepc_setup(struct hda_codec
*codec
)
765 struct alc_spec
*spec
= codec
->spec
;
767 alc262_hippo1_setup(codec
);
768 spec
->ext_mic_pin
= 0x18;
769 spec
->int_mic_pin
= 0x19;
773 static void alc662_eeepc_ep20_setup(struct hda_codec
*codec
)
775 struct alc_spec
*spec
= codec
->spec
;
777 spec
->autocfg
.hp_pins
[0] = 0x14;
778 spec
->autocfg
.speaker_pins
[0] = 0x1b;
780 spec
->automute_mode
= ALC_AUTOMUTE_AMP
;
783 static void alc663_m51va_setup(struct hda_codec
*codec
)
785 struct alc_spec
*spec
= codec
->spec
;
786 spec
->autocfg
.hp_pins
[0] = 0x21;
787 spec
->autocfg
.speaker_pins
[0] = 0x14;
788 spec
->automute_mixer_nid
[0] = 0x0c;
790 spec
->automute_mode
= ALC_AUTOMUTE_MIXER
;
791 spec
->ext_mic_pin
= 0x18;
792 spec
->int_mic_pin
= 0x12;
796 /* ***************** Mode1 ******************************/
797 static void alc663_mode1_setup(struct hda_codec
*codec
)
799 struct alc_spec
*spec
= codec
->spec
;
800 spec
->autocfg
.hp_pins
[0] = 0x21;
801 spec
->autocfg
.speaker_pins
[0] = 0x14;
802 spec
->automute_mixer_nid
[0] = 0x0c;
804 spec
->automute_mode
= ALC_AUTOMUTE_MIXER
;
805 spec
->ext_mic_pin
= 0x18;
806 spec
->int_mic_pin
= 0x19;
810 /* ***************** Mode2 ******************************/
811 static void alc662_mode2_setup(struct hda_codec
*codec
)
813 struct alc_spec
*spec
= codec
->spec
;
814 spec
->autocfg
.hp_pins
[0] = 0x1b;
815 spec
->autocfg
.speaker_pins
[0] = 0x14;
817 spec
->automute_mode
= ALC_AUTOMUTE_PIN
;
818 spec
->ext_mic_pin
= 0x18;
819 spec
->int_mic_pin
= 0x19;
823 /* ***************** Mode3 ******************************/
824 static void alc663_mode3_setup(struct hda_codec
*codec
)
826 struct alc_spec
*spec
= codec
->spec
;
827 spec
->autocfg
.hp_pins
[0] = 0x21;
828 spec
->autocfg
.hp_pins
[0] = 0x15;
829 spec
->autocfg
.speaker_pins
[0] = 0x14;
831 spec
->automute_mode
= ALC_AUTOMUTE_PIN
;
832 spec
->ext_mic_pin
= 0x18;
833 spec
->int_mic_pin
= 0x19;
837 /* ***************** Mode4 ******************************/
838 static void alc663_mode4_setup(struct hda_codec
*codec
)
840 struct alc_spec
*spec
= codec
->spec
;
841 spec
->autocfg
.hp_pins
[0] = 0x21;
842 spec
->autocfg
.speaker_pins
[0] = 0x14;
843 spec
->autocfg
.speaker_pins
[1] = 0x16;
844 spec
->automute_mixer_nid
[0] = 0x0c;
845 spec
->automute_mixer_nid
[1] = 0x0e;
847 spec
->automute_mode
= ALC_AUTOMUTE_MIXER
;
848 spec
->ext_mic_pin
= 0x18;
849 spec
->int_mic_pin
= 0x19;
853 /* ***************** Mode5 ******************************/
854 static void alc663_mode5_setup(struct hda_codec
*codec
)
856 struct alc_spec
*spec
= codec
->spec
;
857 spec
->autocfg
.hp_pins
[0] = 0x15;
858 spec
->autocfg
.speaker_pins
[0] = 0x14;
859 spec
->autocfg
.speaker_pins
[1] = 0x16;
860 spec
->automute_mixer_nid
[0] = 0x0c;
861 spec
->automute_mixer_nid
[1] = 0x0e;
863 spec
->automute_mode
= ALC_AUTOMUTE_MIXER
;
864 spec
->ext_mic_pin
= 0x18;
865 spec
->int_mic_pin
= 0x19;
869 /* ***************** Mode6 ******************************/
870 static void alc663_mode6_setup(struct hda_codec
*codec
)
872 struct alc_spec
*spec
= codec
->spec
;
873 spec
->autocfg
.hp_pins
[0] = 0x1b;
874 spec
->autocfg
.hp_pins
[0] = 0x15;
875 spec
->autocfg
.speaker_pins
[0] = 0x14;
876 spec
->automute_mixer_nid
[0] = 0x0c;
878 spec
->automute_mode
= ALC_AUTOMUTE_MIXER
;
879 spec
->ext_mic_pin
= 0x18;
880 spec
->int_mic_pin
= 0x19;
884 /* ***************** Mode7 ******************************/
885 static void alc663_mode7_setup(struct hda_codec
*codec
)
887 struct alc_spec
*spec
= codec
->spec
;
888 spec
->autocfg
.hp_pins
[0] = 0x1b;
889 spec
->autocfg
.hp_pins
[0] = 0x21;
890 spec
->autocfg
.speaker_pins
[0] = 0x14;
891 spec
->autocfg
.speaker_pins
[0] = 0x17;
893 spec
->automute_mode
= ALC_AUTOMUTE_PIN
;
894 spec
->ext_mic_pin
= 0x18;
895 spec
->int_mic_pin
= 0x19;
899 /* ***************** Mode8 ******************************/
900 static void alc663_mode8_setup(struct hda_codec
*codec
)
902 struct alc_spec
*spec
= codec
->spec
;
903 spec
->autocfg
.hp_pins
[0] = 0x21;
904 spec
->autocfg
.hp_pins
[1] = 0x15;
905 spec
->autocfg
.speaker_pins
[0] = 0x14;
906 spec
->autocfg
.speaker_pins
[0] = 0x17;
908 spec
->automute_mode
= ALC_AUTOMUTE_PIN
;
909 spec
->ext_mic_pin
= 0x18;
910 spec
->int_mic_pin
= 0x12;
914 static void alc663_g71v_setup(struct hda_codec
*codec
)
916 struct alc_spec
*spec
= codec
->spec
;
917 spec
->autocfg
.hp_pins
[0] = 0x21;
918 spec
->autocfg
.line_out_pins
[0] = 0x15;
919 spec
->autocfg
.speaker_pins
[0] = 0x14;
921 spec
->automute_mode
= ALC_AUTOMUTE_AMP
;
922 spec
->detect_line
= 1;
923 spec
->automute_lines
= 1;
924 spec
->ext_mic_pin
= 0x18;
925 spec
->int_mic_pin
= 0x12;
929 #define alc663_g50v_setup alc663_m51va_setup
931 static const struct snd_kcontrol_new alc662_ecs_mixer
[] = {
932 HDA_CODEC_VOLUME("Master Playback Volume", 0x02, 0x0, HDA_OUTPUT
),
933 ALC262_HIPPO_MASTER_SWITCH
,
935 HDA_CODEC_VOLUME("Mic/LineIn Boost Volume", 0x18, 0, HDA_INPUT
),
936 HDA_CODEC_VOLUME("Mic/LineIn Playback Volume", 0x0b, 0x0, HDA_INPUT
),
937 HDA_CODEC_MUTE("Mic/LineIn Playback Switch", 0x0b, 0x0, HDA_INPUT
),
939 HDA_CODEC_VOLUME("Internal Mic Boost Volume", 0x19, 0, HDA_INPUT
),
940 HDA_CODEC_VOLUME("Internal Mic Playback Volume", 0x0b, 0x1, HDA_INPUT
),
941 HDA_CODEC_MUTE("Internal Mic Playback Switch", 0x0b, 0x1, HDA_INPUT
),
945 static const struct snd_kcontrol_new alc272_nc10_mixer
[] = {
946 /* Master Playback automatically created from Speaker and Headphone */
947 HDA_CODEC_VOLUME("Speaker Playback Volume", 0x02, 0x0, HDA_OUTPUT
),
948 HDA_CODEC_MUTE("Speaker Playback Switch", 0x14, 0x0, HDA_OUTPUT
),
949 HDA_CODEC_VOLUME("Headphone Playback Volume", 0x03, 0x0, HDA_OUTPUT
),
950 HDA_CODEC_MUTE("Headphone Playback Switch", 0x21, 0x0, HDA_OUTPUT
),
952 HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x0, HDA_INPUT
),
953 HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x0, HDA_INPUT
),
954 HDA_CODEC_VOLUME("Mic Boost Volume", 0x18, 0, HDA_INPUT
),
956 HDA_CODEC_VOLUME("Internal Mic Playback Volume", 0x0b, 0x1, HDA_INPUT
),
957 HDA_CODEC_MUTE("Internal Mic Playback Switch", 0x0b, 0x1, HDA_INPUT
),
958 HDA_CODEC_VOLUME("Internal Mic Boost Volume", 0x19, 0, HDA_INPUT
),
964 * configuration and preset
966 static const char * const alc662_models
[ALC662_MODEL_LAST
] = {
967 [ALC662_3ST_2ch_DIG
] = "3stack-dig",
968 [ALC662_3ST_6ch_DIG
] = "3stack-6ch-dig",
969 [ALC662_3ST_6ch
] = "3stack-6ch",
970 [ALC662_5ST_DIG
] = "5stack-dig",
971 [ALC662_LENOVO_101E
] = "lenovo-101e",
972 [ALC662_ASUS_EEEPC_P701
] = "eeepc-p701",
973 [ALC662_ASUS_EEEPC_EP20
] = "eeepc-ep20",
974 [ALC662_ECS
] = "ecs",
975 [ALC663_ASUS_M51VA
] = "m51va",
976 [ALC663_ASUS_G71V
] = "g71v",
977 [ALC663_ASUS_H13
] = "h13",
978 [ALC663_ASUS_G50V
] = "g50v",
979 [ALC663_ASUS_MODE1
] = "asus-mode1",
980 [ALC662_ASUS_MODE2
] = "asus-mode2",
981 [ALC663_ASUS_MODE3
] = "asus-mode3",
982 [ALC663_ASUS_MODE4
] = "asus-mode4",
983 [ALC663_ASUS_MODE5
] = "asus-mode5",
984 [ALC663_ASUS_MODE6
] = "asus-mode6",
985 [ALC663_ASUS_MODE7
] = "asus-mode7",
986 [ALC663_ASUS_MODE8
] = "asus-mode8",
987 [ALC272_DELL
] = "dell",
988 [ALC272_DELL_ZM1
] = "dell-zm1",
989 [ALC272_SAMSUNG_NC10
] = "samsung-nc10",
990 [ALC662_AUTO
] = "auto",
993 static const struct snd_pci_quirk alc662_cfg_tbl
[] = {
994 SND_PCI_QUIRK(0x1019, 0x9087, "ECS", ALC662_ECS
),
995 SND_PCI_QUIRK(0x1028, 0x02d6, "DELL", ALC272_DELL
),
996 SND_PCI_QUIRK(0x1028, 0x02f4, "DELL ZM1", ALC272_DELL_ZM1
),
997 SND_PCI_QUIRK(0x1043, 0x1000, "ASUS N50Vm", ALC663_ASUS_MODE1
),
998 SND_PCI_QUIRK(0x1043, 0x1092, "ASUS NB", ALC663_ASUS_MODE3
),
999 SND_PCI_QUIRK(0x1043, 0x1173, "ASUS K73Jn", ALC663_ASUS_MODE1
),
1000 SND_PCI_QUIRK(0x1043, 0x11c3, "ASUS M70V", ALC663_ASUS_MODE3
),
1001 SND_PCI_QUIRK(0x1043, 0x11d3, "ASUS NB", ALC663_ASUS_MODE1
),
1002 SND_PCI_QUIRK(0x1043, 0x11f3, "ASUS NB", ALC662_ASUS_MODE2
),
1003 SND_PCI_QUIRK(0x1043, 0x1203, "ASUS NB", ALC663_ASUS_MODE1
),
1004 SND_PCI_QUIRK(0x1043, 0x1303, "ASUS G60J", ALC663_ASUS_MODE1
),
1005 SND_PCI_QUIRK(0x1043, 0x1333, "ASUS G60Jx", ALC663_ASUS_MODE1
),
1006 SND_PCI_QUIRK(0x1043, 0x1339, "ASUS NB", ALC662_ASUS_MODE2
),
1007 SND_PCI_QUIRK(0x1043, 0x13e3, "ASUS N71JA", ALC663_ASUS_MODE7
),
1008 SND_PCI_QUIRK(0x1043, 0x1463, "ASUS N71", ALC663_ASUS_MODE7
),
1009 SND_PCI_QUIRK(0x1043, 0x14d3, "ASUS G72", ALC663_ASUS_MODE8
),
1010 SND_PCI_QUIRK(0x1043, 0x1563, "ASUS N90", ALC663_ASUS_MODE3
),
1011 SND_PCI_QUIRK(0x1043, 0x15d3, "ASUS N50SF F50SF", ALC663_ASUS_MODE1
),
1012 SND_PCI_QUIRK(0x1043, 0x16c3, "ASUS NB", ALC662_ASUS_MODE2
),
1013 SND_PCI_QUIRK(0x1043, 0x16f3, "ASUS K40C K50C", ALC662_ASUS_MODE2
),
1014 SND_PCI_QUIRK(0x1043, 0x1733, "ASUS N81De", ALC663_ASUS_MODE1
),
1015 SND_PCI_QUIRK(0x1043, 0x1753, "ASUS NB", ALC662_ASUS_MODE2
),
1016 SND_PCI_QUIRK(0x1043, 0x1763, "ASUS NB", ALC663_ASUS_MODE6
),
1017 SND_PCI_QUIRK(0x1043, 0x1765, "ASUS NB", ALC663_ASUS_MODE6
),
1018 SND_PCI_QUIRK(0x1043, 0x1783, "ASUS NB", ALC662_ASUS_MODE2
),
1019 SND_PCI_QUIRK(0x1043, 0x1793, "ASUS F50GX", ALC663_ASUS_MODE1
),
1020 SND_PCI_QUIRK(0x1043, 0x17b3, "ASUS F70SL", ALC663_ASUS_MODE3
),
1021 SND_PCI_QUIRK(0x1043, 0x17c3, "ASUS UX20", ALC663_ASUS_M51VA
),
1022 SND_PCI_QUIRK(0x1043, 0x17f3, "ASUS X58LE", ALC662_ASUS_MODE2
),
1023 SND_PCI_QUIRK(0x1043, 0x1813, "ASUS NB", ALC662_ASUS_MODE2
),
1024 SND_PCI_QUIRK(0x1043, 0x1823, "ASUS NB", ALC663_ASUS_MODE5
),
1025 SND_PCI_QUIRK(0x1043, 0x1833, "ASUS NB", ALC663_ASUS_MODE6
),
1026 SND_PCI_QUIRK(0x1043, 0x1843, "ASUS NB", ALC662_ASUS_MODE2
),
1027 SND_PCI_QUIRK(0x1043, 0x1853, "ASUS F50Z", ALC663_ASUS_MODE1
),
1028 SND_PCI_QUIRK(0x1043, 0x1864, "ASUS NB", ALC662_ASUS_MODE2
),
1029 SND_PCI_QUIRK(0x1043, 0x1876, "ASUS NB", ALC662_ASUS_MODE2
),
1030 SND_PCI_QUIRK(0x1043, 0x1878, "ASUS M51VA", ALC663_ASUS_M51VA
),
1031 /*SND_PCI_QUIRK(0x1043, 0x1878, "ASUS M50Vr", ALC663_ASUS_MODE1),*/
1032 SND_PCI_QUIRK(0x1043, 0x1893, "ASUS M50Vm", ALC663_ASUS_MODE3
),
1033 SND_PCI_QUIRK(0x1043, 0x1894, "ASUS X55", ALC663_ASUS_MODE3
),
1034 SND_PCI_QUIRK(0x1043, 0x18b3, "ASUS N80Vc", ALC663_ASUS_MODE1
),
1035 SND_PCI_QUIRK(0x1043, 0x18c3, "ASUS VX5", ALC663_ASUS_MODE1
),
1036 SND_PCI_QUIRK(0x1043, 0x18d3, "ASUS N81Te", ALC663_ASUS_MODE1
),
1037 SND_PCI_QUIRK(0x1043, 0x18f3, "ASUS N505Tp", ALC663_ASUS_MODE1
),
1038 SND_PCI_QUIRK(0x1043, 0x1903, "ASUS F5GL", ALC663_ASUS_MODE1
),
1039 SND_PCI_QUIRK(0x1043, 0x1913, "ASUS NB", ALC662_ASUS_MODE2
),
1040 SND_PCI_QUIRK(0x1043, 0x1933, "ASUS F80Q", ALC662_ASUS_MODE2
),
1041 SND_PCI_QUIRK(0x1043, 0x1943, "ASUS Vx3V", ALC663_ASUS_MODE1
),
1042 SND_PCI_QUIRK(0x1043, 0x1953, "ASUS NB", ALC663_ASUS_MODE1
),
1043 SND_PCI_QUIRK(0x1043, 0x1963, "ASUS X71C", ALC663_ASUS_MODE3
),
1044 SND_PCI_QUIRK(0x1043, 0x1983, "ASUS N5051A", ALC663_ASUS_MODE1
),
1045 SND_PCI_QUIRK(0x1043, 0x1993, "ASUS N20", ALC663_ASUS_MODE1
),
1046 SND_PCI_QUIRK(0x1043, 0x19a3, "ASUS G50V", ALC663_ASUS_G50V
),
1047 /*SND_PCI_QUIRK(0x1043, 0x19a3, "ASUS NB", ALC663_ASUS_MODE1),*/
1048 SND_PCI_QUIRK(0x1043, 0x19b3, "ASUS F7Z", ALC663_ASUS_MODE1
),
1049 SND_PCI_QUIRK(0x1043, 0x19c3, "ASUS F5Z/F6x", ALC662_ASUS_MODE2
),
1050 SND_PCI_QUIRK(0x1043, 0x19d3, "ASUS NB", ALC663_ASUS_M51VA
),
1051 SND_PCI_QUIRK(0x1043, 0x19e3, "ASUS NB", ALC663_ASUS_MODE1
),
1052 SND_PCI_QUIRK(0x1043, 0x19f3, "ASUS NB", ALC663_ASUS_MODE4
),
1053 SND_PCI_QUIRK(0x1043, 0x8290, "ASUS P5GC-MX", ALC662_3ST_6ch_DIG
),
1054 SND_PCI_QUIRK(0x1043, 0x82a1, "ASUS Eeepc", ALC662_ASUS_EEEPC_P701
),
1055 SND_PCI_QUIRK(0x1043, 0x82d1, "ASUS Eeepc EP20", ALC662_ASUS_EEEPC_EP20
),
1056 SND_PCI_QUIRK(0x105b, 0x0cd6, "Foxconn", ALC662_ECS
),
1057 SND_PCI_QUIRK(0x105b, 0x0d47, "Foxconn 45CMX/45GMX/45CMX-K",
1058 ALC662_3ST_6ch_DIG
),
1059 SND_PCI_QUIRK(0x1179, 0xff6e, "Toshiba NB20x", ALC662_AUTO
),
1060 SND_PCI_QUIRK(0x144d, 0xca00, "Samsung NC10", ALC272_SAMSUNG_NC10
),
1061 SND_PCI_QUIRK(0x1458, 0xa002, "Gigabyte 945GCM-S2L",
1062 ALC662_3ST_6ch_DIG
),
1063 SND_PCI_QUIRK(0x152d, 0x2304, "Quanta WH1", ALC663_ASUS_H13
),
1064 SND_PCI_QUIRK(0x1565, 0x820f, "Biostar TA780G M2+", ALC662_3ST_6ch_DIG
),
1065 SND_PCI_QUIRK(0x1631, 0xc10c, "PB RS65", ALC663_ASUS_M51VA
),
1066 SND_PCI_QUIRK(0x17aa, 0x101e, "Lenovo", ALC662_LENOVO_101E
),
1067 SND_PCI_QUIRK(0x1849, 0x3662, "ASROCK K10N78FullHD-hSLI R3.0",
1068 ALC662_3ST_6ch_DIG
),
1069 SND_PCI_QUIRK_MASK(0x1854, 0xf000, 0x2000, "ASUS H13-200x",
1071 SND_PCI_QUIRK(0x1991, 0x5628, "Ordissimo EVE", ALC662_LENOVO_101E
),
1075 static const struct alc_config_preset alc662_presets
[] = {
1076 [ALC662_3ST_2ch_DIG
] = {
1077 .mixers
= { alc662_3ST_2ch_mixer
},
1078 .init_verbs
= { alc662_init_verbs
, alc662_eapd_init_verbs
},
1079 .num_dacs
= ARRAY_SIZE(alc662_dac_nids
),
1080 .dac_nids
= alc662_dac_nids
,
1081 .dig_out_nid
= ALC662_DIGOUT_NID
,
1082 .dig_in_nid
= ALC662_DIGIN_NID
,
1083 .num_channel_mode
= ARRAY_SIZE(alc662_3ST_2ch_modes
),
1084 .channel_mode
= alc662_3ST_2ch_modes
,
1085 .input_mux
= &alc662_capture_source
,
1087 [ALC662_3ST_6ch_DIG
] = {
1088 .mixers
= { alc662_3ST_6ch_mixer
, alc662_chmode_mixer
},
1089 .init_verbs
= { alc662_init_verbs
, alc662_eapd_init_verbs
},
1090 .num_dacs
= ARRAY_SIZE(alc662_dac_nids
),
1091 .dac_nids
= alc662_dac_nids
,
1092 .dig_out_nid
= ALC662_DIGOUT_NID
,
1093 .dig_in_nid
= ALC662_DIGIN_NID
,
1094 .num_channel_mode
= ARRAY_SIZE(alc662_3ST_6ch_modes
),
1095 .channel_mode
= alc662_3ST_6ch_modes
,
1097 .input_mux
= &alc662_capture_source
,
1099 [ALC662_3ST_6ch
] = {
1100 .mixers
= { alc662_3ST_6ch_mixer
, alc662_chmode_mixer
},
1101 .init_verbs
= { alc662_init_verbs
, alc662_eapd_init_verbs
},
1102 .num_dacs
= ARRAY_SIZE(alc662_dac_nids
),
1103 .dac_nids
= alc662_dac_nids
,
1104 .num_channel_mode
= ARRAY_SIZE(alc662_3ST_6ch_modes
),
1105 .channel_mode
= alc662_3ST_6ch_modes
,
1107 .input_mux
= &alc662_capture_source
,
1109 [ALC662_5ST_DIG
] = {
1110 .mixers
= { alc662_base_mixer
, alc662_chmode_mixer
},
1111 .init_verbs
= { alc662_init_verbs
, alc662_eapd_init_verbs
},
1112 .num_dacs
= ARRAY_SIZE(alc662_dac_nids
),
1113 .dac_nids
= alc662_dac_nids
,
1114 .dig_out_nid
= ALC662_DIGOUT_NID
,
1115 .dig_in_nid
= ALC662_DIGIN_NID
,
1116 .num_channel_mode
= ARRAY_SIZE(alc662_5stack_modes
),
1117 .channel_mode
= alc662_5stack_modes
,
1118 .input_mux
= &alc662_capture_source
,
1120 [ALC662_LENOVO_101E
] = {
1121 .mixers
= { alc662_lenovo_101e_mixer
},
1122 .init_verbs
= { alc662_init_verbs
,
1123 alc662_eapd_init_verbs
,
1124 alc662_sue_init_verbs
},
1125 .num_dacs
= ARRAY_SIZE(alc662_dac_nids
),
1126 .dac_nids
= alc662_dac_nids
,
1127 .num_channel_mode
= ARRAY_SIZE(alc662_3ST_2ch_modes
),
1128 .channel_mode
= alc662_3ST_2ch_modes
,
1129 .input_mux
= &alc662_lenovo_101e_capture_source
,
1130 .unsol_event
= alc_sku_unsol_event
,
1131 .setup
= alc662_lenovo_101e_setup
,
1132 .init_hook
= alc_inithook
,
1134 [ALC662_ASUS_EEEPC_P701
] = {
1135 .mixers
= { alc662_eeepc_p701_mixer
},
1136 .init_verbs
= { alc662_init_verbs
,
1137 alc662_eapd_init_verbs
,
1138 alc662_eeepc_sue_init_verbs
},
1139 .num_dacs
= ARRAY_SIZE(alc662_dac_nids
),
1140 .dac_nids
= alc662_dac_nids
,
1141 .num_channel_mode
= ARRAY_SIZE(alc662_3ST_2ch_modes
),
1142 .channel_mode
= alc662_3ST_2ch_modes
,
1143 .unsol_event
= alc_sku_unsol_event
,
1144 .setup
= alc662_eeepc_setup
,
1145 .init_hook
= alc_inithook
,
1147 [ALC662_ASUS_EEEPC_EP20
] = {
1148 .mixers
= { alc662_eeepc_ep20_mixer
,
1149 alc662_chmode_mixer
},
1150 .init_verbs
= { alc662_init_verbs
,
1151 alc662_eapd_init_verbs
,
1152 alc662_eeepc_ep20_sue_init_verbs
},
1153 .num_dacs
= ARRAY_SIZE(alc662_dac_nids
),
1154 .dac_nids
= alc662_dac_nids
,
1155 .num_channel_mode
= ARRAY_SIZE(alc662_3ST_6ch_modes
),
1156 .channel_mode
= alc662_3ST_6ch_modes
,
1157 .input_mux
= &alc662_lenovo_101e_capture_source
,
1158 .unsol_event
= alc_sku_unsol_event
,
1159 .setup
= alc662_eeepc_ep20_setup
,
1160 .init_hook
= alc_inithook
,
1163 .mixers
= { alc662_ecs_mixer
},
1164 .init_verbs
= { alc662_init_verbs
,
1165 alc662_eapd_init_verbs
,
1166 alc662_ecs_init_verbs
},
1167 .num_dacs
= ARRAY_SIZE(alc662_dac_nids
),
1168 .dac_nids
= alc662_dac_nids
,
1169 .num_channel_mode
= ARRAY_SIZE(alc662_3ST_2ch_modes
),
1170 .channel_mode
= alc662_3ST_2ch_modes
,
1171 .unsol_event
= alc_sku_unsol_event
,
1172 .setup
= alc662_eeepc_setup
,
1173 .init_hook
= alc_inithook
,
1175 [ALC663_ASUS_M51VA
] = {
1176 .mixers
= { alc663_m51va_mixer
},
1177 .init_verbs
= { alc662_init_verbs
,
1178 alc662_eapd_init_verbs
,
1179 alc663_m51va_init_verbs
},
1180 .num_dacs
= ARRAY_SIZE(alc662_dac_nids
),
1181 .dac_nids
= alc662_dac_nids
,
1182 .dig_out_nid
= ALC662_DIGOUT_NID
,
1183 .num_channel_mode
= ARRAY_SIZE(alc662_3ST_2ch_modes
),
1184 .channel_mode
= alc662_3ST_2ch_modes
,
1185 .unsol_event
= alc_sku_unsol_event
,
1186 .setup
= alc663_m51va_setup
,
1187 .init_hook
= alc_inithook
,
1189 [ALC663_ASUS_G71V
] = {
1190 .mixers
= { alc663_g71v_mixer
},
1191 .init_verbs
= { alc662_init_verbs
,
1192 alc662_eapd_init_verbs
,
1193 alc663_g71v_init_verbs
},
1194 .num_dacs
= ARRAY_SIZE(alc662_dac_nids
),
1195 .dac_nids
= alc662_dac_nids
,
1196 .dig_out_nid
= ALC662_DIGOUT_NID
,
1197 .num_channel_mode
= ARRAY_SIZE(alc662_3ST_2ch_modes
),
1198 .channel_mode
= alc662_3ST_2ch_modes
,
1199 .unsol_event
= alc_sku_unsol_event
,
1200 .setup
= alc663_g71v_setup
,
1201 .init_hook
= alc_inithook
,
1203 [ALC663_ASUS_H13
] = {
1204 .mixers
= { alc663_m51va_mixer
},
1205 .init_verbs
= { alc662_init_verbs
,
1206 alc662_eapd_init_verbs
,
1207 alc663_m51va_init_verbs
},
1208 .num_dacs
= ARRAY_SIZE(alc662_dac_nids
),
1209 .dac_nids
= alc662_dac_nids
,
1210 .num_channel_mode
= ARRAY_SIZE(alc662_3ST_2ch_modes
),
1211 .channel_mode
= alc662_3ST_2ch_modes
,
1212 .setup
= alc663_m51va_setup
,
1213 .unsol_event
= alc_sku_unsol_event
,
1214 .init_hook
= alc_inithook
,
1216 [ALC663_ASUS_G50V
] = {
1217 .mixers
= { alc663_g50v_mixer
},
1218 .init_verbs
= { alc662_init_verbs
,
1219 alc662_eapd_init_verbs
,
1220 alc663_g50v_init_verbs
},
1221 .num_dacs
= ARRAY_SIZE(alc662_dac_nids
),
1222 .dac_nids
= alc662_dac_nids
,
1223 .dig_out_nid
= ALC662_DIGOUT_NID
,
1224 .num_channel_mode
= ARRAY_SIZE(alc662_3ST_6ch_modes
),
1225 .channel_mode
= alc662_3ST_6ch_modes
,
1226 .input_mux
= &alc663_capture_source
,
1227 .unsol_event
= alc_sku_unsol_event
,
1228 .setup
= alc663_g50v_setup
,
1229 .init_hook
= alc_inithook
,
1231 [ALC663_ASUS_MODE1
] = {
1232 .mixers
= { alc663_m51va_mixer
},
1233 .cap_mixer
= alc662_auto_capture_mixer
,
1234 .init_verbs
= { alc662_init_verbs
,
1235 alc662_eapd_init_verbs
,
1236 alc663_21jd_amic_init_verbs
},
1237 .num_dacs
= ARRAY_SIZE(alc662_dac_nids
),
1239 .dac_nids
= alc662_dac_nids
,
1240 .dig_out_nid
= ALC662_DIGOUT_NID
,
1241 .num_channel_mode
= ARRAY_SIZE(alc662_3ST_2ch_modes
),
1242 .channel_mode
= alc662_3ST_2ch_modes
,
1243 .unsol_event
= alc_sku_unsol_event
,
1244 .setup
= alc663_mode1_setup
,
1245 .init_hook
= alc_inithook
,
1247 [ALC662_ASUS_MODE2
] = {
1248 .mixers
= { alc662_1bjd_mixer
},
1249 .cap_mixer
= alc662_auto_capture_mixer
,
1250 .init_verbs
= { alc662_init_verbs
,
1251 alc662_eapd_init_verbs
,
1252 alc662_1bjd_amic_init_verbs
},
1253 .num_dacs
= ARRAY_SIZE(alc662_dac_nids
),
1254 .dac_nids
= alc662_dac_nids
,
1255 .dig_out_nid
= ALC662_DIGOUT_NID
,
1256 .num_channel_mode
= ARRAY_SIZE(alc662_3ST_2ch_modes
),
1257 .channel_mode
= alc662_3ST_2ch_modes
,
1258 .unsol_event
= alc_sku_unsol_event
,
1259 .setup
= alc662_mode2_setup
,
1260 .init_hook
= alc_inithook
,
1262 [ALC663_ASUS_MODE3
] = {
1263 .mixers
= { alc663_two_hp_m1_mixer
},
1264 .cap_mixer
= alc662_auto_capture_mixer
,
1265 .init_verbs
= { alc662_init_verbs
,
1266 alc662_eapd_init_verbs
,
1267 alc663_two_hp_amic_m1_init_verbs
},
1268 .num_dacs
= ARRAY_SIZE(alc662_dac_nids
),
1270 .dac_nids
= alc662_dac_nids
,
1271 .dig_out_nid
= ALC662_DIGOUT_NID
,
1272 .num_channel_mode
= ARRAY_SIZE(alc662_3ST_2ch_modes
),
1273 .channel_mode
= alc662_3ST_2ch_modes
,
1274 .unsol_event
= alc_sku_unsol_event
,
1275 .setup
= alc663_mode3_setup
,
1276 .init_hook
= alc_inithook
,
1278 [ALC663_ASUS_MODE4
] = {
1279 .mixers
= { alc663_asus_21jd_clfe_mixer
},
1280 .cap_mixer
= alc662_auto_capture_mixer
,
1281 .init_verbs
= { alc662_init_verbs
,
1282 alc662_eapd_init_verbs
,
1283 alc663_21jd_amic_init_verbs
},
1284 .num_dacs
= ARRAY_SIZE(alc662_dac_nids
),
1286 .dac_nids
= alc662_dac_nids
,
1287 .dig_out_nid
= ALC662_DIGOUT_NID
,
1288 .num_channel_mode
= ARRAY_SIZE(alc662_3ST_2ch_modes
),
1289 .channel_mode
= alc662_3ST_2ch_modes
,
1290 .unsol_event
= alc_sku_unsol_event
,
1291 .setup
= alc663_mode4_setup
,
1292 .init_hook
= alc_inithook
,
1294 [ALC663_ASUS_MODE5
] = {
1295 .mixers
= { alc663_asus_15jd_clfe_mixer
},
1296 .cap_mixer
= alc662_auto_capture_mixer
,
1297 .init_verbs
= { alc662_init_verbs
,
1298 alc662_eapd_init_verbs
,
1299 alc663_15jd_amic_init_verbs
},
1300 .num_dacs
= ARRAY_SIZE(alc662_dac_nids
),
1302 .dac_nids
= alc662_dac_nids
,
1303 .dig_out_nid
= ALC662_DIGOUT_NID
,
1304 .num_channel_mode
= ARRAY_SIZE(alc662_3ST_2ch_modes
),
1305 .channel_mode
= alc662_3ST_2ch_modes
,
1306 .unsol_event
= alc_sku_unsol_event
,
1307 .setup
= alc663_mode5_setup
,
1308 .init_hook
= alc_inithook
,
1310 [ALC663_ASUS_MODE6
] = {
1311 .mixers
= { alc663_two_hp_m2_mixer
},
1312 .cap_mixer
= alc662_auto_capture_mixer
,
1313 .init_verbs
= { alc662_init_verbs
,
1314 alc662_eapd_init_verbs
,
1315 alc663_two_hp_amic_m2_init_verbs
},
1316 .num_dacs
= ARRAY_SIZE(alc662_dac_nids
),
1318 .dac_nids
= alc662_dac_nids
,
1319 .dig_out_nid
= ALC662_DIGOUT_NID
,
1320 .num_channel_mode
= ARRAY_SIZE(alc662_3ST_2ch_modes
),
1321 .channel_mode
= alc662_3ST_2ch_modes
,
1322 .unsol_event
= alc_sku_unsol_event
,
1323 .setup
= alc663_mode6_setup
,
1324 .init_hook
= alc_inithook
,
1326 [ALC663_ASUS_MODE7
] = {
1327 .mixers
= { alc663_mode7_mixer
},
1328 .cap_mixer
= alc662_auto_capture_mixer
,
1329 .init_verbs
= { alc662_init_verbs
,
1330 alc662_eapd_init_verbs
,
1331 alc663_mode7_init_verbs
},
1332 .num_dacs
= ARRAY_SIZE(alc662_dac_nids
),
1334 .dac_nids
= alc662_dac_nids
,
1335 .dig_out_nid
= ALC662_DIGOUT_NID
,
1336 .num_channel_mode
= ARRAY_SIZE(alc662_3ST_2ch_modes
),
1337 .channel_mode
= alc662_3ST_2ch_modes
,
1338 .unsol_event
= alc_sku_unsol_event
,
1339 .setup
= alc663_mode7_setup
,
1340 .init_hook
= alc_inithook
,
1342 [ALC663_ASUS_MODE8
] = {
1343 .mixers
= { alc663_mode8_mixer
},
1344 .cap_mixer
= alc662_auto_capture_mixer
,
1345 .init_verbs
= { alc662_init_verbs
,
1346 alc662_eapd_init_verbs
,
1347 alc663_mode8_init_verbs
},
1348 .num_dacs
= ARRAY_SIZE(alc662_dac_nids
),
1350 .dac_nids
= alc662_dac_nids
,
1351 .dig_out_nid
= ALC662_DIGOUT_NID
,
1352 .num_channel_mode
= ARRAY_SIZE(alc662_3ST_2ch_modes
),
1353 .channel_mode
= alc662_3ST_2ch_modes
,
1354 .unsol_event
= alc_sku_unsol_event
,
1355 .setup
= alc663_mode8_setup
,
1356 .init_hook
= alc_inithook
,
1359 .mixers
= { alc663_m51va_mixer
},
1360 .cap_mixer
= alc272_auto_capture_mixer
,
1361 .init_verbs
= { alc662_init_verbs
,
1362 alc662_eapd_init_verbs
,
1363 alc272_dell_init_verbs
},
1364 .num_dacs
= ARRAY_SIZE(alc272_dac_nids
),
1365 .dac_nids
= alc272_dac_nids
,
1366 .num_channel_mode
= ARRAY_SIZE(alc662_3ST_2ch_modes
),
1367 .adc_nids
= alc272_adc_nids
,
1368 .num_adc_nids
= ARRAY_SIZE(alc272_adc_nids
),
1369 .capsrc_nids
= alc272_capsrc_nids
,
1370 .channel_mode
= alc662_3ST_2ch_modes
,
1371 .unsol_event
= alc_sku_unsol_event
,
1372 .setup
= alc663_m51va_setup
,
1373 .init_hook
= alc_inithook
,
1375 [ALC272_DELL_ZM1
] = {
1376 .mixers
= { alc663_m51va_mixer
},
1377 .cap_mixer
= alc662_auto_capture_mixer
,
1378 .init_verbs
= { alc662_init_verbs
,
1379 alc662_eapd_init_verbs
,
1380 alc272_dell_zm1_init_verbs
},
1381 .num_dacs
= ARRAY_SIZE(alc272_dac_nids
),
1382 .dac_nids
= alc272_dac_nids
,
1383 .num_channel_mode
= ARRAY_SIZE(alc662_3ST_2ch_modes
),
1384 .adc_nids
= alc662_adc_nids
,
1386 .capsrc_nids
= alc662_capsrc_nids
,
1387 .channel_mode
= alc662_3ST_2ch_modes
,
1388 .unsol_event
= alc_sku_unsol_event
,
1389 .setup
= alc663_m51va_setup
,
1390 .init_hook
= alc_inithook
,
1392 [ALC272_SAMSUNG_NC10
] = {
1393 .mixers
= { alc272_nc10_mixer
},
1394 .init_verbs
= { alc662_init_verbs
,
1395 alc662_eapd_init_verbs
,
1396 alc663_21jd_amic_init_verbs
},
1397 .num_dacs
= ARRAY_SIZE(alc272_dac_nids
),
1398 .dac_nids
= alc272_dac_nids
,
1399 .num_channel_mode
= ARRAY_SIZE(alc662_3ST_2ch_modes
),
1400 .channel_mode
= alc662_3ST_2ch_modes
,
1401 /*.input_mux = &alc272_nc10_capture_source,*/
1402 .unsol_event
= alc_sku_unsol_event
,
1403 .setup
= alc663_mode4_setup
,
1404 .init_hook
= alc_inithook
,