diff options
Diffstat (limited to 'target/linux/bcm27xx/patches-5.15/950-0347-media-i2c-imx290-Handle-exposure-correctly-when-vbla.patch')
-rw-r--r-- | target/linux/bcm27xx/patches-5.15/950-0347-media-i2c-imx290-Handle-exposure-correctly-when-vbla.patch | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/target/linux/bcm27xx/patches-5.15/950-0347-media-i2c-imx290-Handle-exposure-correctly-when-vbla.patch b/target/linux/bcm27xx/patches-5.15/950-0347-media-i2c-imx290-Handle-exposure-correctly-when-vbla.patch new file mode 100644 index 0000000000..5511d620e1 --- /dev/null +++ b/target/linux/bcm27xx/patches-5.15/950-0347-media-i2c-imx290-Handle-exposure-correctly-when-vbla.patch @@ -0,0 +1,42 @@ +From 312748a4a15eba1d63a0861acabb7941c36e69d7 Mon Sep 17 00:00:00 2001 +From: David Plowman <david.plowman@raspberrypi.com> +Date: Thu, 18 Feb 2021 11:58:29 +0000 +Subject: [PATCH] media: i2c: imx290: Handle exposure correctly when + vblank changes + +When vblank changes we must modify the exposure range. Also, with this +sensor, the effective exposure time implicitly changes when vblank +does, so we have to reset it after every vblank update. + +Signed-off-by: David Plowman <david.plowman@raspberrypi.com> +--- + drivers/media/i2c/imx290.c | 18 ++++++++++++++++++ + 1 file changed, 18 insertions(+) + +--- a/drivers/media/i2c/imx290.c ++++ b/drivers/media/i2c/imx290.c +@@ -618,6 +618,24 @@ static int imx290_set_vmax(struct imx290 + if (ret) + dev_err(imx290->dev, "Unable to write vmax\n"); + ++ /* ++ * Changing vblank changes the allowed range for exposure. ++ * We don't supply the current exposure as default here as it ++ * may lie outside the new range. We will reset it just below. ++ */ ++ __v4l2_ctrl_modify_range(imx290->exposure, ++ IMX290_EXPOSURE_MIN, ++ vmax - 2, ++ IMX290_EXPOSURE_STEP, ++ vmax - 2); ++ ++ /* ++ * Becuse of the way exposure works for this sensor, updating ++ * vblank causes the effective exposure to change, so we must ++ * set it back to the "new" correct value. ++ */ ++ imx290_set_exposure(imx290, imx290->exposure->val); ++ + return ret; + } + |