From a75b244f2003e5a77540d58661d12542abf67832 Mon Sep 17 00:00:00 2001 From: Huang Jiachai Date: Tue, 21 Jun 2016 15:06:01 +0800 Subject: [PATCH] video: rockchip: rk fb: disable all layer and update vop state when switch screen Change-Id: Ibdd82c477b2fdd2f21b5cbb708048bebbf1dfc7b Signed-off-by: Huang Jiachai --- drivers/video/rockchip/rk_fb.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/drivers/video/rockchip/rk_fb.c b/drivers/video/rockchip/rk_fb.c index d7aad15415d2..53a6c6d6e839 100644 --- a/drivers/video/rockchip/rk_fb.c +++ b/drivers/video/rockchip/rk_fb.c @@ -3627,7 +3627,6 @@ int rk_fb_switch_screen(struct rk_screen *screen, int enable, int lcdc_id) /* If there is more than one lcdc device, we disable * the layer which attached to this device */ - dev_drv->suspend_flag = 1; flush_kthread_worker(&dev_drv->update_regs_worker); for (i = 0; i < dev_drv->lcdc_win_num; i++) { if (dev_drv->win[i] && dev_drv->win[i]->state) @@ -3657,6 +3656,15 @@ int rk_fb_switch_screen(struct rk_screen *screen, int enable, int lcdc_id) dev_drv->cur_screen->x_mirror = dev_drv->rotate_mode & X_MIRROR; dev_drv->cur_screen->y_mirror = dev_drv->rotate_mode & Y_MIRROR; } + + if (load_screen || (rk_fb->disp_policy != DISPLAY_POLICY_BOX)) { + for (i = 0; i < dev_drv->lcdc_win_num; i++) { + if (dev_drv->win[i] && dev_drv->win[i]->state && + dev_drv->ops->win_direct_en) + dev_drv->ops->win_direct_en(dev_drv, i, 0); + } + } + if (!dev_drv->uboot_logo || load_screen || (rk_fb->disp_policy != DISPLAY_POLICY_BOX)) { for (i = 0; i < dev_drv->lcdc_win_num; i++) { @@ -3693,7 +3701,7 @@ int rk_fb_switch_screen(struct rk_screen *screen, int enable, int lcdc_id) dev_drv->ops->cfg_done(dev_drv); } else if (!dev_drv->win[win_id]->state) { dev_drv->ops->open(dev_drv, win_id, 1); - dev_drv->suspend_flag = 0; + /* dev_drv->suspend_flag = 0; */ /* mutex_lock(&dev_drv->win_config); * info->var.xoffset = 0; * info->var.yoffset = 0; -- 2.34.1