ALSA: hda - Fix unbalanced runtime PM refcount after S3/S4
authorTakashi Iwai <tiwai@suse.de>
Wed, 23 Oct 2013 23:20:24 +0000 (01:20 +0200)
committerTakashi Iwai <tiwai@suse.de>
Thu, 24 Oct 2013 07:21:45 +0000 (09:21 +0200)
When a machine goes to S3/S4 after power-save is enabled, the runtime
PM refcount might be incorrectly decreased because the power-down
triggered soon after resume assumes that the controller was already
powered up, and issues the pm_notify down.

This patch fixes the incorrect pm_notify call simply by checking the
current value properly.

Cc: <stable@vger.kernel.org>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
sound/pci/hda/hda_codec.c

index 5b6c4e3c92ca40a7000909c1540d7d6787d36946..748c6a941963cbcb6108bc8aac90843cca7ee72f 100644 (file)
@@ -4864,8 +4864,8 @@ static void hda_power_work(struct work_struct *work)
        spin_unlock(&codec->power_lock);
 
        state = hda_call_codec_suspend(codec, true);
-       codec->pm_down_notified = 0;
-       if (!bus->power_keep_link_on && (state & AC_PWRST_CLK_STOP_OK)) {
+       if (!codec->pm_down_notified &&
+           !bus->power_keep_link_on && (state & AC_PWRST_CLK_STOP_OK)) {
                codec->pm_down_notified = 1;
                hda_call_pm_notify(bus, false);
        }