//enable layer,open:1,enable;0 disable static int win0_open(struct rk30_lcdc_device *lcdc_dev,bool open) { spin_lock(&lcdc_dev->reg_lock); if(likely(lcdc_dev->clk_on)) { if(open) { if(!lcdc_dev->atv_layer_cnt) { printk(KERN_INFO "lcdc%d wakeup from standby!\n",lcdc_dev->id); lcdc_msk_reg(lcdc_dev, SYS_CTRL0,m_LCDC_STANDBY,v_LCDC_STANDBY(0)); } lcdc_dev->atv_layer_cnt++; } else if((lcdc_dev->atv_layer_cnt > 0) && (!open)) { lcdc_dev->atv_layer_cnt--; } lcdc_dev->driver.layer_par[0]->state = open; lcdc_msk_reg(lcdc_dev, SYS_CTRL1, m_W0_EN, v_W0_EN(open)); if(!lcdc_dev->atv_layer_cnt) //if no layer used,disable lcdc { printk(KERN_INFO "no layer of lcdc%d is used,go to standby!\n",lcdc_dev->id); lcdc_msk_reg(lcdc_dev, SYS_CTRL0,m_LCDC_STANDBY,v_LCDC_STANDBY(1)); } lcdc_cfg_done(lcdc_dev); } spin_unlock(&lcdc_dev->reg_lock); return 0; }
//enable layer,open:1,enable;0 disable static int win0_open(struct rk3066b_lcdc_device *lcdc_dev,bool open) { spin_lock(&lcdc_dev->reg_lock); if(likely(lcdc_dev->clk_on)) { if(open) { if(!lcdc_dev->atv_layer_cnt) { LcdMskReg(lcdc_dev, SYS_CFG,m_LCDC_STANDBY,v_LCDC_STANDBY(0)); } lcdc_dev->atv_layer_cnt++; } else { lcdc_dev->atv_layer_cnt--; } lcdc_dev->driver.layer_par[0]->state = open; LcdMskReg(lcdc_dev, SYS_CFG, m_W0_EN, v_W0_EN(open)); if(!lcdc_dev->atv_layer_cnt) //if no layer used,disable lcdc { LcdMskReg(lcdc_dev, SYS_CFG,m_LCDC_STANDBY,v_LCDC_STANDBY(1)); } //LCDC_REG_CFG_DONE(); } spin_unlock(&lcdc_dev->reg_lock); printk(KERN_INFO "lcdc%d win0 %s\n",lcdc_dev->id,open?"open":"closed"); return 0; }