• Lukas Wunner's avatar
    ALSA: hda - Fix runtime PM · 009f8c90
    Lukas Wunner authored
    Before commit 3b5b899c ("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 3b5b899c, 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: 3b5b899c ("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: default avatarGunnar Krüger <taijian@posteo.de>
    Signed-off-by: default avatarLukas Wunner <lukas@wunner.de>
    Acked-by: default avatarAlex Deucher <alexander.deucher@amd.com>
    Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
    009f8c90
hda_local.h 24.2 KB