static int rk3066b_lcdc_clk_enable(struct rk3066b_lcdc_device *lcdc_dev)
{
+ if(!lcdc_dev->clk_on)
+ {
+ clk_enable(lcdc_dev->hclk);
+ clk_enable(lcdc_dev->dclk);
+ clk_enable(lcdc_dev->aclk);
+ clk_enable(lcdc_dev->pd);
- clk_enable(lcdc_dev->hclk);
- clk_enable(lcdc_dev->dclk);
- clk_enable(lcdc_dev->aclk);
- clk_enable(lcdc_dev->pd);
-
- spin_lock(&lcdc_dev->reg_lock);
- lcdc_dev->clk_on = 1;
- spin_unlock(&lcdc_dev->reg_lock);
+ spin_lock(&lcdc_dev->reg_lock);
+ lcdc_dev->clk_on = 1;
+ spin_unlock(&lcdc_dev->reg_lock);
+ }
printk("rk3066b lcdc%d clk enable...\n",lcdc_dev->id);
return 0;
static int rk3066b_lcdc_clk_disable(struct rk3066b_lcdc_device *lcdc_dev)
{
- spin_lock(&lcdc_dev->reg_lock);
- lcdc_dev->clk_on = 0;
- spin_unlock(&lcdc_dev->reg_lock);
- mdelay(25);
- clk_disable(lcdc_dev->dclk);
- clk_disable(lcdc_dev->hclk);
- clk_disable(lcdc_dev->aclk);
- clk_disable(lcdc_dev->pd);
+ if(lcdc_dev->clk_on)
+ {
+ spin_lock(&lcdc_dev->reg_lock);
+ lcdc_dev->clk_on = 0;
+ spin_unlock(&lcdc_dev->reg_lock);
+ mdelay(25);
+ clk_disable(lcdc_dev->dclk);
+ clk_disable(lcdc_dev->hclk);
+ clk_disable(lcdc_dev->aclk);
+ clk_disable(lcdc_dev->pd);
+ }
printk("rk3066b lcdc%d clk disable...\n",lcdc_dev->id);
return 0;
break;
}
LCDC_REG_CFG_DONE();
- printk(KERN_INFO "%s>>>>>%d\n",__func__, blank_mode);
}
spin_unlock(&lcdc_dev->reg_lock);
+
+ dev_info(lcdc_drv->dev,"blank mode:%d\n",blank_mode);
return 0;
}
return 0;
}
-
- mdelay(30);
- clk_disable(lcdc_dev->dclk);
- clk_disable(lcdc_dev->hclk);
- clk_disable(lcdc_dev->aclk);
- clk_disable(lcdc_dev->pd);
+ rk3066b_lcdc_clk_disable(lcdc_dev);
return 0;
}
if(dev_drv->screen_ctr_info->io_enable) //power on
dev_drv->screen_ctr_info->io_enable();
- if(!lcdc_dev->clk_on)
+ if(lcdc_dev->atv_layer_cnt) //only resume the lcdc that need to use
{
- clk_enable(lcdc_dev->pd);
- clk_enable(lcdc_dev->hclk);
- clk_enable(lcdc_dev->dclk);
- clk_enable(lcdc_dev->aclk);
- }
- 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);
+
+ rk3066b_lcdc_clk_enable(lcdc_dev);
+ 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);
- if(dev_drv->cur_screen->dsp_lut) //resume dsp lut
- {
- LcdMskReg(lcdc_dev,SYS_CFG,m_DSIP_LUT_CTL,v_DSIP_LUT_CTL(0));
- LCDC_REG_CFG_DONE();
+ spin_lock(&lcdc_dev->reg_lock);
- mdelay(25); //wait for dsp lut disabled
- for(i=0;i<256;i++)
+ if(dev_drv->cur_screen->dsp_lut) //resume dsp lut
{
- v = dev_drv->cur_screen->dsp_lut[i];
- c = lcdc_dev->dsp_lut_addr_base+i;
- writel_relaxed(v,c);
+ LcdMskReg(lcdc_dev,SYS_CFG,m_DSIP_LUT_CTL,v_DSIP_LUT_CTL(0));
+ LCDC_REG_CFG_DONE();
+
+ mdelay(25); //wait for dsp lut disabled
+ for(i=0;i<256;i++)
+ {
+ v = dev_drv->cur_screen->dsp_lut[i];
+ c = lcdc_dev->dsp_lut_addr_base+i;
+ writel_relaxed(v,c);
+ }
+ LcdMskReg(lcdc_dev,SYS_CFG,m_DSIP_LUT_CTL,v_DSIP_LUT_CTL(1));//enable dsp lut
}
- LcdMskReg(lcdc_dev,SYS_CFG,m_DSIP_LUT_CTL,v_DSIP_LUT_CTL(1));//enable dsp lut
- }
- 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(0) | v_FRM_STARTMASK(0) | v_HOR_STARTMASK(1));
LCDC_REG_CFG_DONE();
- }
- lcdc_dev->clk_on = 1;
- spin_unlock(&lcdc_dev->reg_lock);
+
+ spin_unlock(&lcdc_dev->reg_lock);
- if(!lcdc_dev->atv_layer_cnt)
- rk3066b_lcdc_clk_disable(lcdc_dev);
+ }
if(dev_drv->screen0->standby)
dev_drv->screen0->standby(0); //screen wake up
static int rk30_lcdc_clk_enable(struct rk30_lcdc_device *lcdc_dev)
{
+ if(!lcdc_dev->clk_on)
+ {
+ clk_enable(lcdc_dev->pd);
+ clk_enable(lcdc_dev->hclk);
+ clk_enable(lcdc_dev->dclk);
+ clk_enable(lcdc_dev->aclk);
- clk_enable(lcdc_dev->pd);
- clk_enable(lcdc_dev->hclk);
- clk_enable(lcdc_dev->dclk);
- clk_enable(lcdc_dev->aclk);
-
- spin_lock(&lcdc_dev->reg_lock);
- lcdc_dev->clk_on = 1;
- spin_unlock(&lcdc_dev->reg_lock);
+ spin_lock(&lcdc_dev->reg_lock);
+ lcdc_dev->clk_on = 1;
+ spin_unlock(&lcdc_dev->reg_lock);
+ }
printk("rk30 lcdc%d clk enable...\n",lcdc_dev->id);
+
return 0;
}
static int rk30_lcdc_clk_disable(struct rk30_lcdc_device *lcdc_dev)
{
- spin_lock(&lcdc_dev->reg_lock);
- lcdc_dev->clk_on = 0;
- spin_unlock(&lcdc_dev->reg_lock);
- mdelay(30);
- clk_disable(lcdc_dev->dclk);
- clk_disable(lcdc_dev->hclk);
- clk_disable(lcdc_dev->aclk);
- clk_disable(lcdc_dev->pd);
+ if(lcdc_dev->clk_on)
+ {
+ spin_lock(&lcdc_dev->reg_lock);
+ lcdc_dev->clk_on = 0;
+ spin_unlock(&lcdc_dev->reg_lock);
+ mdelay(30);
+ clk_disable(lcdc_dev->dclk);
+ clk_disable(lcdc_dev->hclk);
+ clk_disable(lcdc_dev->aclk);
+ clk_disable(lcdc_dev->pd);
+ }
printk("rk30 lcdc%d clk disable...\n",lcdc_dev->id);
return 0;
}
{
struct rk30_lcdc_device * lcdc_dev = container_of(lcdc_drv,struct rk30_lcdc_device ,driver);
- printk(KERN_INFO "%s>>>>>%d\n",__func__, blank_mode);
-
spin_lock(&lcdc_dev->reg_lock);
if(likely(lcdc_dev->clk_on))
{
}
spin_unlock(&lcdc_dev->reg_lock);
+ dev_info(lcdc_drv->dev,"blank mode:%d\n",blank_mode);
+
return 0;
}
if(dev_drv->screen_ctr_info->io_enable) //power on
dev_drv->screen_ctr_info->io_enable();
- if(!lcdc_dev->clk_on)
+ if(lcdc_dev->atv_layer_cnt)
{
rk30_lcdc_clk_enable(lcdc_dev);
- }
- memcpy((u8*)lcdc_dev->regs, (u8*)lcdc_dev->regsbak, 0xc4); //resume reg
+
+ memcpy((u8*)lcdc_dev->regs, (u8*)lcdc_dev->regsbak, 0xc4); //resume reg
- spin_lock(&lcdc_dev->reg_lock);
- if(dev_drv->cur_screen->dsp_lut) //resume dsp lut
- {
- lcdc_msk_reg(lcdc_dev,SYS_CTRL1,m_DSP_LUT_RAM_EN,v_DSP_LUT_RAM_EN(0));
- lcdc_cfg_done(lcdc_dev);
- mdelay(25);
- for(i=0;i<256;i++)
+ spin_lock(&lcdc_dev->reg_lock);
+ if(dev_drv->cur_screen->dsp_lut) //resume dsp lut
{
- v = dev_drv->cur_screen->dsp_lut[i];
- c = lcdc_dev->dsp_lut_addr_base+i;
- writel_relaxed(v,c);
-
+ lcdc_msk_reg(lcdc_dev,SYS_CTRL1,m_DSP_LUT_RAM_EN,v_DSP_LUT_RAM_EN(0));
+ lcdc_cfg_done(lcdc_dev);
+ mdelay(25);
+ for(i=0;i<256;i++)
+ {
+ v = dev_drv->cur_screen->dsp_lut[i];
+ c = lcdc_dev->dsp_lut_addr_base+i;
+ writel_relaxed(v,c);
+
+ }
+ lcdc_msk_reg(lcdc_dev,SYS_CTRL1,m_DSP_LUT_RAM_EN,v_DSP_LUT_RAM_EN(1));
}
- lcdc_msk_reg(lcdc_dev,SYS_CTRL1,m_DSP_LUT_RAM_EN,v_DSP_LUT_RAM_EN(1));
- }
- if(lcdc_dev->atv_layer_cnt)
- {
+
lcdc_msk_reg(lcdc_dev, SYS_CTRL0,m_LCDC_STANDBY,v_LCDC_STANDBY(0));
lcdc_cfg_done(lcdc_dev);
- }
- spin_unlock(&lcdc_dev->reg_lock);
+
+ spin_unlock(&lcdc_dev->reg_lock);
- if(!lcdc_dev->atv_layer_cnt)
- rk30_lcdc_clk_disable(lcdc_dev);
+ }
if(dev_drv->screen0->standby)
dev_drv->screen0->standby(0); //screen wake up
static int rk3188_lcdc_clk_enable(struct rk3188_lcdc_device *lcdc_dev)
{
- clk_enable(lcdc_dev->hclk);
- clk_enable(lcdc_dev->dclk);
- clk_enable(lcdc_dev->aclk);
- clk_enable(lcdc_dev->pd);
+ if(!lcdc_dev->clk_on)
+ {
+ clk_enable(lcdc_dev->hclk);
+ clk_enable(lcdc_dev->dclk);
+ clk_enable(lcdc_dev->aclk);
+ clk_enable(lcdc_dev->pd);
+ spin_lock(&lcdc_dev->reg_lock);
+ lcdc_dev->clk_on = 1;
+ spin_unlock(&lcdc_dev->reg_lock);
+ }
- spin_lock(&lcdc_dev->reg_lock);
- lcdc_dev->clk_on = 1;
- spin_unlock(&lcdc_dev->reg_lock);
+
printk("rk3188 lcdc%d clk enable...\n",lcdc_dev->id);
return 0;
static int rk3188_lcdc_clk_disable(struct rk3188_lcdc_device *lcdc_dev)
{
- spin_lock(&lcdc_dev->reg_lock);
- lcdc_dev->clk_on = 0;
- spin_unlock(&lcdc_dev->reg_lock);
- mdelay(25);
- clk_disable(lcdc_dev->dclk);
- clk_disable(lcdc_dev->hclk);
- clk_disable(lcdc_dev->aclk);
- clk_disable(lcdc_dev->pd);
+ if(lcdc_dev->clk_on)
+ {
+ spin_lock(&lcdc_dev->reg_lock);
+ lcdc_dev->clk_on = 0;
+ spin_unlock(&lcdc_dev->reg_lock);
+ mdelay(25);
+ clk_disable(lcdc_dev->dclk);
+ clk_disable(lcdc_dev->hclk);
+ clk_disable(lcdc_dev->aclk);
+ clk_disable(lcdc_dev->pd);
+ }
+
printk("rk3188 lcdc%d clk disable...\n",lcdc_dev->id);
return 0;
}
}
+
static void rk3188_lcdc_read_reg_defalut_cfg(struct rk3188_lcdc_device *lcdc_dev)
{
int reg=0;
return 0;
}
+
static int rk3188_lcdc_reg_resume(struct rk3188_lcdc_device *lcdc_dev)
{
memcpy((u8*)lcdc_dev->regs, (u8*)lcdc_dev->regsbak, 0x84);
return -EINVAL;
}
if (IS_ERR(lcdc_dev->pd) || (IS_ERR(lcdc_dev->aclk)) ||(IS_ERR(lcdc_dev->dclk)) || (IS_ERR(lcdc_dev->hclk)))
- {
+ {
printk(KERN_ERR "failed to get lcdc%d clk source\n",lcdc_dev->id);
}
if(!support_uboot_display())
break;
}
lcdc_cfg_done(lcdc_dev);
- dev_info(dev_drv->dev,"blank mode:%d\n",blank_mode);
+
}
spin_unlock(&lcdc_dev->reg_lock);
+ dev_info(dev_drv->dev,"blank mode:%d\n",blank_mode);
+
return 0;
}
if(dev_drv->screen_ctr_info->io_enable) //power on
dev_drv->screen_ctr_info->io_enable();
- if(!lcdc_dev->clk_on)
+
+ if(lcdc_dev->atv_layer_cnt) //only resume the lcdc that need to use
{
rk3188_lcdc_clk_enable(lcdc_dev);
- }
- rk3188_lcdc_reg_resume(lcdc_dev); //resume reg
+
+ rk3188_lcdc_reg_resume(lcdc_dev); //resume reg
- spin_lock(&lcdc_dev->reg_lock);
- if(dev_drv->cur_screen->dsp_lut) //resume dsp lut
- {
- lcdc_msk_reg(lcdc_dev,SYS_CTRL,m_DSP_LUT_EN,v_DSP_LUT_EN(0));
- lcdc_cfg_done(lcdc_dev);
- mdelay(25);
- for(i=0;i<256;i++)
+ spin_lock(&lcdc_dev->reg_lock);
+ if(dev_drv->cur_screen->dsp_lut) //resume dsp lut
{
- v = dev_drv->cur_screen->dsp_lut[i];
- c = lcdc_dev->dsp_lut_addr_base+i;
- writel_relaxed(v,c);
+ lcdc_msk_reg(lcdc_dev,SYS_CTRL,m_DSP_LUT_EN,v_DSP_LUT_EN(0));
+ lcdc_cfg_done(lcdc_dev);
+ mdelay(25);
+ for(i=0;i<256;i++)
+ {
+ v = dev_drv->cur_screen->dsp_lut[i];
+ c = lcdc_dev->dsp_lut_addr_base+i;
+ writel_relaxed(v,c);
+ }
+ lcdc_msk_reg(lcdc_dev,SYS_CTRL,m_DSP_LUT_EN,v_DSP_LUT_EN(1));
}
- lcdc_msk_reg(lcdc_dev,SYS_CTRL,m_DSP_LUT_EN,v_DSP_LUT_EN(1));
- }
-
- if(lcdc_dev->atv_layer_cnt)
- {
+
+
lcdc_msk_reg(lcdc_dev,DSP_CTRL1,m_DSP_OUT_ZERO ,v_DSP_OUT_ZERO(0));
lcdc_msk_reg(lcdc_dev, SYS_CTRL,m_LCDC_STANDBY,v_LCDC_STANDBY(0));
lcdc_cfg_done(lcdc_dev);
+
+ spin_unlock(&lcdc_dev->reg_lock);
}
- spin_unlock(&lcdc_dev->reg_lock);
- if(!lcdc_dev->atv_layer_cnt)
- rk3188_lcdc_clk_disable(lcdc_dev);
+
if(dev_drv->screen0->standby)
dev_drv->screen0->standby(0); //screen wake up