diff options
Diffstat (limited to 'include/regulator.h')
-rw-r--r-- | include/regulator.h | 56 |
1 files changed, 47 insertions, 9 deletions
diff --git a/include/regulator.h b/include/regulator.h index dfdfbf0332..305da0d774 100644 --- a/include/regulator.h +++ b/include/regulator.h @@ -2,7 +2,10 @@ #ifndef __REGULATOR_H #define __REGULATOR_H -struct device_d; +#include <linux/bitops.h> +#include <linux/err.h> + +struct device; /* struct regulator is an opaque object for consumers */ struct regulator; @@ -32,6 +35,8 @@ struct regulator_bulk_data { * structure contains the non-varying parts of the regulator * description. * + * @supply_name: Identifying the supply of this regulator + * * @n_voltages: Number of selectors available for ops.list_voltage(). * @ops: Regulator operations table. * @@ -57,6 +62,7 @@ struct regulator_bulk_data { */ struct regulator_desc { + const char *supply_name; unsigned n_voltages; const struct regulator_ops *ops; @@ -82,12 +88,22 @@ struct regulator_desc { }; struct regulator_dev { + const char *name; + struct list_head list; + struct device_node *node; + int enable_count; + int enable_time_us; + int min_uv; + int max_uv; + struct list_head consumer_list; const struct regulator_desc *desc; struct regmap *regmap; bool boot_on; bool always_on; /* the device this regulator device belongs to */ - struct device_d *dev; + struct device *dev; + /* The regulator powering this device */ + struct regulator *supply; }; struct regulator_ops { @@ -140,14 +156,28 @@ static inline int of_regulator_register(struct regulator_dev *rd, return -ENOSYS; } #endif -int dev_regulator_register(struct regulator_dev *rd, const char * name, - const char* supply); +int dev_regulator_register(struct regulator_dev *rd, const char *name); + +#define REGULATOR_PRINT_DEVS BIT(0) +void regulators_print(unsigned flags); + +const char *rdev_get_name(struct regulator_dev *rdev); -void regulators_print(void); +#define rdev_crit(rdev, fmt, ...) \ + pr_crit("%s: " fmt, rdev_get_name(rdev), ##__VA_ARGS__) +#define rdev_err(rdev, fmt, ...) \ + pr_err("%s: " fmt, rdev_get_name(rdev), ##__VA_ARGS__) +#define rdev_warn(rdev, fmt, ...) \ + pr_warn("%s: " fmt, rdev_get_name(rdev), ##__VA_ARGS__) +#define rdev_info(rdev, fmt, ...) \ + pr_info("%s: " fmt, rdev_get_name(rdev), ##__VA_ARGS__) +#define rdev_dbg(rdev, fmt, ...) \ + pr_debug("%s: " fmt, rdev_get_name(rdev), ##__VA_ARGS__) #ifdef CONFIG_REGULATOR -struct regulator *regulator_get(struct device_d *, const char *); +struct regulator *regulator_get(struct device *, const char *); +void regulator_put(struct regulator *r); struct regulator *regulator_get_name(const char *name); int regulator_enable(struct regulator *); int regulator_disable(struct regulator *); @@ -167,7 +197,7 @@ int regulator_list_voltage_linear_range(struct regulator_dev *rdev, int regulator_get_voltage_sel_regmap(struct regulator_dev *rdev); int regulator_map_voltage_iterate(struct regulator_dev *rdev, int min_uV, int max_uV); -int regulator_bulk_get(struct device_d *dev, int num_consumers, +int regulator_bulk_get(struct device *dev, int num_consumers, struct regulator_bulk_data *consumers); int regulator_bulk_enable(int num_consumers, struct regulator_bulk_data *consumers); @@ -198,7 +228,8 @@ int regulator_list_voltage_table(struct regulator_dev *rdev, unsigned int selector); #else -static inline struct regulator *regulator_get(struct device_d *dev, const char *id) +static inline struct regulator *regulator_get(struct device *dev, + const char *id) { return NULL; } @@ -224,7 +255,7 @@ static inline int regulator_set_voltage(struct regulator *regulator, return 0; } -static inline int regulator_bulk_get(struct device_d *dev, int num_consumers, +static inline int regulator_bulk_get(struct device *dev, int num_consumers, struct regulator_bulk_data *consumers) { return 0; @@ -254,4 +285,11 @@ static inline int regulator_get_voltage(struct regulator *regulator) #endif +static inline struct regulator *regulator_get_optional(struct device *dev, + const char *id) +{ + return regulator_get(dev, id) ?: ERR_PTR(-ENODEV); +} + + #endif /* __REGULATOR_H */ |