[PATCH 3/3] power: regulator: common: fix compilation issue
Julien Stephan
jstephan at baylibre.com
Wed Dec 10 22:24:24 CET 2025
If CONFIG_DM_GPIO is not enabled, compilation fails with the following
errors:
aarch64-none-linux-gnu-ld: drivers/power/regulator/regulator_common.o: in function `regulator_common_of_to_plat':
<...>/u-boot/drivers/power/regulator/regulator_common.c:30: undefined reference to `gpio_request_by_name'
aarch64-none-linux-gnu-ld: drivers/power/regulator/regulator_common.o: in function `regulator_common_get_enable':
<...>/u-boot/drivers/power/regulator/regulator_common.c:57: undefined reference to `dm_gpio_get_value'
aarch64-none-linux-gnu-ld: drivers/power/regulator/regulator_common.o: in function `regulator_common_set_enable':
<...>/u-boot/drivers/power/regulator/regulator_common.c:92: undefined reference to `dm_gpio_set_value'
make: *** [Makefile:2029: u-boot] Error 139
Since the enable gpio is optional we can conditionally skip these calls.
Signed-off-by: Julien Stephan <jstephan at baylibre.com>
---
drivers/power/regulator/regulator_common.c | 88 +++++++++++++++---------------
1 file changed, 45 insertions(+), 43 deletions(-)
diff --git a/drivers/power/regulator/regulator_common.c b/drivers/power/regulator/regulator_common.c
index cf98998579aa8a3cb7f09dccd2124207a58d8b00..fcf19253e048995fdcd952a48a6976cf86991ca8 100644
--- a/drivers/power/regulator/regulator_common.c
+++ b/drivers/power/regulator/regulator_common.c
@@ -27,12 +27,14 @@ int regulator_common_of_to_plat(struct udevice *dev,
/* Get optional enable GPIO desc */
gpio = &plat->gpio;
- ret = gpio_request_by_name(dev, enable_gpio_name, 0, gpio, flags);
- if (ret) {
- debug("Regulator '%s' optional enable GPIO - not found! Error: %d\n",
- dev->name, ret);
- if (ret != -ENOENT)
- return ret;
+ if (IS_ENABLED(CONFIG_DM_GPIO)) {
+ ret = gpio_request_by_name(dev, enable_gpio_name, 0, gpio, flags);
+ if (ret) {
+ debug("Regulator '%s' optional enable GPIO - not found! Error: %d\n",
+ dev->name, ret);
+ if (ret != -ENOENT)
+ return ret;
+ }
}
/* Get optional ramp up delay */
@@ -51,10 +53,10 @@ int regulator_common_get_enable(const struct udevice *dev,
struct regulator_common_plat *plat)
{
/* Enable GPIO is optional */
- if (!dm_gpio_is_valid(&plat->gpio))
- return true;
+ if (IS_ENABLED(CONFIG_DM_GPIO) && dm_gpio_is_valid(&plat->gpio))
+ return dm_gpio_get_value(&plat->gpio);
- return dm_gpio_get_value(&plat->gpio);
+ return true;
}
int regulator_common_set_enable(const struct udevice *dev,
@@ -65,47 +67,47 @@ int regulator_common_set_enable(const struct udevice *dev,
debug("%s: dev='%s', enable=%d, delay=%d, has_gpio=%d\n", __func__,
dev->name, enable, plat->startup_delay_us,
dm_gpio_is_valid(&plat->gpio));
+
/* Enable GPIO is optional */
- if (!dm_gpio_is_valid(&plat->gpio)) {
- if (!enable)
- return -ENOSYS;
- return 0;
- }
+ if (IS_ENABLED(CONFIG_DM_GPIO) && dm_gpio_is_valid(&plat->gpio)) {
+ /* If previously enabled, increase count */
+ if (enable && plat->enable_count > 0) {
+ plat->enable_count++;
+ return -EALREADY;
+ }
- /* If previously enabled, increase count */
- if (enable && plat->enable_count > 0) {
- plat->enable_count++;
- return -EALREADY;
- }
+ if (!enable) {
+ if (plat->enable_count > 1) {
+ /* If enabled multiple times, decrease count */
+ plat->enable_count--;
+ return -EBUSY;
+ } else if (!plat->enable_count) {
+ /* If already disabled, do nothing */
+ return -EALREADY;
+ }
+ }
- if (!enable) {
- if (plat->enable_count > 1) {
- /* If enabled multiple times, decrease count */
- plat->enable_count--;
- return -EBUSY;
- } else if (!plat->enable_count) {
- /* If already disabled, do nothing */
- return -EALREADY;
+ ret = dm_gpio_set_value(&plat->gpio, enable);
+ if (ret) {
+ pr_err("Can't set regulator : %s gpio to: %d\n", dev->name,
+ enable);
+ return ret;
}
- }
- ret = dm_gpio_set_value(&plat->gpio, enable);
- if (ret) {
- pr_err("Can't set regulator : %s gpio to: %d\n", dev->name,
- enable);
- return ret;
- }
+ if (enable && plat->startup_delay_us)
+ udelay(plat->startup_delay_us);
- if (enable && plat->startup_delay_us)
- udelay(plat->startup_delay_us);
+ if (!enable && plat->off_on_delay_us)
+ udelay(plat->off_on_delay_us);
- if (!enable && plat->off_on_delay_us)
- udelay(plat->off_on_delay_us);
+ if (enable)
+ plat->enable_count++;
+ else
+ plat->enable_count--;
- if (enable)
- plat->enable_count++;
- else
- plat->enable_count--;
+ } else {
+ ret = enable ? 0 : -ENOSYS;
+ }
- return 0;
+ return ret;
}
--
2.50.1
More information about the U-Boot
mailing list