drm/msm/dpu: add rotation property
authorRob Clark <robdclark@chromium.org>
Thu, 22 Aug 2019 15:46:21 +0000 (08:46 -0700)
committerRob Clark <robdclark@chromium.org>
Tue, 3 Sep 2019 23:17:00 +0000 (16:17 -0700)
Signed-off-by: Rob Clark <robdclark@chromium.org>
drivers/gpu/drm/msm/disp/dpu1/dpu_plane.c

index a89822d..58d5acb 100644 (file)
@@ -1037,8 +1037,21 @@ static void dpu_plane_sspp_atomic_update(struct drm_plane *plane)
                                pstate->multirect_mode);
 
        if (pdpu->pipe_hw->ops.setup_format) {
+               unsigned int rotation;
+
                src_flags = 0x0;
 
+               rotation = drm_rotation_simplify(state->rotation,
+                                                DRM_MODE_ROTATE_0 |
+                                                DRM_MODE_REFLECT_X |
+                                                DRM_MODE_REFLECT_Y);
+
+               if (rotation & DRM_MODE_REFLECT_X)
+                       src_flags |= DPU_SSPP_FLIP_LR;
+
+               if (rotation & DRM_MODE_REFLECT_Y)
+                       src_flags |= DPU_SSPP_FLIP_UD;
+
                /* update format */
                pdpu->pipe_hw->ops.setup_format(pdpu->pipe_hw, fmt, src_flags,
                                pstate->multirect_index);
@@ -1519,6 +1532,13 @@ struct drm_plane *dpu_plane_init(struct drm_device *dev,
        if (ret)
                DPU_ERROR("failed to install zpos property, rc = %d\n", ret);
 
+       drm_plane_create_rotation_property(plane,
+                       DRM_MODE_ROTATE_0,
+                       DRM_MODE_ROTATE_0 |
+                       DRM_MODE_ROTATE_180 |
+                       DRM_MODE_REFLECT_X |
+                       DRM_MODE_REFLECT_Y);
+
        drm_plane_enable_fb_damage_clips(plane);
 
        /* success! finalize initialization */