From: Giridhar Pemmasani <giri@lmc.cs.sunysb.edu>

It seems that pci config space is messed up after resume for Intel ICH4
audio controller (on Dell Latitude D600, but I notice that others also
complain about this problem).  Consequently resume from S3 causes oops with
snd_intel8x0 module.  If the module is removed before suspend and loaded
afterwards, I still get oops.  The following simple patch fixes the
problem.  With this, I can leave alsa untouched during suspend/resume.


---

 25-akpm/sound/pci/intel8x0.c |    3 +++
 1 files changed, 3 insertions(+)

diff -puN sound/pci/intel8x0.c~intel8x0-resume-fix sound/pci/intel8x0.c
--- 25/sound/pci/intel8x0.c~intel8x0-resume-fix	2004-04-17 23:14:12.980616680 -0700
+++ 25-akpm/sound/pci/intel8x0.c	2004-04-17 23:14:12.990615160 -0700
@@ -445,6 +445,7 @@ struct _snd_intel8x0 {
 	
 #ifdef CONFIG_PM
 	int in_suspend;
+	u32 pci_state[64 / sizeof(u32)];
 #endif
 };
 
@@ -2223,11 +2224,13 @@ static int snd_intel8x0_suspend(struct p
 {
 	intel8x0_t *chip = snd_magic_cast(intel8x0_t, pci_get_drvdata(dev), return -ENXIO);
 	intel8x0_suspend(chip);
+	pci_save_state(dev, chip->pci_state);
 	return 0;
 }
 static int snd_intel8x0_resume(struct pci_dev *dev)
 {
 	intel8x0_t *chip = snd_magic_cast(intel8x0_t, pci_get_drvdata(dev), return -ENXIO);
+	pci_restore_state(dev, chip->pci_state);
 	intel8x0_resume(chip);
 	return 0;
 }

_