From: David Brownell <david-b@pacbell.net>
To: Mark Brown <broonie@sirena.org.uk>
Cc: Liam Girdwood <lrg@slimlogic.co.uk>,
lkml <linux-kernel@vger.kernel.org>,
OMAP <linux-omap@vger.kernel.org>
Subject: [patch/rfc 2.6.29-rc6 2/2] regulator: twl4030 voltage enumeration
Date: Mon, 23 Feb 2009 12:54:13 -0800 [thread overview]
Message-ID: <200902231254.13990.david-b@pacbell.net> (raw)
In-Reply-To: <200902231245.44360.david-b@pacbell.net>
From: David Brownell <dbrownell@users.sourceforge.net>
Update previously-posted twl4030 regulator driver to export
supported voltages to upper layers using a new mechanism.
Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
---
drivers/regulator/twl4030-regulator.c | 72 ++++++++++++++------------------
1 file changed, 33 insertions(+), 39 deletions(-)
--- a/drivers/regulator/twl4030-regulator.c
+++ b/drivers/regulator/twl4030-regulator.c
@@ -42,7 +42,6 @@ struct twlreg_info {
/* chip constraints on regulator behavior */
u16 min_mV;
- u16 max_mV;
/* used by regulator core */
struct regulator_desc desc;
@@ -262,6 +261,24 @@ static const u16 VDAC_VSEL_table[] = {
};
+static int twl4030ldo_count_voltages(struct regulator_dev *rdev)
+{
+ struct twlreg_info *info = rdev_get_drvdata(rdev);
+
+ return info->table_len ? : 1;
+}
+
+static int twl4030ldo_list_voltage(struct regulator_dev *rdev, unsigned index)
+{
+ struct twlreg_info *info = rdev_get_drvdata(rdev);
+ int mV;
+
+ mV = info->table[index];
+ if (IS_UNSUP(mV))
+ return -ESRCH;
+ return LDO_MV(mV) * 1000;
+}
+
static int
twl4030ldo_set_voltage(struct regulator_dev *rdev, int min_uV, int max_uV)
{
@@ -276,6 +293,8 @@ twl4030ldo_set_voltage(struct regulator_
continue;
uV = LDO_MV(mV) * 1000;
+ /* REVISIT for VAUX2, first match may not be best/lowest */
+
/* use the first in-range value */
if (min_uV <= uV && uV <= max_uV)
return twl4030reg_write(info, VREG_DEDICATED, vsel);
@@ -297,6 +316,9 @@ static int twl4030ldo_get_voltage(struct
}
static struct regulator_ops twl4030ldo_ops = {
+ .count_voltages = twl4030ldo_count_voltages,
+ .list_voltage = twl4030ldo_list_voltage,
+
.set_voltage = twl4030ldo_set_voltage,
.get_voltage = twl4030ldo_get_voltage,
@@ -314,6 +336,13 @@ static struct regulator_ops twl4030ldo_o
/*
* Fixed voltage LDOs don't have a VSEL field to update.
*/
+static int twl4030fixed_list_voltage(struct regulator_dev *rdev, unsigned index)
+{
+ struct twlreg_info *info = rdev_get_drvdata(rdev);
+
+ return info->min_mV * 1000;
+}
+
static int twl4030fixed_get_voltage(struct regulator_dev *rdev)
{
struct twlreg_info *info = rdev_get_drvdata(rdev);
@@ -322,6 +351,9 @@ static int twl4030fixed_get_voltage(stru
}
static struct regulator_ops twl4030fixed_ops = {
+ .count_voltages = twl4030ldo_count_voltages,
+ .list_voltage = twl4030fixed_list_voltage,
+
.get_voltage = twl4030fixed_get_voltage,
.enable = twl4030reg_enable,
@@ -353,7 +385,6 @@ static struct regulator_ops twl4030fixed
.base = offset, \
.id = num, \
.min_mV = mVolts, \
- .max_mV = mVolts, \
.desc = { \
.name = #label, \
.id = TWL4030_REG_##label, \
@@ -402,14 +433,11 @@ static int twl4030reg_probe(struct platf
struct regulator_init_data *initdata;
struct regulation_constraints *c;
struct regulator_dev *rdev;
- int min_uV, max_uV;
for (i = 0, info = NULL; i < ARRAY_SIZE(twl4030_regs); i++) {
if (twl4030_regs[i].desc.id != pdev->id)
continue;
info = twl4030_regs + i;
- min_uV = info->min_mV * 1000;
- max_uV = info->max_mV * 1000;
break;
}
if (!info)
@@ -423,10 +451,6 @@ static int twl4030reg_probe(struct platf
* this driver and the chip itself can actually do.
*/
c = &initdata->constraints;
- if (!c->min_uV || c->min_uV < min_uV)
- c->min_uV = min_uV;
- if (!c->max_uV || c->max_uV > max_uV)
- c->max_uV = max_uV;
c->valid_modes_mask &= REGULATOR_MODE_NORMAL | REGULATOR_MODE_STANDBY;
c->valid_ops_mask &= REGULATOR_CHANGE_VOLTAGE
| REGULATOR_CHANGE_MODE
@@ -471,36 +495,6 @@ static struct platform_driver twl4030reg
static int __init twl4030reg_init(void)
{
- unsigned i, j;
-
- /* determine min/max voltage constraints, taking into account
- * whether set_voltage() will use the "unsupported" settings
- */
- for (i = 0; i < ARRAY_SIZE(twl4030_regs); i++) {
- struct twlreg_info *info = twl4030_regs + i;
- const u16 *table;
-
- /* fixed-voltage regulators */
- if (!info->table_len)
- continue;
-
- /* LDO regulators: */
- for (j = 0, table = info->table;
- j < info->table_len;
- j++, table++) {
- u16 mV = *table;
-
- if (IS_UNSUP(mV))
- continue;
- mV = LDO_MV(mV);
-
- if (info->min_mV == 0 || info->min_mV > mV)
- info->min_mV = mV;
- if (info->max_mV < mV)
- info->max_mV = mV;
- }
- }
-
return platform_driver_register(&twl4030reg_driver);
}
subsys_initcall(twl4030reg_init);
next prev parent reply other threads:[~2009-02-23 21:00 UTC|newest]
Thread overview: 59+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-02-08 18:37 [patch 2.6.29-rc3-git 1/2] regulator: twl4030 regulators David Brownell
2009-02-08 23:29 ` Mark Brown
2009-02-09 0:04 ` David Brownell
2009-02-09 17:27 ` Mark Brown
2009-02-10 0:24 ` David Brownell
2009-02-10 22:48 ` Mark Brown
2009-02-23 20:45 ` David Brownell
2009-02-23 20:52 ` [patch/rfc 2.6.29-rc6 1/2] regulator: enumerate voltages David Brownell
2009-02-24 22:23 ` Mark Brown
2009-02-25 0:17 ` David Brownell
2009-02-25 15:17 ` Mark Brown
2009-02-25 22:12 ` David Brownell
2009-02-25 23:01 ` Mark Brown
2009-02-25 23:47 ` David Brownell
2009-02-26 11:05 ` Mark Brown
2009-02-26 1:02 ` David Brownell
2009-02-26 10:46 ` Mark Brown
2009-02-26 18:56 ` David Brownell
2009-02-26 19:05 ` Mark Brown
2009-02-26 19:38 ` David Brownell
2009-02-26 20:02 ` Liam Girdwood
2009-02-26 20:59 ` David Brownell
2009-02-26 19:48 ` [patch 2.6.29-rc6 1/2] regulator: enumerate voltages (v2) David Brownell
2009-02-26 20:20 ` Mark Brown
2009-02-26 21:12 ` David Brownell
2009-02-26 21:48 ` [patch 2.6.29-rc6+misc] MMC: regulator utilities David Brownell
2009-03-02 20:59 ` Pierre Ossman
2009-03-02 21:27 ` David Brownell
2009-03-02 21:40 ` Pierre Ossman
2009-03-02 22:00 ` David Brownell
2009-03-04 3:18 ` David Brownell
2009-03-08 13:59 ` Pierre Ossman
2009-03-08 20:34 ` David Brownell
2009-03-08 21:49 ` Pierre Ossman
2009-03-09 11:52 ` Liam Girdwood
2009-03-11 11:30 ` David Brownell
2009-03-11 14:34 ` Liam Girdwood
2009-02-26 20:53 ` [patch 2.6.29-rc6 1/2] regulator: enumerate voltages (v2) Liam Girdwood
2009-02-26 21:28 ` David Brownell
2009-02-26 21:58 ` Liam Girdwood
2009-02-27 0:10 ` David Brownell
2009-02-23 20:54 ` David Brownell [this message]
2009-02-26 19:50 ` [patch/rfc 2.6.29-rc6 2/2] regulator: twl4030 voltage enumeration (v2) David Brownell
2009-02-26 20:25 ` Mark Brown
2009-02-26 22:16 ` Liam Girdwood
2009-02-27 0:02 ` David Brownell
2009-02-27 12:32 ` Liam Girdwood
2009-02-27 20:39 ` David Brownell
2009-02-27 21:26 ` Liam Girdwood
2009-03-03 22:59 ` David Brownell
2009-03-04 11:47 ` Liam Girdwood
2009-02-23 22:04 ` [patch 2.6.29-rc3-git 1/2] regulator: twl4030 regulators Mark Brown
2009-02-23 22:43 ` David Brownell
2009-02-24 0:55 ` Mark Brown
2009-02-24 2:03 ` David Brownell
2009-02-24 12:41 ` Mark Brown
2009-02-24 2:22 ` David Brownell
2009-02-24 7:25 ` David Brownell
2009-02-26 22:15 ` Liam Girdwood
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=200902231254.13990.david-b@pacbell.net \
--to=david-b@pacbell.net \
--cc=broonie@sirena.org.uk \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-omap@vger.kernel.org \
--cc=lrg@slimlogic.co.uk \
/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