| From 9aa13669ba9e40fb7fc14ddf587c3e2720dca093 Mon Sep 17 00:00:00 2001 |
| From: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com> |
| Date: Thu, 22 Feb 2018 14:26:21 -0500 |
| Subject: [PATCH 1179/1795] media: v4l: vsp1: Move DRM pipeline output setup |
| code to a function |
| |
| In order to make the vsp1_du_setup_lif() easier to read, and for |
| symmetry with the DRM pipeline input setup, move the pipeline output |
| setup code to a separate function. |
| |
| Signed-off-by: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com> |
| Reviewed-by: Kieran Bingham <kieran.bingham+renesas@ideasonboard.com> |
| Signed-off-by: Mauro Carvalho Chehab <mchehab+samsung@kernel.org> |
| (cherry picked from commit 5a4d566a5b9b04321df6b6d8637cf0a9285d22cd) |
| Signed-off-by: Simon Horman <horms+renesas@verge.net.au> |
| Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be> |
| --- |
| drivers/media/platform/vsp1/vsp1_drm.c | 106 ++++++++++++++----------- |
| 1 file changed, 60 insertions(+), 46 deletions(-) |
| |
| diff --git a/drivers/media/platform/vsp1/vsp1_drm.c b/drivers/media/platform/vsp1/vsp1_drm.c |
| index 4a628bbf7e47..a7cccc9b05ef 100644 |
| --- a/drivers/media/platform/vsp1/vsp1_drm.c |
| +++ b/drivers/media/platform/vsp1/vsp1_drm.c |
| @@ -276,6 +276,65 @@ static int vsp1_du_pipeline_setup_inputs(struct vsp1_device *vsp1, |
| return 0; |
| } |
| |
| +/* Setup the output side of the pipeline (WPF and LIF). */ |
| +static int vsp1_du_pipeline_setup_output(struct vsp1_device *vsp1, |
| + struct vsp1_pipeline *pipe) |
| +{ |
| + struct vsp1_drm_pipeline *drm_pipe = to_vsp1_drm_pipeline(pipe); |
| + struct v4l2_subdev_format format = { 0, }; |
| + int ret; |
| + |
| + format.which = V4L2_SUBDEV_FORMAT_ACTIVE; |
| + format.pad = RWPF_PAD_SINK; |
| + format.format.width = drm_pipe->width; |
| + format.format.height = drm_pipe->height; |
| + format.format.code = MEDIA_BUS_FMT_ARGB8888_1X32; |
| + format.format.field = V4L2_FIELD_NONE; |
| + |
| + ret = v4l2_subdev_call(&pipe->output->entity.subdev, pad, set_fmt, NULL, |
| + &format); |
| + if (ret < 0) |
| + return ret; |
| + |
| + dev_dbg(vsp1->dev, "%s: set format %ux%u (%x) on WPF%u sink\n", |
| + __func__, format.format.width, format.format.height, |
| + format.format.code, pipe->output->entity.index); |
| + |
| + format.pad = RWPF_PAD_SOURCE; |
| + ret = v4l2_subdev_call(&pipe->output->entity.subdev, pad, get_fmt, NULL, |
| + &format); |
| + if (ret < 0) |
| + return ret; |
| + |
| + dev_dbg(vsp1->dev, "%s: got format %ux%u (%x) on WPF%u source\n", |
| + __func__, format.format.width, format.format.height, |
| + format.format.code, pipe->output->entity.index); |
| + |
| + format.pad = LIF_PAD_SINK; |
| + ret = v4l2_subdev_call(&pipe->lif->subdev, pad, set_fmt, NULL, |
| + &format); |
| + if (ret < 0) |
| + return ret; |
| + |
| + dev_dbg(vsp1->dev, "%s: set format %ux%u (%x) on LIF%u sink\n", |
| + __func__, format.format.width, format.format.height, |
| + format.format.code, pipe->lif->index); |
| + |
| + /* |
| + * Verify that the format at the output of the pipeline matches the |
| + * requested frame size and media bus code. |
| + */ |
| + if (format.format.width != drm_pipe->width || |
| + format.format.height != drm_pipe->height || |
| + format.format.code != MEDIA_BUS_FMT_ARGB8888_1X32) { |
| + dev_dbg(vsp1->dev, "%s: format mismatch on LIF%u\n", __func__, |
| + pipe->lif->index); |
| + return -EPIPE; |
| + } |
| + |
| + return 0; |
| +} |
| + |
| /* Configure all entities in the pipeline. */ |
| static void vsp1_du_pipeline_configure(struct vsp1_pipeline *pipe) |
| { |
| @@ -356,7 +415,6 @@ int vsp1_du_setup_lif(struct device *dev, unsigned int pipe_index, |
| struct vsp1_drm_pipeline *drm_pipe; |
| struct vsp1_pipeline *pipe; |
| struct vsp1_bru *bru; |
| - struct v4l2_subdev_format format; |
| unsigned long flags; |
| unsigned int i; |
| int ret; |
| @@ -417,54 +475,10 @@ int vsp1_du_setup_lif(struct device *dev, unsigned int pipe_index, |
| if (ret < 0) |
| return ret; |
| |
| - memset(&format, 0, sizeof(format)); |
| - format.which = V4L2_SUBDEV_FORMAT_ACTIVE; |
| - format.pad = RWPF_PAD_SINK; |
| - format.format.width = cfg->width; |
| - format.format.height = cfg->height; |
| - format.format.code = MEDIA_BUS_FMT_ARGB8888_1X32; |
| - format.format.field = V4L2_FIELD_NONE; |
| - |
| - ret = v4l2_subdev_call(&pipe->output->entity.subdev, pad, set_fmt, NULL, |
| - &format); |
| - if (ret < 0) |
| - return ret; |
| - |
| - dev_dbg(vsp1->dev, "%s: set format %ux%u (%x) on WPF%u sink\n", |
| - __func__, format.format.width, format.format.height, |
| - format.format.code, pipe->output->entity.index); |
| - |
| - format.pad = RWPF_PAD_SOURCE; |
| - ret = v4l2_subdev_call(&pipe->output->entity.subdev, pad, get_fmt, NULL, |
| - &format); |
| - if (ret < 0) |
| - return ret; |
| - |
| - dev_dbg(vsp1->dev, "%s: got format %ux%u (%x) on WPF%u source\n", |
| - __func__, format.format.width, format.format.height, |
| - format.format.code, pipe->output->entity.index); |
| - |
| - format.pad = LIF_PAD_SINK; |
| - ret = v4l2_subdev_call(&pipe->lif->subdev, pad, set_fmt, NULL, |
| - &format); |
| + ret = vsp1_du_pipeline_setup_output(vsp1, pipe); |
| if (ret < 0) |
| return ret; |
| |
| - dev_dbg(vsp1->dev, "%s: set format %ux%u (%x) on LIF%u sink\n", |
| - __func__, format.format.width, format.format.height, |
| - format.format.code, pipe_index); |
| - |
| - /* |
| - * Verify that the format at the output of the pipeline matches the |
| - * requested frame size and media bus code. |
| - */ |
| - if (format.format.width != cfg->width || |
| - format.format.height != cfg->height || |
| - format.format.code != MEDIA_BUS_FMT_ARGB8888_1X32) { |
| - dev_dbg(vsp1->dev, "%s: format mismatch\n", __func__); |
| - return -EPIPE; |
| - } |
| - |
| /* Enable the VSP1. */ |
| ret = vsp1_device_get(vsp1); |
| if (ret < 0) |
| -- |
| 2.19.0 |
| |