On Sat, Jul 13, 2024 at 11:33:29PM +0100, Bryan O'Donoghue wrote: > The ov5675 specification says that the gap between XSHUTDN deassert and the > first I2C transaction should be a minimum of 8192 XVCLK cycles. > > Right now we use a usleep_rage() that gives a sleep time of between about > 430 and 860 microseconds. > > On the Lenovo X13s we have observed that in about 1/20 cases the current > timing is too tight and we start transacting before the ov5675's reset > cycle completes, leading to I2C bus transaction failures. > > The reset racing is sometimes triggered at initial chip probe but, more > usually on a subsequent power-off/power-on cycle e.g. > > [ 71.451662] ov5675 24-0010: failed to write reg 0x0103. error = -5 > [ 71.451686] ov5675 24-0010: failed to set plls > > The current quiescence period we have is too tight. Instead of expressing > the post reset delay in terms of the current XVCLK this patch converts the > power-on and power-off delays to the maximum theoretical delay @ 6 MHz with > an additional buffer. > > 1.365 milliseconds on the power-on path is 1.5 milliseconds with grace. > 85.3 microseconds on the power-off path is 90 microseconds with grace. > > Fixes: 49d9ad719e89 ("media: ov5675: add device-tree support and support runtime PM") > Cc: stable@xxxxxxxxxxxxxxx > Signed-off-by: Bryan O'Donoghue <bryan.odonoghue@xxxxxxxxxx> I haven't hit this issue, but the camera on the Lenovo ThinkPad X13s still works with this patch so: Tested-by: Johan Hovold <johan+linaro@xxxxxxxxxx> Johan