From: Kyle Manna <kyle.manna@fuel7.com>
To: linux-kernel@vger.kernel.org,
Samuel Ortiz <sameo@linux.intel.com>, Liam Girdwood <lrg@ti.com>
Cc: Kyle Manna <kyle.manna@fuel7.com>,
Jorge Eduardo Candelaria <jedu@slimlogic.co.uk>,
Graeme Gregory <gg@slimlogic.co.uk>
Subject: [PATCH 5/6] mfd: TPS65910: Fix tps65910_set_voltage
Date: Tue, 18 Oct 2011 13:26:27 -0500 [thread overview]
Message-ID: <1318962388-26151-6-git-send-email-kyle.manna@fuel7.com> (raw)
In-Reply-To: <1318962388-26151-1-git-send-email-kyle.manna@fuel7.com>
Previously tps65910_set_voltage() only selected from a fixed number of
voltages. Rename that function to tps65910_set_voltage_sel(). Do the
same for tps65911_set_voltage().
Also add a tps65910_set_voltage that works with the regulator framework
and applies the correct voltage with apply_uv is set in the regulator's
constraints.
This was tested on a TPS65910.
Signed-off-by: Kyle Manna <kyle.manna@fuel7.com>
---
drivers/regulator/tps65910-regulator.c | 37 ++++++++++++++++++++++++++++---
1 files changed, 33 insertions(+), 4 deletions(-)
diff --git a/drivers/regulator/tps65910-regulator.c b/drivers/regulator/tps65910-regulator.c
index 66d2d60..44ce2b0 100644
--- a/drivers/regulator/tps65910-regulator.c
+++ b/drivers/regulator/tps65910-regulator.c
@@ -693,7 +693,8 @@ static int tps65910_set_voltage_dcdc(struct regulator_dev *dev,
return 0;
}
-static int tps65910_set_voltage(struct regulator_dev *dev, unsigned selector)
+static int tps65910_set_voltage_sel(struct regulator_dev *dev,
+ unsigned selector)
{
struct tps65910_reg *pmic = rdev_get_drvdata(dev);
int reg, id = rdev_get_id(dev);
@@ -719,7 +720,35 @@ static int tps65910_set_voltage(struct regulator_dev *dev, unsigned selector)
return -EINVAL;
}
-static int tps65911_set_voltage(struct regulator_dev *dev, unsigned selector)
+static int tps65910_set_voltage(struct regulator_dev *dev,
+ int min_uV, int max_uV, unsigned *selector)
+{
+ int id = rdev_get_id(dev);
+ int i;
+ int new_uV = 0, selected_uV = 0;
+ int midpoint = (max_uV + min_uV) >> 1;
+
+ /* Pick the nearest selector */
+ for (i = 0; i < tps65910_regs[id].table_len; i++) {
+ new_uV = tps65910_regs[id].table[i] * 1000;
+
+ if (new_uV >= min_uV && new_uV <= max_uV &&
+ (abs(new_uV - midpoint) < abs(selected_uV - midpoint))) {
+ *selector = i;
+ selected_uV = tps65910_regs[id].table[i] * 1000;
+ }
+ }
+
+ /* If a match was found, set it */
+ if (selected_uV)
+ return tps65910_set_voltage_sel(dev, *selector);
+
+ return -EINVAL;
+}
+
+
+static int tps65911_set_voltage_sel(struct regulator_dev *dev,
+ unsigned selector)
{
struct tps65910_reg *pmic = rdev_get_drvdata(dev);
int reg, id = rdev_get_id(dev);
@@ -856,7 +885,7 @@ static struct regulator_ops tps65910_ops = {
.set_mode = tps65910_set_mode,
.get_mode = tps65910_get_mode,
.get_voltage = tps65910_get_voltage,
- .set_voltage_sel = tps65910_set_voltage,
+ .set_voltage = tps65910_set_voltage,
.list_voltage = tps65910_list_voltage,
};
@@ -867,7 +896,7 @@ static struct regulator_ops tps65911_ops = {
.set_mode = tps65910_set_mode,
.get_mode = tps65910_get_mode,
.get_voltage = tps65911_get_voltage,
- .set_voltage_sel = tps65911_set_voltage,
+ .set_voltage_sel = tps65911_set_voltage_sel,
.list_voltage = tps65911_list_voltage,
};
--
1.7.5.4
next prev parent reply other threads:[~2011-10-18 19:00 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-10-18 18:26 [PATCH 0/6] mfd: TPS65910 bug fixes and enhancements Kyle Manna
2011-10-18 18:26 ` [PATCH 1/6] mfd: TPS65910: Handle non-existent devices Kyle Manna
2011-10-18 18:26 ` [PATCH 2/6] mfd: TPS65910: Add I2C slave address macros Kyle Manna
2011-10-18 18:26 ` [PATCH 3/6] mfd: TPS65910: Fix typo that clobbers genirq Kyle Manna
2011-10-18 18:26 ` [PATCH 4/6] mfd: TPS65910: Move linux/gpio.h include to header Kyle Manna
2011-10-18 18:26 ` Kyle Manna [this message]
2011-10-19 13:32 ` [PATCH 5/6] mfd: TPS65910: Fix tps65910_set_voltage Mark Brown
2011-10-20 15:21 ` Kyle Manna
2011-10-18 18:26 ` [PATCH 6/6] mfd: TPS65910: Improve regulator init data Kyle Manna
2011-10-19 14:00 ` Mark Brown
2011-10-24 16:13 ` Kyle Manna
2011-10-18 18:42 ` [PATCH 0/6] mfd: TPS65910 bug fixes and enhancements Graeme Gregory
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1318962388-26151-6-git-send-email-kyle.manna@fuel7.com \
--to=kyle.manna@fuel7.com \
--cc=gg@slimlogic.co.uk \
--cc=jedu@slimlogic.co.uk \
--cc=linux-kernel@vger.kernel.org \
--cc=lrg@ti.com \
--cc=sameo@linux.intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®