diff options
author | Lukas Wunner <lukas@wunner.de> | 2018-05-24 19:01:07 +0200 |
---|---|---|
committer | Takashi Iwai <tiwai@suse.de> | 2018-05-24 20:16:47 +0200 |
commit | 009f8c90f571d87855914dbc20e6c0ea2a3b19ae (patch) | |
tree | 3f4272a78bc8703a5a18d895681d2c9c8b790b5f /sound/pci/cs46xx/cs46xx_lib.c | |
parent | ALSA: timer: Fix pause event notification (diff) | |
download | linux-009f8c90f571d87855914dbc20e6c0ea2a3b19ae.tar.xz linux-009f8c90f571d87855914dbc20e6c0ea2a3b19ae.zip |
ALSA: hda - Fix runtime PM
Before commit 3b5b899ca67d ("ALSA: hda: Make use of core codec functions
to sync power state"), hda_set_power_state() returned the response to
the Get Power State verb, a 32-bit unsigned integer whose expected value
is 0x233 after transitioning a codec to D3, and 0x0 after transitioning
it to D0.
The response value is significant because hda_codec_runtime_suspend()
does not clear the codec's bit in the codec_powered bitmask unless the
AC_PWRST_CLK_STOP_OK bit (0x200) is set in the response value. That in
turn prevents the HDA controller from runtime suspending because
azx_runtime_idle() checks that the codec_powered bitmask is zero.
Since commit 3b5b899ca67d, hda_set_power_state() only returns 0x0 or
0x1, thereby breaking runtime PM for any HDA controller. That's because
an inline function introduced by the commit returns a bool instead of a
32-bit unsigned int. The change was likely erroneous and resulted from
copying and pasting snd_hda_check_power_state(), which is immediately
preceding the newly introduced inline function. Fix it.
Link: https://bugs.freedesktop.org/show_bug.cgi?id=106597
Fixes: 3b5b899ca67d ("ALSA: hda: Make use of core codec functions to sync power state")
Cc: Alex Deucher <alexander.deucher@amd.com>
Cc: Abhijeet Kumar <abhijeet.kumar@intel.com>
Reported-and-tested-by: Gunnar Krüger <taijian@posteo.de>
Signed-off-by: Lukas Wunner <lukas@wunner.de>
Acked-by: Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
Diffstat (limited to 'sound/pci/cs46xx/cs46xx_lib.c')
0 files changed, 0 insertions, 0 deletions