[PATCH] media: hi846: Improve the power on sequence

From: Sebastian Krzyszkowiak

Date: Sun Aug 30 2026 - 18:24:00 EST


Section 4.2 of YACG4D0C9SHC(Hi-846) datasheet specifies the time
between XSHUTDOWN rising and RESETB rising (t3-1) and RESETB rising
to the first I2C transaction (t3-2) to be both at least 2400 MCLK
cycles. This driver currently requires the MCLK rate to be set to
25 MHz, so t3-1 and t3-2 need to be at least 96 µs.

On top of that, Figure 14 shows that RESETB needs to be held for
at least 120 MCLK cycles. Ensure that this is the case.

Fixes: e8c0882685f9 ("media: i2c: add driver for the SK Hynix Hi-846 8M pixel camera")
Cc: stable@xxxxxxxxxxxxxxx
Signed-off-by: Sebastian Krzyszkowiak <sebastian.krzyszkowiak@xxxxxxx>
---
drivers/media/i2c/hi846.c | 13 +++++++++----
1 file changed, 9 insertions(+), 4 deletions(-)

diff --git a/drivers/media/i2c/hi846.c b/drivers/media/i2c/hi846.c
index a3f77b8434ca..d58940c8da20 100644
--- a/drivers/media/i2c/hi846.c
+++ b/drivers/media/i2c/hi846.c
@@ -1643,11 +1643,16 @@ static int hi846_power_on(struct hi846 *hi846)
if (hi846->shutdown_gpio)
gpiod_set_value_cansleep(hi846->shutdown_gpio, 0);

- /* 30us = 2400 cycles at 80Mhz */
- usleep_range(30, 60);
- if (hi846->rst_gpio)
+ /* 96us = 2400 cycles at 25MHz */
+ usleep_range(96, 120);
+
+ if (hi846->rst_gpio) {
+ gpiod_set_value_cansleep(hi846->rst_gpio, 1);
+ /* 5us = 120 cycles at 25MHz */
+ usleep_range(5, 10);
gpiod_set_value_cansleep(hi846->rst_gpio, 0);
- usleep_range(30, 60);
+ usleep_range(96, 120);
+ }

return 0;


---
base-commit: e30626823a406725ce29bc75cb8ec467d3e1e326
change-id: 20260831-hi846-poweronseq-71e7ac35401b

Best regards,
--
Sebastian Krzyszkowiak <sebastian.krzyszkowiak@xxxxxxx>