aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/regulator/internal.h
diff options
context:
space:
mode:
authorDouglas Anderson <dianders@chromium.org>2018-11-20 09:52:53 -0800
committerMark Brown <broonie@kernel.org>2018-11-22 14:38:00 +0000
commit5451781dadf85000665e0e2c3288e9e0f34b860a (patch)
treece7eebcf6b158e90e86385800bb8cc654932b69d /drivers/regulator/internal.h
parentregulator: wm8994: Don't use devres for enable GPIOs (diff)
downloadlinux-dev-5451781dadf85000665e0e2c3288e9e0f34b860a.tar.xz
linux-dev-5451781dadf85000665e0e2c3288e9e0f34b860a.zip
regulator: core: Only count load for enabled consumers
In general when the consumer of a regulator requests that the regulator be disabled it no longer will be drawing much load from the regulator--it should just be the leakage current and that should be very close to 0. Up to this point the regulator framework has continued to count a consumer's load request for disabled regulators. This has led to code patterns that look like this: enable_my_thing(): regular_set_load(reg, load_uA) regulator_enable(reg) disable_my_thing(): regulator_disable(reg) regulator_set_load(reg, 0) Sometimes disable_my_thing() sets a nominal (<= 100 uA) load instead of setting a 0 uA load. I will make the assertion that nearly all (if not all) places where we set a nominal load of 100 uA or less we end up with a result that is the same as if we had set a load of 0 uA. Specifically: - The whole point of setting the load is to help set the operating mode of the regulator. Higher loads may need less efficient operating modes. - The only time this matters at all is if there is another consumer of the regulator that wants the regulator on. If there are no other consumers of the regulator then the regulator will turn off and we don't care about the operating mode. - If there's another consumer that actually wants the regulator on then presumably it is requesting a load that makes our nominal <= 100 uA load insignificant. A quick survey of the existing callers to regulator_set_load() to see how everyone uses it: Signed-off-by: Douglas Anderson <dianders@chromium.org> Signed-off-by: Mark Brown <broonie@kernel.org>
Diffstat (limited to 'drivers/regulator/internal.h')
-rw-r--r--drivers/regulator/internal.h2
1 files changed, 2 insertions, 0 deletions
diff --git a/drivers/regulator/internal.h b/drivers/regulator/internal.h
index 943926a156f2..6017f15c5d75 100644
--- a/drivers/regulator/internal.h
+++ b/drivers/regulator/internal.h
@@ -42,6 +42,8 @@ struct regulator {
unsigned int always_on:1;
unsigned int bypass:1;
int uA_load;
+ unsigned int enable_count;
+ unsigned int deferred_disables;
struct regulator_voltage voltage[REGULATOR_STATES_NUM];
const char *supply_name;
struct device_attribute dev_attr;