[PATCH v1 0/3] Video: Keep fixed/gpio regulator counter in balance

The commit 4fcba5d556b4 ("regulator: implement basic reference counter") have made it more important to keep fixed/gpio regulators enable/disable state in balance.
The regulator_set_enable_if_allowed function is more relaxed and will wrap all cases where the regulator is busy, already active, missing or if DM_REGULATOR is not enabled.
These patches are an expansion of similar Jonas Karlman's patches.
Svyatoslav Ryhel (3): video: pwm_backlight: use regulator_set_enable_if_allowed video: simple_panel: use regulator_set_enable_if_allowed video: tegra20: dsi: use regulator_set_enable_if_allowed
drivers/video/pwm_backlight.c | 11 +++++------ drivers/video/simple_panel.c | 10 +++++----- drivers/video/tegra20/tegra-dsi.c | 8 +++----- 3 files changed, 13 insertions(+), 16 deletions(-)

With the commit 4fcba5d556b4 ("regulator: implement basic reference counter") the return value of regulator_set_enable may be EALREADY or EBUSY for fixed/gpio regulators and may be further expanded on all regulators.
Change to use the more relaxed regulator_set_enable_if_allowed to continue if regulator already was enabled or disabled.
Signed-off-by: Svyatoslav Ryhel clamor95@gmail.com --- drivers/video/pwm_backlight.c | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-)
diff --git a/drivers/video/pwm_backlight.c b/drivers/video/pwm_backlight.c index 46c16a8f44..4b35e2b120 100644 --- a/drivers/video/pwm_backlight.c +++ b/drivers/video/pwm_backlight.c @@ -97,7 +97,7 @@ static int enable_sequence(struct udevice *dev, int seq) plat = dev_get_uclass_plat(priv->reg); log_debug("Enable '%s', regulator '%s'/'%s'\n", dev->name, priv->reg->name, plat->name); - ret = regulator_set_enable(priv->reg, true); + ret = regulator_set_enable_if_allowed(priv->reg, true); if (ret) { log_debug("Cannot enable regulator for PWM '%s'\n", dev->name); @@ -178,11 +178,10 @@ static int pwm_backlight_set_brightness(struct udevice *dev, int percent) } if (disable) { dm_gpio_set_value(&priv->enable, 0); - if (priv->reg) { - ret = regulator_set_enable(priv->reg, false); - if (ret) - return log_ret(ret); - } + ret = regulator_set_enable_if_allowed(priv->reg, false); + if (ret) + return log_ret(ret); + priv->enabled = false; }

With the commit 4fcba5d556b4 ("regulator: implement basic reference counter") the return value of regulator_set_enable may be EALREADY or EBUSY for fixed/gpio regulators and may be further expanded on all regulators.
Change to use the more relaxed regulator_set_enable_if_allowed to continue if regulator already was enabled or disabled.
Signed-off-by: Svyatoslav Ryhel clamor95@gmail.com --- drivers/video/simple_panel.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-)
diff --git a/drivers/video/simple_panel.c b/drivers/video/simple_panel.c index 6a6473eb0e..eb4eed217d 100644 --- a/drivers/video/simple_panel.c +++ b/drivers/video/simple_panel.c @@ -114,11 +114,11 @@ static int simple_panel_probe(struct udevice *dev) const u32 dsi_data = dev_get_driver_data(dev); int ret;
- if (CONFIG_IS_ENABLED(DM_REGULATOR) && priv->reg) { - debug("%s: Enable regulator '%s'\n", __func__, priv->reg->name); - ret = regulator_set_enable(priv->reg, true); - if (ret) - return ret; + ret = regulator_set_enable_if_allowed(priv->reg, true); + if (ret) { + debug("%s: failed to enable regulator '%s' %d\n", + __func__, priv->reg->name, ret); + return ret; }
switch (dsi_data) {

On 2023-08-12 11:59, Svyatoslav Ryhel wrote:
With the commit 4fcba5d556b4 ("regulator: implement basic reference counter") the return value of regulator_set_enable may be EALREADY or EBUSY for fixed/gpio regulators and may be further expanded on all regulators.
Change to use the more relaxed regulator_set_enable_if_allowed to continue if regulator already was enabled or disabled.
Signed-off-by: Svyatoslav Ryhel clamor95@gmail.com
drivers/video/simple_panel.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-)
diff --git a/drivers/video/simple_panel.c b/drivers/video/simple_panel.c index 6a6473eb0e..eb4eed217d 100644 --- a/drivers/video/simple_panel.c +++ b/drivers/video/simple_panel.c @@ -114,11 +114,11 @@ static int simple_panel_probe(struct udevice *dev) const u32 dsi_data = dev_get_driver_data(dev); int ret;
- if (CONFIG_IS_ENABLED(DM_REGULATOR) && priv->reg) {
debug("%s: Enable regulator '%s'\n", __func__, priv->reg->name);
ret = regulator_set_enable(priv->reg, true);
if (ret)
return ret;
- ret = regulator_set_enable_if_allowed(priv->reg, true);
- if (ret) {
Should be 'ret && ret != -ENOSYS' because you remove the CONFIG_IS_ENABLED(DM_REGULATOR) check.
Regards, Jonas
debug("%s: failed to enable regulator '%s' %d\n",
__func__, priv->reg->name, ret);
return ret;
}
switch (dsi_data) {

With the commit 4fcba5d556b4 ("regulator: implement basic reference counter") the return value of regulator_set_enable may be EALREADY or EBUSY for fixed/gpio regulators and may be further expanded on all regulators.
Change to use the more relaxed regulator_set_enable_if_allowed to continue if regulator already was enabled or disabled.
Signed-off-by: Svyatoslav Ryhel clamor95@gmail.com --- drivers/video/tegra20/tegra-dsi.c | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-)
diff --git a/drivers/video/tegra20/tegra-dsi.c b/drivers/video/tegra20/tegra-dsi.c index 8c3404e085..3c9cafe333 100644 --- a/drivers/video/tegra20/tegra-dsi.c +++ b/drivers/video/tegra20/tegra-dsi.c @@ -831,11 +831,9 @@ static int tegra_dsi_bridge_probe(struct udevice *dev)
tegra_dsi_get_format(device->format, &priv->format);
- if (priv->avdd) { - ret = regulator_set_enable(priv->avdd, true); - if (ret) - return ret; - } + ret = regulator_set_enable_if_allowed(priv->avdd, true); + if (ret) + return ret;
tegra_dsi_init_clocks(dev);
participants (2)
-
Jonas Karlman
-
Svyatoslav Ryhel