summaryrefslogtreecommitdiff
path: root/drivers/staging/media/imx/imx7-media-csi.c
diff options
context:
space:
mode:
authorLaurent Pinchart <laurent.pinchart@ideasonboard.com>2022-05-09 23:32:33 +0100
committerMauro Carvalho Chehab <mchehab@kernel.org>2022-07-08 18:02:48 +0100
commitf5c673428b7e9460b71fe4196286c0eb33ea8692 (patch)
tree2533786daa30b2a25e4f234d23b7683f23ac7b27 /drivers/staging/media/imx/imx7-media-csi.c
parenta3ec6bc1af391b3115c683711d80bc704e8dd16b (diff)
media: staging: media: imx: imx7-media-csi: Inline pipeline start/stop
The imx7_csi_media_pipeline_set_stream() function has separate branches for the start and stop paths, surrounded by mutex lock/unlock. That is very little shared code, inline the locking and corresponding branch in each of the two callers. Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Acked-by: Rui Miguel Silva <rmfrfs@gmail.com> Tested-by: Alexander Stein <alexander.stein@ew.tq-group.com> Signed-off-by: Mauro Carvalho Chehab <mchehab@kernel.org>
Diffstat (limited to 'drivers/staging/media/imx/imx7-media-csi.c')
-rw-r--r--drivers/staging/media/imx/imx7-media-csi.c58
1 files changed, 22 insertions, 36 deletions
diff --git a/drivers/staging/media/imx/imx7-media-csi.c b/drivers/staging/media/imx/imx7-media-csi.c
index 86a0ca9b82e8..732b1bc68c50 100644
--- a/drivers/staging/media/imx/imx7-media-csi.c
+++ b/drivers/staging/media/imx/imx7-media-csi.c
@@ -1067,31 +1067,6 @@ static int imx7_csi_video_validate_fmt(struct imx7_csi *csi)
return 0;
}
-static int imx7_csi_media_pipeline_set_stream(struct imx7_csi *csi, bool on)
-{
- struct imx_media_dev *imxmd = &csi->imxmd;
- int ret = 0;
-
- mutex_lock(&imxmd->md.graph_mutex);
-
- if (on) {
- ret = __media_pipeline_start(&csi->sd.entity, &imxmd->pipe);
- if (ret)
- goto out;
- ret = v4l2_subdev_call(&csi->sd, video, s_stream, 1);
- if (ret)
- __media_pipeline_stop(&csi->sd.entity);
- } else {
- v4l2_subdev_call(&csi->sd, video, s_stream, 0);
- if (csi->sd.entity.pipe)
- __media_pipeline_stop(&csi->sd.entity);
- }
-
-out:
- mutex_unlock(&imxmd->md.graph_mutex);
- return ret;
-}
-
static int imx7_csi_video_start_streaming(struct vb2_queue *vq,
unsigned int count)
{
@@ -1103,18 +1078,29 @@ static int imx7_csi_video_start_streaming(struct vb2_queue *vq,
ret = imx7_csi_video_validate_fmt(csi);
if (ret) {
dev_err(csi->dev, "capture format not valid\n");
- goto return_bufs;
+ goto err_buffers;
}
- ret = imx7_csi_media_pipeline_set_stream(csi, true);
- if (ret) {
- dev_err(csi->dev, "pipeline start failed with %d\n", ret);
- goto return_bufs;
- }
+ mutex_lock(&csi->imxmd.md.graph_mutex);
+
+ ret = __media_pipeline_start(&csi->sd.entity, &csi->imxmd.pipe);
+ if (ret)
+ goto err_unlock;
+
+ ret = v4l2_subdev_call(&csi->sd, video, s_stream, 1);
+ if (ret)
+ goto err_stop;
+
+ mutex_unlock(&csi->imxmd.md.graph_mutex);
return 0;
-return_bufs:
+err_stop:
+ __media_pipeline_stop(&csi->sd.entity);
+err_unlock:
+ mutex_unlock(&csi->imxmd.md.graph_mutex);
+ dev_err(csi->dev, "pipeline start failed with %d\n", ret);
+err_buffers:
spin_lock_irqsave(&csi->q_lock, flags);
list_for_each_entry_safe(buf, tmp, &csi->ready_q, list) {
list_del(&buf->list);
@@ -1130,11 +1116,11 @@ static void imx7_csi_video_stop_streaming(struct vb2_queue *vq)
struct imx_media_buffer *frame;
struct imx_media_buffer *tmp;
unsigned long flags;
- int ret;
- ret = imx7_csi_media_pipeline_set_stream(csi, false);
- if (ret)
- dev_warn(csi->dev, "pipeline stop failed with %d\n", ret);
+ mutex_lock(&csi->imxmd.md.graph_mutex);
+ v4l2_subdev_call(&csi->sd, video, s_stream, 0);
+ __media_pipeline_stop(&csi->sd.entity);
+ mutex_unlock(&csi->imxmd.md.graph_mutex);
/* release all active buffers */
spin_lock_irqsave(&csi->q_lock, flags);