From 1ad5af25477a980bc2c74e859e47822302ad72cf Mon Sep 17 00:00:00 2001 From: zyw Date: Mon, 14 Feb 2011 14:30:08 +0800 Subject: [PATCH] update fb suspend and resume --- drivers/video/rk29_fb.c | 75 +++++++++++++++++++++++++++++------------ 1 file changed, 54 insertions(+), 21 deletions(-) diff --git a/drivers/video/rk29_fb.c b/drivers/video/rk29_fb.c index d9a0348a922a..d2ebb1f8fbfe 100644 --- a/drivers/video/rk29_fb.c +++ b/drivers/video/rk29_fb.c @@ -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, -- 2.34.1