omapdrm does not pass the rotation angle to dispc. We need to pass the
rotation angle to fully support TILER rotation with YUV formats.

Signed-off-by: Tomi Valkeinen <tomi.valkei...@ti.com>
---
 drivers/gpu/drm/omapdrm/omap_fb.c | 12 ++++++++++++
 1 file changed, 12 insertions(+)

diff --git a/drivers/gpu/drm/omapdrm/omap_fb.c 
b/drivers/gpu/drm/omapdrm/omap_fb.c
index 2dca19a0c2ff..4e434b2097ec 100644
--- a/drivers/gpu/drm/omapdrm/omap_fb.c
+++ b/drivers/gpu/drm/omapdrm/omap_fb.c
@@ -167,6 +167,8 @@ void omap_framebuffer_update_scanout(struct drm_framebuffer 
*fb,
                uint32_t w = win->src_w;
                uint32_t h = win->src_h;
 
+               /* note: DRM rotates counter-clockwise, TILER + DSS rotates 
clockwise */
+
                switch (win->rotation & DRM_ROTATE_MASK) {
                default:
                        dev_err(fb->dev->dev, "invalid rotation: %02x",
@@ -201,6 +203,15 @@ void omap_framebuffer_update_scanout(struct 
drm_framebuffer *fb,
                if (orient & MASK_X_INVERT)
                        x += w - 1;
 
+               if (!(orient & MASK_XY_FLIP) && !(orient & MASK_Y_INVERT))
+                       info->rotation = OMAP_DSS_ROT_0;
+               else if (!(orient & MASK_XY_FLIP) && (orient & MASK_Y_INVERT))
+                       info->rotation = OMAP_DSS_ROT_180;
+               else if ((orient & MASK_XY_FLIP) && (orient & MASK_Y_INVERT))
+                       info->rotation = OMAP_DSS_ROT_90;
+               else if ((orient & MASK_XY_FLIP) && !(orient & MASK_Y_INVERT))
+                       info->rotation = OMAP_DSS_ROT_270;
+
                omap_gem_rotated_paddr(plane->bo, orient, x, y, &info->paddr);
                info->rotation_type = OMAP_DSS_ROT_TILER;
                info->screen_width  = omap_gem_tiled_stride(plane->bo, orient);
@@ -221,6 +232,7 @@ void omap_framebuffer_update_scanout(struct drm_framebuffer 
*fb,
 
                info->paddr         = get_linear_addr(plane, format, 0, x, y);
                info->rotation_type = OMAP_DSS_ROT_DMA;
+               info->rotation = OMAP_DSS_ROT_0;
                info->screen_width  = plane->pitch;
        }
 
-- 
2.7.4

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

Reply via email to