[U-Boot] [PATCH] power: regulator: Return success on attempt to disable an always-on regulator

Simon Glass sjg at chromium.org
Thu Dec 27 22:27:08 UTC 2018


Hi Lokesh,

On Mon, 24 Dec 2018 at 04:08, Lokesh Vutla <lokeshvutla at ti.com> wrote:
>
> commit 4f86a724e82c0 ("power: regulator: denied disable on always-on
> regulator") throws an error when requested to disable an always-on
> regulator. It is right that an always-on regulator should not be
> attempted to be disabled. But at the same time regulator framework
> should not return an error when such request is received. Instead
> it should just return success without attempting to disable the
> specified regulator. This is because the requesting driver will
> not have the idea if the regulator is always-on or not. The
> requesting driver will always try to enable/disable regulator as
> per the required flow. So it is upto regulator framework to not
> break such scenarios.

Can the caller not check the error code? It is -EACCES in this case.

Regards,
Simon

>
> Fixes: 4f86a724e82c0 ("power: regulator: denied disable on always-on regulator")
> Reported-by: Jean-Jacques Hiblot <jjhiblot at ti.com>
> Signed-off-by: Lokesh Vutla <lokeshvutla at ti.com>
> ---
> - Without this mmc driver is broken on TI's DRA7 platfroms.
> - kernel as well follows the same logic while disabling an always-on regulator[1]
> Logs:
> Without $patch: https://pastebin.ubuntu.com/p/cNyKTxgKCY/
> with $patch: https://pastebin.ubuntu.com/p/PZbgfMp77k/
>
> [1] https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/drivers/regulator/core.c#n2333
>
>  drivers/power/regulator/regulator-uclass.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/drivers/power/regulator/regulator-uclass.c b/drivers/power/regulator/regulator-uclass.c
> index 4511625ff2..39e46279d5 100644
> --- a/drivers/power/regulator/regulator-uclass.c
> +++ b/drivers/power/regulator/regulator-uclass.c
> @@ -113,7 +113,7 @@ int regulator_set_enable(struct udevice *dev, bool enable)
>
>         uc_pdata = dev_get_uclass_platdata(dev);
>         if (!enable && uc_pdata->always_on)
> -               return -EACCES;
> +               return 0;
>
>         return ops->set_enable(dev, enable);
>  }
> --
> 2.19.2
>


More information about the U-Boot mailing list