We have an ASUS E406MA laptop equipped with Intel N5000 CPU. After system suspend & resume, the audio playback does not work anymore. The device for sound output is listed as a headphone device. Plugging in headphones no sound is audible neither. Here are the error messages after resume: [ 184.525681] snd_hda_intel 0000:00:0e.0: azx_get_response timeout, switching to polling mode: last cmd=0x20bf8100 [ 185.528682] snd_hda_intel 0000:00:0e.0: No response from codec, disabling MSI: last cmd=0x20bf8100 [ 186.532683] snd_hda_intel 0000:00:0e.0: azx_get_response timeout, switching to single_cmd mode: last cmd=0x20bf8100 [ 186.736838] snd_hda_codec_realtek hdaudioC0D0: Unable to sync register 0x2b8000. -5 [ 186.738742] snd_hda_codec_realtek hdaudioC0D0: Unable to sync register 0x2b8000. -5 [ 186.767080] snd_hda_codec_hdmi hdaudioC0D2: Unable to sync register 0x2f0d00. -5 After bisect, we found reverting the commit b5a236c175b0 "ALSA: hda - Enforces runtime_resume after S3 and S4 for each codec" can solve this issue on Linux stable 5.0.x series. This reverts commit a57af6d07512716b78f1a32d9426bcdf6aafc50c. Buglink: https://bugzilla.kernel.org/show_bug.cgi?id=203623 Fixes: a57af6d07512 ("ALSA: hda - Enforces runtime_resume after S3 and S4 for each codec") Cc: <stable@xxxxxxxxxxxxxxx> # 5.0.x Signed-off-by: Jian-Hong Pan <jian-hong@xxxxxxxxxxxx> --- sound/pci/hda/hda_codec.c | 20 +++----------------- 1 file changed, 3 insertions(+), 17 deletions(-) diff --git a/sound/pci/hda/hda_codec.c b/sound/pci/hda/hda_codec.c index b238e903b9d7..dbc9eaa81358 100644 --- a/sound/pci/hda/hda_codec.c +++ b/sound/pci/hda/hda_codec.c @@ -2952,20 +2952,6 @@ static int hda_codec_runtime_resume(struct device *dev) #endif /* CONFIG_PM */ #ifdef CONFIG_PM_SLEEP -static int hda_codec_force_resume(struct device *dev) -{ - int ret; - - /* The get/put pair below enforces the runtime resume even if the - * device hasn't been used at suspend time. This trick is needed to - * update the jack state change during the sleep. - */ - pm_runtime_get_noresume(dev); - ret = pm_runtime_force_resume(dev); - pm_runtime_put(dev); - return ret; -} - static int hda_codec_pm_suspend(struct device *dev) { dev->power.power_state = PMSG_SUSPEND; @@ -2975,7 +2961,7 @@ static int hda_codec_pm_suspend(struct device *dev) static int hda_codec_pm_resume(struct device *dev) { dev->power.power_state = PMSG_RESUME; - return hda_codec_force_resume(dev); + return pm_runtime_force_resume(dev); } static int hda_codec_pm_freeze(struct device *dev) @@ -2987,13 +2973,13 @@ static int hda_codec_pm_freeze(struct device *dev) static int hda_codec_pm_thaw(struct device *dev) { dev->power.power_state = PMSG_THAW; - return hda_codec_force_resume(dev); + return pm_runtime_force_resume(dev); } static int hda_codec_pm_restore(struct device *dev) { dev->power.power_state = PMSG_RESTORE; - return hda_codec_force_resume(dev); + return pm_runtime_force_resume(dev); } #endif /* CONFIG_PM_SLEEP */ -- 2.21.0