drm: rcar-du: Share plane atomic check code between Gen2 and Gen3
authorLaurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
Tue, 15 Aug 2017 15:45:21 +0000 (18:45 +0300)
committerLaurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
Mon, 4 Dec 2017 11:04:11 +0000 (13:04 +0200)
The plane atomic check implementation is identical on Gen2 (DU planes)
and Gen3 (VSP planes), but two separate functions exist as they operate
on different data structures. Refactor the code to share the
implementation.

Signed-off-by: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
Tested-by: Kieran Bingham <kieran.bingham+renesas@ideasonboard.com>
Reviewed-by: Kieran Bingham <kieran.bingham+renesas@ideasonboard.com>
drivers/gpu/drm/rcar-du/rcar_du_plane.c
drivers/gpu/drm/rcar-du/rcar_du_plane.h
drivers/gpu/drm/rcar-du/rcar_du_vsp.c

index 61833cc1c6991c3e0bfaaaa8752ef7047545fffa..4f076c364f2583cb30fdf2ac08ff100dd59635fa 100644 (file)
@@ -565,27 +565,26 @@ void __rcar_du_plane_setup(struct rcar_du_group *rgrp,
        }
 }
 
-static int rcar_du_plane_atomic_check(struct drm_plane *plane,
-                                     struct drm_plane_state *state)
+int __rcar_du_plane_atomic_check(struct drm_plane *plane,
+                                struct drm_plane_state *state,
+                                const struct rcar_du_format_info **format)
 {
-       struct rcar_du_plane_state *rstate = to_rcar_plane_state(state);
-       struct rcar_du_plane *rplane = to_rcar_plane(plane);
-       struct rcar_du_device *rcdu = rplane->group->dev;
+       struct drm_device *dev = plane->dev;
 
        if (!state->fb || !state->crtc) {
-               rstate->format = NULL;
+               *format = NULL;
                return 0;
        }
 
        if (state->src_w >> 16 != state->crtc_w ||
            state->src_h >> 16 != state->crtc_h) {
-               dev_dbg(rcdu->dev, "%s: scaling not supported\n", __func__);
+               dev_dbg(dev->dev, "%s: scaling not supported\n", __func__);
                return -EINVAL;
        }
 
-       rstate->format = rcar_du_format_info(state->fb->format->format);
-       if (rstate->format == NULL) {
-               dev_dbg(rcdu->dev, "%s: unsupported format %08x\n", __func__,
+       *format = rcar_du_format_info(state->fb->format->format);
+       if (*format == NULL) {
+               dev_dbg(dev->dev, "%s: unsupported format %08x\n", __func__,
                        state->fb->format->format);
                return -EINVAL;
        }
@@ -593,6 +592,14 @@ static int rcar_du_plane_atomic_check(struct drm_plane *plane,
        return 0;
 }
 
+static int rcar_du_plane_atomic_check(struct drm_plane *plane,
+                                     struct drm_plane_state *state)
+{
+       struct rcar_du_plane_state *rstate = to_rcar_plane_state(state);
+
+       return __rcar_du_plane_atomic_check(plane, state, &rstate->format);
+}
+
 static void rcar_du_plane_atomic_update(struct drm_plane *plane,
                                        struct drm_plane_state *old_state)
 {
index f62e09f195de595316972e22df221dad1fbfd6e2..890321b4665d16d241af49f2a9c62e87982a8749 100644 (file)
@@ -73,6 +73,10 @@ to_rcar_plane_state(struct drm_plane_state *state)
 int rcar_du_atomic_check_planes(struct drm_device *dev,
                                struct drm_atomic_state *state);
 
+int __rcar_du_plane_atomic_check(struct drm_plane *plane,
+                                struct drm_plane_state *state,
+                                const struct rcar_du_format_info **format);
+
 int rcar_du_planes_init(struct rcar_du_group *rgrp);
 
 void __rcar_du_plane_setup(struct rcar_du_group *rgrp,
index 2c96147bc44434ccb1f850d7a3aa594024da46d5..dd66dcb8da239bf2e4c1f87fbccdce81dd13412e 100644 (file)
@@ -268,28 +268,8 @@ static int rcar_du_vsp_plane_atomic_check(struct drm_plane *plane,
                                          struct drm_plane_state *state)
 {
        struct rcar_du_vsp_plane_state *rstate = to_rcar_vsp_plane_state(state);
-       struct rcar_du_vsp_plane *rplane = to_rcar_vsp_plane(plane);
-       struct rcar_du_device *rcdu = rplane->vsp->dev;
-
-       if (!state->fb || !state->crtc) {
-               rstate->format = NULL;
-               return 0;
-       }
 
-       if (state->src_w >> 16 != state->crtc_w ||
-           state->src_h >> 16 != state->crtc_h) {
-               dev_dbg(rcdu->dev, "%s: scaling not supported\n", __func__);
-               return -EINVAL;
-       }
-
-       rstate->format = rcar_du_format_info(state->fb->format->format);
-       if (rstate->format == NULL) {
-               dev_dbg(rcdu->dev, "%s: unsupported format %08x\n", __func__,
-                       state->fb->format->format);
-               return -EINVAL;
-       }
-
-       return 0;
+       return __rcar_du_plane_atomic_check(plane, state, &rstate->format);
 }
 
 static void rcar_du_vsp_plane_atomic_update(struct drm_plane *plane,