This is an automated email from the ASF dual-hosted git repository. xiaoxiang pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/nuttx.git
commit 67aa12e762cb1709da830df08b6fd0bc04d59f60 Author: dulibo1 <[email protected]> AuthorDate: Thu Jul 13 20:47:13 2023 +0800 regulator:support always on when add always on desc,the regulator is always enabled Signed-off-by: dulibo1 <[email protected]> --- drivers/power/supply/regulator.c | 13 ++++++++++--- include/nuttx/power/regulator.h | 1 + 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/drivers/power/supply/regulator.c b/drivers/power/supply/regulator.c index 04c2ad3589..91fee66a6e 100644 --- a/drivers/power/supply/regulator.c +++ b/drivers/power/supply/regulator.c @@ -521,6 +521,11 @@ int regulator_is_enabled(FAR struct regulator_s *regulator) rdev = regulator->rdev; + if (rdev->desc->always_on) + { + return 1; + } + nxmutex_lock(&rdev->regulator_lock); ret = _regulator_is_enabled(rdev); nxmutex_unlock(&rdev->regulator_lock); @@ -634,7 +639,7 @@ int regulator_disable(FAR struct regulator_s *regulator) goto err; } - if (rdev->use_count == 1) + if (rdev->use_count == 1 && !rdev->desc->always_on) { ret = _regulator_do_disable(rdev); if (ret < 0) @@ -813,11 +818,13 @@ regulator_register(FAR const struct regulator_desc_s *regulator_desc, list_initialize(&rdev->consumer_list); list_initialize(&rdev->list); - if (rdev->desc->boot_on && !_regulator_is_enabled(rdev)) + if ((rdev->desc->boot_on || rdev->desc->always_on) + && !_regulator_is_enabled(rdev)) { _regulator_do_enable(rdev); } - else if (!rdev->desc->boot_on && _regulator_is_enabled(rdev)) + else if (!rdev->desc->boot_on && !rdev->desc->always_on + && _regulator_is_enabled(rdev)) { _regulator_do_disable(rdev); } diff --git a/include/nuttx/power/regulator.h b/include/nuttx/power/regulator.h index 7a63583859..c973fa2a54 100644 --- a/include/nuttx/power/regulator.h +++ b/include/nuttx/power/regulator.h @@ -97,6 +97,7 @@ struct regulator_desc_s unsigned int boot_on; /* true if this regulator is to be enabled * at power up/reset */ + unsigned int always_on; }; struct regulator_dev_s
