drm/rockchip: vop: fix scale abnormal after window power on/off
authorMark Yao <mark.yao@rock-chips.com>
Mon, 28 Nov 2016 08:32:52 +0000 (16:32 +0800)
committerHuang, Tao <huangtao@rock-chips.com>
Wed, 30 Nov 2016 03:57:54 +0000 (11:57 +0800)
Change-Id: Ifcaddf2f2b1c9c031bdf28ceb80468cfb79ce52b
Signed-off-by: Mark Yao <mark.yao@rock-chips.com>
drivers/gpu/drm/rockchip/rockchip_drm_vop.c

index 6ac5afff4653e1f9d29e41eaf882a5528fc4f33d..19219c079b4fb686c2a358c110e49645023b368e 100644 (file)
@@ -748,6 +748,12 @@ static void vop_crtc_disable(struct drm_crtc *crtc)
                struct vop_win *win = &vop->win[i];
 
                spin_lock(&vop->reg_lock);
+               if (win->phy->scl && win->phy->scl->ext) {
+                       VOP_SCL_SET_EXT(vop, win, yrgb_hor_scl_mode, SCALE_NONE);
+                       VOP_SCL_SET_EXT(vop, win, yrgb_ver_scl_mode, SCALE_NONE);
+                       VOP_SCL_SET_EXT(vop, win, cbcr_hor_scl_mode, SCALE_NONE);
+                       VOP_SCL_SET_EXT(vop, win, cbcr_ver_scl_mode, SCALE_NONE);
+               }
                VOP_WIN_SET(vop, win, enable, 0);
                spin_unlock(&vop->reg_lock);
        }
@@ -923,6 +929,16 @@ static void vop_plane_atomic_disable(struct drm_plane *plane,
 
        spin_lock(&vop->reg_lock);
 
+       /*
+        * FIXUP: some of the vop scale would be abnormal after windows power
+        * on/off so deinit scale to scale_none mode.
+        */
+       if (win->phy->scl && win->phy->scl->ext) {
+               VOP_SCL_SET_EXT(vop, win, yrgb_hor_scl_mode, SCALE_NONE);
+               VOP_SCL_SET_EXT(vop, win, yrgb_ver_scl_mode, SCALE_NONE);
+               VOP_SCL_SET_EXT(vop, win, cbcr_hor_scl_mode, SCALE_NONE);
+               VOP_SCL_SET_EXT(vop, win, cbcr_ver_scl_mode, SCALE_NONE);
+       }
        VOP_WIN_SET(vop, win, enable, 0);
 
        spin_unlock(&vop->reg_lock);