diff mbox series

[v4,1/3] media: imx6-mipi-csi2: use pre_streamon callback to set sensor into LP11

Message ID 20210923105618.365513-2-m.tretter@pengutronix.de (mailing list archive)
State New, archived
Headers show
Series media: i2c: isl7998x: Add driver for Intersil ISL7998x | expand

Commit Message

Michael Tretter Sept. 23, 2021, 10:56 a.m. UTC
Step 5 expects that the sensor is in LP11 mode. Use the new
pre_streamon callback to signal the sensor that it should switch into
LP11.

Signed-off-by: Michael Tretter <m.tretter@pengutronix.de>
---
Changelog:

v4:

- new patch
---
 drivers/staging/media/imx/imx6-mipi-csi2.c | 9 ++++++++-
 1 file changed, 8 insertions(+), 1 deletion(-)

Comments

Philipp Zabel Sept. 23, 2021, 2:37 p.m. UTC | #1
Hi Michael,

On Thu, 2021-09-23 at 12:56 +0200, Michael Tretter wrote:
> Step 5 expects that the sensor is in LP11 mode. Use the new
> pre_streamon callback to signal the sensor that it should switch into
> LP11.
> 
> Signed-off-by: Michael Tretter <m.tretter@pengutronix.de>
> ---
> Changelog:
> 
> v4:
> 
> - new patch
> ---
>  drivers/staging/media/imx/imx6-mipi-csi2.c | 9 ++++++++-
>  1 file changed, 8 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/staging/media/imx/imx6-mipi-csi2.c b/drivers/staging/media/imx/imx6-mipi-csi2.c
> index 9de0ebd439dc..4f19e2bce4bb 100644
> --- a/drivers/staging/media/imx/imx6-mipi-csi2.c
> +++ b/drivers/staging/media/imx/imx6-mipi-csi2.c
> @@ -382,13 +382,17 @@ static int csi2_start(struct csi2_dev *csi2)
>  	csi2_enable(csi2, true);
>  
>  	/* Step 5 */
> +	ret = v4l2_subdev_call(csi2->src_sd, video, pre_streamon,
> +			       V4L2_SUBDEV_PRE_STREAMON_FL_MANUAL_LP);
> +	if (ret)
> +		goto err_assert_reset;

I think this should check for (ret && ret != -ENOIOCTLCMD) to avoid
breaking drivers that are still missing pre_streamon implementation.

regards
Philipp
Michael Tretter Sept. 23, 2021, 2:50 p.m. UTC | #2
On Thu, 23 Sep 2021 16:37:31 +0200, Philipp Zabel wrote:
> On Thu, 2021-09-23 at 12:56 +0200, Michael Tretter wrote:
> > Step 5 expects that the sensor is in LP11 mode. Use the new
> > pre_streamon callback to signal the sensor that it should switch into
> > LP11.
> > 
> > Signed-off-by: Michael Tretter <m.tretter@pengutronix.de>
> > ---
> > Changelog:
> > 
> > v4:
> > 
> > - new patch
> > ---
> >  drivers/staging/media/imx/imx6-mipi-csi2.c | 9 ++++++++-
> >  1 file changed, 8 insertions(+), 1 deletion(-)
> > 
> > diff --git a/drivers/staging/media/imx/imx6-mipi-csi2.c b/drivers/staging/media/imx/imx6-mipi-csi2.c
> > index 9de0ebd439dc..4f19e2bce4bb 100644
> > --- a/drivers/staging/media/imx/imx6-mipi-csi2.c
> > +++ b/drivers/staging/media/imx/imx6-mipi-csi2.c
> > @@ -382,13 +382,17 @@ static int csi2_start(struct csi2_dev *csi2)
> >  	csi2_enable(csi2, true);
> >  
> >  	/* Step 5 */
> > +	ret = v4l2_subdev_call(csi2->src_sd, video, pre_streamon,
> > +			       V4L2_SUBDEV_PRE_STREAMON_FL_MANUAL_LP);
> > +	if (ret)
> > +		goto err_assert_reset;
> 
> I think this should check for (ret && ret != -ENOIOCTLCMD) to avoid
> breaking drivers that are still missing pre_streamon implementation.

Thanks. You are correct. I will wait for further comments on the other patches
of the series and fix it in the next version.

Michael
diff mbox series

Patch

diff --git a/drivers/staging/media/imx/imx6-mipi-csi2.c b/drivers/staging/media/imx/imx6-mipi-csi2.c
index 9de0ebd439dc..4f19e2bce4bb 100644
--- a/drivers/staging/media/imx/imx6-mipi-csi2.c
+++ b/drivers/staging/media/imx/imx6-mipi-csi2.c
@@ -382,13 +382,17 @@  static int csi2_start(struct csi2_dev *csi2)
 	csi2_enable(csi2, true);
 
 	/* Step 5 */
+	ret = v4l2_subdev_call(csi2->src_sd, video, pre_streamon,
+			       V4L2_SUBDEV_PRE_STREAMON_FL_MANUAL_LP);
+	if (ret)
+		goto err_assert_reset;
 	csi2_dphy_wait_stopstate(csi2, lanes);
 
 	/* Step 6 */
 	ret = v4l2_subdev_call(csi2->src_sd, video, s_stream, 1);
 	ret = (ret && ret != -ENOIOCTLCMD) ? ret : 0;
 	if (ret)
-		goto err_assert_reset;
+		goto err_stop_lp11;
 
 	/* Step 7 */
 	ret = csi2_dphy_wait_clock_lane(csi2);
@@ -399,6 +403,8 @@  static int csi2_start(struct csi2_dev *csi2)
 
 err_stop_upstream:
 	v4l2_subdev_call(csi2->src_sd, video, s_stream, 0);
+err_stop_lp11:
+	v4l2_subdev_call(csi2->src_sd, video, post_streamoff);
 err_assert_reset:
 	csi2_enable(csi2, false);
 err_disable_clk:
@@ -410,6 +416,7 @@  static void csi2_stop(struct csi2_dev *csi2)
 {
 	/* stop upstream */
 	v4l2_subdev_call(csi2->src_sd, video, s_stream, 0);
+	v4l2_subdev_call(csi2->src_sd, video, post_streamoff);
 
 	csi2_enable(csi2, false);
 	clk_disable_unprepare(csi2->pix_clk);