media: i2c: ov5640: Check for devm_gpiod_get_optional() error
PATCH 1/2 media: i2c: ov5640: Check for devm_gpiod_get_optional() error
The power down and reset GPIO are optional, but the return value from devm_gpiod_get_optional() needs to be checked and propagated in the case of error, so that probe deferral can work.
Signed-off-by Fabio Estevam <[email protected]>
--- drivers/media/i2c/ov5640.c | 5 +++++ 1 file changed, 5 insertions(+)
drivers/media/i2c/ov5640.c +5 -0
@@ -3022,9 +3022,14 @@ static int ov5640_probe(struct i2c_client *client,/* request optional power down pin */ sensor->pwdn_gpio =devm_gpiod_get_optional (dev,"powerdown" ,GPIOD_OUT_HIGH ); +if (IS_ERR (sensor->pwdn_gpio)) +return PTR_ERR (sensor->pwdn_gpio); +/* request optional reset pin */ sensor->reset_gpio =devm_gpiod_get_optional (dev,"reset" ,GPIOD_OUT_HIGH ); +if (IS_ERR (sensor->reset_gpio)) +return PTR_ERR (sensor->reset_gpio);v4l2_i2c_subdev_init (&sensor->sd, client, &ov5640_subdev_ops);
Signature · 1 line
2.17.1
PATCH 2/2 media: i2c: ov5640: Fix the order for enabling regulators
According to the OV5640 datasheet the following sequence needs to be followed when powering the OV5640 supplies:
- DOVDD
- AVDD
- DVDD
So follow this order inside the ov5640_supply_name[] array, so that the regulator_bulk() functions can enable the regulator in the correct sequence.
Signed-off-by Fabio Estevam <[email protected]>
--- drivers/media/i2c/ov5640.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/media/i2c/ov5640.c +1 -1
@@ -158,8 +158,8 @@ static const int ov5640_framerates[] = {/* regulator supplies */ static const char *const ov5640_supply_name[] = {"DOVDD" ,/* Digital I/O (1.8V) supply */ -"DVDD" ,/* Digital Core (1.5V) supply */ "AVDD" ,/* Analog (2.8V) supply */ +"DVDD" ,/* Digital Core (1.5V) supply */ };#define OV5640_NUM_SUPPLIES ARRAY_SIZE(ov5640_supply_name)
Signature · 1 line
2.17.1