From ff43ca9119786bdf686623d269713343f08ab48c Mon Sep 17 00:00:00 2001 From: Laurent Pinchart Date: Mon, 15 Feb 2021 05:27:06 +0100 Subject: [PATCH] media: imx: imx7-media-csi: Move CSI configuration before source start There's no reason to delay the CSI configuration and the DMA setup after starting the source. Move it before, simplifying error handling at stream start. Signed-off-by: Laurent Pinchart Reviewed-by: Rui Miguel Silva Signed-off-by: Hans Verkuil Signed-off-by: Mauro Carvalho Chehab --- drivers/staging/media/imx/imx7-media-csi.c | 27 ++++++++++----------------- 1 file changed, 10 insertions(+), 17 deletions(-) diff --git a/drivers/staging/media/imx/imx7-media-csi.c b/drivers/staging/media/imx/imx7-media-csi.c index 9cb04fa..f6a26dff 100644 --- a/drivers/staging/media/imx/imx7-media-csi.c +++ b/drivers/staging/media/imx/imx7-media-csi.c @@ -577,15 +577,23 @@ static int imx7_csi_init(struct imx7_csi *csi) ret = clk_prepare_enable(csi->mclk); if (ret < 0) return ret; + imx7_csi_hw_reset(csi); imx7_csi_init_interface(csi); imx7_csi_dmareq_rff_enable(csi); + ret = imx7_csi_dma_setup(csi); + if (ret < 0) + return ret; + + imx7_csi_configure(csi); + return 0; } static void imx7_csi_deinit(struct imx7_csi *csi) { + imx7_csi_dma_cleanup(csi); imx7_csi_hw_reset(csi); imx7_csi_init_interface(csi); imx7_csi_dmareq_rff_disable(csi); @@ -612,24 +620,14 @@ static void imx7_csi_disable(struct imx7_csi *csi) imx7_csi_hw_disable(csi); } -static int imx7_csi_streaming_start(struct imx7_csi *csi) +static void imx7_csi_streaming_start(struct imx7_csi *csi) { - int ret; - - ret = imx7_csi_dma_setup(csi); - if (ret < 0) - return ret; - - imx7_csi_configure(csi); imx7_csi_enable(csi); - - return 0; } static int imx7_csi_streaming_stop(struct imx7_csi *csi) { imx7_csi_dma_stop(csi); - imx7_csi_dma_cleanup(csi); imx7_csi_disable(csi); @@ -769,12 +767,7 @@ static int imx7_csi_s_stream(struct v4l2_subdev *sd, int enable) goto out_unlock; } - ret = imx7_csi_streaming_start(csi); - if (ret < 0) { - v4l2_subdev_call(csi->src_sd, video, s_stream, 0); - imx7_csi_deinit(csi); - goto out_unlock; - } + imx7_csi_streaming_start(csi); } else { imx7_csi_streaming_stop(csi); -- 2.7.4