aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm
diff options
context:
space:
mode:
authorLaurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>2017-08-15 11:45:21 -0400
committerLaurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>2017-12-04 06:04:11 -0500
commit9c893a61b79d38b8997cc417a6b359222cf92414 (patch)
tree1ca2b8bff67f6820adccfbf96c5bcd237414bef1 /drivers/gpu/drm
parentdd286a531461748ff1b1b3f1d7255389a131ed27 (diff)
drm: rcar-du: Share plane atomic check code between Gen2 and Gen3
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>
Diffstat (limited to 'drivers/gpu/drm')
-rw-r--r--drivers/gpu/drm/rcar-du/rcar_du_plane.c27
-rw-r--r--drivers/gpu/drm/rcar-du/rcar_du_plane.h4
-rw-r--r--drivers/gpu/drm/rcar-du/rcar_du_vsp.c22
3 files changed, 22 insertions, 31 deletions
diff --git a/drivers/gpu/drm/rcar-du/rcar_du_plane.c b/drivers/gpu/drm/rcar-du/rcar_du_plane.c
index 61833cc1c699..4f076c364f25 100644
--- a/drivers/gpu/drm/rcar-du/rcar_du_plane.c
+++ b/drivers/gpu/drm/rcar-du/rcar_du_plane.c
@@ -565,27 +565,26 @@ void __rcar_du_plane_setup(struct rcar_du_group *rgrp,
565 } 565 }
566} 566}
567 567
568static int rcar_du_plane_atomic_check(struct drm_plane *plane, 568int __rcar_du_plane_atomic_check(struct drm_plane *plane,
569 struct drm_plane_state *state) 569 struct drm_plane_state *state,
570 const struct rcar_du_format_info **format)
570{ 571{
571 struct rcar_du_plane_state *rstate = to_rcar_plane_state(state); 572 struct drm_device *dev = plane->dev;
572 struct rcar_du_plane *rplane = to_rcar_plane(plane);
573 struct rcar_du_device *rcdu = rplane->group->dev;
574 573
575 if (!state->fb || !state->crtc) { 574 if (!state->fb || !state->crtc) {
576 rstate->format = NULL; 575 *format = NULL;
577 return 0; 576 return 0;
578 } 577 }
579 578
580 if (state->src_w >> 16 != state->crtc_w || 579 if (state->src_w >> 16 != state->crtc_w ||
581 state->src_h >> 16 != state->crtc_h) { 580 state->src_h >> 16 != state->crtc_h) {
582 dev_dbg(rcdu->dev, "%s: scaling not supported\n", __func__); 581 dev_dbg(dev->dev, "%s: scaling not supported\n", __func__);
583 return -EINVAL; 582 return -EINVAL;
584 } 583 }
585 584
586 rstate->format = rcar_du_format_info(state->fb->format->format); 585 *format = rcar_du_format_info(state->fb->format->format);
587 if (rstate->format == NULL) { 586 if (*format == NULL) {
588 dev_dbg(rcdu->dev, "%s: unsupported format %08x\n", __func__, 587 dev_dbg(dev->dev, "%s: unsupported format %08x\n", __func__,
589 state->fb->format->format); 588 state->fb->format->format);
590 return -EINVAL; 589 return -EINVAL;
591 } 590 }
@@ -593,6 +592,14 @@ static int rcar_du_plane_atomic_check(struct drm_plane *plane,
593 return 0; 592 return 0;
594} 593}
595 594
595static int rcar_du_plane_atomic_check(struct drm_plane *plane,
596 struct drm_plane_state *state)
597{
598 struct rcar_du_plane_state *rstate = to_rcar_plane_state(state);
599
600 return __rcar_du_plane_atomic_check(plane, state, &rstate->format);
601}
602
596static void rcar_du_plane_atomic_update(struct drm_plane *plane, 603static void rcar_du_plane_atomic_update(struct drm_plane *plane,
597 struct drm_plane_state *old_state) 604 struct drm_plane_state *old_state)
598{ 605{
diff --git a/drivers/gpu/drm/rcar-du/rcar_du_plane.h b/drivers/gpu/drm/rcar-du/rcar_du_plane.h
index f62e09f195de..890321b4665d 100644
--- a/drivers/gpu/drm/rcar-du/rcar_du_plane.h
+++ b/drivers/gpu/drm/rcar-du/rcar_du_plane.h
@@ -73,6 +73,10 @@ to_rcar_plane_state(struct drm_plane_state *state)
73int rcar_du_atomic_check_planes(struct drm_device *dev, 73int rcar_du_atomic_check_planes(struct drm_device *dev,
74 struct drm_atomic_state *state); 74 struct drm_atomic_state *state);
75 75
76int __rcar_du_plane_atomic_check(struct drm_plane *plane,
77 struct drm_plane_state *state,
78 const struct rcar_du_format_info **format);
79
76int rcar_du_planes_init(struct rcar_du_group *rgrp); 80int rcar_du_planes_init(struct rcar_du_group *rgrp);
77 81
78void __rcar_du_plane_setup(struct rcar_du_group *rgrp, 82void __rcar_du_plane_setup(struct rcar_du_group *rgrp,
diff --git a/drivers/gpu/drm/rcar-du/rcar_du_vsp.c b/drivers/gpu/drm/rcar-du/rcar_du_vsp.c
index 2c96147bc444..dd66dcb8da23 100644
--- a/drivers/gpu/drm/rcar-du/rcar_du_vsp.c
+++ b/drivers/gpu/drm/rcar-du/rcar_du_vsp.c
@@ -268,28 +268,8 @@ static int rcar_du_vsp_plane_atomic_check(struct drm_plane *plane,
268 struct drm_plane_state *state) 268 struct drm_plane_state *state)
269{ 269{
270 struct rcar_du_vsp_plane_state *rstate = to_rcar_vsp_plane_state(state); 270 struct rcar_du_vsp_plane_state *rstate = to_rcar_vsp_plane_state(state);
271 struct rcar_du_vsp_plane *rplane = to_rcar_vsp_plane(plane);
272 struct rcar_du_device *rcdu = rplane->vsp->dev;
273
274 if (!state->fb || !state->crtc) {
275 rstate->format = NULL;
276 return 0;
277 }
278 271
279 if (state->src_w >> 16 != state->crtc_w || 272 return __rcar_du_plane_atomic_check(plane, state, &rstate->format);
280 state->src_h >> 16 != state->crtc_h) {
281 dev_dbg(rcdu->dev, "%s: scaling not supported\n", __func__);
282 return -EINVAL;
283 }
284
285 rstate->format = rcar_du_format_info(state->fb->format->format);
286 if (rstate->format == NULL) {
287 dev_dbg(rcdu->dev, "%s: unsupported format %08x\n", __func__,
288 state->fb->format->format);
289 return -EINVAL;
290 }
291
292 return 0;
293} 273}
294 274
295static void rcar_du_vsp_plane_atomic_update(struct drm_plane *plane, 275static void rcar_du_vsp_plane_atomic_update(struct drm_plane *plane,