aboutsummaryrefslogtreecommitdiffstats
path: root/target/linux/bcm27xx/patches-5.10/950-0487-media-i2c-imx290-Handle-exposure-correctly-when-vbla.patch
diff options
context:
space:
mode:
Diffstat (limited to 'target/linux/bcm27xx/patches-5.10/950-0487-media-i2c-imx290-Handle-exposure-correctly-when-vbla.patch')
-rw-r--r--target/linux/bcm27xx/patches-5.10/950-0487-media-i2c-imx290-Handle-exposure-correctly-when-vbla.patch42
1 files changed, 42 insertions, 0 deletions
diff --git a/target/linux/bcm27xx/patches-5.10/950-0487-media-i2c-imx290-Handle-exposure-correctly-when-vbla.patch b/target/linux/bcm27xx/patches-5.10/950-0487-media-i2c-imx290-Handle-exposure-correctly-when-vbla.patch
new file mode 100644
index 0000000000..ed1701103a
--- /dev/null
+++ b/target/linux/bcm27xx/patches-5.10/950-0487-media-i2c-imx290-Handle-exposure-correctly-when-vbla.patch
@@ -0,0 +1,42 @@
+From 8e9c9047f05e165d158b3718528fc8bcdaf856e8 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;
+ }
+