Skip to content

Commit fa3772f

Browse files
jwrdegoedemchehab
authored andcommitted
media: ov2740: Add powerdown GPIO support
The ov2740 sensor has both reset and power_down inputs according to the datasheet one or the other should always be tied to DOVDD but on some designs both are attached to GPIOs. Add support for controlling both a reset and a powerdown GPIO. Signed-off-by: Hans de Goede <hdegoede@redhat.com> Tested-by: Stanislaw Gruszka <stanislaw.gruszka@linux.intel.com> Acked-by: Ricardo Ribalda <ribalda@chromium.org> Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com> Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
1 parent 17898af commit fa3772f

File tree

1 file changed

+13
-2
lines changed

1 file changed

+13
-2
lines changed

drivers/media/i2c/ov2740.c

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -525,6 +525,7 @@ struct ov2740 {
525525

526526
/* GPIOs, clocks */
527527
struct gpio_desc *reset_gpio;
528+
struct gpio_desc *powerdown_gpio;
528529
struct clk *clk;
529530

530531
/* Current mode */
@@ -1306,6 +1307,7 @@ static int ov2740_suspend(struct device *dev)
13061307
struct ov2740 *ov2740 = to_ov2740(sd);
13071308

13081309
gpiod_set_value_cansleep(ov2740->reset_gpio, 1);
1310+
gpiod_set_value_cansleep(ov2740->powerdown_gpio, 1);
13091311
clk_disable_unprepare(ov2740->clk);
13101312
return 0;
13111313
}
@@ -1320,6 +1322,7 @@ static int ov2740_resume(struct device *dev)
13201322
if (ret)
13211323
return ret;
13221324

1325+
gpiod_set_value_cansleep(ov2740->powerdown_gpio, 0);
13231326
gpiod_set_value_cansleep(ov2740->reset_gpio, 0);
13241327
msleep(20);
13251328

@@ -1348,9 +1351,17 @@ static int ov2740_probe(struct i2c_client *client)
13481351
if (IS_ERR(ov2740->reset_gpio)) {
13491352
return dev_err_probe(dev, PTR_ERR(ov2740->reset_gpio),
13501353
"failed to get reset GPIO\n");
1351-
} else if (ov2740->reset_gpio) {
1354+
}
1355+
1356+
ov2740->powerdown_gpio = devm_gpiod_get_optional(dev, "powerdown", GPIOD_OUT_HIGH);
1357+
if (IS_ERR(ov2740->powerdown_gpio)) {
1358+
return dev_err_probe(dev, PTR_ERR(ov2740->powerdown_gpio),
1359+
"failed to get powerdown GPIO\n");
1360+
}
1361+
1362+
if (ov2740->reset_gpio || ov2740->powerdown_gpio) {
13521363
/*
1353-
* Ensure reset is asserted for at least 20 ms before
1364+
* Ensure reset/powerdown is asserted for at least 20 ms before
13541365
* ov2740_resume() deasserts it.
13551366
*/
13561367
msleep(20);

0 commit comments

Comments
 (0)