On Mon, Dec 3, 2018 at 2:45 AM Maxime Ripard <maxime.ripard@xxxxxxxxxxx> wrote: > > From: Jacopo Mondi <jacopo+renesas@xxxxxxxxxx> > > The set_fmt operations updates the sensor format only when the image format > is changed. When only the image sizes gets changed, the format do not get > updated causing the sensor to always report the one that was previously in > use. > > Without this patch, updating frame size only fails: > [fmt:UYVY8_2X8/640x480@1/30 field:none colorspace:srgb xfer:srgb ...] > > With this patch applied: > [fmt:UYVY8_2X8/1024x768@1/30 field:none colorspace:srgb xfer:srgb ...] > > Fixes: 6949d864776e ("media: ov5640: do not change mode if format or frame > interval is unchanged") > Signed-off-by: Jacopo Mondi <jacopo+renesas@xxxxxxxxxx> > Signed-off-by: Maxime Ripard <maxime.ripard@xxxxxxxxxxx> Tested-by: Adam Ford <aford173@xxxxxxxxx> #imx6 w/ CSI2 interface on 4.19.6 and 4.20-RC5 > --- > drivers/media/i2c/ov5640.c | 17 ++++++++--------- > 1 file changed, 8 insertions(+), 9 deletions(-) > > diff --git a/drivers/media/i2c/ov5640.c b/drivers/media/i2c/ov5640.c > index a91d91715d00..807bd0e386a4 100644 > --- a/drivers/media/i2c/ov5640.c > +++ b/drivers/media/i2c/ov5640.c > @@ -2021,6 +2021,7 @@ static int ov5640_set_fmt(struct v4l2_subdev *sd, > struct ov5640_dev *sensor = to_ov5640_dev(sd); > const struct ov5640_mode_info *new_mode; > struct v4l2_mbus_framefmt *mbus_fmt = &format->format; > + struct v4l2_mbus_framefmt *fmt; > int ret; > > if (format->pad != 0) > @@ -2038,22 +2039,20 @@ static int ov5640_set_fmt(struct v4l2_subdev *sd, > if (ret) > goto out; > > - if (format->which == V4L2_SUBDEV_FORMAT_TRY) { > - struct v4l2_mbus_framefmt *fmt = > - v4l2_subdev_get_try_format(sd, cfg, 0); > + if (format->which == V4L2_SUBDEV_FORMAT_TRY) > + fmt = v4l2_subdev_get_try_format(sd, cfg, 0); > + else > + fmt = &sensor->fmt; > > - *fmt = *mbus_fmt; > - goto out; > - } > + *fmt = *mbus_fmt; > > if (new_mode != sensor->current_mode) { > sensor->current_mode = new_mode; > sensor->pending_mode_change = true; > } > - if (mbus_fmt->code != sensor->fmt.code) { > - sensor->fmt = *mbus_fmt; > + if (mbus_fmt->code != sensor->fmt.code) > sensor->pending_fmt_change = true; > - } > + > out: > mutex_unlock(&sensor->lock); > return ret; > -- > git-series 0.9.1