Skip to content

Commit 6983352

Browse files
jwrdegoedeHans Verkuil
authored andcommitted
media: ov2740: Ensure proper reset sequence on probe()
Before this commit on probe() the driver would do: reset=1 // from probe() calling gpiod_get(GPIOD_OUT_HIGH) reset=0 // from resume() msleep(20) // from resume() So if reset was 0 before getting the GPIO the reset line would only be driven high for a very short time and sometimes there would be errors reading the id register afterwards. Add a msleep(20) after getting the reset line to ensure the sensor is properly reset: reset=1 // from probe() calling gpiod_get(GPIOD_OUT_HIGH) msleep(20) // from probe() reset=0 // from resume() msleep(20) // from resume() Signed-off-by: Hans de Goede <[email protected]> Tested-by: Stanislaw Gruszka <[email protected]> Signed-off-by: Sakari Ailus <[email protected]> Signed-off-by: Hans Verkuil <[email protected]>
1 parent 4ff61c4 commit 6983352

File tree

1 file changed

+8
-1
lines changed

1 file changed

+8
-1
lines changed

drivers/media/i2c/ov2740.c

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1333,9 +1333,16 @@ static int ov2740_probe(struct i2c_client *client)
13331333
return dev_err_probe(dev, ret, "failed to check HW configuration\n");
13341334

13351335
ov2740->reset_gpio = devm_gpiod_get_optional(dev, "reset", GPIOD_OUT_HIGH);
1336-
if (IS_ERR(ov2740->reset_gpio))
1336+
if (IS_ERR(ov2740->reset_gpio)) {
13371337
return dev_err_probe(dev, PTR_ERR(ov2740->reset_gpio),
13381338
"failed to get reset GPIO\n");
1339+
} else if (ov2740->reset_gpio) {
1340+
/*
1341+
* Ensure reset is asserted for at least 20 ms before
1342+
* ov2740_resume() deasserts it.
1343+
*/
1344+
msleep(20);
1345+
}
13391346

13401347
ov2740->clk = devm_clk_get_optional(dev, "clk");
13411348
if (IS_ERR(ov2740->clk))

0 commit comments

Comments
 (0)