* [PATCH 1/2] regulator: Add API to re-apply voltage to hardware
@ 2010-12-16 15:49 Mark Brown
2010-12-16 15:49 ` [PATCH 2/2] regulator: Optimise out noop voltage changes Mark Brown
2010-12-17 10:42 ` [PATCH 1/2] regulator: Add API to re-apply voltage to hardware Liam Girdwood
0 siblings, 2 replies; 3+ messages in thread
From: Mark Brown @ 2010-12-16 15:49 UTC (permalink / raw)
To: Saravana Kannan, Liam Girdwood; +Cc: linux-kernel, patches, Mark Brown
When cooperating with an external control source the regulator setup
may be changed underneath the API. Currently consumers can just redo
the regulator_set_voltage() to restore a previously set configuration
but provide an explicit API for doing this as optimsations in the
regulator_set_voltage() implementation will shortly prevent that.
Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
---
drivers/regulator/core.c | 47 ++++++++++++++++++++++++++++++++++++
include/linux/regulator/consumer.h | 1 +
2 files changed, 48 insertions(+), 0 deletions(-)
diff --git a/drivers/regulator/core.c b/drivers/regulator/core.c
index 3d72cc8..a12cba3 100644
--- a/drivers/regulator/core.c
+++ b/drivers/regulator/core.c
@@ -1727,6 +1727,53 @@ out:
}
EXPORT_SYMBOL_GPL(regulator_set_voltage);
+/**
+ * regulator_sync_voltage - re-apply last regulator output voltage
+ * @regulator: regulator source
+ *
+ * Re-apply the last configured voltage. This is intended to be used
+ * where some external control source the consumer is cooperating with
+ * has caused the configured voltage to change.
+ */
+int regulator_sync_voltage(struct regulator *regulator)
+{
+ struct regulator_dev *rdev = regulator->rdev;
+ int ret, min_uV, max_uV;
+
+ mutex_lock(&rdev->mutex);
+
+ if (!rdev->desc->ops->set_voltage &&
+ !rdev->desc->ops->set_voltage_sel) {
+ ret = -EINVAL;
+ goto out;
+ }
+
+ /* This is only going to work if we've had a voltage configured. */
+ if (!regulator->min_uV && !regulator->max_uV) {
+ ret = -EINVAL;
+ goto out;
+ }
+
+ min_uV = regulator->min_uV;
+ max_uV = regulator->max_uV;
+
+ /* This should be a paranoia check... */
+ ret = regulator_check_voltage(rdev, &min_uV, &max_uV);
+ if (ret < 0)
+ goto out;
+
+ ret = regulator_check_consumers(rdev, &min_uV, &max_uV);
+ if (ret < 0)
+ goto out;
+
+ ret = _regulator_do_set_voltage(rdev, min_uV, max_uV);
+
+out:
+ mutex_unlock(&rdev->mutex);
+ return ret;
+}
+EXPORT_SYMBOL_GPL(regulator_sync_voltage);
+
static int _regulator_get_voltage(struct regulator_dev *rdev)
{
int sel;
diff --git a/include/linux/regulator/consumer.h b/include/linux/regulator/consumer.h
index ebd7472..7954f6b 100644
--- a/include/linux/regulator/consumer.h
+++ b/include/linux/regulator/consumer.h
@@ -154,6 +154,7 @@ int regulator_is_supported_voltage(struct regulator *regulator,
int min_uV, int max_uV);
int regulator_set_voltage(struct regulator *regulator, int min_uV, int max_uV);
int regulator_get_voltage(struct regulator *regulator);
+int regulator_sync_voltage(struct regulator *regulator);
int regulator_set_current_limit(struct regulator *regulator,
int min_uA, int max_uA);
int regulator_get_current_limit(struct regulator *regulator);
--
1.7.1
^ permalink raw reply related [flat|nested] 3+ messages in thread* [PATCH 2/2] regulator: Optimise out noop voltage changes
2010-12-16 15:49 [PATCH 1/2] regulator: Add API to re-apply voltage to hardware Mark Brown
@ 2010-12-16 15:49 ` Mark Brown
2010-12-17 10:42 ` [PATCH 1/2] regulator: Add API to re-apply voltage to hardware Liam Girdwood
1 sibling, 0 replies; 3+ messages in thread
From: Mark Brown @ 2010-12-16 15:49 UTC (permalink / raw)
To: Saravana Kannan, Liam Girdwood; +Cc: linux-kernel, patches, Mark Brown
If a consumer sets the same voltage range as is currently configured
for that consumer there's no need to run through setting the voltage
again. This pattern may occur with some CPUfreq implementations where
the same voltage range is used for multiple frequencies.
Reported-by: Saravana Kannan <skannan@codeaurora.org>
Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
---
drivers/regulator/core.c | 9 ++++++++-
1 files changed, 8 insertions(+), 1 deletions(-)
diff --git a/drivers/regulator/core.c b/drivers/regulator/core.c
index a12cba3..ab419f8 100644
--- a/drivers/regulator/core.c
+++ b/drivers/regulator/core.c
@@ -1697,10 +1697,17 @@ static int _regulator_do_set_voltage(struct regulator_dev *rdev,
int regulator_set_voltage(struct regulator *regulator, int min_uV, int max_uV)
{
struct regulator_dev *rdev = regulator->rdev;
- int ret;
+ int ret = 0;
mutex_lock(&rdev->mutex);
+ /* If we're setting the same range as last time the change
+ * should be a noop (some cpufreq implementations use the same
+ * voltage for multiple frequencies, for example).
+ */
+ if (regulator->min_uV == min_uV && regulator->max_uV == max_uV)
+ goto out;
+
/* sanity check */
if (!rdev->desc->ops->set_voltage &&
!rdev->desc->ops->set_voltage_sel) {
--
1.7.1
^ permalink raw reply related [flat|nested] 3+ messages in thread* Re: [PATCH 1/2] regulator: Add API to re-apply voltage to hardware
2010-12-16 15:49 [PATCH 1/2] regulator: Add API to re-apply voltage to hardware Mark Brown
2010-12-16 15:49 ` [PATCH 2/2] regulator: Optimise out noop voltage changes Mark Brown
@ 2010-12-17 10:42 ` Liam Girdwood
1 sibling, 0 replies; 3+ messages in thread
From: Liam Girdwood @ 2010-12-17 10:42 UTC (permalink / raw)
To: Mark Brown; +Cc: Saravana Kannan, linux-kernel, patches
On Thu, 2010-12-16 at 15:49 +0000, Mark Brown wrote:
> When cooperating with an external control source the regulator setup
> may be changed underneath the API. Currently consumers can just redo
> the regulator_set_voltage() to restore a previously set configuration
> but provide an explicit API for doing this as optimsations in the
> regulator_set_voltage() implementation will shortly prevent that.
>
> Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
> ---
Both Applied.
Thanks
Liam
--
Freelance Developer, SlimLogic Ltd
ASoC and Voltage Regulator Maintainer.
http://www.slimlogic.co.uk
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2010-12-17 10:42 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-12-16 15:49 [PATCH 1/2] regulator: Add API to re-apply voltage to hardware Mark Brown
2010-12-16 15:49 ` [PATCH 2/2] regulator: Optimise out noop voltage changes Mark Brown
2010-12-17 10:42 ` [PATCH 1/2] regulator: Add API to re-apply voltage to hardware Liam Girdwood
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox