Title: [7852] trunk/drivers/video/bfin_adv7393fb.c: This bug is caused by:
Revision
7852
Author
hennerich
Date
2009-11-20 04:42:52 -0500 (Fri, 20 Nov 2009)

Log Message

This bug is caused by: 
[uclinux-dist Bugs Item #5712] I2C client drivers using dev_pm_ops fail
to receive suspend/resume callbacks

Temporary fix:
Restore struct i2c_driver suspend/resume

Modified Paths

Diff

Modified: trunk/drivers/video/bfin_adv7393fb.c (7851 => 7852)


--- trunk/drivers/video/bfin_adv7393fb.c	2009-11-20 06:06:16 UTC (rev 7851)
+++ trunk/drivers/video/bfin_adv7393fb.c	2009-11-20 09:42:52 UTC (rev 7852)
@@ -743,6 +743,10 @@
 	return 0;
 }
 
+
+#undef USE_DEV_PM_OPS
+
+#ifdef USE_DEV_PM_OPS
 #ifdef CONFIG_PM
 static int bfin_adv7393_fb_suspend(struct device *dev)
 {
@@ -779,7 +783,43 @@
 	.resume  = bfin_adv7393_fb_resume,
 };
 #endif
+#else
+#ifdef CONFIG_PM
+static int bfin_adv7393_fb_suspend(struct i2c_client *client, pm_message_t state)
+{
+	struct adv7393fb_device *fbdev = i2c_get_clientdata(client);
 
+	if (fbdev->open) {
+		bfin_disable_dma();
+		bfin_disable_ppi();
+		dma_desc_list(fbdev, DESTRUCT);
+	}
+	adv7393_mode(client, POWER_DOWN);
+
+	return 0;
+}
+
+static int bfin_adv7393_fb_resume(struct i2c_client *client)
+{
+	struct adv7393fb_device *fbdev = i2c_get_clientdata(client);
+
+	adv7393_mode(client, POWER_ON);
+
+	if (fbdev->open) {
+		dma_desc_list(fbdev, BUILD);
+		bfin_config_ppi(fbdev);
+		bfin_config_dma(fbdev);
+		bfin_enable_ppi();
+	}
+
+	return 0;
+}
+#else
+#define bfin_adv7393_fb_suspend	NULL
+#define bfin_adv7393_fb_resume	NULL
+#endif
+#endif
+
 static const struct i2c_device_id bfin_adv7393_id[] = {
 	{DRIVER_NAME, 0},
 	{}
@@ -790,12 +830,18 @@
 static struct i2c_driver bfin_adv7393_fb_driver = {
 	.driver = {
 		   .name = DRIVER_NAME,
+#ifdef USE_DEV_PM_OPS
 #ifdef CONFIG_PM
 		   .pm   = &bfin_adv7393_dev_pm_ops,
 #endif
+#endif
 	},
 	.probe = bfin_adv7393_fb_probe,
 	.remove = __devexit_p(bfin_adv7393_fb_remove),
+#ifndef USE_DEV_PM_OPS
+	.suspend = bfin_adv7393_fb_suspend,
+	.resume = bfin_adv7393_fb_resume,
+#endif
 	.id_table = bfin_adv7393_id,
 };
 
_______________________________________________
Linux-kernel-commits mailing list
[email protected]
https://blackfin.uclinux.org/mailman/listinfo/linux-kernel-commits

Reply via email to