Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

[PATCH] regulator: gpio: check return value of of_get_named_gpio

199 views
Skip to first unread message

Mihai Mihalache

unread,
Mar 9, 2016, 9:00:06 AM3/9/16
to
At boot time the regulator driver can be initialized before the
gpio, in which case the call to of_get_named_gpio will return
EPROBE_DEFER. This value is silently passed to regulator_register
which will return success, although the gpio is not registered
(regulator_ena_gpio_request not called) as the value passed is
detected as invalid. The gpio_regulator_probe will therefore
succeed with no gpio requested.

Signed-off-by: Mihai Mihalache <mihai.d....@intel.com>
Reviewed-by: Hans Holmberg <hans.h...@intel.com>
---
drivers/regulator/gpio-regulator.c | 2 ++
1 file changed, 2 insertions(+)

diff --git a/drivers/regulator/gpio-regulator.c b/drivers/regulator/gpio-regulator.c
index 464018d..429294f 100644
--- a/drivers/regulator/gpio-regulator.c
+++ b/drivers/regulator/gpio-regulator.c
@@ -162,6 +162,8 @@ of_get_gpio_regulator_config(struct device *dev, struct device_node *np,
of_property_read_u32(np, "startup-delay-us", &config->startup_delay);

config->enable_gpio = of_get_named_gpio(np, "enable-gpio", 0);
+ if(IS_ERR_VALUE(config->enable_gpio))
+ return ERR_PTR(config->enable_gpio);

/* Fetch GPIOs. - optional property*/
ret = of_gpio_count(np);
--
1.7.9.5

Mark Brown

unread,
Mar 9, 2016, 10:20:06 PM3/9/16
to
On Wed, Mar 09, 2016 at 05:50:42AM -0800, Mihai Mihalache wrote:

> config->enable_gpio = of_get_named_gpio(np, "enable-gpio", 0);
> + if(IS_ERR_VALUE(config->enable_gpio))
> + return ERR_PTR(config->enable_gpio);

Please follow the kernel coding style - if(.
signature.asc

Mihai Mihalache

unread,
Mar 10, 2016, 5:10:07 AM3/10/16
to
At boot time the regulator driver can be initialized before the
gpio, in which case the call to of_get_named_gpio will return
EPROBE_DEFER. This value is silently passed to regulator_register
which will return success, although the gpio is not registered
(regulator_ena_gpio_request not called) as the value passed is
detected as invalid. The gpio_regulator_probe will therefore
succeed win no gpio requested.

Signed-off-by: Mihai Mihalache <mihai.d....@intel.com>
---

History:
V1:
- Fix comment from Mark Brown

drivers/regulator/gpio-regulator.c | 2 ++
1 file changed, 2 insertions(+)

diff --git a/drivers/regulator/gpio-regulator.c b/drivers/regulator/gpio-regulator.c
index 464018d..9108c57 100644
--- a/drivers/regulator/gpio-regulator.c
+++ b/drivers/regulator/gpio-regulator.c
@@ -162,6 +162,8 @@ of_get_gpio_regulator_config(struct device *dev, struct device_node *np,
of_property_read_u32(np, "startup-delay-us", &config->startup_delay);

config->enable_gpio = of_get_named_gpio(np, "enable-gpio", 0);
+ if (IS_ERR_VALUE(config->enable_gpio))
+ return ERR_PTR(config->enable_gpio);

/* Fetch GPIOs. - optional property*/
ret = of_gpio_count(np);
--
2.1.4

Mark Brown

unread,
Mar 13, 2016, 4:40:05 AM3/13/16
to
On Thu, Mar 10, 2016 at 02:04:59AM -0800, Mihai Mihalache wrote:

> config->enable_gpio = of_get_named_gpio(np, "enable-gpio", 0);
> + if (IS_ERR_VALUE(config->enable_gpio))
> + return ERR_PTR(config->enable_gpio);

This is an incompatible behaviour change. enable-gpio is an optional
property, we check later if we got a valid GPIO and happily continue if
we didn't. The driver should instead explicitly check for -EPROBE_DEFER
and handle that case separately, allowing the device to probe in cases
where the GPIO is just not provided.
signature.asc

Mihai Mihalache

unread,
Mar 16, 2016, 11:30:06 AM3/16/16
to
At boot time the regulator driver can be initialized before the
gpio, in which case the call to of_get_named_gpio will return
EPROBE_DEFER. This value is silently passed to regulator_register
which will return success, although the gpio is not registered
(regulator_ena_gpio_request not called) as the value passed is
detected as invalid. The gpio_regulator_probe will therefore
succeed win no gpio requested.

Signed-off-by: Mihai Mihalache <mihai.d....@intel.com>
Reviewed-by: Hans Holmberg <hans.h...@intel.com>
---

History:
V1:
- Fix comment from Mark Brown
V2:
- Explicit check for EPROBE_DEFER for optional property,
Mark Brown's feedback.

drivers/regulator/gpio-regulator.c | 2 ++
1 file changed, 2 insertions(+)

diff --git a/drivers/regulator/gpio-regulator.c b/drivers/regulator/gpio-regulator.c
index 464018d..f3147ef 100644
--- a/drivers/regulator/gpio-regulator.c
+++ b/drivers/regulator/gpio-regulator.c
@@ -162,6 +162,8 @@ of_get_gpio_regulator_config(struct device *dev, struct device_node *np,
of_property_read_u32(np, "startup-delay-us", &config->startup_delay);

config->enable_gpio = of_get_named_gpio(np, "enable-gpio", 0);
+ if (config->enable_gpio == -EPROBE_DEFER)
+ return ERR_PTR(-EPROBE_DEFER);

Mark Brown

unread,
Mar 17, 2016, 7:50:06 AM3/17/16
to
The patch

regulator: gpio: check return value of of_get_named_gpio

has been applied to the regulator tree at

git://git.kernel.org/pub/scm/linux/kernel/git/broonie/regulator.git

All being well this means that it will be integrated into the linux-next
tree (usually sometime in the next 24 hours) and sent to Linus during
the next merge window (or sooner if it is a bug fix), however if
problems are discovered then the patch may be dropped or reverted.

You may get further e-mails resulting from automated or manual testing
and review of the tree, please engage with people reporting problems and
send followup patches addressing any issues that are reported if needed.

If any updates are required or you are submitting further changes they
should be sent as incremental updates against current git, existing
patches will not be replaced.

Please add any relevant lists and maintainers to the CCs when replying
to this mail.

Thanks,
Mark

From 8d48794bb3bf7d7e421204a8cc3bd5c95ffc609b Mon Sep 17 00:00:00 2001
From: Mihai Mihalache <mihai.d....@intel.com>
Date: Wed, 16 Mar 2016 08:21:12 -0700
Subject: [PATCH] regulator: gpio: check return value of of_get_named_gpio

At boot time the regulator driver can be initialized before the
gpio, in which case the call to of_get_named_gpio will return
EPROBE_DEFER. This value is silently passed to regulator_register
which will return success, although the gpio is not registered
(regulator_ena_gpio_request not called) as the value passed is
detected as invalid. The gpio_regulator_probe will therefore
succeed win no gpio requested.

Signed-off-by: Mihai Mihalache <mihai.d....@intel.com>
Reviewed-by: Hans Holmberg <hans.h...@intel.com>
Signed-off-by: Mark Brown <bro...@kernel.org>
---
drivers/regulator/gpio-regulator.c | 2 ++
1 file changed, 2 insertions(+)

diff --git a/drivers/regulator/gpio-regulator.c b/drivers/regulator/gpio-regulator.c
index a8718e98674a..83e89e5d4752 100644
--- a/drivers/regulator/gpio-regulator.c
+++ b/drivers/regulator/gpio-regulator.c
@@ -162,6 +162,8 @@ of_get_gpio_regulator_config(struct device *dev, struct device_node *np,
of_property_read_u32(np, "startup-delay-us", &config->startup_delay);

config->enable_gpio = of_get_named_gpio(np, "enable-gpio", 0);
+ if (config->enable_gpio == -EPROBE_DEFER)
+ return ERR_PTR(-EPROBE_DEFER);

/* Fetch GPIOs. - optional property*/
ret = of_gpio_count(np);
--
2.7.0
0 new messages