From: Mauro Carvalho Chehab <mchehab@brturbo.com.br>

- Some error treatment implemented at resume functions.

Signed-off-by: Mauro Carvalho Chehab <mchehab@brturbo.com.br>
Signed-off-by: Andrew Morton <akpm@osdl.org>
---

 drivers/media/video/bttv-driver.c     |   18 ++++++++++++++++--
 drivers/media/video/cx88/cx88-mpeg.c  |   20 +++++++++++++++++---
 drivers/media/video/cx88/cx88-video.c |   20 ++++++++++++++++++--
 3 files changed, 51 insertions(+), 7 deletions(-)

diff -puN drivers/media/video/bttv-driver.c~v4l-some-error-treatment-implemented-at-resume drivers/media/video/bttv-driver.c
--- devel/drivers/media/video/bttv-driver.c~v4l-some-error-treatment-implemented-at-resume	2005-09-06 21:14:28.000000000 -0700
+++ devel-akpm/drivers/media/video/bttv-driver.c	2005-09-06 21:14:28.000000000 -0700
@@ -4111,15 +4111,29 @@ static int bttv_resume(struct pci_dev *p
 {
         struct bttv *btv = pci_get_drvdata(pci_dev);
 	unsigned long flags;
+	int err;
 
 	dprintk("bttv%d: resume\n", btv->c.nr);
 
 	/* restore pci state */
 	if (btv->state.disabled) {
-		pci_enable_device(pci_dev);
+		err=pci_enable_device(pci_dev);
+		if (err) {
+			printk(KERN_WARNING "bttv%d: Can't enable device.\n",
+								btv->c.nr);
+			return err;
+		}
 		btv->state.disabled = 0;
 	}
-	pci_set_power_state(pci_dev, PCI_D0);
+	err=pci_set_power_state(pci_dev, PCI_D0);
+	if (err) {
+		pci_disable_device(pci_dev);
+		printk(KERN_WARNING "bttv%d: Can't enable device.\n",
+							btv->c.nr);
+		btv->state.disabled = 1;
+		return err;
+	}
+
 	pci_restore_state(pci_dev);
 
 	/* restore bt878 state */
diff -puN drivers/media/video/cx88/cx88-mpeg.c~v4l-some-error-treatment-implemented-at-resume drivers/media/video/cx88/cx88-mpeg.c
--- devel/drivers/media/video/cx88/cx88-mpeg.c~v4l-some-error-treatment-implemented-at-resume	2005-09-06 21:14:28.000000000 -0700
+++ devel-akpm/drivers/media/video/cx88/cx88-mpeg.c	2005-09-06 21:14:28.000000000 -0700
@@ -455,14 +455,28 @@ int cx8802_suspend_common(struct pci_dev
 
 int cx8802_resume_common(struct pci_dev *pci_dev)
 {
-        struct cx8802_dev *dev = pci_get_drvdata(pci_dev);
+	struct cx8802_dev *dev = pci_get_drvdata(pci_dev);
 	struct cx88_core *core = dev->core;
+	int err;
 
 	if (dev->state.disabled) {
-		pci_enable_device(pci_dev);
+		err=pci_enable_device(pci_dev);
+		if (err) {
+			printk(KERN_ERR "%s: can't enable device\n",
+					       dev->core->name);
+			return err;
+		}
 		dev->state.disabled = 0;
 	}
-	pci_set_power_state(pci_dev, PCI_D0);
+	err=pci_set_power_state(pci_dev, PCI_D0);
+	if (err) {
+		printk(KERN_ERR "%s: can't enable device\n",
+					       dev->core->name);
+		pci_disable_device(pci_dev);
+		dev->state.disabled = 1;
+
+		return err;
+	}
 	pci_restore_state(pci_dev);
 
 	/* FIXME: re-initialize hardware */
diff -puN drivers/media/video/cx88/cx88-video.c~v4l-some-error-treatment-implemented-at-resume drivers/media/video/cx88/cx88-video.c
--- devel/drivers/media/video/cx88/cx88-video.c~v4l-some-error-treatment-implemented-at-resume	2005-09-06 21:14:28.000000000 -0700
+++ devel-akpm/drivers/media/video/cx88/cx88-video.c	2005-09-06 21:14:28.000000000 -0700
@@ -2005,12 +2005,28 @@ static int cx8800_resume(struct pci_dev 
 {
 	struct cx8800_dev *dev = pci_get_drvdata(pci_dev);
 	struct cx88_core *core = dev->core;
+	int err;
 
 	if (dev->state.disabled) {
-		pci_enable_device(pci_dev);
+		err=pci_enable_device(pci_dev);
+		if (err) {
+			printk(KERN_ERR "%s: can't enable device\n",
+						       core->name);
+			return err;
+		}
+
 		dev->state.disabled = 0;
 	}
-	pci_set_power_state(pci_dev, PCI_D0);
+	err= pci_set_power_state(pci_dev, PCI_D0);
+	if (err) {
+		printk(KERN_ERR "%s: can't enable device\n",
+				       core->name);
+
+		pci_disable_device(pci_dev);
+		dev->state.disabled = 1;
+
+		return err;
+	}
 	pci_restore_state(pci_dev);
 
 	/* FIXME: re-initialize hardware */
_