Commit ff43ca91 authored by Laurent Pinchart's avatar Laurent Pinchart Committed by Mauro Carvalho Chehab

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: default avatarLaurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: default avatarRui Miguel Silva <rmfrfs@gmail.com>
Signed-off-by: default avatarHans Verkuil <hverkuil-cisco@xs4all.nl>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab+huawei@kernel.org>
parent b0f4a7f7
...@@ -577,15 +577,23 @@ static int imx7_csi_init(struct imx7_csi *csi) ...@@ -577,15 +577,23 @@ static int imx7_csi_init(struct imx7_csi *csi)
ret = clk_prepare_enable(csi->mclk); ret = clk_prepare_enable(csi->mclk);
if (ret < 0) if (ret < 0)
return ret; return ret;
imx7_csi_hw_reset(csi); imx7_csi_hw_reset(csi);
imx7_csi_init_interface(csi); imx7_csi_init_interface(csi);
imx7_csi_dmareq_rff_enable(csi); imx7_csi_dmareq_rff_enable(csi);
ret = imx7_csi_dma_setup(csi);
if (ret < 0)
return ret;
imx7_csi_configure(csi);
return 0; return 0;
} }
static void imx7_csi_deinit(struct imx7_csi *csi) static void imx7_csi_deinit(struct imx7_csi *csi)
{ {
imx7_csi_dma_cleanup(csi);
imx7_csi_hw_reset(csi); imx7_csi_hw_reset(csi);
imx7_csi_init_interface(csi); imx7_csi_init_interface(csi);
imx7_csi_dmareq_rff_disable(csi); imx7_csi_dmareq_rff_disable(csi);
...@@ -612,24 +620,14 @@ static void imx7_csi_disable(struct imx7_csi *csi) ...@@ -612,24 +620,14 @@ static void imx7_csi_disable(struct imx7_csi *csi)
imx7_csi_hw_disable(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); imx7_csi_enable(csi);
return 0;
} }
static int imx7_csi_streaming_stop(struct imx7_csi *csi) static int imx7_csi_streaming_stop(struct imx7_csi *csi)
{ {
imx7_csi_dma_stop(csi); imx7_csi_dma_stop(csi);
imx7_csi_dma_cleanup(csi);
imx7_csi_disable(csi); imx7_csi_disable(csi);
...@@ -769,12 +767,7 @@ static int imx7_csi_s_stream(struct v4l2_subdev *sd, int enable) ...@@ -769,12 +767,7 @@ static int imx7_csi_s_stream(struct v4l2_subdev *sd, int enable)
goto out_unlock; goto out_unlock;
} }
ret = imx7_csi_streaming_start(csi); 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;
}
} else { } else {
imx7_csi_streaming_stop(csi); imx7_csi_streaming_stop(csi);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment