diff options
author | Takashi Iwai <tiwai@suse.de> | 2013-01-23 15:58:40 +0100 |
---|---|---|
committer | Takashi Iwai <tiwai@suse.de> | 2013-01-23 16:05:37 +0100 |
commit | 31614bb89b102570367fc7428dc029b8d7fc615a (patch) | |
tree | e242542ee9a3ed4c3aa6c56e946ed88479215738 /sound | |
parent | 42c364ace52ae6b4699105b39f2559c256b6cd4c (diff) | |
download | linux-exynos-31614bb89b102570367fc7428dc029b8d7fc615a.tar.gz linux-exynos-31614bb89b102570367fc7428dc029b8d7fc615a.tar.bz2 linux-exynos-31614bb89b102570367fc7428dc029b8d7fc615a.zip |
ALSA: hda - Fix inconsistent pin states after resume
The commit [26a6cb6c: ALSA: hda - Implement a poll loop for jacks as a
module parameter] introduced the polling jack detection code, but it
also moved the call of snd_hda_jack_set_dirty_all() in the resume path
after resume/init ops call. This caused a regression when the jack
state has been changed during power-down (e.g. in the power save
mode). Since the driver doesn't probe the new jack state but keeps
using the cached value due to no dirty flag, the pin state remains
also as if the jack is still plugged.
The fix is simply moving snd_hda_jack_set_dirty_all() to the original
position.
Reported-by: Manolo Díaz <diaz.manolo@gmail.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
Diffstat (limited to 'sound')
-rw-r--r-- | sound/pci/hda/hda_codec.c | 5 |
1 files changed, 2 insertions, 3 deletions
diff --git a/sound/pci/hda/hda_codec.c b/sound/pci/hda/hda_codec.c index b8fb0a5adb9b..822df971972c 100644 --- a/sound/pci/hda/hda_codec.c +++ b/sound/pci/hda/hda_codec.c @@ -3654,6 +3654,7 @@ static void hda_call_codec_resume(struct hda_codec *codec) hda_set_power_state(codec, AC_PWRST_D0); restore_shutup_pins(codec); hda_exec_init_verbs(codec); + snd_hda_jack_set_dirty_all(codec); if (codec->patch_ops.resume) codec->patch_ops.resume(codec); else { @@ -3665,10 +3666,8 @@ static void hda_call_codec_resume(struct hda_codec *codec) if (codec->jackpoll_interval) hda_jackpoll_work(&codec->jackpoll_work.work); - else { - snd_hda_jack_set_dirty_all(codec); + else snd_hda_jack_report_sync(codec); - } codec->in_pm = 0; snd_hda_power_down(codec); /* flag down before returning */ |