Commit 4f5d1706 authored by Takashi Iwai's avatar Takashi Iwai

ALSA: hda - Clean up init and setup hooks for Realtek codecs

Move static codes to setup from init_hook for each model.

Also, use the common auto-mic selection helper for devices that support
auto-mic selection.  They just need to set up ext_mic, int_mic and
auto_mic flag in the setup section.
Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
parent e9c364c0
...@@ -1537,7 +1537,7 @@ static void alc_automute_amp_unsol_event(struct hda_codec *codec, ...@@ -1537,7 +1537,7 @@ static void alc_automute_amp_unsol_event(struct hda_codec *codec,
alc_automute_amp(codec); alc_automute_amp(codec);
} }
static void alc889_automute_init(struct hda_codec *codec) static void alc889_automute_setup(struct hda_codec *codec)
{ {
struct alc_spec *spec = codec->spec; struct alc_spec *spec = codec->spec;
...@@ -1547,16 +1547,15 @@ static void alc889_automute_init(struct hda_codec *codec) ...@@ -1547,16 +1547,15 @@ static void alc889_automute_init(struct hda_codec *codec)
spec->autocfg.speaker_pins[2] = 0x17; spec->autocfg.speaker_pins[2] = 0x17;
spec->autocfg.speaker_pins[3] = 0x19; spec->autocfg.speaker_pins[3] = 0x19;
spec->autocfg.speaker_pins[4] = 0x1a; spec->autocfg.speaker_pins[4] = 0x1a;
alc_automute_amp(codec);
} }
static void alc889_intel_init_hook(struct hda_codec *codec) static void alc889_intel_init_hook(struct hda_codec *codec)
{ {
alc889_coef_init(codec); alc889_coef_init(codec);
alc889_automute_init(codec); alc_automute_amp(codec);
} }
static void alc888_fujitsu_xa3530_init_hook(struct hda_codec *codec) static void alc888_fujitsu_xa3530_setup(struct hda_codec *codec)
{ {
struct alc_spec *spec = codec->spec; struct alc_spec *spec = codec->spec;
...@@ -1564,7 +1563,6 @@ static void alc888_fujitsu_xa3530_init_hook(struct hda_codec *codec) ...@@ -1564,7 +1563,6 @@ static void alc888_fujitsu_xa3530_init_hook(struct hda_codec *codec)
spec->autocfg.hp_pins[1] = 0x1b; /* hp */ spec->autocfg.hp_pins[1] = 0x1b; /* hp */
spec->autocfg.speaker_pins[0] = 0x14; /* speaker */ spec->autocfg.speaker_pins[0] = 0x14; /* speaker */
spec->autocfg.speaker_pins[1] = 0x15; /* bass */ spec->autocfg.speaker_pins[1] = 0x15; /* bass */
alc_automute_amp(codec);
} }
/* /*
...@@ -1763,16 +1761,15 @@ static struct snd_kcontrol_new alc888_base_mixer[] = { ...@@ -1763,16 +1761,15 @@ static struct snd_kcontrol_new alc888_base_mixer[] = {
{ } /* end */ { } /* end */
}; };
static void alc888_acer_aspire_4930g_init_hook(struct hda_codec *codec) static void alc888_acer_aspire_4930g_setup(struct hda_codec *codec)
{ {
struct alc_spec *spec = codec->spec; struct alc_spec *spec = codec->spec;
spec->autocfg.hp_pins[0] = 0x15; spec->autocfg.hp_pins[0] = 0x15;
spec->autocfg.speaker_pins[0] = 0x14; spec->autocfg.speaker_pins[0] = 0x14;
alc_automute_amp(codec);
} }
static void alc888_acer_aspire_6530g_init_hook(struct hda_codec *codec) static void alc888_acer_aspire_6530g_setup(struct hda_codec *codec)
{ {
struct alc_spec *spec = codec->spec; struct alc_spec *spec = codec->spec;
...@@ -1780,10 +1777,9 @@ static void alc888_acer_aspire_6530g_init_hook(struct hda_codec *codec) ...@@ -1780,10 +1777,9 @@ static void alc888_acer_aspire_6530g_init_hook(struct hda_codec *codec)
spec->autocfg.speaker_pins[0] = 0x14; spec->autocfg.speaker_pins[0] = 0x14;
spec->autocfg.speaker_pins[1] = 0x16; spec->autocfg.speaker_pins[1] = 0x16;
spec->autocfg.speaker_pins[2] = 0x17; spec->autocfg.speaker_pins[2] = 0x17;
alc_automute_amp(codec);
} }
static void alc889_acer_aspire_8930g_init_hook(struct hda_codec *codec) static void alc889_acer_aspire_8930g_setup(struct hda_codec *codec)
{ {
struct alc_spec *spec = codec->spec; struct alc_spec *spec = codec->spec;
...@@ -1791,7 +1787,6 @@ static void alc889_acer_aspire_8930g_init_hook(struct hda_codec *codec) ...@@ -1791,7 +1787,6 @@ static void alc889_acer_aspire_8930g_init_hook(struct hda_codec *codec)
spec->autocfg.speaker_pins[0] = 0x14; spec->autocfg.speaker_pins[0] = 0x14;
spec->autocfg.speaker_pins[1] = 0x16; spec->autocfg.speaker_pins[1] = 0x16;
spec->autocfg.speaker_pins[2] = 0x1b; spec->autocfg.speaker_pins[2] = 0x1b;
alc_automute_amp(codec);
} }
/* /*
...@@ -2771,13 +2766,17 @@ static void alc880_uniwill_mic_automute(struct hda_codec *codec) ...@@ -2771,13 +2766,17 @@ static void alc880_uniwill_mic_automute(struct hda_codec *codec)
snd_hda_codec_amp_stereo(codec, 0x0b, HDA_INPUT, 1, HDA_AMP_MUTE, bits); snd_hda_codec_amp_stereo(codec, 0x0b, HDA_INPUT, 1, HDA_AMP_MUTE, bits);
} }
static void alc880_uniwill_init_hook(struct hda_codec *codec) static void alc880_uniwill_setup(struct hda_codec *codec)
{ {
struct alc_spec *spec = codec->spec; struct alc_spec *spec = codec->spec;
spec->autocfg.hp_pins[0] = 0x14; spec->autocfg.hp_pins[0] = 0x14;
spec->autocfg.speaker_pins[0] = 0x15; spec->autocfg.speaker_pins[0] = 0x15;
spec->autocfg.speaker_pins[0] = 0x16; spec->autocfg.speaker_pins[0] = 0x16;
}
static void alc880_uniwill_init_hook(struct hda_codec *codec)
{
alc_automute_amp(codec); alc_automute_amp(codec);
alc880_uniwill_mic_automute(codec); alc880_uniwill_mic_automute(codec);
} }
...@@ -2798,13 +2797,12 @@ static void alc880_uniwill_unsol_event(struct hda_codec *codec, ...@@ -2798,13 +2797,12 @@ static void alc880_uniwill_unsol_event(struct hda_codec *codec,
} }
} }
static void alc880_uniwill_p53_init_hook(struct hda_codec *codec) static void alc880_uniwill_p53_setup(struct hda_codec *codec)
{ {
struct alc_spec *spec = codec->spec; struct alc_spec *spec = codec->spec;
spec->autocfg.hp_pins[0] = 0x14; spec->autocfg.hp_pins[0] = 0x14;
spec->autocfg.speaker_pins[0] = 0x15; spec->autocfg.speaker_pins[0] = 0x15;
alc_automute_amp(codec);
} }
static void alc880_uniwill_p53_dcvol_automute(struct hda_codec *codec) static void alc880_uniwill_p53_dcvol_automute(struct hda_codec *codec)
...@@ -3067,13 +3065,12 @@ static struct hda_verb alc880_lg_init_verbs[] = { ...@@ -3067,13 +3065,12 @@ static struct hda_verb alc880_lg_init_verbs[] = {
}; };
/* toggle speaker-output according to the hp-jack state */ /* toggle speaker-output according to the hp-jack state */
static void alc880_lg_init_hook(struct hda_codec *codec) static void alc880_lg_setup(struct hda_codec *codec)
{ {
struct alc_spec *spec = codec->spec; struct alc_spec *spec = codec->spec;
spec->autocfg.hp_pins[0] = 0x1b; spec->autocfg.hp_pins[0] = 0x1b;
spec->autocfg.speaker_pins[0] = 0x17; spec->autocfg.speaker_pins[0] = 0x17;
alc_automute_amp(codec);
} }
/* /*
...@@ -3152,13 +3149,12 @@ static struct hda_verb alc880_lg_lw_init_verbs[] = { ...@@ -3152,13 +3149,12 @@ static struct hda_verb alc880_lg_lw_init_verbs[] = {
}; };
/* toggle speaker-output according to the hp-jack state */ /* toggle speaker-output according to the hp-jack state */
static void alc880_lg_lw_init_hook(struct hda_codec *codec) static void alc880_lg_lw_setup(struct hda_codec *codec)
{ {
struct alc_spec *spec = codec->spec; struct alc_spec *spec = codec->spec;
spec->autocfg.hp_pins[0] = 0x1b; spec->autocfg.hp_pins[0] = 0x1b;
spec->autocfg.speaker_pins[0] = 0x14; spec->autocfg.speaker_pins[0] = 0x14;
alc_automute_amp(codec);
} }
static struct snd_kcontrol_new alc880_medion_rim_mixer[] = { static struct snd_kcontrol_new alc880_medion_rim_mixer[] = {
...@@ -3224,13 +3220,12 @@ static void alc880_medion_rim_unsol_event(struct hda_codec *codec, ...@@ -3224,13 +3220,12 @@ static void alc880_medion_rim_unsol_event(struct hda_codec *codec,
alc880_medion_rim_automute(codec); alc880_medion_rim_automute(codec);
} }
static void alc880_medion_rim_init_hook(struct hda_codec *codec) static void alc880_medion_rim_setup(struct hda_codec *codec)
{ {
struct alc_spec *spec = codec->spec; struct alc_spec *spec = codec->spec;
spec->autocfg.hp_pins[0] = 0x14; spec->autocfg.hp_pins[0] = 0x14;
spec->autocfg.speaker_pins[0] = 0x1b; spec->autocfg.speaker_pins[0] = 0x1b;
alc880_medion_rim_automute(codec);
} }
#ifdef CONFIG_SND_HDA_POWER_SAVE #ifdef CONFIG_SND_HDA_POWER_SAVE
...@@ -4097,7 +4092,8 @@ static struct alc_config_preset alc880_presets[] = { ...@@ -4097,7 +4092,8 @@ static struct alc_config_preset alc880_presets[] = {
.channel_mode = alc880_2_jack_modes, .channel_mode = alc880_2_jack_modes,
.input_mux = &alc880_f1734_capture_source, .input_mux = &alc880_f1734_capture_source,
.unsol_event = alc880_uniwill_p53_unsol_event, .unsol_event = alc880_uniwill_p53_unsol_event,
.init_hook = alc880_uniwill_p53_init_hook, .setup = alc880_uniwill_p53_setup,
.init_hook = alc_automute_amp,
}, },
[ALC880_ASUS] = { [ALC880_ASUS] = {
.mixers = { alc880_asus_mixer }, .mixers = { alc880_asus_mixer },
...@@ -4174,6 +4170,7 @@ static struct alc_config_preset alc880_presets[] = { ...@@ -4174,6 +4170,7 @@ static struct alc_config_preset alc880_presets[] = {
.need_dac_fix = 1, .need_dac_fix = 1,
.input_mux = &alc880_capture_source, .input_mux = &alc880_capture_source,
.unsol_event = alc880_uniwill_unsol_event, .unsol_event = alc880_uniwill_unsol_event,
.setup = alc880_uniwill_setup,
.init_hook = alc880_uniwill_init_hook, .init_hook = alc880_uniwill_init_hook,
}, },
[ALC880_UNIWILL_P53] = { [ALC880_UNIWILL_P53] = {
...@@ -4186,7 +4183,8 @@ static struct alc_config_preset alc880_presets[] = { ...@@ -4186,7 +4183,8 @@ static struct alc_config_preset alc880_presets[] = {
.channel_mode = alc880_threestack_modes, .channel_mode = alc880_threestack_modes,
.input_mux = &alc880_capture_source, .input_mux = &alc880_capture_source,
.unsol_event = alc880_uniwill_p53_unsol_event, .unsol_event = alc880_uniwill_p53_unsol_event,
.init_hook = alc880_uniwill_p53_init_hook, .setup = alc880_uniwill_p53_setup,
.init_hook = alc_automute_amp,
}, },
[ALC880_FUJITSU] = { [ALC880_FUJITSU] = {
.mixers = { alc880_fujitsu_mixer }, .mixers = { alc880_fujitsu_mixer },
...@@ -4200,7 +4198,8 @@ static struct alc_config_preset alc880_presets[] = { ...@@ -4200,7 +4198,8 @@ static struct alc_config_preset alc880_presets[] = {
.channel_mode = alc880_2_jack_modes, .channel_mode = alc880_2_jack_modes,
.input_mux = &alc880_capture_source, .input_mux = &alc880_capture_source,
.unsol_event = alc880_uniwill_p53_unsol_event, .unsol_event = alc880_uniwill_p53_unsol_event,
.init_hook = alc880_uniwill_p53_init_hook, .setup = alc880_uniwill_p53_setup,
.init_hook = alc_automute_amp,
}, },
[ALC880_CLEVO] = { [ALC880_CLEVO] = {
.mixers = { alc880_three_stack_mixer }, .mixers = { alc880_three_stack_mixer },
...@@ -4226,7 +4225,8 @@ static struct alc_config_preset alc880_presets[] = { ...@@ -4226,7 +4225,8 @@ static struct alc_config_preset alc880_presets[] = {
.need_dac_fix = 1, .need_dac_fix = 1,
.input_mux = &alc880_lg_capture_source, .input_mux = &alc880_lg_capture_source,
.unsol_event = alc_automute_amp_unsol_event, .unsol_event = alc_automute_amp_unsol_event,
.init_hook = alc880_lg_init_hook, .setup = alc880_lg_setup,
.init_hook = alc_automute_amp,
#ifdef CONFIG_SND_HDA_POWER_SAVE #ifdef CONFIG_SND_HDA_POWER_SAVE
.loopbacks = alc880_lg_loopbacks, .loopbacks = alc880_lg_loopbacks,
#endif #endif
...@@ -4242,7 +4242,8 @@ static struct alc_config_preset alc880_presets[] = { ...@@ -4242,7 +4242,8 @@ static struct alc_config_preset alc880_presets[] = {
.channel_mode = alc880_lg_lw_modes, .channel_mode = alc880_lg_lw_modes,
.input_mux = &alc880_lg_lw_capture_source, .input_mux = &alc880_lg_lw_capture_source,
.unsol_event = alc_automute_amp_unsol_event, .unsol_event = alc_automute_amp_unsol_event,
.init_hook = alc880_lg_lw_init_hook, .setup = alc880_lg_lw_setup,
.init_hook = alc_automute_amp,
}, },
[ALC880_MEDION_RIM] = { [ALC880_MEDION_RIM] = {
.mixers = { alc880_medion_rim_mixer }, .mixers = { alc880_medion_rim_mixer },
...@@ -4256,7 +4257,8 @@ static struct alc_config_preset alc880_presets[] = { ...@@ -4256,7 +4257,8 @@ static struct alc_config_preset alc880_presets[] = {
.channel_mode = alc880_2_jack_modes, .channel_mode = alc880_2_jack_modes,
.input_mux = &alc880_medion_rim_capture_source, .input_mux = &alc880_medion_rim_capture_source,
.unsol_event = alc880_medion_rim_unsol_event, .unsol_event = alc880_medion_rim_unsol_event,
.init_hook = alc880_medion_rim_init_hook, .setup = alc880_medion_rim_setup,
.init_hook = alc880_medion_rim_automute,
}, },
#ifdef CONFIG_SND_DEBUG #ifdef CONFIG_SND_DEBUG
[ALC880_TEST] = { [ALC880_TEST] = {
...@@ -7451,23 +7453,21 @@ static struct hda_verb alc885_imac24_init_verbs[] = { ...@@ -7451,23 +7453,21 @@ static struct hda_verb alc885_imac24_init_verbs[] = {
}; };
/* Toggle speaker-output according to the hp-jack state */ /* Toggle speaker-output according to the hp-jack state */
static void alc885_imac24_automute_init_hook(struct hda_codec *codec) static void alc885_imac24_setup(struct hda_codec *codec)
{ {
struct alc_spec *spec = codec->spec; struct alc_spec *spec = codec->spec;
spec->autocfg.hp_pins[0] = 0x14; spec->autocfg.hp_pins[0] = 0x14;
spec->autocfg.speaker_pins[0] = 0x18; spec->autocfg.speaker_pins[0] = 0x18;
spec->autocfg.speaker_pins[1] = 0x1a; spec->autocfg.speaker_pins[1] = 0x1a;
alc_automute_amp(codec);
} }
static void alc885_mbp3_init_hook(struct hda_codec *codec) static void alc885_mbp3_setup(struct hda_codec *codec)
{ {
struct alc_spec *spec = codec->spec; struct alc_spec *spec = codec->spec;
spec->autocfg.hp_pins[0] = 0x15; spec->autocfg.hp_pins[0] = 0x15;
spec->autocfg.speaker_pins[0] = 0x14; spec->autocfg.speaker_pins[0] = 0x14;
alc_automute_amp(codec);
} }
...@@ -7495,13 +7495,12 @@ static void alc882_targa_automute(struct hda_codec *codec) ...@@ -7495,13 +7495,12 @@ static void alc882_targa_automute(struct hda_codec *codec)
spec->jack_present ? 1 : 3); spec->jack_present ? 1 : 3);
} }
static void alc882_targa_init_hook(struct hda_codec *codec) static void alc882_targa_setup(struct hda_codec *codec)
{ {
struct alc_spec *spec = codec->spec; struct alc_spec *spec = codec->spec;
spec->autocfg.hp_pins[0] = 0x14; spec->autocfg.hp_pins[0] = 0x14;
spec->autocfg.speaker_pins[0] = 0x1b; spec->autocfg.speaker_pins[0] = 0x1b;
alc882_targa_automute(codec);
} }
static void alc882_targa_unsol_event(struct hda_codec *codec, unsigned int res) static void alc882_targa_unsol_event(struct hda_codec *codec, unsigned int res)
...@@ -7589,7 +7588,7 @@ static void alc885_macpro_init_hook(struct hda_codec *codec) ...@@ -7589,7 +7588,7 @@ static void alc885_macpro_init_hook(struct hda_codec *codec)
static void alc885_imac24_init_hook(struct hda_codec *codec) static void alc885_imac24_init_hook(struct hda_codec *codec)
{ {
alc885_macpro_init_hook(codec); alc885_macpro_init_hook(codec);
alc885_imac24_automute_init_hook(codec); alc_automute_amp(codec);
} }
/* /*
...@@ -8079,14 +8078,13 @@ static struct snd_kcontrol_new alc883_chmode_mixer[] = { ...@@ -8079,14 +8078,13 @@ static struct snd_kcontrol_new alc883_chmode_mixer[] = {
}; };
/* toggle speaker-output according to the hp-jack state */ /* toggle speaker-output according to the hp-jack state */
static void alc883_mitac_init_hook(struct hda_codec *codec) static void alc883_mitac_setup(struct hda_codec *codec)
{ {
struct alc_spec *spec = codec->spec; struct alc_spec *spec = codec->spec;
spec->autocfg.hp_pins[0] = 0x15; spec->autocfg.hp_pins[0] = 0x15;
spec->autocfg.speaker_pins[0] = 0x14; spec->autocfg.speaker_pins[0] = 0x14;
spec->autocfg.speaker_pins[1] = 0x17; spec->autocfg.speaker_pins[1] = 0x17;
alc_automute_amp(codec);
} }
/* auto-toggle front mic */ /* auto-toggle front mic */
...@@ -8241,7 +8239,7 @@ static struct hda_verb alc883_vaiott_verbs[] = { ...@@ -8241,7 +8239,7 @@ static struct hda_verb alc883_vaiott_verbs[] = {
{ } /* end */ { } /* end */
}; };
static void alc888_3st_hp_init_hook(struct hda_codec *codec) static void alc888_3st_hp_setup(struct hda_codec *codec)
{ {
struct alc_spec *spec = codec->spec; struct alc_spec *spec = codec->spec;
...@@ -8249,7 +8247,6 @@ static void alc888_3st_hp_init_hook(struct hda_codec *codec) ...@@ -8249,7 +8247,6 @@ static void alc888_3st_hp_init_hook(struct hda_codec *codec)
spec->autocfg.speaker_pins[0] = 0x14; spec->autocfg.speaker_pins[0] = 0x14;
spec->autocfg.speaker_pins[1] = 0x16; spec->autocfg.speaker_pins[1] = 0x16;
spec->autocfg.speaker_pins[2] = 0x18; spec->autocfg.speaker_pins[2] = 0x18;
alc_automute_amp(codec);
} }
static struct hda_verb alc888_3st_hp_verbs[] = { static struct hda_verb alc888_3st_hp_verbs[] = {
...@@ -8346,13 +8343,12 @@ static struct hda_verb alc883_medion_md2_verbs[] = { ...@@ -8346,13 +8343,12 @@ static struct hda_verb alc883_medion_md2_verbs[] = {
}; };
/* toggle speaker-output according to the hp-jack state */ /* toggle speaker-output according to the hp-jack state */
static void alc883_medion_md2_init_hook(struct hda_codec *codec) static void alc883_medion_md2_setup(struct hda_codec *codec)
{ {
struct alc_spec *spec = codec->spec; struct alc_spec *spec = codec->spec;
spec->autocfg.hp_pins[0] = 0x14; spec->autocfg.hp_pins[0] = 0x14;
spec->autocfg.speaker_pins[0] = 0x15; spec->autocfg.speaker_pins[0] = 0x15;
alc_automute_amp(codec);
} }
/* toggle speaker-output according to the hp-jack state */ /* toggle speaker-output according to the hp-jack state */
...@@ -8369,12 +8365,16 @@ static void alc883_clevo_m720_mic_automute(struct hda_codec *codec) ...@@ -8369,12 +8365,16 @@ static void alc883_clevo_m720_mic_automute(struct hda_codec *codec)
HDA_AMP_MUTE, present ? HDA_AMP_MUTE : 0); HDA_AMP_MUTE, present ? HDA_AMP_MUTE : 0);
} }
static void alc883_clevo_m720_init_hook(struct hda_codec *codec) static void alc883_clevo_m720_setup(struct hda_codec *codec)
{ {
struct alc_spec *spec = codec->spec; struct alc_spec *spec = codec->spec;
spec->autocfg.hp_pins[0] = 0x15; spec->autocfg.hp_pins[0] = 0x15;
spec->autocfg.speaker_pins[0] = 0x14; spec->autocfg.speaker_pins[0] = 0x14;
}
static void alc883_clevo_m720_init_hook(struct hda_codec *codec)
{
alc_automute_amp(codec); alc_automute_amp(codec);
alc883_clevo_m720_mic_automute(codec); alc883_clevo_m720_mic_automute(codec);
} }
...@@ -8393,22 +8393,20 @@ static void alc883_clevo_m720_unsol_event(struct hda_codec *codec, ...@@ -8393,22 +8393,20 @@ static void alc883_clevo_m720_unsol_event(struct hda_codec *codec,
} }
/* toggle speaker-output according to the hp-jack state */ /* toggle speaker-output according to the hp-jack state */
static void alc883_2ch_fujitsu_pi2515_init_hook(struct hda_codec *codec) static void alc883_2ch_fujitsu_pi2515_setup(struct hda_codec *codec)
{ {
struct alc_spec *spec = codec->spec; struct alc_spec *spec = codec->spec;
spec->autocfg.hp_pins[0] = 0x14; spec->autocfg.hp_pins[0] = 0x14;
spec->autocfg.speaker_pins[0] = 0x15; spec->autocfg.speaker_pins[0] = 0x15;
alc_automute_amp(codec);
} }
static void alc883_haier_w66_init_hook(struct hda_codec *codec) static void alc883_haier_w66_setup(struct hda_codec *codec)
{ {
struct alc_spec *spec = codec->spec; struct alc_spec *spec = codec->spec;
spec->autocfg.hp_pins[0] = 0x1b; spec->autocfg.hp_pins[0] = 0x1b;
spec->autocfg.speaker_pins[0] = 0x14; spec->autocfg.speaker_pins[0] = 0x14;
alc_automute_amp(codec);
} }
static void alc883_lenovo_101e_ispeaker_automute(struct hda_codec *codec) static void alc883_lenovo_101e_ispeaker_automute(struct hda_codec *codec)
...@@ -8447,14 +8445,13 @@ static void alc883_lenovo_101e_unsol_event(struct hda_codec *codec, ...@@ -8447,14 +8445,13 @@ static void alc883_lenovo_101e_unsol_event(struct hda_codec *codec,
} }
/* toggle speaker-output according to the hp-jack state */ /* toggle speaker-output according to the hp-jack state */
static void alc883_acer_aspire_init_hook(struct hda_codec *codec) static void alc883_acer_aspire_setup(struct hda_codec *codec)
{ {
struct alc_spec *spec = codec->spec; struct alc_spec *spec = codec->spec;
spec->autocfg.hp_pins[0] = 0x14; spec->autocfg.hp_pins[0] = 0x14;
spec->autocfg.speaker_pins[0] = 0x15; spec->autocfg.speaker_pins[0] = 0x15;
spec->autocfg.speaker_pins[1] = 0x16; spec->autocfg.speaker_pins[1] = 0x16;
alc_automute_amp(codec);
} }
static struct hda_verb alc883_acer_eapd_verbs[] = { static struct hda_verb alc883_acer_eapd_verbs[] = {
...@@ -8475,7 +8472,7 @@ static struct hda_verb alc883_acer_eapd_verbs[] = { ...@@ -8475,7 +8472,7 @@ static struct hda_verb alc883_acer_eapd_verbs[] = {
{ } { }
}; };
static void alc888_6st_dell_init_hook(struct hda_codec *codec) static void alc888_6st_dell_setup(struct hda_codec *codec)
{ {
struct alc_spec *spec = codec->spec; struct alc_spec *spec = codec->spec;
...@@ -8484,10 +8481,9 @@ static void alc888_6st_dell_init_hook(struct hda_codec *codec) ...@@ -8484,10 +8481,9 @@ static void alc888_6st_dell_init_hook(struct hda_codec *codec)
spec->autocfg.speaker_pins[1] = 0x15; spec->autocfg.speaker_pins[1] = 0x15;
spec->autocfg.speaker_pins[2] = 0x16; spec->autocfg.speaker_pins[2] = 0x16;
spec->autocfg.speaker_pins[3] = 0x17; spec->autocfg.speaker_pins[3] = 0x17;
alc_automute_amp(codec);
} }
static void alc888_lenovo_sky_init_hook(struct hda_codec *codec) static void alc888_lenovo_sky_setup(struct hda_codec *codec)
{ {
struct alc_spec *spec = codec->spec; struct alc_spec *spec = codec->spec;
...@@ -8497,17 +8493,15 @@ static void alc888_lenovo_sky_init_hook(struct hda_codec *codec) ...@@ -8497,17 +8493,15 @@ static void alc888_lenovo_sky_init_hook(struct hda_codec *codec)
spec->autocfg.speaker_pins[2] = 0x16; spec->autocfg.speaker_pins[2] = 0x16;
spec->autocfg.speaker_pins[3] = 0x17; spec->autocfg.speaker_pins[3] = 0x17;
spec->autocfg.speaker_pins[4] = 0x1a; spec->autocfg.speaker_pins[4] = 0x1a;
alc_automute_amp(codec);
} }
static void alc883_vaiott_init_hook(struct hda_codec *codec) static void alc883_vaiott_setup(struct hda_codec *codec)
{ {
struct alc_spec *spec = codec->spec; struct alc_spec *spec = codec->spec;
spec->autocfg.hp_pins[0] = 0x15; spec->autocfg.hp_pins[0] = 0x15;
spec->autocfg.speaker_pins[0] = 0x14; spec->autocfg.speaker_pins[0] = 0x14;
spec->autocfg.speaker_pins[1] = 0x17; spec->autocfg.speaker_pins[1] = 0x17;
alc_automute_amp(codec);
} }
static struct hda_verb alc888_asus_m90v_verbs[] = { static struct hda_verb alc888_asus_m90v_verbs[] = {
...@@ -8520,19 +8514,7 @@ static struct hda_verb alc888_asus_m90v_verbs[] = { ...@@ -8520,19 +8514,7 @@ static struct hda_verb alc888_asus_m90v_verbs[] = {
{ } /* end */ { } /* end */
}; };
static void alc883_nb_mic_automute(struct hda_codec *codec) static void alc883_mode2_setup(struct hda_codec *codec)
{
unsigned int present;
present = snd_hda_codec_read(codec, 0x18, 0,
AC_VERB_GET_PIN_SENSE, 0) & 0x80000000;
snd_hda_codec_write(codec, 0x23, 0, AC_VERB_SET_AMP_GAIN_MUTE,
0x7000 | (0x00 << 8) | (present ? 0 : 0x80));
snd_hda_codec_write(codec, 0x23, 0, AC_VERB_SET_AMP_GAIN_MUTE,
0x7000 | (0x01 << 8) | (present ? 0x80 : 0));
}
static void alc883_M90V_init_hook(struct hda_codec *codec)
{ {
struct alc_spec *spec = codec->spec; struct alc_spec *spec = codec->spec;
...@@ -8540,26 +8522,11 @@ static void alc883_M90V_init_hook(struct hda_codec *codec) ...@@ -8540,26 +8522,11 @@ static void alc883_M90V_init_hook(struct hda_codec *codec)
spec->autocfg.speaker_pins[0] = 0x14; spec->autocfg.speaker_pins[0] = 0x14;
spec->autocfg.speaker_pins[1] = 0x15; spec->autocfg.speaker_pins[1] = 0x15;
spec->autocfg.speaker_pins[2] = 0x16; spec->autocfg.speaker_pins[2] = 0x16;
alc_automute_pin(codec); spec->ext_mic.pin = 0x18;
} spec->int_mic.pin = 0x19;
spec->ext_mic.mux_idx = 0;
static void alc883_mode2_unsol_event(struct hda_codec *codec, spec->int_mic.mux_idx = 1;
unsigned int res) spec->auto_mic = 1;
{
switch (res >> 26) {
case ALC880_MIC_EVENT:
alc883_nb_mic_automute(codec);
break;
default:
alc_sku_unsol_event(codec, res);
break;
}
}
static void alc883_mode2_inithook(struct hda_codec *codec)
{
alc883_M90V_init_hook(codec);
alc883_nb_mic_automute(codec);
} }
static struct hda_verb alc888_asus_eee1601_verbs[] = { static struct hda_verb alc888_asus_eee1601_verbs[] = {
...@@ -8890,7 +8857,8 @@ static struct alc_config_preset alc882_presets[] = { ...@@ -8890,7 +8857,8 @@ static struct alc_config_preset alc882_presets[] = {
.dig_out_nid = ALC882_DIGOUT_NID, .dig_out_nid = ALC882_DIGOUT_NID,
.dig_in_nid = ALC882_DIGIN_NID, .dig_in_nid = ALC882_DIGIN_NID,
.unsol_event = alc_automute_amp_unsol_event, .unsol_event = alc_automute_amp_unsol_event,
.init_hook = alc885_mbp3_init_hook, .setup = alc885_mbp3_setup,
.init_hook = alc_automute_amp,
}, },
[ALC885_MB5] = { [ALC885_MB5] = {
.mixers = { alc885_mb5_mixer, alc882_chmode_mixer }, .mixers = { alc885_mb5_mixer, alc882_chmode_mixer },
...@@ -8927,6 +8895,7 @@ static struct alc_config_preset alc882_presets[] = { ...@@ -8927,6 +8895,7 @@ static struct alc_config_preset alc882_presets[] = {
.channel_mode = alc882_ch_modes, .channel_mode = alc882_ch_modes,
.input_mux = &alc882_capture_source, .input_mux = &alc882_capture_source,
.unsol_event = alc_automute_amp_unsol_event, .unsol_event = alc_automute_amp_unsol_event,
.setup = alc885_imac24_setup,
.init_hook = alc885_imac24_init_hook, .init_hook = alc885_imac24_init_hook,
}, },
[ALC882_TARGA] = { [ALC882_TARGA] = {
...@@ -8944,7 +8913,8 @@ static struct alc_config_preset alc882_presets[] = { ...@@ -8944,7 +8913,8 @@ static struct alc_config_preset alc882_presets[] = {
.need_dac_fix = 1, .need_dac_fix = 1,
.input_mux = &alc882_capture_source, .input_mux = &alc882_capture_source,
.unsol_event = alc882_targa_unsol_event, .unsol_event = alc882_targa_unsol_event,
.init_hook = alc882_targa_init_hook, .setup = alc882_targa_setup,
.init_hook = alc882_targa_automute,
}, },
[ALC882_ASUS_A7J] = { [ALC882_ASUS_A7J] = {
.mixers = { alc882_asus_a7j_mixer, alc882_chmode_mixer }, .mixers = { alc882_asus_a7j_mixer, alc882_chmode_mixer },
...@@ -9035,7 +9005,8 @@ static struct alc_config_preset alc882_presets[] = { ...@@ -9035,7 +9005,8 @@ static struct alc_config_preset alc882_presets[] = {
.channel_mode = alc889_8ch_intel_modes, .channel_mode = alc889_8ch_intel_modes,
.capsrc_nids = alc889_capsrc_nids, .capsrc_nids = alc889_capsrc_nids,
.input_mux = &alc889_capture_source, .input_mux = &alc889_capture_source,
.init_hook = alc889_automute_init, .setup = alc889_automute_setup,
.init_hook = alc_automute_amp,
.unsol_event = alc_automute_amp_unsol_event, .unsol_event = alc_automute_amp_unsol_event,
.need_dac_fix = 1, .need_dac_fix = 1,
}, },
...@@ -9054,6 +9025,7 @@ static struct alc_config_preset alc882_presets[] = { ...@@ -9054,6 +9025,7 @@ static struct alc_config_preset alc882_presets[] = {
.channel_mode = alc889_8ch_intel_modes, .channel_mode = alc889_8ch_intel_modes,
.capsrc_nids = alc889_capsrc_nids, .capsrc_nids = alc889_capsrc_nids,
.input_mux = &alc889_capture_source, .input_mux = &alc889_capture_source,
.setup = alc889_automute_setup,
.init_hook = alc889_intel_init_hook, .init_hook = alc889_intel_init_hook,
.unsol_event = alc_automute_amp_unsol_event, .unsol_event = alc_automute_amp_unsol_event,
.need_dac_fix = 1, .need_dac_fix = 1,
...@@ -9081,7 +9053,8 @@ static struct alc_config_preset alc882_presets[] = { ...@@ -9081,7 +9053,8 @@ static struct alc_config_preset alc882_presets[] = {
.need_dac_fix = 1, .need_dac_fix = 1,
.input_mux = &alc883_capture_source, .input_mux = &alc883_capture_source,
.unsol_event = alc883_targa_unsol_event, .unsol_event = alc883_targa_unsol_event,
.init_hook = alc883_targa_init_hook, .setup = alc882_targa_setup,
.init_hook = alc882_targa_automute,
}, },
[ALC883_TARGA_2ch_DIG] = { [ALC883_TARGA_2ch_DIG] = {
.mixers = { alc883_targa_2ch_mixer}, .mixers = { alc883_targa_2ch_mixer},
...@@ -9096,7 +9069,8 @@ static struct alc_config_preset alc882_presets[] = { ...@@ -9096,7 +9069,8 @@ static struct alc_config_preset alc882_presets[] = {
.channel_mode = alc883_3ST_2ch_modes, .channel_mode = alc883_3ST_2ch_modes,
.input_mux = &alc883_capture_source, .input_mux = &alc883_capture_source,
.unsol_event = alc883_targa_unsol_event, .unsol_event = alc883_targa_unsol_event,
.init_hook = alc883_targa_init_hook, .setup = alc882_targa_setup,
.init_hook = alc882_targa_automute,
}, },
[ALC883_TARGA_8ch_DIG] = { [ALC883_TARGA_8ch_DIG] = {
.mixers = { alc883_base_mixer, alc883_chmode_mixer }, .mixers = { alc883_base_mixer, alc883_chmode_mixer },
...@@ -9114,7 +9088,8 @@ static struct alc_config_preset alc882_presets[] = { ...@@ -9114,7 +9088,8 @@ static struct alc_config_preset alc882_presets[] = {
.need_dac_fix = 1, .need_dac_fix = 1,
.input_mux = &alc883_capture_source, .input_mux = &alc883_capture_source,
.unsol_event = alc883_targa_unsol_event, .unsol_event = alc883_targa_unsol_event,
.init_hook = alc883_targa_init_hook, .setup = alc882_targa_setup,
.init_hook = alc882_targa_automute,
}, },
[ALC883_ACER] = { [ALC883_ACER] = {
.mixers = { alc883_base_mixer }, .mixers = { alc883_base_mixer },
...@@ -9140,7 +9115,8 @@ static struct alc_config_preset alc882_presets[] = { ...@@ -9140,7 +9115,8 @@ static struct alc_config_preset alc882_presets[] = {
.channel_mode = alc883_3ST_2ch_modes, .channel_mode = alc883_3ST_2ch_modes,
.input_mux = &alc883_capture_source, .input_mux = &alc883_capture_source,
.unsol_event = alc_automute_amp_unsol_event, .unsol_event = alc_automute_amp_unsol_event,
.init_hook = alc883_acer_aspire_init_hook, .setup = alc883_acer_aspire_setup,
.init_hook = alc_automute_amp,
}, },
[ALC888_ACER_ASPIRE_4930G] = { [ALC888_ACER_ASPIRE_4930G] = {
.mixers = { alc888_base_mixer, .mixers = { alc888_base_mixer,
...@@ -9160,7 +9136,8 @@ static struct alc_config_preset alc882_presets[] = { ...@@ -9160,7 +9136,8 @@ static struct alc_config_preset alc882_presets[] = {
ARRAY_SIZE(alc888_2_capture_sources), ARRAY_SIZE(alc888_2_capture_sources),
.input_mux = alc888_2_capture_sources, .input_mux = alc888_2_capture_sources,
.unsol_event = alc_automute_amp_unsol_event, .unsol_event = alc_automute_amp_unsol_event,
.init_hook = alc888_acer_aspire_4930g_init_hook, .setup = alc888_acer_aspire_4930g_setup,
.init_hook = alc_automute_amp,
}, },
[ALC888_ACER_ASPIRE_6530G] = { [ALC888_ACER_ASPIRE_6530G] = {
.mixers = { alc888_acer_aspire_6530_mixer }, .mixers = { alc888_acer_aspire_6530_mixer },
...@@ -9178,7 +9155,8 @@ static struct alc_config_preset alc882_presets[] = { ...@@ -9178,7 +9155,8 @@ static struct alc_config_preset alc882_presets[] = {
ARRAY_SIZE(alc888_2_capture_sources), ARRAY_SIZE(alc888_2_capture_sources),
.input_mux = alc888_acer_aspire_6530_sources, .input_mux = alc888_acer_aspire_6530_sources,
.unsol_event = alc_automute_amp_unsol_event, .unsol_event = alc_automute_amp_unsol_event,
.init_hook = alc888_acer_aspire_6530g_init_hook, .setup = alc888_acer_aspire_6530g_setup,
.init_hook = alc_automute_amp,
}, },
[ALC888_ACER_ASPIRE_8930G] = { [ALC888_ACER_ASPIRE_8930G] = {
.mixers = { alc888_base_mixer, .mixers = { alc888_base_mixer,
...@@ -9199,7 +9177,8 @@ static struct alc_config_preset alc882_presets[] = { ...@@ -9199,7 +9177,8 @@ static struct alc_config_preset alc882_presets[] = {
ARRAY_SIZE(alc889_capture_sources), ARRAY_SIZE(alc889_capture_sources),
.input_mux = alc889_capture_sources, .input_mux = alc889_capture_sources,
.unsol_event = alc_automute_amp_unsol_event, .unsol_event = alc_automute_amp_unsol_event,
.init_hook = alc889_acer_aspire_8930g_init_hook, .setup = alc889_acer_aspire_8930g_setup,
.init_hook = alc_automute_amp,
}, },
[ALC883_MEDION] = { [ALC883_MEDION] = {
.mixers = { alc883_fivestack_mixer, .mixers = { alc883_fivestack_mixer,
...@@ -9224,7 +9203,8 @@ static struct alc_config_preset alc882_presets[] = { ...@@ -9224,7 +9203,8 @@ static struct alc_config_preset alc882_presets[] = {
.channel_mode = alc883_3ST_2ch_modes, .channel_mode = alc883_3ST_2ch_modes,
.input_mux = &alc883_capture_source, .input_mux = &alc883_capture_source,
.unsol_event = alc_automute_amp_unsol_event, .unsol_event = alc_automute_amp_unsol_event,
.init_hook = alc883_medion_md2_init_hook, .setup = alc883_medion_md2_setup,
.init_hook = alc_automute_amp,
}, },
[ALC883_LAPTOP_EAPD] = { [ALC883_LAPTOP_EAPD] = {
.mixers = { alc883_base_mixer }, .mixers = { alc883_base_mixer },
...@@ -9245,6 +9225,7 @@ static struct alc_config_preset alc882_presets[] = { ...@@ -9245,6 +9225,7 @@ static struct alc_config_preset alc882_presets[] = {
.channel_mode = alc883_3ST_2ch_modes, .channel_mode = alc883_3ST_2ch_modes,
.input_mux = &alc883_capture_source, .input_mux = &alc883_capture_source,
.unsol_event = alc883_clevo_m720_unsol_event, .unsol_event = alc883_clevo_m720_unsol_event,
.setup = alc883_clevo_m720_setup,
.init_hook = alc883_clevo_m720_init_hook, .init_hook = alc883_clevo_m720_init_hook,
}, },
[ALC883_LENOVO_101E_2ch] = { [ALC883_LENOVO_101E_2ch] = {
...@@ -9270,7 +9251,8 @@ static struct alc_config_preset alc882_presets[] = { ...@@ -9270,7 +9251,8 @@ static struct alc_config_preset alc882_presets[] = {
.need_dac_fix = 1, .need_dac_fix = 1,
.input_mux = &alc883_lenovo_nb0763_capture_source, .input_mux = &alc883_lenovo_nb0763_capture_source,
.unsol_event = alc_automute_amp_unsol_event, .unsol_event = alc_automute_amp_unsol_event,
.init_hook = alc883_medion_md2_init_hook, .setup = alc883_medion_md2_setup,
.init_hook = alc_automute_amp,
}, },
[ALC888_LENOVO_MS7195_DIG] = { [ALC888_LENOVO_MS7195_DIG] = {
.mixers = { alc883_3ST_6ch_mixer, alc883_chmode_mixer }, .mixers = { alc883_3ST_6ch_mixer, alc883_chmode_mixer },
...@@ -9295,7 +9277,8 @@ static struct alc_config_preset alc882_presets[] = { ...@@ -9295,7 +9277,8 @@ static struct alc_config_preset alc882_presets[] = {
.channel_mode = alc883_3ST_2ch_modes, .channel_mode = alc883_3ST_2ch_modes,
.input_mux = &alc883_capture_source, .input_mux = &alc883_capture_source,
.unsol_event = alc_automute_amp_unsol_event, .unsol_event = alc_automute_amp_unsol_event,
.init_hook = alc883_haier_w66_init_hook, .setup = alc883_haier_w66_setup,
.init_hook = alc_automute_amp,
}, },
[ALC888_3ST_HP] = { [ALC888_3ST_HP] = {
.mixers = { alc883_3ST_6ch_mixer, alc883_chmode_mixer }, .mixers = { alc883_3ST_6ch_mixer, alc883_chmode_mixer },
...@@ -9307,7 +9290,8 @@ static struct alc_config_preset alc882_presets[] = { ...@@ -9307,7 +9290,8 @@ static struct alc_config_preset alc882_presets[] = {
.need_dac_fix = 1, .need_dac_fix = 1,
.input_mux = &alc883_capture_source, .input_mux = &alc883_capture_source,
.unsol_event = alc_automute_amp_unsol_event, .unsol_event = alc_automute_amp_unsol_event,
.init_hook = alc888_3st_hp_init_hook, .setup = alc888_3st_hp_setup,
.init_hook = alc_automute_amp,
}, },
[ALC888_6ST_DELL] = { [ALC888_6ST_DELL] = {
.mixers = { alc883_base_mixer, alc883_chmode_mixer }, .mixers = { alc883_base_mixer, alc883_chmode_mixer },
...@@ -9320,7 +9304,8 @@ static struct alc_config_preset alc882_presets[] = { ...@@ -9320,7 +9304,8 @@ static struct alc_config_preset alc882_presets[] = {
.channel_mode = alc883_sixstack_modes, .channel_mode = alc883_sixstack_modes,
.input_mux = &alc883_capture_source, .input_mux = &alc883_capture_source,
.unsol_event = alc_automute_amp_unsol_event, .unsol_event = alc_automute_amp_unsol_event,
.init_hook = alc888_6st_dell_init_hook, .setup = alc888_6st_dell_setup,
.init_hook = alc_automute_amp,
}, },
[ALC883_MITAC] = { [ALC883_MITAC] = {
.mixers = { alc883_mitac_mixer }, .mixers = { alc883_mitac_mixer },
...@@ -9331,7 +9316,8 @@ static struct alc_config_preset alc882_presets[] = { ...@@ -9331,7 +9316,8 @@ static struct alc_config_preset alc882_presets[] = {
.channel_mode = alc883_3ST_2ch_modes, .channel_mode = alc883_3ST_2ch_modes,
.input_mux = &alc883_capture_source, .input_mux = &alc883_capture_source,
.unsol_event = alc_automute_amp_unsol_event, .unsol_event = alc_automute_amp_unsol_event,
.init_hook = alc883_mitac_init_hook, .setup = alc883_mitac_setup,
.init_hook = alc_automute_amp,
}, },
[ALC883_FUJITSU_PI2515] = { [ALC883_FUJITSU_PI2515] = {
.mixers = { alc883_2ch_fujitsu_pi2515_mixer }, .mixers = { alc883_2ch_fujitsu_pi2515_mixer },
...@@ -9344,7 +9330,8 @@ static struct alc_config_preset alc882_presets[] = { ...@@ -9344,7 +9330,8 @@ static struct alc_config_preset alc882_presets[] = {
.channel_mode = alc883_3ST_2ch_modes, .channel_mode = alc883_3ST_2ch_modes,
.input_mux = &alc883_fujitsu_pi2515_capture_source, .input_mux = &alc883_fujitsu_pi2515_capture_source,
.unsol_event = alc_automute_amp_unsol_event, .unsol_event = alc_automute_amp_unsol_event,
.init_hook = alc883_2ch_fujitsu_pi2515_init_hook, .setup = alc883_2ch_fujitsu_pi2515_setup,
.init_hook = alc_automute_amp,
}, },
[ALC888_FUJITSU_XA3530] = { [ALC888_FUJITSU_XA3530] = {
.mixers = { alc888_base_mixer, alc883_chmode_mixer }, .mixers = { alc888_base_mixer, alc883_chmode_mixer },
...@@ -9362,7 +9349,8 @@ static struct alc_config_preset alc882_presets[] = { ...@@ -9362,7 +9349,8 @@ static struct alc_config_preset alc882_presets[] = {
ARRAY_SIZE(alc888_2_capture_sources), ARRAY_SIZE(alc888_2_capture_sources),
.input_mux = alc888_2_capture_sources, .input_mux = alc888_2_capture_sources,
.unsol_event = alc_automute_amp_unsol_event, .unsol_event = alc_automute_amp_unsol_event,
.init_hook = alc888_fujitsu_xa3530_init_hook, .setup = alc888_fujitsu_xa3530_setup,
.init_hook = alc_automute_amp,
}, },
[ALC888_LENOVO_SKY] = { [ALC888_LENOVO_SKY] = {
.mixers = { alc888_lenovo_sky_mixer, alc883_chmode_mixer }, .mixers = { alc888_lenovo_sky_mixer, alc883_chmode_mixer },
...@@ -9375,7 +9363,8 @@ static struct alc_config_preset alc882_presets[] = { ...@@ -9375,7 +9363,8 @@ static struct alc_config_preset alc882_presets[] = {
.need_dac_fix = 1, .need_dac_fix = 1,
.input_mux = &alc883_lenovo_sky_capture_source, .input_mux = &alc883_lenovo_sky_capture_source,
.unsol_event = alc_automute_amp_unsol_event, .unsol_event = alc_automute_amp_unsol_event,
.init_hook = alc888_lenovo_sky_init_hook, .setup = alc888_lenovo_sky_setup,
.init_hook = alc_automute_amp,
}, },
[ALC888_ASUS_M90V] = { [ALC888_ASUS_M90V] = {
.mixers = { alc883_3ST_6ch_mixer, alc883_chmode_mixer }, .mixers = { alc883_3ST_6ch_mixer, alc883_chmode_mixer },
...@@ -9388,8 +9377,9 @@ static struct alc_config_preset alc882_presets[] = { ...@@ -9388,8 +9377,9 @@ static struct alc_config_preset alc882_presets[] = {
.channel_mode = alc883_3ST_6ch_modes, .channel_mode = alc883_3ST_6ch_modes,
.need_dac_fix = 1, .need_dac_fix = 1,
.input_mux = &alc883_fujitsu_pi2515_capture_source, .input_mux = &alc883_fujitsu_pi2515_capture_source,
.unsol_event = alc883_mode2_unsol_event, .unsol_event = alc_sku_unsol_event,
.init_hook = alc883_mode2_inithook, .setup = alc883_mode2_setup,
.init_hook = alc_inithook,
}, },
[ALC888_ASUS_EEE1601] = { [ALC888_ASUS_EEE1601] = {
.mixers = { alc883_asus_eee1601_mixer }, .mixers = { alc883_asus_eee1601_mixer },
...@@ -9442,7 +9432,8 @@ static struct alc_config_preset alc882_presets[] = { ...@@ -9442,7 +9432,8 @@ static struct alc_config_preset alc882_presets[] = {
.channel_mode = alc883_3ST_2ch_modes, .channel_mode = alc883_3ST_2ch_modes,
.input_mux = &alc883_capture_source, .input_mux = &alc883_capture_source,
.unsol_event = alc_automute_amp_unsol_event, .unsol_event = alc_automute_amp_unsol_event,
.init_hook = alc883_vaiott_init_hook, .setup = alc883_vaiott_setup,
.init_hook = alc_automute_amp,
}, },
}; };
...@@ -9954,13 +9945,12 @@ static struct snd_kcontrol_new alc262_HP_BPC_WildWest_option_mixer[] = { ...@@ -9954,13 +9945,12 @@ static struct snd_kcontrol_new alc262_HP_BPC_WildWest_option_mixer[] = {
}; };
/* mute/unmute internal speaker according to the hp jack and mute state */ /* mute/unmute internal speaker according to the hp jack and mute state */
static void alc262_hp_t5735_init_hook(struct hda_codec *codec) static void alc262_hp_t5735_setup(struct hda_codec *codec)
{ {
struct alc_spec *spec = codec->spec; struct alc_spec *spec = codec->spec;
spec->autocfg.hp_pins[0] = 0x15; spec->autocfg.hp_pins[0] = 0x15;
spec->autocfg.speaker_pins[0] = 0x0c; /* HACK: not actually a pin */ spec->autocfg.speaker_pins[0] = 0x0c; /* HACK: not actually a pin */
alc_automute_amp(codec);
} }
static struct snd_kcontrol_new alc262_hp_t5735_mixer[] = { static struct snd_kcontrol_new alc262_hp_t5735_mixer[] = {
...@@ -10117,22 +10107,20 @@ static void alc262_hippo_unsol_event(struct hda_codec *codec, unsigned int res) ...@@ -10117,22 +10107,20 @@ static void alc262_hippo_unsol_event(struct hda_codec *codec, unsigned int res)
alc262_hippo_automute(codec); alc262_hippo_automute(codec);
} }
static void alc262_hippo_init_hook(struct hda_codec *codec) static void alc262_hippo_setup(struct hda_codec *codec)
{ {
struct alc_spec *spec = codec->spec; struct alc_spec *spec = codec->spec;
spec->autocfg.hp_pins[0] = 0x15; spec->autocfg.hp_pins[0] = 0x15;
spec->autocfg.speaker_pins[0] = 0x14; spec->autocfg.speaker_pins[0] = 0x14;
alc262_hippo_automute(codec);
} }
static void alc262_hippo1_init_hook(struct hda_codec *codec) static void alc262_hippo1_setup(struct hda_codec *codec)
{ {
struct alc_spec *spec = codec->spec; struct alc_spec *spec = codec->spec;
spec->autocfg.hp_pins[0] = 0x1b; spec->autocfg.hp_pins[0] = 0x1b;
spec->autocfg.speaker_pins[0] = 0x14; spec->autocfg.speaker_pins[0] = 0x14;
alc262_hippo_automute(codec);
} }
...@@ -10189,13 +10177,12 @@ static struct hda_verb alc262_tyan_verbs[] = { ...@@ -10189,13 +10177,12 @@ static struct hda_verb alc262_tyan_verbs[] = {
}; };
/* unsolicited event for HP jack sensing */ /* unsolicited event for HP jack sensing */
static void alc262_tyan_init_hook(struct hda_codec *codec) static void alc262_tyan_setup(struct hda_codec *codec)
{ {
struct alc_spec *spec = codec->spec; struct alc_spec *spec = codec->spec;
spec->autocfg.hp_pins[0] = 0x1b; spec->autocfg.hp_pins[0] = 0x1b;
spec->autocfg.speaker_pins[0] = 0x15; spec->autocfg.speaker_pins[0] = 0x15;
alc_automute_amp(codec);
} }
...@@ -10307,14 +10294,6 @@ static struct hda_verb alc262_sony_unsol_verbs[] = { ...@@ -10307,14 +10294,6 @@ static struct hda_verb alc262_sony_unsol_verbs[] = {
{} {}
}; };
static struct hda_input_mux alc262_dmic_capture_source = {
.num_items = 2,
.items = {
{ "Int DMic", 0x9 },
{ "Mic", 0x0 },
},
};
static struct snd_kcontrol_new alc262_toshiba_s06_mixer[] = { static struct snd_kcontrol_new alc262_toshiba_s06_mixer[] = {
HDA_CODEC_VOLUME("Speaker Playback Volume", 0x0c, 0x0, HDA_OUTPUT), HDA_CODEC_VOLUME("Speaker Playback Volume", 0x0c, 0x0, HDA_OUTPUT),
HDA_CODEC_MUTE("Speaker Playback Switch", 0x14, 0x0, HDA_OUTPUT), HDA_CODEC_MUTE("Speaker Playback Switch", 0x14, 0x0, HDA_OUTPUT),
...@@ -10336,35 +10315,17 @@ static struct hda_verb alc262_toshiba_s06_verbs[] = { ...@@ -10336,35 +10315,17 @@ static struct hda_verb alc262_toshiba_s06_verbs[] = {
{} {}
}; };
static void alc262_dmic_automute(struct hda_codec *codec) static void alc262_toshiba_s06_setup(struct hda_codec *codec)
{
unsigned int present;
present = snd_hda_codec_read(codec, 0x18, 0,
AC_VERB_GET_PIN_SENSE, 0) & 0x80000000;
snd_hda_codec_write(codec, 0x22, 0,
AC_VERB_SET_CONNECT_SEL, present ? 0x0 : 0x09);
}
/* unsolicited event for HP jack sensing */
static void alc262_toshiba_s06_unsol_event(struct hda_codec *codec,
unsigned int res)
{
if ((res >> 26) == ALC880_MIC_EVENT)
alc262_dmic_automute(codec);
else
alc_sku_unsol_event(codec, res);
}
static void alc262_toshiba_s06_init_hook(struct hda_codec *codec)
{ {
struct alc_spec *spec = codec->spec; struct alc_spec *spec = codec->spec;
spec->autocfg.hp_pins[0] = 0x15; spec->autocfg.hp_pins[0] = 0x15;
spec->autocfg.speaker_pins[0] = 0x14; spec->autocfg.speaker_pins[0] = 0x14;
alc_automute_pin(codec); spec->ext_mic.pin = 0x18;
alc262_dmic_automute(codec); spec->ext_mic.mux_idx = 0;
spec->int_mic.pin = 0x12;
spec->int_mic.mux_idx = 9;
spec->auto_mic = 1;
} }
/* /*
...@@ -11337,7 +11298,8 @@ static struct alc_config_preset alc262_presets[] = { ...@@ -11337,7 +11298,8 @@ static struct alc_config_preset alc262_presets[] = {
.channel_mode = alc262_modes, .channel_mode = alc262_modes,
.input_mux = &alc262_capture_source, .input_mux = &alc262_capture_source,
.unsol_event = alc262_hippo_unsol_event, .unsol_event = alc262_hippo_unsol_event,
.init_hook = alc262_hippo_init_hook, .setup = alc262_hippo_setup,
.init_hook = alc262_hippo_automute,
}, },
[ALC262_HIPPO_1] = { [ALC262_HIPPO_1] = {
.mixers = { alc262_hippo1_mixer }, .mixers = { alc262_hippo1_mixer },
...@@ -11350,7 +11312,8 @@ static struct alc_config_preset alc262_presets[] = { ...@@ -11350,7 +11312,8 @@ static struct alc_config_preset alc262_presets[] = {
.channel_mode = alc262_modes, .channel_mode = alc262_modes,
.input_mux = &alc262_capture_source, .input_mux = &alc262_capture_source,
.unsol_event = alc262_hippo_unsol_event, .unsol_event = alc262_hippo_unsol_event,
.init_hook = alc262_hippo1_init_hook, .setup = alc262_hippo1_setup,
.init_hook = alc262_hippo_automute,
}, },
[ALC262_FUJITSU] = { [ALC262_FUJITSU] = {
.mixers = { alc262_fujitsu_mixer }, .mixers = { alc262_fujitsu_mixer },
...@@ -11413,7 +11376,8 @@ static struct alc_config_preset alc262_presets[] = { ...@@ -11413,7 +11376,8 @@ static struct alc_config_preset alc262_presets[] = {
.channel_mode = alc262_modes, .channel_mode = alc262_modes,
.input_mux = &alc262_capture_source, .input_mux = &alc262_capture_source,
.unsol_event = alc_automute_amp_unsol_event, .unsol_event = alc_automute_amp_unsol_event,
.init_hook = alc262_hp_t5735_init_hook, .setup = alc262_hp_t5735_setup,
.init_hook = alc_automute_amp,
}, },
[ALC262_HP_RP5700] = { [ALC262_HP_RP5700] = {
.mixers = { alc262_hp_rp5700_mixer }, .mixers = { alc262_hp_rp5700_mixer },
...@@ -11444,7 +11408,8 @@ static struct alc_config_preset alc262_presets[] = { ...@@ -11444,7 +11408,8 @@ static struct alc_config_preset alc262_presets[] = {
.channel_mode = alc262_modes, .channel_mode = alc262_modes,
.input_mux = &alc262_capture_source, .input_mux = &alc262_capture_source,
.unsol_event = alc262_hippo_unsol_event, .unsol_event = alc262_hippo_unsol_event,
.init_hook = alc262_hippo_init_hook, .setup = alc262_hippo_setup,
.init_hook = alc262_hippo_automute,
}, },
[ALC262_BENQ_T31] = { [ALC262_BENQ_T31] = {
.mixers = { alc262_benq_t31_mixer }, .mixers = { alc262_benq_t31_mixer },
...@@ -11457,7 +11422,8 @@ static struct alc_config_preset alc262_presets[] = { ...@@ -11457,7 +11422,8 @@ static struct alc_config_preset alc262_presets[] = {
.channel_mode = alc262_modes, .channel_mode = alc262_modes,
.input_mux = &alc262_capture_source, .input_mux = &alc262_capture_source,
.unsol_event = alc262_hippo_unsol_event, .unsol_event = alc262_hippo_unsol_event,
.init_hook = alc262_hippo_init_hook, .setup = alc262_hippo_setup,
.init_hook = alc262_hippo_automute,
}, },
[ALC262_ULTRA] = { [ALC262_ULTRA] = {
.mixers = { alc262_ultra_mixer }, .mixers = { alc262_ultra_mixer },
...@@ -11509,9 +11475,9 @@ static struct alc_config_preset alc262_presets[] = { ...@@ -11509,9 +11475,9 @@ static struct alc_config_preset alc262_presets[] = {
.dig_out_nid = ALC262_DIGOUT_NID, .dig_out_nid = ALC262_DIGOUT_NID,
.num_channel_mode = ARRAY_SIZE(alc262_modes), .num_channel_mode = ARRAY_SIZE(alc262_modes),
.channel_mode = alc262_modes, .channel_mode = alc262_modes,
.input_mux = &alc262_dmic_capture_source, .unsol_event = alc_sku_unsol_event,
.unsol_event = alc262_toshiba_s06_unsol_event, .setup = alc262_toshiba_s06_setup,
.init_hook = alc262_toshiba_s06_init_hook, .init_hook = alc_inithook,
}, },
[ALC262_TOSHIBA_RX1] = { [ALC262_TOSHIBA_RX1] = {
.mixers = { alc262_toshiba_rx1_mixer }, .mixers = { alc262_toshiba_rx1_mixer },
...@@ -11523,7 +11489,8 @@ static struct alc_config_preset alc262_presets[] = { ...@@ -11523,7 +11489,8 @@ static struct alc_config_preset alc262_presets[] = {
.channel_mode = alc262_modes, .channel_mode = alc262_modes,
.input_mux = &alc262_capture_source, .input_mux = &alc262_capture_source,
.unsol_event = alc262_hippo_unsol_event, .unsol_event = alc262_hippo_unsol_event,
.init_hook = alc262_hippo_init_hook, .setup = alc262_hippo_setup,
.init_hook = alc262_hippo_automute,
}, },
[ALC262_TYAN] = { [ALC262_TYAN] = {
.mixers = { alc262_tyan_mixer }, .mixers = { alc262_tyan_mixer },
...@@ -11536,7 +11503,8 @@ static struct alc_config_preset alc262_presets[] = { ...@@ -11536,7 +11503,8 @@ static struct alc_config_preset alc262_presets[] = {
.channel_mode = alc262_modes, .channel_mode = alc262_modes,
.input_mux = &alc262_capture_source, .input_mux = &alc262_capture_source,
.unsol_event = alc_automute_amp_unsol_event, .unsol_event = alc_automute_amp_unsol_event,
.init_hook = alc262_tyan_init_hook, .setup = alc262_tyan_setup,
.init_hook = alc_automute_amp,
}, },
}; };
...@@ -11732,14 +11700,6 @@ static struct hda_verb alc268_toshiba_verbs[] = { ...@@ -11732,14 +11700,6 @@ static struct hda_verb alc268_toshiba_verbs[] = {
{ } /* end */ { } /* end */
}; };
static struct hda_input_mux alc268_acer_lc_capture_source = {
.num_items = 2,
.items = {
{ "i-Mic", 0x6 },
{ "E-Mic", 0x0 },
},
};
/* Acer specific */ /* Acer specific */
/* bind volumes of both NID 0x02 and 0x03 */ /* bind volumes of both NID 0x02 and 0x03 */
static struct hda_bind_ctls alc268_acer_bind_master_vol = { static struct hda_bind_ctls alc268_acer_bind_master_vol = {
...@@ -11858,7 +11818,8 @@ static struct hda_verb alc268_acer_verbs[] = { ...@@ -11858,7 +11818,8 @@ static struct hda_verb alc268_acer_verbs[] = {
/* unsolicited event for HP jack sensing */ /* unsolicited event for HP jack sensing */
#define alc268_toshiba_unsol_event alc262_hippo_unsol_event #define alc268_toshiba_unsol_event alc262_hippo_unsol_event
#define alc268_toshiba_init_hook alc262_hippo_init_hook #define alc268_toshiba_setup alc262_hippo_setup
#define alc268_toshiba_automute alc262_hippo_automute
static void alc268_acer_unsol_event(struct hda_codec *codec, static void alc268_acer_unsol_event(struct hda_codec *codec,
unsigned int res) unsigned int res)
...@@ -11888,30 +11849,33 @@ static void alc268_aspire_one_speaker_automute(struct hda_codec *codec) ...@@ -11888,30 +11849,33 @@ static void alc268_aspire_one_speaker_automute(struct hda_codec *codec)
AMP_IN_MUTE(0), bits); AMP_IN_MUTE(0), bits);
} }
static void alc268_acer_mic_automute(struct hda_codec *codec)
{
unsigned int present;
present = snd_hda_codec_read(codec, 0x18, 0,
AC_VERB_GET_PIN_SENSE, 0) & 0x80000000;
snd_hda_codec_write(codec, 0x23, 0, AC_VERB_SET_CONNECT_SEL,
present ? 0x0 : 0x6);
}
static void alc268_acer_lc_unsol_event(struct hda_codec *codec, static void alc268_acer_lc_unsol_event(struct hda_codec *codec,
unsigned int res) unsigned int res)
{ {
if ((res >> 26) == ALC880_HP_EVENT) switch (res >> 26) {
case ALC880_HP_EVENT:
alc268_aspire_one_speaker_automute(codec); alc268_aspire_one_speaker_automute(codec);
if ((res >> 26) == ALC880_MIC_EVENT) break;
alc268_acer_mic_automute(codec); case ALC880_MIC_EVENT:
alc_mic_automute(codec);
break;
}
}
static void alc268_acer_lc_setup(struct hda_codec *codec)
{
struct alc_spec *spec = codec->spec;
spec->ext_mic.pin = 0x18;
spec->ext_mic.mux_idx = 0;
spec->int_mic.pin = 0x12;
spec->int_mic.mux_idx = 6;
spec->auto_mic = 1;
} }
static void alc268_acer_lc_init_hook(struct hda_codec *codec) static void alc268_acer_lc_init_hook(struct hda_codec *codec)
{ {
alc268_aspire_one_speaker_automute(codec); alc268_aspire_one_speaker_automute(codec);
alc268_acer_mic_automute(codec); alc_mic_automute(codec);
} }
static struct snd_kcontrol_new alc268_dell_mixer[] = { static struct snd_kcontrol_new alc268_dell_mixer[] = {
...@@ -11929,17 +11893,22 @@ static struct hda_verb alc268_dell_verbs[] = { ...@@ -11929,17 +11893,22 @@ static struct hda_verb alc268_dell_verbs[] = {
{0x14, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_HP}, {0x14, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_HP},
{0x15, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_HP}, {0x15, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_HP},
{0x15, AC_VERB_SET_UNSOLICITED_ENABLE, ALC880_HP_EVENT | AC_USRSP_EN}, {0x15, AC_VERB_SET_UNSOLICITED_ENABLE, ALC880_HP_EVENT | AC_USRSP_EN},
{0x18, AC_VERB_SET_UNSOLICITED_ENABLE, ALC880_MIC_EVENT | AC_USRSP_EN},
{ } { }
}; };
/* mute/unmute internal speaker according to the hp jack and mute state */ /* mute/unmute internal speaker according to the hp jack and mute state */
static void alc268_dell_init_hook(struct hda_codec *codec) static void alc268_dell_setup(struct hda_codec *codec)
{ {
struct alc_spec *spec = codec->spec; struct alc_spec *spec = codec->spec;
spec->autocfg.hp_pins[0] = 0x15; spec->autocfg.hp_pins[0] = 0x15;
spec->autocfg.speaker_pins[0] = 0x14; spec->autocfg.speaker_pins[0] = 0x14;
alc_automute_pin(codec); spec->ext_mic.pin = 0x18;
spec->ext_mic.mux_idx = 0;
spec->int_mic.pin = 0x19;
spec->int_mic.mux_idx = 1;
spec->auto_mic = 1;
} }
static struct snd_kcontrol_new alc267_quanta_il1_mixer[] = { static struct snd_kcontrol_new alc267_quanta_il1_mixer[] = {
...@@ -11960,38 +11929,16 @@ static struct hda_verb alc267_quanta_il1_verbs[] = { ...@@ -11960,38 +11929,16 @@ static struct hda_verb alc267_quanta_il1_verbs[] = {
{ } { }
}; };
static void alc267_quanta_il1_mic_automute(struct hda_codec *codec) static void alc267_quanta_il1_setup(struct hda_codec *codec)
{
unsigned int present;
present = snd_hda_codec_read(codec, 0x18, 0,
AC_VERB_GET_PIN_SENSE, 0) & 0x80000000;
snd_hda_codec_write(codec, 0x23, 0,
AC_VERB_SET_CONNECT_SEL,
present ? 0x00 : 0x01);
}
static void alc267_quanta_il1_init_hook(struct hda_codec *codec)
{ {
struct alc_spec *spec = codec->spec; struct alc_spec *spec = codec->spec;
spec->autocfg.hp_pins[0] = 0x15; spec->autocfg.hp_pins[0] = 0x15;
spec->autocfg.speaker_pins[0] = 0x14; spec->autocfg.speaker_pins[0] = 0x14;
alc_automute_pin(codec); spec->ext_mic.pin = 0x18;
alc267_quanta_il1_mic_automute(codec); spec->ext_mic.mux_idx = 0;
} spec->int_mic.pin = 0x19;
spec->int_mic.mux_idx = 1;
static void alc267_quanta_il1_unsol_event(struct hda_codec *codec, spec->auto_mic = 1;
unsigned int res)
{
switch (res >> 26) {
case ALC880_MIC_EVENT:
alc267_quanta_il1_mic_automute(codec);
break;
default:
alc_sku_unsol_event(codec, res);
break;
}
} }
/* /*
...@@ -12490,8 +12437,9 @@ static struct alc_config_preset alc268_presets[] = { ...@@ -12490,8 +12437,9 @@ static struct alc_config_preset alc268_presets[] = {
.num_channel_mode = ARRAY_SIZE(alc268_modes), .num_channel_mode = ARRAY_SIZE(alc268_modes),
.channel_mode = alc268_modes, .channel_mode = alc268_modes,
.input_mux = &alc268_capture_source, .input_mux = &alc268_capture_source,
.unsol_event = alc267_quanta_il1_unsol_event, .unsol_event = alc_sku_unsol_event,
.init_hook = alc267_quanta_il1_init_hook, .setup = alc267_quanta_il1_setup,
.init_hook = alc_inithook,
}, },
[ALC268_3ST] = { [ALC268_3ST] = {
.mixers = { alc268_base_mixer, alc268_capture_alt_mixer, .mixers = { alc268_base_mixer, alc268_capture_alt_mixer,
...@@ -12523,7 +12471,8 @@ static struct alc_config_preset alc268_presets[] = { ...@@ -12523,7 +12471,8 @@ static struct alc_config_preset alc268_presets[] = {
.channel_mode = alc268_modes, .channel_mode = alc268_modes,
.input_mux = &alc268_capture_source, .input_mux = &alc268_capture_source,
.unsol_event = alc268_toshiba_unsol_event, .unsol_event = alc268_toshiba_unsol_event,
.init_hook = alc268_toshiba_init_hook, .setup = alc268_toshiba_setup,
.init_hook = alc268_toshiba_automute,
}, },
[ALC268_ACER] = { [ALC268_ACER] = {
.mixers = { alc268_acer_mixer, alc268_capture_alt_mixer, .mixers = { alc268_acer_mixer, alc268_capture_alt_mixer,
...@@ -12573,8 +12522,8 @@ static struct alc_config_preset alc268_presets[] = { ...@@ -12573,8 +12522,8 @@ static struct alc_config_preset alc268_presets[] = {
.hp_nid = 0x03, .hp_nid = 0x03,
.num_channel_mode = ARRAY_SIZE(alc268_modes), .num_channel_mode = ARRAY_SIZE(alc268_modes),
.channel_mode = alc268_modes, .channel_mode = alc268_modes,
.input_mux = &alc268_acer_lc_capture_source,
.unsol_event = alc268_acer_lc_unsol_event, .unsol_event = alc268_acer_lc_unsol_event,
.setup = alc268_acer_lc_setup,
.init_hook = alc268_acer_lc_init_hook, .init_hook = alc268_acer_lc_init_hook,
}, },
[ALC268_DELL] = { [ALC268_DELL] = {
...@@ -12587,8 +12536,8 @@ static struct alc_config_preset alc268_presets[] = { ...@@ -12587,8 +12536,8 @@ static struct alc_config_preset alc268_presets[] = {
.num_channel_mode = ARRAY_SIZE(alc268_modes), .num_channel_mode = ARRAY_SIZE(alc268_modes),
.channel_mode = alc268_modes, .channel_mode = alc268_modes,
.unsol_event = alc_sku_unsol_event, .unsol_event = alc_sku_unsol_event,
.init_hook = alc268_dell_init_hook, .setup = alc268_dell_setup,
.input_mux = &alc268_capture_source, .init_hook = alc_inithook,
}, },
[ALC268_ZEPTO] = { [ALC268_ZEPTO] = {
.mixers = { alc268_base_mixer, alc268_capture_alt_mixer, .mixers = { alc268_base_mixer, alc268_capture_alt_mixer,
...@@ -12605,8 +12554,8 @@ static struct alc_config_preset alc268_presets[] = { ...@@ -12605,8 +12554,8 @@ static struct alc_config_preset alc268_presets[] = {
.num_channel_mode = ARRAY_SIZE(alc268_modes), .num_channel_mode = ARRAY_SIZE(alc268_modes),
.channel_mode = alc268_modes, .channel_mode = alc268_modes,
.input_mux = &alc268_capture_source, .input_mux = &alc268_capture_source,
.unsol_event = alc268_toshiba_unsol_event, .setup = alc268_toshiba_setup,
.init_hook = alc268_toshiba_init_hook .init_hook = alc268_toshiba_automute,
}, },
#ifdef CONFIG_SND_DEBUG #ifdef CONFIG_SND_DEBUG
[ALC268_TEST] = { [ALC268_TEST] = {
...@@ -12750,22 +12699,6 @@ static hda_nid_t alc269_capsrc_nids[1] = { ...@@ -12750,22 +12699,6 @@ static hda_nid_t alc269_capsrc_nids[1] = {
* not a mux! * not a mux!
*/ */
static struct hda_input_mux alc269_eeepc_dmic_capture_source = {
.num_items = 2,
.items = {
{ "i-Mic", 0x5 },
{ "e-Mic", 0x0 },
},
};
static struct hda_input_mux alc269_eeepc_amic_capture_source = {
.num_items = 2,
.items = {
{ "i-Mic", 0x1 },
{ "e-Mic", 0x0 },
},
};
#define alc269_modes alc260_modes #define alc269_modes alc260_modes
#define alc269_capture_source alc880_lg_lw_capture_source #define alc269_capture_source alc880_lg_lw_capture_source
...@@ -12927,16 +12860,6 @@ static void alc269_lifebook_speaker_automute(struct hda_codec *codec) ...@@ -12927,16 +12860,6 @@ static void alc269_lifebook_speaker_automute(struct hda_codec *codec)
AC_VERB_SET_PROC_COEF, 0x480); AC_VERB_SET_PROC_COEF, 0x480);
} }
static void alc269_quanta_fl1_mic_automute(struct hda_codec *codec)
{
unsigned int present;
present = snd_hda_codec_read(codec, 0x18, 0,
AC_VERB_GET_PIN_SENSE, 0) & 0x80000000;
snd_hda_codec_write(codec, 0x23, 0,
AC_VERB_SET_CONNECT_SEL, present ? 0x0 : 0x1);
}
static void alc269_lifebook_mic_autoswitch(struct hda_codec *codec) static void alc269_lifebook_mic_autoswitch(struct hda_codec *codec)
{ {
unsigned int present_laptop; unsigned int present_laptop;
...@@ -12963,10 +12886,14 @@ static void alc269_lifebook_mic_autoswitch(struct hda_codec *codec) ...@@ -12963,10 +12886,14 @@ static void alc269_lifebook_mic_autoswitch(struct hda_codec *codec)
static void alc269_quanta_fl1_unsol_event(struct hda_codec *codec, static void alc269_quanta_fl1_unsol_event(struct hda_codec *codec,
unsigned int res) unsigned int res)
{ {
if ((res >> 26) == ALC880_HP_EVENT) switch (res >> 26) {
case ALC880_HP_EVENT:
alc269_quanta_fl1_speaker_automute(codec); alc269_quanta_fl1_speaker_automute(codec);
if ((res >> 26) == ALC880_MIC_EVENT) break;
alc269_quanta_fl1_mic_automute(codec); case ALC880_MIC_EVENT:
alc_mic_automute(codec);
break;
}
} }
static void alc269_lifebook_unsol_event(struct hda_codec *codec, static void alc269_lifebook_unsol_event(struct hda_codec *codec,
...@@ -12978,10 +12905,20 @@ static void alc269_lifebook_unsol_event(struct hda_codec *codec, ...@@ -12978,10 +12905,20 @@ static void alc269_lifebook_unsol_event(struct hda_codec *codec,
alc269_lifebook_mic_autoswitch(codec); alc269_lifebook_mic_autoswitch(codec);
} }
static void alc269_quanta_fl1_setup(struct hda_codec *codec)
{
struct alc_spec *spec = codec->spec;
spec->ext_mic.pin = 0x18;
spec->ext_mic.mux_idx = 0;
spec->int_mic.pin = 0x19;
spec->int_mic.mux_idx = 1;
spec->auto_mic = 1;
}
static void alc269_quanta_fl1_init_hook(struct hda_codec *codec) static void alc269_quanta_fl1_init_hook(struct hda_codec *codec)
{ {
alc269_quanta_fl1_speaker_automute(codec); alc269_quanta_fl1_speaker_automute(codec);
alc269_quanta_fl1_mic_automute(codec); alc_mic_automute(codec);
} }
static void alc269_lifebook_init_hook(struct hda_codec *codec) static void alc269_lifebook_init_hook(struct hda_codec *codec)
...@@ -13026,60 +12963,44 @@ static void alc269_speaker_automute(struct hda_codec *codec) ...@@ -13026,60 +12963,44 @@ static void alc269_speaker_automute(struct hda_codec *codec)
AMP_IN_MUTE(0), bits); AMP_IN_MUTE(0), bits);
} }
static void alc269_eeepc_dmic_automute(struct hda_codec *codec)
{
unsigned int present;
present = snd_hda_codec_read(codec, 0x18, 0,
AC_VERB_GET_PIN_SENSE, 0) & 0x80000000;
snd_hda_codec_write(codec, 0x23, 0,
AC_VERB_SET_CONNECT_SEL, (present ? 0 : 5));
}
static void alc269_eeepc_amic_automute(struct hda_codec *codec)
{
unsigned int present;
present = snd_hda_codec_read(codec, 0x18, 0,
AC_VERB_GET_PIN_SENSE, 0) & 0x80000000;
snd_hda_codec_write(codec, 0x24, 0, AC_VERB_SET_AMP_GAIN_MUTE,
0x7000 | (0x00 << 8) | (present ? 0 : 0x80));
snd_hda_codec_write(codec, 0x24, 0, AC_VERB_SET_AMP_GAIN_MUTE,
0x7000 | (0x01 << 8) | (present ? 0x80 : 0));
}
/* unsolicited event for HP jack sensing */ /* unsolicited event for HP jack sensing */
static void alc269_eeepc_dmic_unsol_event(struct hda_codec *codec, static void alc269_eeepc_unsol_event(struct hda_codec *codec,
unsigned int res) unsigned int res)
{ {
if ((res >> 26) == ALC880_HP_EVENT) switch (res >> 26) {
case ALC880_HP_EVENT:
alc269_speaker_automute(codec); alc269_speaker_automute(codec);
break;
if ((res >> 26) == ALC880_MIC_EVENT) case ALC880_MIC_EVENT:
alc269_eeepc_dmic_automute(codec); alc_mic_automute(codec);
break;
}
} }
static void alc269_eeepc_dmic_inithook(struct hda_codec *codec) static void alc269_eeepc_dmic_setup(struct hda_codec *codec)
{ {
alc269_speaker_automute(codec); struct alc_spec *spec = codec->spec;
alc269_eeepc_dmic_automute(codec); spec->ext_mic.pin = 0x18;
spec->ext_mic.mux_idx = 0;
spec->int_mic.pin = 0x12;
spec->int_mic.mux_idx = 5;
spec->auto_mic = 1;
} }
/* unsolicited event for HP jack sensing */ static void alc269_eeepc_amic_setup(struct hda_codec *codec)
static void alc269_eeepc_amic_unsol_event(struct hda_codec *codec,
unsigned int res)
{ {
if ((res >> 26) == ALC880_HP_EVENT) struct alc_spec *spec = codec->spec;
alc269_speaker_automute(codec); spec->ext_mic.pin = 0x18;
spec->ext_mic.mux_idx = 0;
if ((res >> 26) == ALC880_MIC_EVENT) spec->int_mic.pin = 0x19;
alc269_eeepc_amic_automute(codec); spec->int_mic.mux_idx = 1;
spec->auto_mic = 1;
} }
static void alc269_eeepc_amic_inithook(struct hda_codec *codec) static void alc269_eeepc_inithook(struct hda_codec *codec)
{ {
alc269_speaker_automute(codec); alc269_speaker_automute(codec);
alc269_eeepc_amic_automute(codec); alc_mic_automute(codec);
} }
/* /*
...@@ -13385,6 +13306,7 @@ static struct alc_config_preset alc269_presets[] = { ...@@ -13385,6 +13306,7 @@ static struct alc_config_preset alc269_presets[] = {
.channel_mode = alc269_modes, .channel_mode = alc269_modes,
.input_mux = &alc269_capture_source, .input_mux = &alc269_capture_source,
.unsol_event = alc269_quanta_fl1_unsol_event, .unsol_event = alc269_quanta_fl1_unsol_event,
.setup = alc269_quanta_fl1_setup,
.init_hook = alc269_quanta_fl1_init_hook, .init_hook = alc269_quanta_fl1_init_hook,
}, },
[ALC269_ASUS_EEEPC_P703] = { [ALC269_ASUS_EEEPC_P703] = {
...@@ -13397,9 +13319,9 @@ static struct alc_config_preset alc269_presets[] = { ...@@ -13397,9 +13319,9 @@ static struct alc_config_preset alc269_presets[] = {
.hp_nid = 0x03, .hp_nid = 0x03,
.num_channel_mode = ARRAY_SIZE(alc269_modes), .num_channel_mode = ARRAY_SIZE(alc269_modes),
.channel_mode = alc269_modes, .channel_mode = alc269_modes,
.input_mux = &alc269_eeepc_amic_capture_source, .unsol_event = alc269_eeepc_unsol_event,
.unsol_event = alc269_eeepc_amic_unsol_event, .setup = alc269_eeepc_amic_setup,
.init_hook = alc269_eeepc_amic_inithook, .init_hook = alc269_eeepc_inithook,
}, },
[ALC269_ASUS_EEEPC_P901] = { [ALC269_ASUS_EEEPC_P901] = {
.mixers = { alc269_eeepc_mixer }, .mixers = { alc269_eeepc_mixer },
...@@ -13411,9 +13333,9 @@ static struct alc_config_preset alc269_presets[] = { ...@@ -13411,9 +13333,9 @@ static struct alc_config_preset alc269_presets[] = {
.hp_nid = 0x03, .hp_nid = 0x03,
.num_channel_mode = ARRAY_SIZE(alc269_modes), .num_channel_mode = ARRAY_SIZE(alc269_modes),
.channel_mode = alc269_modes, .channel_mode = alc269_modes,
.input_mux = &alc269_eeepc_dmic_capture_source, .unsol_event = alc269_eeepc_unsol_event,
.unsol_event = alc269_eeepc_dmic_unsol_event, .setup = alc269_eeepc_dmic_setup,
.init_hook = alc269_eeepc_dmic_inithook, .init_hook = alc269_eeepc_inithook,
}, },
[ALC269_FUJITSU] = { [ALC269_FUJITSU] = {
.mixers = { alc269_fujitsu_mixer }, .mixers = { alc269_fujitsu_mixer },
...@@ -13425,9 +13347,9 @@ static struct alc_config_preset alc269_presets[] = { ...@@ -13425,9 +13347,9 @@ static struct alc_config_preset alc269_presets[] = {
.hp_nid = 0x03, .hp_nid = 0x03,
.num_channel_mode = ARRAY_SIZE(alc269_modes), .num_channel_mode = ARRAY_SIZE(alc269_modes),
.channel_mode = alc269_modes, .channel_mode = alc269_modes,
.input_mux = &alc269_eeepc_dmic_capture_source, .unsol_event = alc269_eeepc_unsol_event,
.unsol_event = alc269_eeepc_dmic_unsol_event, .setup = alc269_eeepc_dmic_setup,
.init_hook = alc269_eeepc_dmic_inithook, .init_hook = alc269_eeepc_inithook,
}, },
[ALC269_LIFEBOOK] = { [ALC269_LIFEBOOK] = {
.mixers = { alc269_lifebook_mixer }, .mixers = { alc269_lifebook_mixer },
...@@ -15044,12 +14966,15 @@ static void alc861vd_lenovo_mic_automute(struct hda_codec *codec) ...@@ -15044,12 +14966,15 @@ static void alc861vd_lenovo_mic_automute(struct hda_codec *codec)
HDA_AMP_MUTE, bits); HDA_AMP_MUTE, bits);
} }
static void alc861vd_lenovo_init_hook(struct hda_codec *codec) static void alc861vd_lenovo_setup(struct hda_codec *codec)
{ {
struct alc_spec *spec = codec->spec; struct alc_spec *spec = codec->spec;
spec->autocfg.hp_pins[0] = 0x1b; spec->autocfg.hp_pins[0] = 0x1b;
spec->autocfg.speaker_pins[0] = 0x14; spec->autocfg.speaker_pins[0] = 0x14;
}
static void alc861vd_lenovo_init_hook(struct hda_codec *codec)
{
alc_automute_amp(codec); alc_automute_amp(codec);
alc861vd_lenovo_mic_automute(codec); alc861vd_lenovo_mic_automute(codec);
} }
...@@ -15113,13 +15038,12 @@ static struct hda_verb alc861vd_dallas_verbs[] = { ...@@ -15113,13 +15038,12 @@ static struct hda_verb alc861vd_dallas_verbs[] = {
}; };
/* toggle speaker-output according to the hp-jack state */ /* toggle speaker-output according to the hp-jack state */
static void alc861vd_dallas_init_hook(struct hda_codec *codec) static void alc861vd_dallas_setup(struct hda_codec *codec)
{ {
struct alc_spec *spec = codec->spec; struct alc_spec *spec = codec->spec;
spec->autocfg.hp_pins[0] = 0x15; spec->autocfg.hp_pins[0] = 0x15;
spec->autocfg.speaker_pins[0] = 0x14; spec->autocfg.speaker_pins[0] = 0x14;
alc_automute_amp(codec);
} }
#ifdef CONFIG_SND_HDA_POWER_SAVE #ifdef CONFIG_SND_HDA_POWER_SAVE
...@@ -15233,6 +15157,7 @@ static struct alc_config_preset alc861vd_presets[] = { ...@@ -15233,6 +15157,7 @@ static struct alc_config_preset alc861vd_presets[] = {
.channel_mode = alc861vd_3stack_2ch_modes, .channel_mode = alc861vd_3stack_2ch_modes,
.input_mux = &alc861vd_capture_source, .input_mux = &alc861vd_capture_source,
.unsol_event = alc861vd_lenovo_unsol_event, .unsol_event = alc861vd_lenovo_unsol_event,
.setup = alc861vd_lenovo_setup,
.init_hook = alc861vd_lenovo_init_hook, .init_hook = alc861vd_lenovo_init_hook,
}, },
[ALC861VD_DALLAS] = { [ALC861VD_DALLAS] = {
...@@ -15244,7 +15169,8 @@ static struct alc_config_preset alc861vd_presets[] = { ...@@ -15244,7 +15169,8 @@ static struct alc_config_preset alc861vd_presets[] = {
.channel_mode = alc861vd_3stack_2ch_modes, .channel_mode = alc861vd_3stack_2ch_modes,
.input_mux = &alc861vd_dallas_capture_source, .input_mux = &alc861vd_dallas_capture_source,
.unsol_event = alc_automute_amp_unsol_event, .unsol_event = alc_automute_amp_unsol_event,
.init_hook = alc861vd_dallas_init_hook, .setup = alc861vd_dallas_setup,
.init_hook = alc_automute_amp,
}, },
[ALC861VD_HP] = { [ALC861VD_HP] = {
.mixers = { alc861vd_hp_mixer }, .mixers = { alc861vd_hp_mixer },
...@@ -15256,7 +15182,8 @@ static struct alc_config_preset alc861vd_presets[] = { ...@@ -15256,7 +15182,8 @@ static struct alc_config_preset alc861vd_presets[] = {
.channel_mode = alc861vd_3stack_2ch_modes, .channel_mode = alc861vd_3stack_2ch_modes,
.input_mux = &alc861vd_hp_capture_source, .input_mux = &alc861vd_hp_capture_source,
.unsol_event = alc_automute_amp_unsol_event, .unsol_event = alc_automute_amp_unsol_event,
.init_hook = alc861vd_dallas_init_hook, .setup = alc861vd_dallas_setup,
.init_hook = alc_automute_amp,
}, },
[ALC660VD_ASUS_V1S] = { [ALC660VD_ASUS_V1S] = {
.mixers = { alc861vd_lenovo_mixer }, .mixers = { alc861vd_lenovo_mixer },
...@@ -15271,6 +15198,7 @@ static struct alc_config_preset alc861vd_presets[] = { ...@@ -15271,6 +15198,7 @@ static struct alc_config_preset alc861vd_presets[] = {
.channel_mode = alc861vd_3stack_2ch_modes, .channel_mode = alc861vd_3stack_2ch_modes,
.input_mux = &alc861vd_capture_source, .input_mux = &alc861vd_capture_source,
.unsol_event = alc861vd_lenovo_unsol_event, .unsol_event = alc861vd_lenovo_unsol_event,
.setup = alc861vd_lenovo_setup,
.init_hook = alc861vd_lenovo_init_hook, .init_hook = alc861vd_lenovo_init_hook,
}, },
}; };
...@@ -15660,14 +15588,6 @@ static struct hda_input_mux alc662_lenovo_101e_capture_source = { ...@@ -15660,14 +15588,6 @@ static struct hda_input_mux alc662_lenovo_101e_capture_source = {
}, },
}; };
static struct hda_input_mux alc662_eeepc_capture_source = {
.num_items = 2,
.items = {
{ "i-Mic", 0x1 },
{ "e-Mic", 0x0 },
},
};
static struct hda_input_mux alc663_capture_source = { static struct hda_input_mux alc663_capture_source = {
.num_items = 3, .num_items = 3,
.items = { .items = {
...@@ -15677,23 +15597,7 @@ static struct hda_input_mux alc663_capture_source = { ...@@ -15677,23 +15597,7 @@ static struct hda_input_mux alc663_capture_source = {
}, },
}; };
static struct hda_input_mux alc663_m51va_capture_source = { #if 0 /* set to 1 for testing other input sources below */
.num_items = 2,
.items = {
{ "Ext-Mic", 0x0 },
{ "D-Mic", 0x9 },
},
};
#if 1 /* set to 0 for testing other input sources below */
static struct hda_input_mux alc272_nc10_capture_source = {
.num_items = 2,
.items = {
{ "Autoselect Mic", 0x0 },
{ "Internal Mic", 0x1 },
},
};
#else
static struct hda_input_mux alc272_nc10_capture_source = { static struct hda_input_mux alc272_nc10_capture_source = {
.num_items = 16, .num_items = 16,
.items = { .items = {
...@@ -16362,47 +16266,44 @@ static void alc662_lenovo_101e_unsol_event(struct hda_codec *codec, ...@@ -16362,47 +16266,44 @@ static void alc662_lenovo_101e_unsol_event(struct hda_codec *codec,
alc662_lenovo_101e_ispeaker_automute(codec); alc662_lenovo_101e_ispeaker_automute(codec);
} }
static void alc662_eeepc_mic_automute(struct hda_codec *codec)
{
unsigned int present;
present = snd_hda_codec_read(codec, 0x18, 0,
AC_VERB_GET_PIN_SENSE, 0) & 0x80000000;
snd_hda_codec_write(codec, 0x22, 0, AC_VERB_SET_AMP_GAIN_MUTE,
0x7000 | (0x00 << 8) | (present ? 0 : 0x80));
snd_hda_codec_write(codec, 0x23, 0, AC_VERB_SET_AMP_GAIN_MUTE,
0x7000 | (0x00 << 8) | (present ? 0 : 0x80));
snd_hda_codec_write(codec, 0x22, 0, AC_VERB_SET_AMP_GAIN_MUTE,
0x7000 | (0x01 << 8) | (present ? 0x80 : 0));
snd_hda_codec_write(codec, 0x23, 0, AC_VERB_SET_AMP_GAIN_MUTE,
0x7000 | (0x01 << 8) | (present ? 0x80 : 0));
}
/* unsolicited event for HP jack sensing */ /* unsolicited event for HP jack sensing */
static void alc662_eeepc_unsol_event(struct hda_codec *codec, static void alc662_eeepc_unsol_event(struct hda_codec *codec,
unsigned int res) unsigned int res)
{ {
if ((res >> 26) == ALC880_MIC_EVENT) if ((res >> 26) == ALC880_MIC_EVENT)
alc662_eeepc_mic_automute(codec); alc_mic_automute(codec);
else else
alc262_hippo_unsol_event(codec, res); alc262_hippo_unsol_event(codec, res);
} }
static void alc662_eeepc_setup(struct hda_codec *codec)
{
struct alc_spec *spec = codec->spec;
alc262_hippo1_setup(codec);
spec->ext_mic.pin = 0x18;
spec->ext_mic.mux_idx = 0;
spec->int_mic.pin = 0x19;
spec->int_mic.mux_idx = 1;
spec->auto_mic = 1;
}
static void alc662_eeepc_inithook(struct hda_codec *codec) static void alc662_eeepc_inithook(struct hda_codec *codec)
{ {
alc262_hippo1_init_hook(codec); alc262_hippo_automute(codec);
alc662_eeepc_mic_automute(codec); alc_mic_automute(codec);
} }
static void alc662_eeepc_ep20_inithook(struct hda_codec *codec) static void alc662_eeepc_ep20_setup(struct hda_codec *codec)
{ {
struct alc_spec *spec = codec->spec; struct alc_spec *spec = codec->spec;
spec->autocfg.hp_pins[0] = 0x14; spec->autocfg.hp_pins[0] = 0x14;
spec->autocfg.speaker_pins[0] = 0x1b; spec->autocfg.speaker_pins[0] = 0x1b;
alc262_hippo_master_update(codec);
} }
#define alc662_eeepc_ep20_inithook alc262_hippo_master_update
static void alc663_m51va_speaker_automute(struct hda_codec *codec) static void alc663_m51va_speaker_automute(struct hda_codec *codec)
{ {
unsigned int present; unsigned int present;
...@@ -16513,23 +16414,6 @@ static void alc663_two_hp_m2_speaker_automute(struct hda_codec *codec) ...@@ -16513,23 +16414,6 @@ static void alc663_two_hp_m2_speaker_automute(struct hda_codec *codec)
} }
} }
static void alc663_m51va_mic_automute(struct hda_codec *codec)
{
unsigned int present;
present = snd_hda_codec_read(codec, 0x18, 0,
AC_VERB_GET_PIN_SENSE, 0)
& AC_PINSENSE_PRESENCE;
snd_hda_codec_write_cache(codec, 0x22, 0, AC_VERB_SET_AMP_GAIN_MUTE,
0x7000 | (0x00 << 8) | (present ? 0 : 0x80));
snd_hda_codec_write_cache(codec, 0x23, 0, AC_VERB_SET_AMP_GAIN_MUTE,
0x7000 | (0x00 << 8) | (present ? 0 : 0x80));
snd_hda_codec_write_cache(codec, 0x22, 0, AC_VERB_SET_AMP_GAIN_MUTE,
0x7000 | (0x09 << 8) | (present ? 0x80 : 0));
snd_hda_codec_write_cache(codec, 0x23, 0, AC_VERB_SET_AMP_GAIN_MUTE,
0x7000 | (0x09 << 8) | (present ? 0x80 : 0));
}
static void alc663_m51va_unsol_event(struct hda_codec *codec, static void alc663_m51va_unsol_event(struct hda_codec *codec,
unsigned int res) unsigned int res)
{ {
...@@ -16538,36 +16422,32 @@ static void alc663_m51va_unsol_event(struct hda_codec *codec, ...@@ -16538,36 +16422,32 @@ static void alc663_m51va_unsol_event(struct hda_codec *codec,
alc663_m51va_speaker_automute(codec); alc663_m51va_speaker_automute(codec);
break; break;
case ALC880_MIC_EVENT: case ALC880_MIC_EVENT:
alc663_m51va_mic_automute(codec); alc_mic_automute(codec);
break; break;
} }
} }
static void alc663_m51va_inithook(struct hda_codec *codec) static void alc663_m51va_setup(struct hda_codec *codec)
{ {
alc663_m51va_speaker_automute(codec); struct alc_spec *spec = codec->spec;
alc663_m51va_mic_automute(codec); spec->ext_mic.pin = 0x18;
spec->ext_mic.mux_idx = 0;
spec->int_mic.pin = 0x12;
spec->int_mic.mux_idx = 1;
spec->auto_mic = 1;
} }
/* ***************** Mode1 ******************************/ static void alc663_m51va_inithook(struct hda_codec *codec)
static void alc663_mode1_unsol_event(struct hda_codec *codec,
unsigned int res)
{ {
switch (res >> 26) {
case ALC880_HP_EVENT:
alc663_m51va_speaker_automute(codec); alc663_m51va_speaker_automute(codec);
break; alc_mic_automute(codec);
case ALC880_MIC_EVENT:
alc662_eeepc_mic_automute(codec);
break;
}
} }
static void alc663_mode1_inithook(struct hda_codec *codec) /* ***************** Mode1 ******************************/
{ #define alc663_mode1_unsol_event alc663_m51va_unsol_event
alc663_m51va_speaker_automute(codec); #define alc663_mode1_setup alc663_m51va_setup
alc662_eeepc_mic_automute(codec); #define alc663_mode1_inithook alc663_m51va_inithook
}
/* ***************** Mode2 ******************************/ /* ***************** Mode2 ******************************/
static void alc662_mode2_unsol_event(struct hda_codec *codec, static void alc662_mode2_unsol_event(struct hda_codec *codec,
unsigned int res) unsigned int res)
...@@ -16577,15 +16457,17 @@ static void alc662_mode2_unsol_event(struct hda_codec *codec, ...@@ -16577,15 +16457,17 @@ static void alc662_mode2_unsol_event(struct hda_codec *codec,
alc662_f5z_speaker_automute(codec); alc662_f5z_speaker_automute(codec);
break; break;
case ALC880_MIC_EVENT: case ALC880_MIC_EVENT:
alc662_eeepc_mic_automute(codec); alc_mic_automute(codec);
break; break;
} }
} }
#define alc662_mode2_setup alc663_m51va_setup
static void alc662_mode2_inithook(struct hda_codec *codec) static void alc662_mode2_inithook(struct hda_codec *codec)
{ {
alc662_f5z_speaker_automute(codec); alc662_f5z_speaker_automute(codec);
alc662_eeepc_mic_automute(codec); alc_mic_automute(codec);
} }
/* ***************** Mode3 ******************************/ /* ***************** Mode3 ******************************/
static void alc663_mode3_unsol_event(struct hda_codec *codec, static void alc663_mode3_unsol_event(struct hda_codec *codec,
...@@ -16596,15 +16478,17 @@ static void alc663_mode3_unsol_event(struct hda_codec *codec, ...@@ -16596,15 +16478,17 @@ static void alc663_mode3_unsol_event(struct hda_codec *codec,
alc663_two_hp_m1_speaker_automute(codec); alc663_two_hp_m1_speaker_automute(codec);
break; break;
case ALC880_MIC_EVENT: case ALC880_MIC_EVENT:
alc662_eeepc_mic_automute(codec); alc_mic_automute(codec);
break; break;
} }
} }
#define alc663_mode3_setup alc663_m51va_setup
static void alc663_mode3_inithook(struct hda_codec *codec) static void alc663_mode3_inithook(struct hda_codec *codec)
{ {
alc663_two_hp_m1_speaker_automute(codec); alc663_two_hp_m1_speaker_automute(codec);
alc662_eeepc_mic_automute(codec); alc_mic_automute(codec);
} }
/* ***************** Mode4 ******************************/ /* ***************** Mode4 ******************************/
static void alc663_mode4_unsol_event(struct hda_codec *codec, static void alc663_mode4_unsol_event(struct hda_codec *codec,
...@@ -16615,15 +16499,17 @@ static void alc663_mode4_unsol_event(struct hda_codec *codec, ...@@ -16615,15 +16499,17 @@ static void alc663_mode4_unsol_event(struct hda_codec *codec,
alc663_21jd_two_speaker_automute(codec); alc663_21jd_two_speaker_automute(codec);
break; break;
case ALC880_MIC_EVENT: case ALC880_MIC_EVENT:
alc662_eeepc_mic_automute(codec); alc_mic_automute(codec);
break; break;
} }
} }
#define alc663_mode4_setup alc663_m51va_setup
static void alc663_mode4_inithook(struct hda_codec *codec) static void alc663_mode4_inithook(struct hda_codec *codec)
{ {
alc663_21jd_two_speaker_automute(codec); alc663_21jd_two_speaker_automute(codec);
alc662_eeepc_mic_automute(codec); alc_mic_automute(codec);
} }
/* ***************** Mode5 ******************************/ /* ***************** Mode5 ******************************/
static void alc663_mode5_unsol_event(struct hda_codec *codec, static void alc663_mode5_unsol_event(struct hda_codec *codec,
...@@ -16634,15 +16520,17 @@ static void alc663_mode5_unsol_event(struct hda_codec *codec, ...@@ -16634,15 +16520,17 @@ static void alc663_mode5_unsol_event(struct hda_codec *codec,
alc663_15jd_two_speaker_automute(codec); alc663_15jd_two_speaker_automute(codec);
break; break;
case ALC880_MIC_EVENT: case ALC880_MIC_EVENT:
alc662_eeepc_mic_automute(codec); alc_mic_automute(codec);
break; break;
} }
} }
#define alc663_mode5_setup alc663_m51va_setup
static void alc663_mode5_inithook(struct hda_codec *codec) static void alc663_mode5_inithook(struct hda_codec *codec)
{ {
alc663_15jd_two_speaker_automute(codec); alc663_15jd_two_speaker_automute(codec);
alc662_eeepc_mic_automute(codec); alc_mic_automute(codec);
} }
/* ***************** Mode6 ******************************/ /* ***************** Mode6 ******************************/
static void alc663_mode6_unsol_event(struct hda_codec *codec, static void alc663_mode6_unsol_event(struct hda_codec *codec,
...@@ -16653,15 +16541,17 @@ static void alc663_mode6_unsol_event(struct hda_codec *codec, ...@@ -16653,15 +16541,17 @@ static void alc663_mode6_unsol_event(struct hda_codec *codec,
alc663_two_hp_m2_speaker_automute(codec); alc663_two_hp_m2_speaker_automute(codec);
break; break;
case ALC880_MIC_EVENT: case ALC880_MIC_EVENT:
alc662_eeepc_mic_automute(codec); alc_mic_automute(codec);
break; break;
} }
} }
#define alc663_mode6_setup alc663_m51va_setup
static void alc663_mode6_inithook(struct hda_codec *codec) static void alc663_mode6_inithook(struct hda_codec *codec)
{ {
alc663_two_hp_m2_speaker_automute(codec); alc663_two_hp_m2_speaker_automute(codec);
alc662_eeepc_mic_automute(codec); alc_mic_automute(codec);
} }
static void alc663_g71v_hp_automute(struct hda_codec *codec) static void alc663_g71v_hp_automute(struct hda_codec *codec)
...@@ -16703,16 +16593,18 @@ static void alc663_g71v_unsol_event(struct hda_codec *codec, ...@@ -16703,16 +16593,18 @@ static void alc663_g71v_unsol_event(struct hda_codec *codec,
alc663_g71v_front_automute(codec); alc663_g71v_front_automute(codec);
break; break;
case ALC880_MIC_EVENT: case ALC880_MIC_EVENT:
alc662_eeepc_mic_automute(codec); alc_mic_automute(codec);
break; break;
} }
} }
#define alc663_g71v_setup alc663_m51va_setup
static void alc663_g71v_inithook(struct hda_codec *codec) static void alc663_g71v_inithook(struct hda_codec *codec)
{ {
alc663_g71v_front_automute(codec); alc663_g71v_front_automute(codec);
alc663_g71v_hp_automute(codec); alc663_g71v_hp_automute(codec);
alc662_eeepc_mic_automute(codec); alc_mic_automute(codec);
} }
static void alc663_g50v_unsol_event(struct hda_codec *codec, static void alc663_g50v_unsol_event(struct hda_codec *codec,
...@@ -16723,15 +16615,17 @@ static void alc663_g50v_unsol_event(struct hda_codec *codec, ...@@ -16723,15 +16615,17 @@ static void alc663_g50v_unsol_event(struct hda_codec *codec,
alc663_m51va_speaker_automute(codec); alc663_m51va_speaker_automute(codec);
break; break;
case ALC880_MIC_EVENT: case ALC880_MIC_EVENT:
alc662_eeepc_mic_automute(codec); alc_mic_automute(codec);
break; break;
} }
} }
#define alc663_g50v_setup alc663_m51va_setup
static void alc663_g50v_inithook(struct hda_codec *codec) static void alc663_g50v_inithook(struct hda_codec *codec)
{ {
alc663_m51va_speaker_automute(codec); alc663_m51va_speaker_automute(codec);
alc662_eeepc_mic_automute(codec); alc_mic_automute(codec);
} }
static struct snd_kcontrol_new alc662_ecs_mixer[] = { static struct snd_kcontrol_new alc662_ecs_mixer[] = {
...@@ -16935,8 +16829,8 @@ static struct alc_config_preset alc662_presets[] = { ...@@ -16935,8 +16829,8 @@ static struct alc_config_preset alc662_presets[] = {
.dac_nids = alc662_dac_nids, .dac_nids = alc662_dac_nids,
.num_channel_mode = ARRAY_SIZE(alc662_3ST_2ch_modes), .num_channel_mode = ARRAY_SIZE(alc662_3ST_2ch_modes),
.channel_mode = alc662_3ST_2ch_modes, .channel_mode = alc662_3ST_2ch_modes,
.input_mux = &alc662_eeepc_capture_source,
.unsol_event = alc662_eeepc_unsol_event, .unsol_event = alc662_eeepc_unsol_event,
.setup = alc662_eeepc_setup,
.init_hook = alc662_eeepc_inithook, .init_hook = alc662_eeepc_inithook,
}, },
[ALC662_ASUS_EEEPC_EP20] = { [ALC662_ASUS_EEEPC_EP20] = {
...@@ -16950,6 +16844,7 @@ static struct alc_config_preset alc662_presets[] = { ...@@ -16950,6 +16844,7 @@ static struct alc_config_preset alc662_presets[] = {
.channel_mode = alc662_3ST_6ch_modes, .channel_mode = alc662_3ST_6ch_modes,
.input_mux = &alc662_lenovo_101e_capture_source, .input_mux = &alc662_lenovo_101e_capture_source,
.unsol_event = alc662_eeepc_unsol_event, .unsol_event = alc662_eeepc_unsol_event,
.setup = alc662_eeepc_ep20_setup,
.init_hook = alc662_eeepc_ep20_inithook, .init_hook = alc662_eeepc_ep20_inithook,
}, },
[ALC662_ECS] = { [ALC662_ECS] = {
...@@ -16960,8 +16855,8 @@ static struct alc_config_preset alc662_presets[] = { ...@@ -16960,8 +16855,8 @@ static struct alc_config_preset alc662_presets[] = {
.dac_nids = alc662_dac_nids, .dac_nids = alc662_dac_nids,
.num_channel_mode = ARRAY_SIZE(alc662_3ST_2ch_modes), .num_channel_mode = ARRAY_SIZE(alc662_3ST_2ch_modes),
.channel_mode = alc662_3ST_2ch_modes, .channel_mode = alc662_3ST_2ch_modes,
.input_mux = &alc662_eeepc_capture_source,
.unsol_event = alc662_eeepc_unsol_event, .unsol_event = alc662_eeepc_unsol_event,
.setup = alc662_eeepc_setup,
.init_hook = alc662_eeepc_inithook, .init_hook = alc662_eeepc_inithook,
}, },
[ALC663_ASUS_M51VA] = { [ALC663_ASUS_M51VA] = {
...@@ -16972,8 +16867,8 @@ static struct alc_config_preset alc662_presets[] = { ...@@ -16972,8 +16867,8 @@ static struct alc_config_preset alc662_presets[] = {
.dig_out_nid = ALC662_DIGOUT_NID, .dig_out_nid = ALC662_DIGOUT_NID,
.num_channel_mode = ARRAY_SIZE(alc662_3ST_2ch_modes), .num_channel_mode = ARRAY_SIZE(alc662_3ST_2ch_modes),
.channel_mode = alc662_3ST_2ch_modes, .channel_mode = alc662_3ST_2ch_modes,
.input_mux = &alc663_m51va_capture_source,
.unsol_event = alc663_m51va_unsol_event, .unsol_event = alc663_m51va_unsol_event,
.setup = alc663_m51va_setup,
.init_hook = alc663_m51va_inithook, .init_hook = alc663_m51va_inithook,
}, },
[ALC663_ASUS_G71V] = { [ALC663_ASUS_G71V] = {
...@@ -16984,8 +16879,8 @@ static struct alc_config_preset alc662_presets[] = { ...@@ -16984,8 +16879,8 @@ static struct alc_config_preset alc662_presets[] = {
.dig_out_nid = ALC662_DIGOUT_NID, .dig_out_nid = ALC662_DIGOUT_NID,
.num_channel_mode = ARRAY_SIZE(alc662_3ST_2ch_modes), .num_channel_mode = ARRAY_SIZE(alc662_3ST_2ch_modes),
.channel_mode = alc662_3ST_2ch_modes, .channel_mode = alc662_3ST_2ch_modes,
.input_mux = &alc662_eeepc_capture_source,
.unsol_event = alc663_g71v_unsol_event, .unsol_event = alc663_g71v_unsol_event,
.setup = alc663_g71v_setup,
.init_hook = alc663_g71v_inithook, .init_hook = alc663_g71v_inithook,
}, },
[ALC663_ASUS_H13] = { [ALC663_ASUS_H13] = {
...@@ -16995,7 +16890,6 @@ static struct alc_config_preset alc662_presets[] = { ...@@ -16995,7 +16890,6 @@ static struct alc_config_preset alc662_presets[] = {
.dac_nids = alc662_dac_nids, .dac_nids = alc662_dac_nids,
.num_channel_mode = ARRAY_SIZE(alc662_3ST_2ch_modes), .num_channel_mode = ARRAY_SIZE(alc662_3ST_2ch_modes),
.channel_mode = alc662_3ST_2ch_modes, .channel_mode = alc662_3ST_2ch_modes,
.input_mux = &alc663_m51va_capture_source,
.unsol_event = alc663_m51va_unsol_event, .unsol_event = alc663_m51va_unsol_event,
.init_hook = alc663_m51va_inithook, .init_hook = alc663_m51va_inithook,
}, },
...@@ -17009,6 +16903,7 @@ static struct alc_config_preset alc662_presets[] = { ...@@ -17009,6 +16903,7 @@ static struct alc_config_preset alc662_presets[] = {
.channel_mode = alc662_3ST_6ch_modes, .channel_mode = alc662_3ST_6ch_modes,
.input_mux = &alc663_capture_source, .input_mux = &alc663_capture_source,
.unsol_event = alc663_g50v_unsol_event, .unsol_event = alc663_g50v_unsol_event,
.setup = alc663_g50v_setup,
.init_hook = alc663_g50v_inithook, .init_hook = alc663_g50v_inithook,
}, },
[ALC663_ASUS_MODE1] = { [ALC663_ASUS_MODE1] = {
...@@ -17022,8 +16917,8 @@ static struct alc_config_preset alc662_presets[] = { ...@@ -17022,8 +16917,8 @@ static struct alc_config_preset alc662_presets[] = {
.dig_out_nid = ALC662_DIGOUT_NID, .dig_out_nid = ALC662_DIGOUT_NID,
.num_channel_mode = ARRAY_SIZE(alc662_3ST_2ch_modes), .num_channel_mode = ARRAY_SIZE(alc662_3ST_2ch_modes),
.channel_mode = alc662_3ST_2ch_modes, .channel_mode = alc662_3ST_2ch_modes,
.input_mux = &alc662_eeepc_capture_source,
.unsol_event = alc663_mode1_unsol_event, .unsol_event = alc663_mode1_unsol_event,
.setup = alc663_mode1_setup,
.init_hook = alc663_mode1_inithook, .init_hook = alc663_mode1_inithook,
}, },
[ALC662_ASUS_MODE2] = { [ALC662_ASUS_MODE2] = {
...@@ -17036,8 +16931,8 @@ static struct alc_config_preset alc662_presets[] = { ...@@ -17036,8 +16931,8 @@ static struct alc_config_preset alc662_presets[] = {
.dig_out_nid = ALC662_DIGOUT_NID, .dig_out_nid = ALC662_DIGOUT_NID,
.num_channel_mode = ARRAY_SIZE(alc662_3ST_2ch_modes), .num_channel_mode = ARRAY_SIZE(alc662_3ST_2ch_modes),
.channel_mode = alc662_3ST_2ch_modes, .channel_mode = alc662_3ST_2ch_modes,
.input_mux = &alc662_eeepc_capture_source,
.unsol_event = alc662_mode2_unsol_event, .unsol_event = alc662_mode2_unsol_event,
.setup = alc662_mode2_setup,
.init_hook = alc662_mode2_inithook, .init_hook = alc662_mode2_inithook,
}, },
[ALC663_ASUS_MODE3] = { [ALC663_ASUS_MODE3] = {
...@@ -17051,8 +16946,8 @@ static struct alc_config_preset alc662_presets[] = { ...@@ -17051,8 +16946,8 @@ static struct alc_config_preset alc662_presets[] = {
.dig_out_nid = ALC662_DIGOUT_NID, .dig_out_nid = ALC662_DIGOUT_NID,
.num_channel_mode = ARRAY_SIZE(alc662_3ST_2ch_modes), .num_channel_mode = ARRAY_SIZE(alc662_3ST_2ch_modes),
.channel_mode = alc662_3ST_2ch_modes, .channel_mode = alc662_3ST_2ch_modes,
.input_mux = &alc662_eeepc_capture_source,
.unsol_event = alc663_mode3_unsol_event, .unsol_event = alc663_mode3_unsol_event,
.setup = alc663_mode3_setup,
.init_hook = alc663_mode3_inithook, .init_hook = alc663_mode3_inithook,
}, },
[ALC663_ASUS_MODE4] = { [ALC663_ASUS_MODE4] = {
...@@ -17066,8 +16961,8 @@ static struct alc_config_preset alc662_presets[] = { ...@@ -17066,8 +16961,8 @@ static struct alc_config_preset alc662_presets[] = {
.dig_out_nid = ALC662_DIGOUT_NID, .dig_out_nid = ALC662_DIGOUT_NID,
.num_channel_mode = ARRAY_SIZE(alc662_3ST_2ch_modes), .num_channel_mode = ARRAY_SIZE(alc662_3ST_2ch_modes),
.channel_mode = alc662_3ST_2ch_modes, .channel_mode = alc662_3ST_2ch_modes,
.input_mux = &alc662_eeepc_capture_source,
.unsol_event = alc663_mode4_unsol_event, .unsol_event = alc663_mode4_unsol_event,
.setup = alc663_mode4_setup,
.init_hook = alc663_mode4_inithook, .init_hook = alc663_mode4_inithook,
}, },
[ALC663_ASUS_MODE5] = { [ALC663_ASUS_MODE5] = {
...@@ -17081,8 +16976,8 @@ static struct alc_config_preset alc662_presets[] = { ...@@ -17081,8 +16976,8 @@ static struct alc_config_preset alc662_presets[] = {
.dig_out_nid = ALC662_DIGOUT_NID, .dig_out_nid = ALC662_DIGOUT_NID,
.num_channel_mode = ARRAY_SIZE(alc662_3ST_2ch_modes), .num_channel_mode = ARRAY_SIZE(alc662_3ST_2ch_modes),
.channel_mode = alc662_3ST_2ch_modes, .channel_mode = alc662_3ST_2ch_modes,
.input_mux = &alc662_eeepc_capture_source,
.unsol_event = alc663_mode5_unsol_event, .unsol_event = alc663_mode5_unsol_event,
.setup = alc663_mode5_setup,
.init_hook = alc663_mode5_inithook, .init_hook = alc663_mode5_inithook,
}, },
[ALC663_ASUS_MODE6] = { [ALC663_ASUS_MODE6] = {
...@@ -17096,8 +16991,8 @@ static struct alc_config_preset alc662_presets[] = { ...@@ -17096,8 +16991,8 @@ static struct alc_config_preset alc662_presets[] = {
.dig_out_nid = ALC662_DIGOUT_NID, .dig_out_nid = ALC662_DIGOUT_NID,
.num_channel_mode = ARRAY_SIZE(alc662_3ST_2ch_modes), .num_channel_mode = ARRAY_SIZE(alc662_3ST_2ch_modes),
.channel_mode = alc662_3ST_2ch_modes, .channel_mode = alc662_3ST_2ch_modes,
.input_mux = &alc662_eeepc_capture_source,
.unsol_event = alc663_mode6_unsol_event, .unsol_event = alc663_mode6_unsol_event,
.setup = alc663_mode6_setup,
.init_hook = alc663_mode6_inithook, .init_hook = alc663_mode6_inithook,
}, },
[ALC272_DELL] = { [ALC272_DELL] = {
...@@ -17111,8 +17006,8 @@ static struct alc_config_preset alc662_presets[] = { ...@@ -17111,8 +17006,8 @@ static struct alc_config_preset alc662_presets[] = {
.num_adc_nids = ARRAY_SIZE(alc272_adc_nids), .num_adc_nids = ARRAY_SIZE(alc272_adc_nids),
.capsrc_nids = alc272_capsrc_nids, .capsrc_nids = alc272_capsrc_nids,
.channel_mode = alc662_3ST_2ch_modes, .channel_mode = alc662_3ST_2ch_modes,
.input_mux = &alc663_m51va_capture_source,
.unsol_event = alc663_m51va_unsol_event, .unsol_event = alc663_m51va_unsol_event,
.setup = alc663_m51va_setup,
.init_hook = alc663_m51va_inithook, .init_hook = alc663_m51va_inithook,
}, },
[ALC272_DELL_ZM1] = { [ALC272_DELL_ZM1] = {
...@@ -17126,8 +17021,8 @@ static struct alc_config_preset alc662_presets[] = { ...@@ -17126,8 +17021,8 @@ static struct alc_config_preset alc662_presets[] = {
.num_adc_nids = 1, .num_adc_nids = 1,
.capsrc_nids = alc662_capsrc_nids, .capsrc_nids = alc662_capsrc_nids,
.channel_mode = alc662_3ST_2ch_modes, .channel_mode = alc662_3ST_2ch_modes,
.input_mux = &alc663_m51va_capture_source,
.unsol_event = alc663_m51va_unsol_event, .unsol_event = alc663_m51va_unsol_event,
.setup = alc663_m51va_setup,
.init_hook = alc663_m51va_inithook, .init_hook = alc663_m51va_inithook,
}, },
[ALC272_SAMSUNG_NC10] = { [ALC272_SAMSUNG_NC10] = {
...@@ -17138,8 +17033,9 @@ static struct alc_config_preset alc662_presets[] = { ...@@ -17138,8 +17033,9 @@ static struct alc_config_preset alc662_presets[] = {
.dac_nids = alc272_dac_nids, .dac_nids = alc272_dac_nids,
.num_channel_mode = ARRAY_SIZE(alc662_3ST_2ch_modes), .num_channel_mode = ARRAY_SIZE(alc662_3ST_2ch_modes),
.channel_mode = alc662_3ST_2ch_modes, .channel_mode = alc662_3ST_2ch_modes,
.input_mux = &alc272_nc10_capture_source, /*.input_mux = &alc272_nc10_capture_source,*/
.unsol_event = alc663_mode4_unsol_event, .unsol_event = alc663_mode4_unsol_event,
.setup = alc663_mode4_setup,
.init_hook = alc663_mode4_inithook, .init_hook = alc663_mode4_inithook,
}, },
}; };
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment