| From 4182ab8f3cbbf0495bb760341da9631fd6981aec Mon Sep 17 00:00:00 2001 |
| From: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> |
| Date: Thu, 30 Jan 2014 21:25:14 -0800 |
| Subject: regulator: gpio: add gpios-status for DT |
| |
| config->gpios[x].flags indicates initial pin status, |
| and it will be used for drvdata->state |
| on gpio_regulator_probe(). |
| But, current of_get_gpio_regulator_config() doesn't care |
| about this flags. |
| This patch adds new gpios-status property in order to |
| care about initial pin status. |
| |
| Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> |
| Signed-off-by: Mark Brown <broonie@linaro.org> |
| (cherry picked from commit 0094050d783bbadffe83effef11a0bda901153ce) |
| Signed-off-by: Simon Horman <horms+renesas@verge.net.au> |
| --- |
| .../devicetree/bindings/regulator/gpio-regulator.txt | 1 + |
| drivers/regulator/gpio-regulator.c | 11 +++++++++++ |
| 2 files changed, 12 insertions(+) |
| |
| diff --git a/Documentation/devicetree/bindings/regulator/gpio-regulator.txt b/Documentation/devicetree/bindings/regulator/gpio-regulator.txt |
| index 63c659800c03..3ecb585e786c 100644 |
| --- a/Documentation/devicetree/bindings/regulator/gpio-regulator.txt |
| +++ b/Documentation/devicetree/bindings/regulator/gpio-regulator.txt |
| @@ -8,6 +8,7 @@ Required properties: |
| Optional properties: |
| - enable-gpio : GPIO to use to enable/disable the regulator. |
| - gpios : GPIO group used to control voltage. |
| +- gpios-states : gpios pin's initial states. 1 means HIGH |
| - startup-delay-us : Startup time in microseconds. |
| - enable-active-high : Polarity of GPIO is active high (default is low). |
| |
| diff --git a/drivers/regulator/gpio-regulator.c b/drivers/regulator/gpio-regulator.c |
| index bad44f366b3f..ac3a8c732dd8 100644 |
| --- a/drivers/regulator/gpio-regulator.c |
| +++ b/drivers/regulator/gpio-regulator.c |
| @@ -172,11 +172,22 @@ of_get_gpio_regulator_config(struct device *dev, struct device_node *np) |
| if (!config->gpios) |
| return ERR_PTR(-ENOMEM); |
| |
| + prop = of_find_property(np, "gpios-states", NULL); |
| + if (prop) { |
| + proplen = prop->length / sizeof(int); |
| + if (proplen != config->nr_gpios) { |
| + /* gpios <-> gpios-states mismatch */ |
| + prop = NULL; |
| + } |
| + } |
| + |
| for (i = 0; i < config->nr_gpios; i++) { |
| gpio = of_get_named_gpio(np, "gpios", i); |
| if (gpio < 0) |
| break; |
| config->gpios[i].gpio = gpio; |
| + if (prop && be32_to_cpup((int *)prop->value + i)) |
| + config->gpios[i].flags = GPIOF_OUT_INIT_HIGH; |
| } |
| |
| /* Fetch states. */ |
| -- |
| 2.1.2 |
| |