update fb suspend and resume
authorzyw <zyw@rock-chips.com>
Mon, 14 Feb 2011 06:30:08 +0000 (14:30 +0800)
committerzyw <zyw@rock-chips.com>
Mon, 14 Feb 2011 06:30:08 +0000 (14:30 +0800)
drivers/video/rk29_fb.c

index d9a0348a922a8eb730f3e624c35e813960471c3d..d2ebb1f8fbfeb3e2bebda46e1475db130ff38555 100644 (file)
@@ -1891,7 +1891,7 @@ struct suspend_info {
        struct rk29fb_inf *inf;
 };
 
-static void rk29fb_suspend(struct early_suspend *h)
+static void rk29fb_early_suspend(struct early_suspend *h)
 {
        struct suspend_info *info = container_of(h, struct suspend_info,
                                                early_suspend);
@@ -1912,6 +1912,49 @@ static void rk29fb_suspend(struct early_suspend *h)
                fbprintk(">>>>>> power down the screen! \n");
                inf->cur_screen->standby(1);
        }
+}
+
+static void rk29fb_early_resume(struct early_suspend *h)
+{
+       struct suspend_info *info = container_of(h, struct suspend_info,
+                                       early_suspend);
+
+    struct rk29fb_inf *inf = info->inf;
+
+    fbprintk(">>>>>> %s : %s\n", __FILE__, __FUNCTION__);
+    if(!inf) {
+        printk("inf==0, rk29fb_resume fail! \n");
+        return ;
+    }
+
+       if(inf->cur_screen->standby)
+       {
+               fbprintk(">>>>>> power on the screen! \n");
+               inf->cur_screen->standby(0);
+       }
+    msleep(100);
+    set_lcd_pin(g_pdev, 1);
+       memcpy((u8*)inf->preg, (u8*)&inf->regbak, 0xa4);  //resume reg
+}
+
+static struct suspend_info suspend_info = {
+       .early_suspend.suspend = rk29fb_early_suspend,
+       .early_suspend.resume = rk29fb_early_resume,
+       .early_suspend.level = EARLY_SUSPEND_LEVEL_DISABLE_FB,
+};
+#endif
+
+#ifdef CONFIG_PM
+static int rk29fb_suspend(struct platform_device *pdev, pm_message_t mesg)
+{
+    struct rk29fb_inf *inf = platform_get_drvdata(pdev);
+
+    fbprintk(">>>>>> %s : %s\n", __FILE__, __FUNCTION__);
+
+    if(!inf) {
+        printk("inf==0, rk29fb_suspend fail! \n");
+        return 0;
+    }
 
     LcdMskReg(inf, DSP_CTRL1, m_BLANK_MODE , v_BLANK_MODE(1));
     LcdMskReg(inf, SYS_CONFIG, m_STANDBY, v_STANDBY(1));
@@ -1936,20 +1979,18 @@ static void rk29fb_suspend(struct early_suspend *h)
        // pmu_set_power_domain(PD_DISPLAY, 0);
                inf->in_suspend = 1;
        }
-
+    return 0;
 }
 
-static void rk29fb_resume(struct early_suspend *h)
+static int rk29fb_resume(struct platform_device *pdev)
 {
-       struct suspend_info *info = container_of(h, struct suspend_info,
-                                       early_suspend);
-
-    struct rk29fb_inf *inf = info->inf;
+    struct rk29fb_inf *inf = platform_get_drvdata(pdev);
 
     fbprintk(">>>>>> %s : %s\n", __FILE__, __FUNCTION__);
+
     if(!inf) {
         printk("inf==0, rk29fb_resume fail! \n");
-        return ;
+        return 0;
     }
 
        if(inf->in_suspend)
@@ -1973,21 +2014,9 @@ static void rk29fb_resume(struct early_suspend *h)
     LcdMskReg(inf, SYS_CONFIG, m_STANDBY, v_STANDBY(0));
     LcdWrReg(inf, REG_CFG_DONE, 0x01);
 
-       if(inf->cur_screen->standby)
-       {
-               fbprintk(">>>>>> power on the screen! \n");
-               inf->cur_screen->standby(0);
-       }
-    msleep(100);
-    set_lcd_pin(g_pdev, 1);
-       memcpy((u8*)inf->preg, (u8*)&inf->regbak, 0xa4);  //resume reg
+       return 0;
 }
 
-static struct suspend_info suspend_info = {
-       .early_suspend.suspend = rk29fb_suspend,
-       .early_suspend.resume = rk29fb_resume,
-       .early_suspend.level = EARLY_SUSPEND_LEVEL_DISABLE_FB,
-};
 #endif
 
 static int __init rk29fb_probe (struct platform_device *pdev)
@@ -2423,6 +2452,10 @@ static void rk29fb_shutdown(struct platform_device *pdev)
 static struct platform_driver rk29fb_driver = {
        .probe          = rk29fb_probe,
        .remove         = rk29fb_remove,
+       #ifdef CONFIG_PM
+       .suspend        = rk29fb_suspend,
+       .resume         = rk29fb_resume,
+       #endif
        .driver         = {
                .name   = "rk29-fb",
                .owner  = THIS_MODULE,