[ALSA] hda-intel - Add flush_scheduled_work() in snd_hda_codec_free()
authorTakashi Iwai <tiwai@suse.de>
Wed, 15 Aug 2007 20:18:22 +0000 (22:18 +0200)
committerJaroslav Kysela <perex@perex.cz>
Tue, 16 Oct 2007 13:58:59 +0000 (15:58 +0200)
Added flush_scheduled_work() in snd_hda_codec_free() to make sure that
the all work is gone.  Also, optimized the condition to schedule the
delayed work in snd_hda_power_down().

Signed-off-by: Takashi Iwai <tiwai@suse.de>
Signed-off-by: Jaroslav Kysela <perex@suse.cz>
sound/pci/hda/hda_codec.c

index 0e923f3f0a80a875e1e6d8ee449b133f1e35488e..0b9029436bb4842ecebd7604fe191733d22c6c6f 100644 (file)
@@ -525,6 +525,7 @@ static void snd_hda_codec_free(struct hda_codec *codec)
                return;
 #ifdef CONFIG_SND_HDA_POWER_SAVE
        cancel_delayed_work(&codec->power_work);
+       flush_scheduled_work();
 #endif
        list_del(&codec->list);
        codec->bus->caddr_tbl[codec->addr] = NULL;
@@ -2223,7 +2224,7 @@ void snd_hda_power_up(struct hda_codec *codec)
 void snd_hda_power_down(struct hda_codec *codec)
 {
        --codec->power_count;
-       if (!codec->power_on)
+       if (!codec->power_on || codec->power_count)
                return;
        if (power_save)
                schedule_delayed_work(&codec->power_work,