|
@@ -7,6 +7,8 @@
|
|
|
* Karl Lessard <klessard@sunrisetelecom.com>
|
|
|
* <c.pellegrin@exadron.com>
|
|
|
*
|
|
|
+ * PM support added by Rodolfo Giometti <giometti@linux.it>
|
|
|
+ *
|
|
|
* Copyright 2002 MontaVista Software
|
|
|
* Author: MontaVista Software, Inc.
|
|
|
* ppopov@mvista.com or source@mvista.com
|
|
@@ -602,17 +604,52 @@ int au1100fb_drv_remove(struct device *dev)
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
+#ifdef CONFIG_PM
|
|
|
+static u32 sys_clksrc;
|
|
|
+static struct au1100fb_regs fbregs;
|
|
|
+
|
|
|
int au1100fb_drv_suspend(struct device *dev, pm_message_t state)
|
|
|
{
|
|
|
- /* TODO */
|
|
|
+ struct au1100fb_device *fbdev = dev_get_drvdata(dev);
|
|
|
+
|
|
|
+ if (!fbdev)
|
|
|
+ return 0;
|
|
|
+
|
|
|
+ /* Save the clock source state */
|
|
|
+ sys_clksrc = au_readl(SYS_CLKSRC);
|
|
|
+
|
|
|
+ /* Blank the LCD */
|
|
|
+ au1100fb_fb_blank(VESA_POWERDOWN, &fbdev->info);
|
|
|
+
|
|
|
+ /* Stop LCD clocking */
|
|
|
+ au_writel(sys_clksrc & ~SYS_CS_ML_MASK, SYS_CLKSRC);
|
|
|
+
|
|
|
+ memcpy(&fbregs, fbdev->regs, sizeof(struct au1100fb_regs));
|
|
|
+
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
int au1100fb_drv_resume(struct device *dev)
|
|
|
{
|
|
|
- /* TODO */
|
|
|
+ struct au1100fb_device *fbdev = dev_get_drvdata(dev);
|
|
|
+
|
|
|
+ if (!fbdev)
|
|
|
+ return 0;
|
|
|
+
|
|
|
+ memcpy(fbdev->regs, &fbregs, sizeof(struct au1100fb_regs));
|
|
|
+
|
|
|
+ /* Restart LCD clocking */
|
|
|
+ au_writel(sys_clksrc, SYS_CLKSRC);
|
|
|
+
|
|
|
+ /* Unblank the LCD */
|
|
|
+ au1100fb_fb_blank(VESA_NO_BLANKING, &fbdev->info);
|
|
|
+
|
|
|
return 0;
|
|
|
}
|
|
|
+#else
|
|
|
+#define au1100fb_drv_suspend NULL
|
|
|
+#define au1100fb_drv_resume NULL
|
|
|
+#endif
|
|
|
|
|
|
static struct device_driver au1100fb_driver = {
|
|
|
.name = "au1100-lcd",
|