}
spin_unlock(&lcdc_dev->reg_lock);
- if (dev_drv->wait_fs) {
+ /*if (dev_drv->wait_fs) {*/
+ if (0){
spin_lock_irqsave(&dev_drv->cpl_lock, flags);
init_completion(&dev_drv->frame_done);
spin_unlock_irqrestore(&dev_drv->cpl_lock, flags);
{
struct lcdc_device *lcdc_dev =
container_of(dev_drv, struct lcdc_device, driver);
-
+ int i;
+ unsigned int mask, val;
+ struct rk_lcdc_win *win = NULL;
spin_lock(&lcdc_dev->reg_lock);
lcdc_msk_reg(lcdc_dev, SYS_CTRL, m_STANDBY_EN,
v_STANDBY_EN(lcdc_dev->standby));
+ for (i=0;i<4;i++) {
+ win = dev_drv->win[i];
+ if (win->state == 0) {
+ switch (win->id) {
+ case 0:
+ mask = m_WIN0_EN;
+ val = v_WIN0_EN(0);
+ lcdc_msk_reg(lcdc_dev, WIN0_CTRL0, mask,val);
+ break;
+ case 1:
+ mask = m_WIN1_EN;
+ val = v_WIN1_EN(0);
+ lcdc_msk_reg(lcdc_dev, WIN1_CTRL0, mask,val);
+ break;
+ case 2:
+ mask = m_WIN2_EN | m_WIN2_MST0_EN | m_WIN2_MST1_EN |
+ m_WIN2_MST2_EN | m_WIN2_MST3_EN;
+ val = v_WIN2_EN(0) | v_WIN2_MST0_EN(0) | v_WIN2_MST1_EN(0) |
+ v_WIN2_MST2_EN(0) | v_WIN2_MST3_EN(0);
+ lcdc_msk_reg(lcdc_dev, WIN2_CTRL0, mask,val);
+ break;
+ case 3:
+ mask = m_WIN3_EN | m_WIN3_MST0_EN | m_WIN3_MST1_EN |
+ m_WIN3_MST2_EN | m_WIN3_MST3_EN;
+ val = v_WIN3_EN(0) | v_WIN3_MST0_EN(0) | v_WIN3_MST1_EN(0) |
+ v_WIN3_MST2_EN(0) | v_WIN3_MST3_EN(0);
+ lcdc_msk_reg(lcdc_dev, WIN3_CTRL0, mask,val);
+ break;
+ default:
+ break;
+ }
+ }
+ }
lcdc_cfg_done(lcdc_dev);
spin_unlock(&lcdc_dev->reg_lock);
return 0;
timestamp = ktime_get();
lcdc_msk_reg(lcdc_dev, INTR_CTRL0, m_FS_INTR_CLR,
v_FS_INTR_CLR(1));
- if(lcdc_dev->driver.wait_fs){
+ /*if(lcdc_dev->driver.wait_fs){ */
+ if (0) {
spin_lock(&(lcdc_dev->driver.cpl_lock));
complete(&(lcdc_dev->driver.frame_done));
spin_unlock(&(lcdc_dev->driver.cpl_lock));
struct rk_lcdc_driver *ext_dev_drv;
struct rk_lcdc_win *ext_win;
- dev_drv->atv_layer_cnt = regs->win_num;
for(i=0;i<dev_drv->lcdc_win_num;i++){
//old_reg_win_data[i]= regs->reg_win_data[i];
win = dev_drv->win[i];
if(j<regs->win_num){
rk_fb_update_driver(win,®s->reg_win_data[j]);
win->state = 1;
+ dev_drv->ops->set_par(dev_drv,i);
+ dev_drv->ops->pan_display(dev_drv,i);
}else{
win->state = 0;
}
- dev_drv->ops->set_par(dev_drv,i);
- dev_drv->ops->pan_display(dev_drv,i);
}
dev_drv->ops->ovl_mgr(dev_drv, 0, 1);
ret = wait_event_interruptible_timeout(dev_drv->vsync_info.wait,
!ktime_equal(timestamp, dev_drv->vsync_info.timestamp),msecs_to_jiffies(dev_drv->cur_screen->ft+5));
+
#ifdef H_USE_FENCE
sw_sync_timeline_inc(dev_drv->timeline, 1);
#endif
for(i=0;i<regs->win_num;i++){
rk_fb_free_dma_buf(dev_drv->dev,®s->reg_win_data[i]);
}
+ if (dev_drv->wait_fs == 1)
+ kfree(regs);
}
static void rk_fb_update_regs_handler(struct kthread_work *work)