From: Richard Leitner <richard.leitner@linux.dev>
To: Sakari Ailus <sakari.ailus@linux.intel.com>,
Dave Stevenson <dave.stevenson@raspberrypi.com>,
Mauro Carvalho Chehab <mchehab@kernel.org>,
Daniele Alessandrelli <daniele.alessandrelli@gmail.com>,
"Paul J. Murphy" <paul.j.murphy@intel.com>,
Martina Krasteva <martinax.krasteva@intel.com>,
Richard Leitner <richard.leitner@linux.dev>,
Hans Verkuil <hverkuil+cisco@kernel.org>,
Bryan O'Donoghue <bod@kernel.org>,
Jacopo Mondi <jacopo@jmondi.org>
Cc: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>,
Gyula Kelemen <gyula.kelemen@advasolutions.com>,
linux-media@vger.kernel.org, linux-kernel@vger.kernel.org,
stable@vger.kernel.org
Subject: [PATCH v2 5/8] media: i2c: ov9282: add refresh of additional ranges on a mode change
Date: Wed, 14 Oct 2026 08:49:12 +0200 [thread overview]
Message-ID: <20261014-ov9282-fixes-v2-5-3bb376d8b1a9@linux.dev> (raw)
In-Reply-To: <20261014-ov9282-fixes-v2-0-3bb376d8b1a9@linux.dev>
ov9282_update_controls() updates the pixel rate, hblank and vblank, but
currently misses the exposure range and flash_duration, which are
dependent on the frame height and therefore vblank.
Refresh both, and commit cur_mode and code in ov9282_set_pad_format()
before the call so the refresh and any nested s_ctrl see the incoming
format.
Fixes: 14ea315bbeb75 ("media: i2c: Add ov9282 camera sensor driver")
Cc: stable@vger.kernel.org
Signed-off-by: Richard Leitner <richard.leitner@linux.dev>
---
drivers/media/i2c/ov9282.c | 36 +++++++++++++++++++++++++++++++-----
1 file changed, 31 insertions(+), 5 deletions(-)
diff --git a/drivers/media/i2c/ov9282.c b/drivers/media/i2c/ov9282.c
index e6920e18b7818..b48c959b9c908 100644
--- a/drivers/media/i2c/ov9282.c
+++ b/drivers/media/i2c/ov9282.c
@@ -548,6 +548,7 @@ static int ov9282_update_controls(struct ov9282 *ov9282,
{
u32 hblank_min;
s64 pixel_rate;
+ u32 lpfr;
int ret;
ret = __v4l2_ctrl_s_ctrl(ov9282->link_freq_ctrl, mode->link_freq_idx);
@@ -568,8 +569,20 @@ static int ov9282_update_controls(struct ov9282 *ov9282,
if (ret)
return ret;
- return __v4l2_ctrl_modify_range(ov9282->vblank_ctrl, mode->vblank_min,
- mode->vblank_max, 1, mode->vblank);
+ ret = __v4l2_ctrl_modify_range(ov9282->vblank_ctrl, mode->vblank_min,
+ mode->vblank_max, 1, mode->vblank);
+ if (ret)
+ return ret;
+
+ lpfr = ov9282->vblank_ctrl->val + mode->height;
+ ret = __v4l2_ctrl_modify_range(ov9282->exp_ctrl, OV9282_EXPOSURE_MIN,
+ lpfr - OV9282_EXPOSURE_OFFSET,
+ OV9282_EXPOSURE_STEP,
+ OV9282_EXPOSURE_DEFAULT);
+ if (ret)
+ return ret;
+
+ return ov9282_update_ctrl_flash_duration(ov9282);
}
/**
@@ -832,10 +845,23 @@ static int ov9282_set_pad_format(struct v4l2_subdev *sd,
framefmt = v4l2_subdev_state_get_format(sd_state, fmt->pad);
*framefmt = fmt->format;
} else {
+ const struct ov9282_mode *old_mode = ov9282->cur_mode;
+ u32 old_code = ov9282->code;
+
+ /*
+ * Commit before refreshing the ranges. ov9282_update_controls()
+ * and the nested ov9282_set_ctrl() calls it triggers derive the
+ * frame length and the line time from cur_mode and code, so
+ * they have to describe the incoming format, not the outgoing
+ * one.
+ */
+ ov9282->cur_mode = mode;
+ ov9282->code = code;
+
ret = ov9282_update_controls(ov9282, mode, fmt);
- if (!ret) {
- ov9282->cur_mode = mode;
- ov9282->code = code;
+ if (ret) {
+ ov9282->cur_mode = old_mode;
+ ov9282->code = old_code;
}
}
--
2.53.0
next prev parent reply other threads:[~2026-10-14 6:49 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-10-14 6:49 [PATCH v2 0/8] media: i2c: ov9282: fix strobe timing and control handling Richard Leitner
2026-10-14 6:49 ` [PATCH v2 1/8] media: i2c: ov9282: handle error from exposure range update Richard Leitner
2026-10-14 6:49 ` [PATCH v2 2/8] media: i2c: ov9282: fix pixel rate and line time calculation Richard Leitner
2026-10-14 6:49 ` [PATCH v2 3/8] media: i2c: ov9282: fix flash duration to/from microseconds conversion Richard Leitner
2026-10-14 6:49 ` [PATCH v2 4/8] media: i2c: ov9282: fix flash duration range calculation Richard Leitner
2026-10-14 6:49 ` Richard Leitner [this message]
2026-10-14 6:49 ` [PATCH v2 6/8] media: i2c: ov9282: recalculate strobe span on HBLANK change Richard Leitner
2026-10-14 6:49 ` [PATCH v2 7/8] media: i2c: ov9282: drop redundant vblank field Richard Leitner
2026-10-14 6:49 ` [PATCH v2 8/8] media: i2c: ov9282: harmonize dev_err_probe usage Richard Leitner
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20261014-ov9282-fixes-v2-5-3bb376d8b1a9@linux.dev \
--to=richard.leitner@linux.dev \
--cc=bod@kernel.org \
--cc=daniele.alessandrelli@gmail.com \
--cc=dave.stevenson@raspberrypi.com \
--cc=gyula.kelemen@advasolutions.com \
--cc=hverkuil+cisco@kernel.org \
--cc=jacopo@jmondi.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-media@vger.kernel.org \
--cc=martinax.krasteva@intel.com \
--cc=mchehab+huawei@kernel.org \
--cc=mchehab@kernel.org \
--cc=paul.j.murphy@intel.com \
--cc=sakari.ailus@linux.intel.com \
--cc=stable@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.