Add optional reset-gpios pin control. If present, de-assert the specified reset gpio pin to bring the chip out of reset. Signed-off-by: Steve Longerbeam <steve_longerbeam@xxxxxxxxxx> --- drivers/gpio/gpio-pca953x.c | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/drivers/gpio/gpio-pca953x.c b/drivers/gpio/gpio-pca953x.c index 5e3be32..8698815 100644 --- a/drivers/gpio/gpio-pca953x.c +++ b/drivers/gpio/gpio-pca953x.c @@ -21,6 +21,7 @@ #include <asm/unaligned.h> #include <linux/of_platform.h> #include <linux/acpi.h> +#include <linux/gpio/consumer.h> #define PCA953X_INPUT 0 #define PCA953X_OUTPUT 1 @@ -111,6 +112,8 @@ struct pca953x_chip { const char *const *names; int chip_type; unsigned long driver_data; + + struct gpio_desc *reset_gpio; }; static int pca953x_read_single(struct pca953x_chip *chip, int reg, u32 *val, @@ -759,6 +762,21 @@ static int pca953x_probe(struct i2c_client *client, } else { chip->gpio_start = -1; irq_base = 0; + + /* see if we need to de-assert a reset pin */ + chip->reset_gpio = devm_gpiod_get_optional(&client->dev, + "reset", + GPIOD_OUT_LOW); + if (IS_ERR(chip->reset_gpio)) { + dev_err(&client->dev, "request for reset pin failed\n"); + return PTR_ERR(chip->reset_gpio); + } + + if (chip->reset_gpio) { + /* bring chip out of reset */ + dev_info(&client->dev, "releasing reset\n"); + gpiod_set_value(chip->reset_gpio, 0); + } } chip->client = client; -- 1.9.1 -- To unsubscribe from this list: send the line "unsubscribe linux-media" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html