summaryrefslogtreecommitdiff
path: root/drivers/media/platform/sunxi/sun6i-csi/sun6i_csi_capture.c
diff options
context:
space:
mode:
authorPaul Kocialkowski <paul.kocialkowski@bootlin.com>2022-11-03 19:31:10 +0300
committerMauro Carvalho Chehab <mchehab@kernel.org>2022-11-25 10:17:30 +0300
commit5d34d90fff89a450423b0f1acbafa68c1e60344d (patch)
tree938e7bc9b523180f686e2e1a3b816c125a4ddb5a /drivers/media/platform/sunxi/sun6i-csi/sun6i_csi_capture.c
parenta617f33d8eceb8287e8797aff7407cff0154f3dd (diff)
downloadlinux-5d34d90fff89a450423b0f1acbafa68c1e60344d.tar.xz
media: sun6i-csi: Only configure capture when streaming
Add a streaming element to the capture state structure to know if the capture device is used or not. Only configure things related to output when streaming, including the output format, irq, state (dma buffer) and window configuration registers. After this change, it becomes possible to use the bridge without the capture device, which will be the case in the isp media flow. Signed-off-by: Paul Kocialkowski <paul.kocialkowski@bootlin.com> Acked-by: Jernej Skrabec <jernej.skrabec@gmail.com> Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com> Signed-off-by: Mauro Carvalho Chehab <mchehab@kernel.org>
Diffstat (limited to 'drivers/media/platform/sunxi/sun6i-csi/sun6i_csi_capture.c')
-rw-r--r--drivers/media/platform/sunxi/sun6i-csi/sun6i_csi_capture.c11
1 files changed, 9 insertions, 2 deletions
diff --git a/drivers/media/platform/sunxi/sun6i-csi/sun6i_csi_capture.c b/drivers/media/platform/sunxi/sun6i-csi/sun6i_csi_capture.c
index 645ef01f32c5..708338c50b8b 100644
--- a/drivers/media/platform/sunxi/sun6i-csi/sun6i_csi_capture.c
+++ b/drivers/media/platform/sunxi/sun6i-csi/sun6i_csi_capture.c
@@ -616,13 +616,17 @@ static int sun6i_csi_capture_start_streaming(struct vb2_queue *queue,
if (ret < 0)
goto error_state;
+ state->streaming = true;
+
ret = v4l2_subdev_call(subdev, video, s_stream, 1);
if (ret && ret != -ENOIOCTLCMD)
- goto error_media_pipeline;
+ goto error_streaming;
return 0;
-error_media_pipeline:
+error_streaming:
+ state->streaming = false;
+
video_device_pipeline_stop(video_dev);
error_state:
@@ -634,11 +638,14 @@ error_state:
static void sun6i_csi_capture_stop_streaming(struct vb2_queue *queue)
{
struct sun6i_csi_device *csi_dev = vb2_get_drv_priv(queue);
+ struct sun6i_csi_capture_state *state = &csi_dev->capture.state;
struct video_device *video_dev = &csi_dev->capture.video_dev;
struct v4l2_subdev *subdev = &csi_dev->bridge.subdev;
v4l2_subdev_call(subdev, video, s_stream, 0);
+ state->streaming = false;
+
video_device_pipeline_stop(video_dev);
sun6i_csi_capture_state_cleanup(csi_dev, true);