Re: [PATCH] media: i2c: imx412: Extend the power-on waiting time
From: Wenmeng Liu
Date: Mon Dec 22 2025 - 07:20:21 EST
On 12/22/2025 8:11 PM, Dave Stevenson wrote:
Hi Wenmeng & Sakari
On Mon, 22 Dec 2025 at 09:35, Wenmeng Liu <wenmeng.liu@xxxxxxxxxxxxxxxx> wrote:
The Arducam IMX577 module requires a longer reset time than the 1000µs
configured in the current driver. Increase the wait time after power-on
to ensure proper initialization.
Is this somehow specific to the Arducam module? If so, what's there in the
module that requires this?
Yes, This issue occurred on the Arducam 22-pin IMX577 module.
I have tried changing the sequence of regulator, reset, and clock, and
found that this module must wait a sufficient amount of time after reset
before registers can be written (10 ms is a safe duration). This issue
did not occur when using other IMX577 modules.
Is it the probe that fails, or starting streaming?
Google has found me a datasheet for IMX577 at [1]. I'm hoping you have
an official datasheet, so do correct the following if that has any
updates.
Section 7-2-2 on page 30 for the startup sequence.
The sequence is meant to be regulators, INCK, and then XCLR. The
driver does XCLR before clock, so that would appear to be wrong.
It also states that T6 as the time from XCLR to being able to read the
version register is min 0.6ms, but T7 as the time before you can send
"Streaming Commmand" is min 8ms "To complete reading all parameters
from NVM".
That would be a difference between probe and start_streaming, although
admittedly sending the mode and control setup I2C commands will take
up some of that time.
Plausibly the other set of modules don't have the NVM programmed and
hence they are ready sooner. Either way I'd say that does mean the
driver currently isn't following the defined power up sequence, and
the patch looks reasonable for IMX577.
However as this is a shared driver does IMX412 have this restriction
too? I can't find a datasheet for that one to check. For the sake of
~9ms it's not going to make a huge difference though.
Dave
[1] https://en.sunnywale.com/uploadfile/2021/1222/IMX577-AACK-C(Awin).pdf
Hi Dave,
this issue appears in the write register when streamon imx412_write_regs. poweron->streamon.
static int imx412_start_streaming(struct imx412 *imx412)
{
const struct imx412_reg_list *reg_list;
int ret;
/* Write sensor mode registers */
reg_list = &imx412->cur_mode->reg_list;
ret = imx412_write_regs(imx412, reg_list->regs,
reg_list->num_of_regs);
if (ret) {
dev_err(imx412->dev, "fail to write initial registers\n");
return ret;
}
/* Setup handler will write actual exposure and gain */
ret = __v4l2_ctrl_handler_setup(imx412->sd.ctrl_handler);
if (ret) {
dev_err(imx412->dev, "fail to setup handler\n");
return ret;
}
/* Delay is required before streaming*/
usleep_range(7400, 8000);
/* Start streaming */
ret = imx412_write_reg(imx412, IMX412_REG_MODE_SELECT,
1, IMX412_MODE_STREAMING);
if (ret) {
dev_err(imx412->dev, "fail to start streaming\n");
return ret;
}
return 0;
}
> but T7 as the time before you can send "Streaming Commmand" is min 8ms "
I think the usleep_range(7400, 8000) represents the 8ms duration required by T7.
Thanks,
Wenmeng