mirror of
https://github.com/openwrt/openwrt.git
synced 2024-12-22 15:02:32 +00:00
20ea6adbf1
Build system: x86_64 Build-tested: bcm2708, bcm2709, bcm2710, bcm2711 Run-tested: bcm2708/RPiB+, bcm2709/RPi3B, bcm2710/RPi3B, bcm2711/RPi4B Signed-off-by: Marty Jones <mj8263788@gmail.com> Signed-off-by: Álvaro Fernández Rojas <noltari@gmail.com>
43 lines
1.3 KiB
Diff
43 lines
1.3 KiB
Diff
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;
|
|
}
|
|
|