diff options
Diffstat (limited to 'target/linux/bcm27xx/patches-5.15/950-0645-media-i2c-ov9281-Increase-diff-between-VTS-and-max-e.patch')
-rw-r--r-- | target/linux/bcm27xx/patches-5.15/950-0645-media-i2c-ov9281-Increase-diff-between-VTS-and-max-e.patch | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/target/linux/bcm27xx/patches-5.15/950-0645-media-i2c-ov9281-Increase-diff-between-VTS-and-max-e.patch b/target/linux/bcm27xx/patches-5.15/950-0645-media-i2c-ov9281-Increase-diff-between-VTS-and-max-e.patch new file mode 100644 index 0000000000..cc4928f4ef --- /dev/null +++ b/target/linux/bcm27xx/patches-5.15/950-0645-media-i2c-ov9281-Increase-diff-between-VTS-and-max-e.patch @@ -0,0 +1,60 @@ +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, |