Commit 8a535414 authored by Takashi Iwai's avatar Takashi Iwai

ALSA: hda - Call snd_hda_jack_report_sync() generically in hda_codec.c

Instead of calling the jack sync in the init callback of each codec,
call it generically at initialization and resume.  By calling it at
the last of resume sequence, a possible race between the jack sync and
the unsol event enablement in the current code will be closed, too.
Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
parent f9933487
...@@ -3618,6 +3618,7 @@ static void hda_call_codec_resume(struct hda_codec *codec) ...@@ -3618,6 +3618,7 @@ static void hda_call_codec_resume(struct hda_codec *codec)
snd_hda_codec_resume_amp(codec); snd_hda_codec_resume_amp(codec);
snd_hda_codec_resume_cache(codec); snd_hda_codec_resume_cache(codec);
} }
snd_hda_jack_report_sync(codec);
snd_hda_power_down(codec); /* flag down before returning */ snd_hda_power_down(codec); /* flag down before returning */
} }
#endif /* CONFIG_PM */ #endif /* CONFIG_PM */
...@@ -3663,6 +3664,7 @@ int snd_hda_codec_build_controls(struct hda_codec *codec) ...@@ -3663,6 +3664,7 @@ int snd_hda_codec_build_controls(struct hda_codec *codec)
err = codec->patch_ops.build_controls(codec); err = codec->patch_ops.build_controls(codec);
if (err < 0) if (err < 0)
return err; return err;
snd_hda_jack_report_sync(codec); /* call at the last init point */
return 0; return 0;
} }
......
...@@ -1193,7 +1193,6 @@ static int cs_init(struct hda_codec *codec) ...@@ -1193,7 +1193,6 @@ static int cs_init(struct hda_codec *codec)
init_output(codec); init_output(codec);
init_input(codec); init_input(codec);
init_digital(codec); init_digital(codec);
snd_hda_jack_report_sync(codec);
return 0; return 0;
} }
...@@ -1643,7 +1642,6 @@ static int cs421x_init(struct hda_codec *codec) ...@@ -1643,7 +1642,6 @@ static int cs421x_init(struct hda_codec *codec)
init_output(codec); init_output(codec);
init_input(codec); init_input(codec);
init_cs421x_digital(codec); init_cs421x_digital(codec);
snd_hda_jack_report_sync(codec);
return 0; return 0;
} }
......
...@@ -4061,7 +4061,6 @@ static int cx_auto_init(struct hda_codec *codec) ...@@ -4061,7 +4061,6 @@ static int cx_auto_init(struct hda_codec *codec)
cx_auto_init_output(codec); cx_auto_init_output(codec);
cx_auto_init_input(codec); cx_auto_init_input(codec);
cx_auto_init_digital(codec); cx_auto_init_digital(codec);
snd_hda_jack_report_sync(codec);
snd_hda_sync_vmaster_hook(&spec->vmaster_mute); snd_hda_sync_vmaster_hook(&spec->vmaster_mute);
return 0; return 0;
} }
......
...@@ -1311,7 +1311,6 @@ static int generic_hdmi_init(struct hda_codec *codec) ...@@ -1311,7 +1311,6 @@ static int generic_hdmi_init(struct hda_codec *codec)
hdmi_init_pin(codec, pin_nid); hdmi_init_pin(codec, pin_nid);
snd_hda_jack_detect_enable(codec, pin_nid, pin_nid); snd_hda_jack_detect_enable(codec, pin_nid, pin_nid);
} }
snd_hda_jack_report_sync(codec);
return 0; return 0;
} }
...@@ -1428,7 +1427,6 @@ static int simple_playback_init(struct hda_codec *codec) ...@@ -1428,7 +1427,6 @@ static int simple_playback_init(struct hda_codec *codec)
snd_hda_codec_write(codec, pin, 0, AC_VERB_SET_AMP_GAIN_MUTE, snd_hda_codec_write(codec, pin, 0, AC_VERB_SET_AMP_GAIN_MUTE,
AMP_OUT_UNMUTE); AMP_OUT_UNMUTE);
snd_hda_jack_detect_enable(codec, pin, pin); snd_hda_jack_detect_enable(codec, pin, pin);
snd_hda_jack_report_sync(codec);
return 0; return 0;
} }
......
...@@ -2053,8 +2053,6 @@ static int alc_init(struct hda_codec *codec) ...@@ -2053,8 +2053,6 @@ static int alc_init(struct hda_codec *codec)
alc_apply_fixup(codec, ALC_FIXUP_ACT_INIT); alc_apply_fixup(codec, ALC_FIXUP_ACT_INIT);
snd_hda_jack_report_sync(codec);
hda_call_check_power_status(codec, 0x01); hda_call_check_power_status(codec, 0x01);
return 0; return 0;
} }
......
...@@ -4418,8 +4418,6 @@ static int stac92xx_init(struct hda_codec *codec) ...@@ -4418,8 +4418,6 @@ static int stac92xx_init(struct hda_codec *codec)
stac_toggle_power_map(codec, nid, 0); stac_toggle_power_map(codec, nid, 0);
} }
snd_hda_jack_report_sync(codec);
/* sync mute LED */ /* sync mute LED */
if (spec->gpio_led) { if (spec->gpio_led) {
if (spec->vmaster_mute.hook) if (spec->vmaster_mute.hook)
......
...@@ -2815,7 +2815,6 @@ static int via_init(struct hda_codec *codec) ...@@ -2815,7 +2815,6 @@ static int via_init(struct hda_codec *codec)
via_hp_automute(codec); via_hp_automute(codec);
vt1708_update_hp_work(spec); vt1708_update_hp_work(spec);
snd_hda_jack_report_sync(codec);
return 0; return 0;
} }
......
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