From: yxj Date: Sat, 3 Nov 2012 08:43:48 +0000 (+0800) Subject: rk3066b lcdc: turn on frame start interrupt after all lcdc register resumed X-Git-Tag: firefly_0821_release~8280 X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=b9b12ad8da1e3a514b78dc60317ad2d34864b422;p=firefly-linux-kernel-4.4.55.git rk3066b lcdc: turn on frame start interrupt after all lcdc register resumed --- diff --git a/drivers/video/rockchip/lcdc/rk3066b_lcdc.c b/drivers/video/rockchip/lcdc/rk3066b_lcdc.c index 83297d9a96c8..7c90640e1af3 100644 --- a/drivers/video/rockchip/lcdc/rk3066b_lcdc.c +++ b/drivers/video/rockchip/lcdc/rk3066b_lcdc.c @@ -353,8 +353,6 @@ static int rk3066b_lcdc_blank(struct rk_lcdc_device_driver*lcdc_drv,int layer_id { struct rk3066b_lcdc_device * lcdc_dev = container_of(lcdc_drv,struct rk3066b_lcdc_device ,driver); - printk(KERN_INFO "%s>>>>>%d\n",__func__, blank_mode); - spin_lock(&lcdc_dev->reg_lock); if(likely(lcdc_dev->clk_on)) { @@ -371,6 +369,7 @@ static int rk3066b_lcdc_blank(struct rk_lcdc_device_driver*lcdc_drv,int layer_id break; } LCDC_REG_CFG_DONE(); + printk(KERN_INFO "%s>>>>>%d\n",__func__, blank_mode); } spin_unlock(&lcdc_dev->reg_lock); @@ -785,6 +784,22 @@ static int rk3066b_fb_get_layer(struct rk_lcdc_device_driver *dev_drv,const char return layer_id; } + +static void rk3066b_lcdc_reg_dump(struct rk3066b_lcdc_device *lcdc_dev) +{ + int *cbase = (int *)lcdc_dev->reg_vir_base; + int v; + int i,j; + + for(i=0; i<=(0xa0>>4);i++) + { + for(j=0;j<4;j++) + printk("%08x ",readl(cbase+i*4 +j)); + printk("\n"); + } + +} + int rk3066b_lcdc_early_suspend(struct rk_lcdc_device_driver *dev_drv) { struct rk3066b_lcdc_device *lcdc_dev = container_of(dev_drv,struct rk3066b_lcdc_device,driver); @@ -805,7 +820,7 @@ int rk3066b_lcdc_early_suspend(struct rk_lcdc_device_driver *dev_drv) } - mdelay(1); + mdelay(30); clk_disable(lcdc_dev->dclk); clk_disable(lcdc_dev->hclk); clk_disable(lcdc_dev->aclk); @@ -826,12 +841,18 @@ int rk3066b_lcdc_early_resume(struct rk_lcdc_device_driver *dev_drv) clk_enable(lcdc_dev->dclk); clk_enable(lcdc_dev->aclk); } - memcpy((u8*)lcdc_dev->preg, (u8*)&lcdc_dev->regbak, 0xc4); //resume reg + mdelay(5); + memcpy((u8*)lcdc_dev->preg, (u8*)&lcdc_dev->regbak, 0x24); //resume reg ,skip INT_STATUS reg + memcpy(((u8*)lcdc_dev->preg) + 0x28,((u8*)&lcdc_dev->regbak) + 0x28, 0x74); spin_lock(&lcdc_dev->reg_lock); if(lcdc_dev->atv_layer_cnt) { LcdMskReg(lcdc_dev, SYS_CFG,m_LCDC_STANDBY,v_LCDC_STANDBY(0)); + LcdMskReg(lcdc_dev, INT_STATUS, m_SCANNING_CLEAR | m_FRM_STARTCLEAR | m_HOR_STARTCLEAR | + m_SCANNING_MASK | m_HOR_STARTMASK | m_FRM_STARTMASK , + v_SCANNING_CLEAR(1) | v_FRM_STARTCLEAR(1) | v_HOR_STARTCLEAR(1) | + v_SCANNING_MASK(1) | v_FRM_STARTMASK(0) | v_HOR_STARTMASK(1)); LCDC_REG_CFG_DONE(); } lcdc_dev->clk_on = 1; @@ -1063,17 +1084,17 @@ static struct platform_driver rk3066b_lcdc_driver = { }, .suspend = rk3066b_lcdc_suspend, .resume = rk3066b_lcdc_resume, - .shutdown = rk3066b_lcdc_shutdown, + .shutdown = rk3066b_lcdc_shutdown, }; static int __init rk3066b_lcdc_init(void) { - return platform_driver_register(&rk3066b_lcdc_driver); + return platform_driver_register(&rk3066b_lcdc_driver); } static void __exit rk3066b_lcdc_exit(void) { - platform_driver_unregister(&rk3066b_lcdc_driver); + platform_driver_unregister(&rk3066b_lcdc_driver); }