]> pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - include/linux/regulator/driver.h
Merge branch 'omap-fixes'
[linux-2.6-omap-h63xx.git] / include / linux / regulator / driver.h
index 2dae05705f13e21b9d3410b6c5dfb494a1b9bab8..edf93a35f576fbbf974ea29ce128f278d7a91057 100644 (file)
 struct regulator_dev;
 struct regulator_init_data;
 
+enum regulator_status {
+       REGULATOR_STATUS_OFF,
+       REGULATOR_STATUS_ON,
+       REGULATOR_STATUS_ERROR,
+       /* fast/normal/idle/standby are flavors of "on" */
+       REGULATOR_STATUS_FAST,
+       REGULATOR_STATUS_NORMAL,
+       REGULATOR_STATUS_IDLE,
+       REGULATOR_STATUS_STANDBY,
+};
+
 /**
  * struct regulator_ops - regulator operations.
  *
@@ -34,6 +45,10 @@ struct regulator_init_data;
  * @set_voltage: Set the voltage for the regulator within the range specified.
  *               The driver should select the voltage closest to min_uV.
  * @get_voltage: Return the currently configured voltage for the regulator.
+ * @list_voltage: Return one of the supported voltages, in microvolts; zero
+ *     if the selector indicates a voltage that is unusable on this system;
+ *     or negative errno.  Selectors range from zero to one less than
+ *     regulator_desc.n_voltages.  Voltages may be reported in any order.
  *
  * @set_current_limit: Configure a limit for a current-limited regulator.
  * @get_current_limit: Get the limit for a current-limited regulator.
@@ -54,6 +69,9 @@ struct regulator_init_data;
  */
 struct regulator_ops {
 
+       /* enumerate supported voltages */
+       int (*list_voltage) (struct regulator_dev *, unsigned selector);
+
        /* get/set regulator voltage */
        int (*set_voltage) (struct regulator_dev *, int min_uV, int max_uV);
        int (*get_voltage) (struct regulator_dev *);
@@ -72,6 +90,12 @@ struct regulator_ops {
        int (*set_mode) (struct regulator_dev *, unsigned int mode);
        unsigned int (*get_mode) (struct regulator_dev *);
 
+       /* report regulator status ... most other accessors report
+        * control inputs, this reports results of combining inputs
+        * from Linux (and other sources) with the actual load.
+        */
+       int (*get_status)(struct regulator_dev *);
+
        /* get most efficient regulator operating mode for load */
        unsigned int (*get_optimum_mode) (struct regulator_dev *, int input_uV,
                                          int output_uV, int load_uA);
@@ -106,6 +130,7 @@ enum regulator_type {
  *
  * @name: Identifying name for the regulator.
  * @id: Numerical identifier for the regulator.
+ * @n_voltages: Number of selectors available for ops.list_voltage().
  * @ops: Regulator operations table.
  * @irq: Interrupt number for the regulator.
  * @type: Indicates if the regulator is a voltage or current regulator.
@@ -114,6 +139,7 @@ enum regulator_type {
 struct regulator_desc {
        const char *name;
        int id;
+       unsigned n_voltages;
        struct regulator_ops *ops;
        int irq;
        enum regulator_type type;