static int rk3188_lcdc_open(struct rk_lcdc_device_driver *dev_drv,int layer_id,bool open) { int i=0; int __iomem *c; int v; struct rk3188_lcdc_device *lcdc_dev = container_of(dev_drv,struct rk3188_lcdc_device,driver); if((open) && (!lcdc_dev->atv_layer_cnt)) //enable clk,when first layer open { rk3188_lcdc_clk_enable(lcdc_dev); #ifndef CONFIG_FB_CONSOLE_GALLAND_FIX //Galland to fix FRAMEBUFFER_CONSOLE on rk30 and rk31 rk3188_lcdc_reg_resume(lcdc_dev); //resume reg rk3188_load_screen(dev_drv,1); 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); //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); } lcdc_msk_reg(lcdc_dev,SYS_CTRL,m_DSP_LUT_EN,v_DSP_LUT_EN(1)); //enable dsp lut } spin_unlock(&lcdc_dev->reg_lock); #endif } if(layer_id == 0) { win0_open(lcdc_dev,open); } else if(layer_id == 1) { win1_open(lcdc_dev,open); } else { printk("invalid win number:%d\n",layer_id); } if((!open) && (!lcdc_dev->atv_layer_cnt)) //when all layer closed,disable clk { rk3188_lcdc_clk_disable(lcdc_dev); } printk(KERN_INFO "lcdc%d win%d %s,atv layer:%d\n", lcdc_dev->id,layer_id,open?"open":"closed", lcdc_dev->atv_layer_cnt); return 0; }
static int rk30_lcdc_open(struct rk_lcdc_device_driver *dev_drv,int layer_id,bool open) { int i=0; int __iomem *c; int v; struct rk30_lcdc_device *lcdc_dev = container_of(dev_drv,struct rk30_lcdc_device,driver); //printk("%s>>open:%d>>cnt:%d\n",__func__,open,lcdc_dev->atv_layer_cnt); if((open) && (!lcdc_dev->atv_layer_cnt)) //enable clk,when first layer open { rk30_lcdc_clk_enable(lcdc_dev); memcpy((u8*)lcdc_dev->regs, (u8*)lcdc_dev->regsbak, 0xc4); //resume reg rk30_load_screen(dev_drv,1); 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++) { 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)); } spin_unlock(&lcdc_dev->reg_lock); } if(layer_id == 0) { win0_open(lcdc_dev,open); } else if(layer_id == 1) { win1_open(lcdc_dev,open); } else if(layer_id == 2) { win2_open(lcdc_dev,open); } if((!open) && (!lcdc_dev->atv_layer_cnt)) //when all layer closed,disable clk { rk30_lcdc_clk_disable(lcdc_dev); } printk(KERN_INFO "lcdc%d win%d %s,atv layer:%d\n", lcdc_dev->id,layer_id,open?"open":"closed", lcdc_dev->atv_layer_cnt); return 0; }
static int rk3066b_lcdc_open(struct rk_lcdc_device_driver *dev_drv,int layer_id,bool open) { struct rk3066b_lcdc_device *lcdc_dev = container_of(dev_drv,struct rk3066b_lcdc_device,driver); if(layer_id == 0) { win0_open(lcdc_dev,open); } else if(layer_id == 1) { win1_open(lcdc_dev,open); } return 0; }
static int rk3066b_lcdc_open(struct rk_lcdc_device_driver *dev_drv,int layer_id,bool open) { int i=0; int __iomem *c; int v; struct rk3066b_lcdc_device *lcdc_dev = container_of(dev_drv,struct rk3066b_lcdc_device,driver); if((open) && (!lcdc_dev->atv_layer_cnt)) //enable clk,when first layer open { rk3066b_lcdc_clk_enable(lcdc_dev); rk3066b_lcdc_reg_resume(lcdc_dev); //resume reg LcdMskReg(lcdc_dev, SYS_CFG,m_LCDC_STANDBY,v_LCDC_STANDBY(0)); rk3066b_load_screen(dev_drv,1); spin_lock(&lcdc_dev->reg_lock); 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(); 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 } spin_unlock(&lcdc_dev->reg_lock); } if(layer_id == 0) { win0_open(lcdc_dev,open); } else if(layer_id == 1) { win1_open(lcdc_dev,open); } if((!open) && (!lcdc_dev->atv_layer_cnt)) //when all layer closed,disable clk { LcdMskReg(lcdc_dev, INT_STATUS, m_FRM_STARTCLEAR, v_FRM_STARTCLEAR(1)); LcdMskReg(lcdc_dev, SYS_CFG,m_LCDC_STANDBY,v_LCDC_STANDBY(1)); LCDC_REG_CFG_DONE(); rk3066b_lcdc_clk_disable(lcdc_dev); } return 0; }