mirror of
https://github.com/torvalds/linux.git
synced 2026-07-29 02:31:27 +02:00
media: mt9m114: Avoid a reset low spike during probe()
mt9m114_probe() requests the reset GPIO in output low state: sensor->reset = devm_gpiod_get_optional(dev, "reset", GPIOD_OUT_LOW); and then almost immediately afterwards calls mt9m114_power_on() which does: gpiod_set_value(sensor->reset, 1); fsleep(duration); gpiod_set_value(sensor->reset, 0); which means that if the reset pin was high before this code runs that it will very briefly be driven low because of passing GPIOD_OUT_LOW when requesting the GPIO only to be driven high again possibly directly after that. Such a very brief driving low of the reset pin may put the chip in a confused state. Request the GPIO in high (reset the chip) state instead to avoid this, turning the initial gpiod_set_value() in mt9m114_power_on() into a no-op. and the fsleep() ensures that it will stay high long enough to properly reset the chip. Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Signed-off-by: Hans de Goede <johannes.goede@oss.qualcomm.com> Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com> Signed-off-by: Hans Verkuil <hverkuil+cisco@kernel.org>
This commit is contained in:
parent
432d109333
commit
84359d0a5e
|
|
@ -2467,7 +2467,7 @@ static int mt9m114_probe(struct i2c_client *client)
|
|||
goto error_ep_free;
|
||||
}
|
||||
|
||||
sensor->reset = devm_gpiod_get_optional(dev, "reset", GPIOD_OUT_LOW);
|
||||
sensor->reset = devm_gpiod_get_optional(dev, "reset", GPIOD_OUT_HIGH);
|
||||
if (IS_ERR(sensor->reset)) {
|
||||
ret = PTR_ERR(sensor->reset);
|
||||
dev_err_probe(dev, ret, "Failed to get reset GPIO\n");
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user