regulator: core: export function to check if regulator always on
PATCH 1/1 regulator: core: export function to check if regulator always on
Export a function to allow a consumer to check if its supply regulator is always on. Drivers might wish to take different action based on this - for example skipping time-consuming power-saving preparations that are irrelevant if the regulator cannot be disabled.
--- drivers/regulator/core.c | 16 ++++++++++++++++ include/linux/regulator/consumer.h | 6 ++++++ 2 files changed, 22 insertions(+), 0 deletions(-)
drivers/regulator/core.c +16 -0
@@ -2184,6 +2184,22 @@ int regulator_is_enabled(struct regulator *regulator)EXPORT_SYMBOL_GPL (regulator_is_enabled);/** +* regulator_is_always_on - check if regulator is always on +* @regulator: regulator source +* +* Returns positive if the regulator driver backing the source/client +* is always on, false otherwise. +*/ +int regulator_is_always_on (struct regulator *regulator) +{ +if (regulator->always_on) +return 1 ; +else +return 0 ; +} +EXPORT_SYMBOL_GPL (regulator_is_always_on); + +/** * regulator_can_change_voltage - check if regulator can change voltage * @regulator: regulator source *
include/linux/regulator/consumer.h +6 -0
@@ -217,6 +217,7 @@ int regulator_bulk_force_disable(int num_consumers,void regulator_bulk_free (int num_consumers,struct regulator_bulk_data *consumers); +int regulator_is_always_on (struct regulator *regulator);int regulator_can_change_voltage (struct regulator *regulator);int regulator_count_voltages (struct regulator *regulator);int regulator_list_voltage (struct regulator *regulator,unsigned selector);
@@ -425,6 +426,11 @@ static inline void regulator_bulk_free(int num_consumers, { } +static inline int regulator_is_always_on (struct regulator *regulator) +{ +return 1 ; +} +static inline int regulator_can_change_voltage (struct regulator *regulator) {return 0 ;
Signature · 1 line
1.7.2.5
Mark Brown
maintainerQuoted 5 lines · Richard Fitzgerald
Export a function to allow a consumer to check if its supply regulator is always on. Drivers might wish to take different action based on this - for example skipping time-consuming power-saving preparations that are irrelevant if the regulator cannot be disabled.
I'd like to see a user here, and I'd also like to understand why this is a better approach than using a callback to postpone these expensive operations until the regulator is actually powered off like we already do for some things like register cache resyncs. That is normally better since it also avoids the work in cases where the regulator isn't always on like reenabling during a delayed powerdown or shared regulators.
You're also missing a !CONFIG_REGULATOR stub.
Quoted 8 lines · Mark Brown
Quoted 5 lines · Richard Fitzgerald
Export a function to allow a consumer to check if its supply regulator is always on. Drivers might wish to take different action based on this - for example skipping time-consuming power-saving preparations that are irrelevant if the regulator cannot be disabled.
I'd like to see a user here,
The user will be the Arizona codec drivers but I wanted to upstream this patch first for discussion.
Quoted 7 lines
and I'd also like to understand why this is
a better approach than using a callback to postpone these expensive operations until the regulator is actually powered off like we already do for some things like register cache resyncs. That is normally better since it also avoids the work in cases where the regulator isn't always on like reenabling during a delayed powerdown or shared regulators.
The runtime_suspend() for the Arizona drivers has to do a bunch of preparation before disabling the DCVDD regulator (and there's more preparation steps that need to be upstreamed). There's no point doing any of this if at the end the regulator isn't going to switch off.
Quoted 1 line
You're also missing a !CONFIG_REGULATOR stub.
It's there at the end of the patch, returning 1.
Mark Brown
maintainerQuoted 6 lines · Richard Fitzgerald
Quoted 1 line · Mark Brown
I'd like to see a user here,
The user will be the Arizona codec drivers but I wanted to upstream this patch first for discussion.
My point is that the code using the API is useful input to the discussion.
Quoted 11 lines
Quoted 6 lines
and I'd also like to understand why this is
a better approach than using a callback to postpone these expensive operations until the regulator is actually powered off like we already do for some things like register cache resyncs. That is normally better since it also avoids the work in cases where the regulator isn't always on like reenabling during a delayed powerdown or shared regulators.The
runtime_suspend()for the Arizona drivers has to do a bunch of preparation before disabling the DCVDD regulator (and there's more preparation steps that need to be upstreamed). There's no point doing any of this if at the end the regulator isn't going to switch off.
I'm not sure that this addresses my concern about postponing the expensive work until the regulator is actually powered off at all?
Quoted 3 lines
Quoted 1 line
You're also missing a !CONFIG_REGULATOR stub.
It's there at the end of the patch, returning 1.
Bah, so it is.
Quoted 11 lines · Mark Brown
Quoted 6 lines · Richard Fitzgerald
Quoted 1 line · Mark Brown
I'd like to see a user here,
The user will be the Arizona codec drivers but I wanted to upstream this patch first for discussion.
My point is that the code using the API is useful input to the discussion.
Ok, I'll push up a patch showing what I'm intending to do with this new function
Quoted 7 lines
Quoted 6 lines
Quoted 6 lines
and I'd also like to understand why this is
a better approach than using a callback to postpone these expensive operations until the regulator is actually powered off like we already do for some things like register cache resyncs. That is normally better since it also avoids the work in cases where the regulator isn't always on like reenabling during a delayed powerdown or shared regulators.
Quoted 8 lines
Quoted 4 lines
The
runtime_suspend()for the Arizona drivers has to do a bunch of preparation before disabling the DCVDD regulator (and there's more preparation steps that need to be upstreamed). There's no point doing any of this if at the end the regulator isn't going to switch off.I'm not sure that this addresses my concern about postponing the expensive work until the regulator is actually powered off at all?
The point is that the work we want to avoid has to happen while the regulator is still powered up. We can't just rip power from the codec, it has to be setup ready for the DCVDD to be turned off. So it's pre-power down work we're avoiding by knowing that a power-down will never actually happen, it's not post-power-down work.
But as you say the code that's going to use it will help explain.
Quoted 5 lines
Quoted 3 lines
Quoted 1 line
You're also missing a !CONFIG_REGULATOR stub.
It's there at the end of the patch, returning 1.
Bah, so it is.
Mark Brown
maintainerQuoted 14 lines · Richard Fitzgerald
Quoted 11 lines · Mark Brown
Quoted 11 lines
Quoted 6 lines
and I'd also like to understand why this is
a better approach than using a callback to postpone these expensive operations until the regulator is actually powered off like we already do for some things like register cache resyncs. That is normally better since it also avoids the work in cases where the regulator isn't always on like reenabling during a delayed powerdown or shared regulators.The
runtime_suspend()for the Arizona drivers has to do a bunch of preparation before disabling the DCVDD regulator (and there's more preparation steps that need to be upstreamed). There's no point doing any of this if at the end the regulator isn't going to switch off.
Quoted 8 lines
Quoted 2 lines
I'm not sure that this addresses my concern about postponing the expensive work until the regulator is actually powered off at all?
The point is that the work we want to avoid has to happen while the regulator is still powered up. We can't just rip power from the codec, it has to be setup ready for the DCVDD to be turned off. So it's pre-power down work we're avoiding by knowing that a power-down will never actually happen, it's not post-power-down work.
I'm sorry but you're still not addressing my question - to repeat, my question is why this is better than postponing these expensive operations to a callback at the time we want to power off. You keep saying that you want to avoid these operations when they're not needed but that's not what I'm asking about, what I'm asking is why polling this particular possible reason is better than a notifier?