From 6cced012bc64b88c5f71de36257f4dfd1e936ce6 Mon Sep 17 00:00:00 2001 From: Mark Yao Date: Fri, 1 Sep 2017 09:58:52 +0800 Subject: [PATCH] drm/rockchip: vop: set system_status when mode changed Change-Id: Ibee99a6a91bc4abc303c2fbf7c423dc4c13a696f Signed-off-by: Mark Yao --- drivers/gpu/drm/rockchip/rockchip_drm_vop.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c index 2a05b6456722..b82275b242ee 100644 --- a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c +++ b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c @@ -19,6 +19,7 @@ #include #include #include +#include #include #include @@ -37,6 +38,7 @@ #include #include #include +#include #include #include "rockchip_drm_drv.h" @@ -988,6 +990,8 @@ static void vop_initial(struct drm_crtc *crtc) static void vop_crtc_disable(struct drm_crtc *crtc) { struct vop *vop = to_vop(crtc); + int sys_status = drm_crtc_index(crtc) ? + SYS_STATUS_LCDC1 : SYS_STATUS_LCDC0; mutex_lock(&vop->vop_lock); drm_crtc_vblank_off(crtc); @@ -1029,6 +1033,8 @@ static void vop_crtc_disable(struct drm_crtc *crtc) clk_disable_unprepare(vop->aclk); clk_disable_unprepare(vop->hclk); mutex_unlock(&vop->vop_lock); + + rockchip_clear_system_status(sys_status); } static void vop_plane_destroy(struct drm_plane *plane) @@ -1483,6 +1489,8 @@ static int vop_crtc_loader_protect(struct drm_crtc *crtc, bool on) { struct rockchip_drm_private *private = crtc->dev->dev_private; struct vop *vop = to_vop(crtc); + int sys_status = drm_crtc_index(crtc) ? + SYS_STATUS_LCDC1 : SYS_STATUS_LCDC0; if (on == vop->loader_protect) return 0; @@ -1502,6 +1510,7 @@ static int vop_crtc_loader_protect(struct drm_crtc *crtc, bool on) } } + rockchip_set_system_status(sys_status); vop_power_enable(crtc); enable_irq(vop->irq); drm_crtc_vblank_on(crtc); @@ -1764,8 +1773,11 @@ static void vop_crtc_enable(struct drm_crtc *crtc) u16 vsync_len = adjusted_mode->crtc_vsync_end - adjusted_mode->crtc_vsync_start; u16 vact_st = adjusted_mode->crtc_vtotal - adjusted_mode->crtc_vsync_start; u16 vact_end = vact_st + vdisplay; + int sys_status = drm_crtc_index(crtc) ? + SYS_STATUS_LCDC1 : SYS_STATUS_LCDC0; uint32_t val; + rockchip_set_system_status(sys_status); mutex_lock(&vop->vop_lock); vop_initial(crtc);