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 <[email protected]> --- 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

