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>
61 lines
2.1 KiB
Diff
61 lines
2.1 KiB
Diff
From 0f60668a144d9bb7e9f313c389d078fd9e3befe2 Mon Sep 17 00:00:00 2001
|
|
From: Dave Stevenson <dave.stevenson@raspberrypi.com>
|
|
Date: Tue, 4 Jan 2022 14:46:01 +0000
|
|
Subject: [PATCH] media: i2c: ov9281: Increase diff between VTS and max
|
|
exposure
|
|
|
|
The driver did allow the exposure to go up to VTS - 4 lines,
|
|
but this would produce a visible line on 1280x800, and a stall of
|
|
the sensor at 640x480.
|
|
|
|
Whilst it appears to work with a difference of 5, the datasheet states
|
|
there should be at least 25 lines difference between VTS and exposure,
|
|
so use that value.
|
|
|
|
Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
|
|
---
|
|
drivers/media/i2c/ov9281.c | 11 ++++++++---
|
|
1 file changed, 8 insertions(+), 3 deletions(-)
|
|
|
|
--- a/drivers/media/i2c/ov9281.c
|
|
+++ b/drivers/media/i2c/ov9281.c
|
|
@@ -52,7 +52,11 @@
|
|
#define OV9281_REG_EXPOSURE 0x3500
|
|
#define OV9281_EXPOSURE_MIN 4
|
|
#define OV9281_EXPOSURE_STEP 1
|
|
-#define OV9281_VTS_MAX 0x7fff
|
|
+/*
|
|
+ * Number of lines less than frame length (VTS) that exposure must be.
|
|
+ * Datasheet states 25, although empirically 5 appears to work.
|
|
+ */
|
|
+#define OV9281_EXPOSURE_OFFSET 25
|
|
|
|
#define OV9281_REG_GAIN_H 0x3508
|
|
#define OV9281_REG_GAIN_L 0x3509
|
|
@@ -69,6 +73,7 @@
|
|
#define OV9281_TEST_PATTERN_DISABLE 0x0
|
|
|
|
#define OV9281_REG_VTS 0x380e
|
|
+#define OV9281_VTS_MAX 0x7fff
|
|
|
|
/*
|
|
* OV9281 native and active pixel array size.
|
|
@@ -967,7 +972,7 @@ static int ov9281_set_ctrl(struct v4l2_c
|
|
switch (ctrl->id) {
|
|
case V4L2_CID_VBLANK:
|
|
/* Update max exposure while meeting expected vblanking */
|
|
- max = ov9281->cur_mode->height + ctrl->val - 4;
|
|
+ max = ov9281->cur_mode->height + ctrl->val - OV9281_EXPOSURE_OFFSET;
|
|
__v4l2_ctrl_modify_range(ov9281->exposure,
|
|
ov9281->exposure->minimum, max,
|
|
ov9281->exposure->step,
|
|
@@ -1062,7 +1067,7 @@ static int ov9281_initialize_controls(st
|
|
OV9281_VTS_MAX - mode->height, 1,
|
|
vblank_def);
|
|
|
|
- exposure_max = mode->vts_def - 4;
|
|
+ exposure_max = mode->vts_def - OV9281_EXPOSURE_OFFSET;
|
|
ov9281->exposure = v4l2_ctrl_new_std(handler, &ov9281_ctrl_ops,
|
|
V4L2_CID_EXPOSURE,
|
|
OV9281_EXPOSURE_MIN, exposure_max,
|