From 67aa12e762cb1709da830df08b6fd0bc04d59f60 Mon Sep 17 00:00:00 2001 From: dulibo1 Date: Thu, 13 Jul 2023 20:47:13 +0800 Subject: [PATCH] regulator:support always on when add always on desc,the regulator is always enabled Signed-off-by: dulibo1 --- 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 04c2ad3589a..91fee66a6e1 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 7a63583859d..c973fa2a541 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