From: Gustavo Padovan <gustavo.pado...@collabora.co.uk>

This issue was caused by the latest exynos_update_plane() clean up
that unified plane operations. After those changes the plane failed
to go the On state. This patch fix this problem by doing correct account
of exynos_crtc->enabled.

Signed-off-by: Gustavo Padovan <gustavo.padovan at collabora.co.uk>
---
 drivers/gpu/drm/exynos/exynos_drm_crtc.c | 12 ++++++++++--
 1 file changed, 10 insertions(+), 2 deletions(-)

diff --git a/drivers/gpu/drm/exynos/exynos_drm_crtc.c 
b/drivers/gpu/drm/exynos/exynos_drm_crtc.c
index a85c451..1dbd0e3 100644
--- a/drivers/gpu/drm/exynos/exynos_drm_crtc.c
+++ b/drivers/gpu/drm/exynos/exynos_drm_crtc.c
@@ -119,6 +119,7 @@ static int exynos_drm_crtc_mode_set_base(struct drm_crtc 
*crtc, int x, int y,
        struct drm_framebuffer *fb = crtc->primary->fb;
        unsigned int crtc_w;
        unsigned int crtc_h;
+       int ret;

        /* when framebuffer changing is requested, crtc's dpms should be on */
        if (exynos_crtc->dpms > DRM_MODE_DPMS_ON) {
@@ -129,8 +130,15 @@ static int exynos_drm_crtc_mode_set_base(struct drm_crtc 
*crtc, int x, int y,
        crtc_w = fb->width - x;
        crtc_h = fb->height - y;

-       return exynos_update_plane(crtc->primary, crtc, fb, 0, 0,
-                                  crtc_w, crtc_h, x, y, crtc_w, crtc_h);
+       ret = exynos_update_plane(crtc->primary, crtc, fb, 0, 0,
+                                 crtc_w, crtc_h, x, y, crtc_w, crtc_h);
+       if (!ret)
+               return ret;
+
+       exynos_plane_dpms(crtc->primary, DRM_MODE_DPMS_ON);
+
+       return 0;
+
 }

 static void exynos_drm_crtc_disable(struct drm_crtc *crtc)
-- 
1.9.3

Reply via email to