lkml.org 
[lkml]   [2004]   [Dec]   [4]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
Patch in this message
/
Date
From
SubjectRe: [PATCH] Fix ALSA resume
Martin Josefsson <gandalf@wlug.westbo.se> wrote:
>
> Some time ago, a patch was merged that removed pci_save_state() and
> pci_restore_state() from various ALSA drivers. That patch also added
> pci_restore_state() to sound/core/init.c but didn't add pci_save_state()
> anywhere. This is needed since the core pci handling doesn't do this for
> us anymore.
>
> My laptop doesn't resume (gets what I assume is an ACPI timeout and
> hangs solid) without this small obvious patch.
>
> Signed-off-by: Martin Josefsson <gandalf@wlug.westbo.se>
> Fixed-by: Takashi Iwai <tiwai@suse.de>
>
> --- linux/sound/core/init.c 8 Nov 2004 11:37:08 -0000 1.48
> +++ linux/sound/core/init.c 12 Nov 2004 13:56:32 -0000
> @@ -782,12 +782,15 @@<br>
> int snd_card_pci_suspend(struct pci_dev *dev, u32 state)
> {
> snd_card_t *card = pci_get_drvdata(dev);
> + int err;
> if (! card || ! card->pm_suspend)
> return 0;
> if (card->power_state == SNDRV_CTL_POWER_D3hot)
> return 0;
> /* FIXME: correct state value? */
> - return card->pm_suspend(card, 0);
> + err = card->pm_suspend(card, 0);
> + pci_save_state(dev);
> + return err;
> }
>
> int snd_card_pci_resume(struct pci_dev *dev)

OK. That's a better version of Joshua Kwan's patch:


From: Joshua Kwan <joshk@triplehelix.org>

Fix an intel8x0 problem which is breaking swsusp resumes.

Signed-off-by: Joshua Kwan <joshk@triplehelix.org>
Signed-off-by: Andrew Morton <akpm@osdl.org>
---

25-akpm/sound/pci/intel8x0.c | 2 ++
25-akpm/sound/pci/intel8x0m.c | 2 ++
2 files changed, 4 insertions(+)

diff -puN sound/pci/intel8x0.c~intel8x0-pm-fix sound/pci/intel8x0.c
--- 25/sound/pci/intel8x0.c~intel8x0-pm-fix 2004-12-04 00:13:21.801532720 -0800
+++ 25-akpm/sound/pci/intel8x0.c 2004-12-04 00:13:21.808531656 -0800
@@ -2279,6 +2279,8 @@ static int intel8x0_suspend(snd_card_t *
for (i = 0; i < 3; i++)
if (chip->ac97[i])
snd_ac97_suspend(chip->ac97[i]);
+ pci_save_state(chip->pci);
+ pci_disable_device(chip->pci);
snd_power_change_state(card, SNDRV_CTL_POWER_D3hot);
return 0;
}
diff -puN sound/pci/intel8x0m.c~intel8x0-pm-fix sound/pci/intel8x0m.c
--- 25/sound/pci/intel8x0m.c~intel8x0-pm-fix 2004-12-04 00:13:21.802532568 -0800
+++ 25-akpm/sound/pci/intel8x0m.c 2004-12-04 00:13:21.809531504 -0800
@@ -1091,6 +1091,8 @@ static int intel8x0m_suspend(snd_card_t
snd_pcm_suspend_all(chip->pcm[i]);
if (chip->ac97)
snd_ac97_suspend(chip->ac97);
+ pci_save_state(chip->pci);
+ pci_disable_device(chip->pci);
snd_power_change_state(card, SNDRV_CTL_POWER_D3hot);
return 0;
}
_

But Joshua crosses his heart and swears that the pci_disable_device() is
also needed for a successful swsusp resume.

Should snd_card_pci_suspend() be doing the pci_disable_device() as well, or
it that a responsibility of the driver which called snd_card_pci_suspend()?

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/

\
 
 \ /
  Last update: 2005-03-22 14:08    [W:0.128 / U:0.112 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site