aboutsummaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
authorDavid Brownell <dbrownell@users.sourceforge.net>2009-02-26 14:48:36 -0500
committerLiam Girdwood <lrg@slimlogic.co.uk>2009-03-31 04:56:24 -0400
commit4367cfdc7c657ad8a797f51b9ffd3c64b31910e7 (patch)
treeb5ddefa9b0de91e58666be25e11cc805bf8c88d8 /include
parent33f301af0c56971e3c0f4a4eb4b92f7e80230f49 (diff)
regulator: enumerate voltages (v2)
Add a basic mechanism for regulators to report the discrete voltages they support: list_voltage() enumerates them using selectors numbered from 0 to an upper bound. Use those methods to force machine-level constraints into bounds. (Example: regulator supports 1.8V, 2.4V, 2.6V, 3.3V, and board constraints for that rail are 2.0V to 3.6V ... so the range of voltages is then 2.4V to 3.3V on this board.) Export those voltages to the regulator consumer interface, so for example regulator hooked up to an MMC/SD/SDIO slot can report the actual voltage options available to cards connected there. Signed-off-by: David Brownell <dbrownell@users.sourceforge.net> Acked-by: Mark Brown <broonie@opensource.wolfsonmicro.com> Signed-off-by: Liam Girdwood <lrg@slimlogic.co.uk>
Diffstat (limited to 'include')
-rw-r--r--include/linux/regulator/consumer.h2
-rw-r--r--include/linux/regulator/driver.h9
2 files changed, 11 insertions, 0 deletions
diff --git a/include/linux/regulator/consumer.h b/include/linux/regulator/consumer.h
index df6c4bcf38f8..277f4b964df5 100644
--- a/include/linux/regulator/consumer.h
+++ b/include/linux/regulator/consumer.h
@@ -142,6 +142,8 @@ int regulator_bulk_disable(int num_consumers,
142void regulator_bulk_free(int num_consumers, 142void regulator_bulk_free(int num_consumers,
143 struct regulator_bulk_data *consumers); 143 struct regulator_bulk_data *consumers);
144 144
145int regulator_count_voltages(struct regulator *regulator);
146int regulator_list_voltage(struct regulator *regulator, unsigned selector);
145int regulator_set_voltage(struct regulator *regulator, int min_uV, int max_uV); 147int regulator_set_voltage(struct regulator *regulator, int min_uV, int max_uV);
146int regulator_get_voltage(struct regulator *regulator); 148int regulator_get_voltage(struct regulator *regulator);
147int regulator_set_current_limit(struct regulator *regulator, 149int regulator_set_current_limit(struct regulator *regulator,
diff --git a/include/linux/regulator/driver.h b/include/linux/regulator/driver.h
index 0cf37bc85c41..2255468d456f 100644
--- a/include/linux/regulator/driver.h
+++ b/include/linux/regulator/driver.h
@@ -45,6 +45,10 @@ enum regulator_status {
45 * @set_voltage: Set the voltage for the regulator within the range specified. 45 * @set_voltage: Set the voltage for the regulator within the range specified.
46 * The driver should select the voltage closest to min_uV. 46 * The driver should select the voltage closest to min_uV.
47 * @get_voltage: Return the currently configured voltage for the regulator. 47 * @get_voltage: Return the currently configured voltage for the regulator.
48 * @list_voltage: Return one of the supported voltages, in microvolts; zero
49 * if the selector indicates a voltage that is unusable on this system;
50 * or negative errno. Selectors range from zero to one less than
51 * regulator_desc.n_voltages. Voltages may be reported in any order.
48 * 52 *
49 * @set_current_limit: Configure a limit for a current-limited regulator. 53 * @set_current_limit: Configure a limit for a current-limited regulator.
50 * @get_current_limit: Get the limit for a current-limited regulator. 54 * @get_current_limit: Get the limit for a current-limited regulator.
@@ -66,6 +70,9 @@ enum regulator_status {
66 */ 70 */
67struct regulator_ops { 71struct regulator_ops {
68 72
73 /* enumerate supported voltages */
74 int (*list_voltage) (struct regulator_dev *, unsigned selector);
75
69 /* get/set regulator voltage */ 76 /* get/set regulator voltage */
70 int (*set_voltage) (struct regulator_dev *, int min_uV, int max_uV); 77 int (*set_voltage) (struct regulator_dev *, int min_uV, int max_uV);
71 int (*get_voltage) (struct regulator_dev *); 78 int (*get_voltage) (struct regulator_dev *);
@@ -124,6 +131,7 @@ enum regulator_type {
124 * 131 *
125 * @name: Identifying name for the regulator. 132 * @name: Identifying name for the regulator.
126 * @id: Numerical identifier for the regulator. 133 * @id: Numerical identifier for the regulator.
134 * @n_voltages: Number of selectors available for ops.list_voltage().
127 * @ops: Regulator operations table. 135 * @ops: Regulator operations table.
128 * @irq: Interrupt number for the regulator. 136 * @irq: Interrupt number for the regulator.
129 * @type: Indicates if the regulator is a voltage or current regulator. 137 * @type: Indicates if the regulator is a voltage or current regulator.
@@ -132,6 +140,7 @@ enum regulator_type {
132struct regulator_desc { 140struct regulator_desc {
133 const char *name; 141 const char *name;
134 int id; 142 int id;
143 unsigned n_voltages;
135 struct regulator_ops *ops; 144 struct regulator_ops *ops;
136 int irq; 145 int irq;
137 enum regulator_type type; 146 enum regulator_type type;