0001
0002
0003
0004
0005
0006
0007
0008 #ifndef __LINUX_REGULATOR_MC13XXX_H
0009 #define __LINUX_REGULATOR_MC13XXX_H
0010
0011 #include <linux/regulator/driver.h>
0012
0013 struct mc13xxx_regulator {
0014 struct regulator_desc desc;
0015 int reg;
0016 int enable_bit;
0017 int vsel_reg;
0018 int vsel_shift;
0019 int vsel_mask;
0020 };
0021
0022 struct mc13xxx_regulator_priv {
0023 struct mc13xxx *mc13xxx;
0024 u32 powermisc_pwgt_state;
0025 struct mc13xxx_regulator *mc13xxx_regulators;
0026 int num_regulators;
0027 struct regulator_dev *regulators[];
0028 };
0029
0030 extern int mc13xxx_fixed_regulator_set_voltage(struct regulator_dev *rdev,
0031 int min_uV, int max_uV, unsigned *selector);
0032
0033 #ifdef CONFIG_OF
0034 extern int mc13xxx_get_num_regulators_dt(struct platform_device *pdev);
0035 extern struct mc13xxx_regulator_init_data *mc13xxx_parse_regulators_dt(
0036 struct platform_device *pdev, struct mc13xxx_regulator *regulators,
0037 int num_regulators);
0038 #else
0039 static inline int mc13xxx_get_num_regulators_dt(struct platform_device *pdev)
0040 {
0041 return -ENODEV;
0042 }
0043
0044 static inline struct mc13xxx_regulator_init_data *mc13xxx_parse_regulators_dt(
0045 struct platform_device *pdev, struct mc13xxx_regulator *regulators,
0046 int num_regulators)
0047 {
0048 return NULL;
0049 }
0050 #endif
0051
0052 extern const struct regulator_ops mc13xxx_regulator_ops;
0053 extern const struct regulator_ops mc13xxx_fixed_regulator_ops;
0054
0055 #define MC13xxx_DEFINE(prefix, _name, _node, _reg, _vsel_reg, _voltages, _ops) \
0056 [prefix ## _name] = { \
0057 .desc = { \
0058 .name = #_node, \
0059 .n_voltages = ARRAY_SIZE(_voltages), \
0060 .volt_table = _voltages, \
0061 .ops = &_ops, \
0062 .type = REGULATOR_VOLTAGE, \
0063 .id = prefix ## _name, \
0064 .owner = THIS_MODULE, \
0065 }, \
0066 .reg = prefix ## _reg, \
0067 .enable_bit = prefix ## _reg ## _ ## _name ## EN, \
0068 .vsel_reg = prefix ## _vsel_reg, \
0069 .vsel_shift = prefix ## _vsel_reg ## _ ## _name ## VSEL,\
0070 .vsel_mask = prefix ## _vsel_reg ## _ ## _name ## VSEL_M,\
0071 }
0072
0073 #define MC13xxx_FIXED_DEFINE(prefix, _name, _node, _reg, _voltages, _ops) \
0074 [prefix ## _name] = { \
0075 .desc = { \
0076 .name = #_node, \
0077 .n_voltages = ARRAY_SIZE(_voltages), \
0078 .volt_table = _voltages, \
0079 .ops = &_ops, \
0080 .type = REGULATOR_VOLTAGE, \
0081 .id = prefix ## _name, \
0082 .owner = THIS_MODULE, \
0083 }, \
0084 .reg = prefix ## _reg, \
0085 .enable_bit = prefix ## _reg ## _ ## _name ## EN, \
0086 }
0087
0088 #define MC13xxx_GPO_DEFINE(prefix, _name, _node, _reg, _voltages, _ops) \
0089 [prefix ## _name] = { \
0090 .desc = { \
0091 .name = #_node, \
0092 .n_voltages = ARRAY_SIZE(_voltages), \
0093 .volt_table = _voltages, \
0094 .ops = &_ops, \
0095 .type = REGULATOR_VOLTAGE, \
0096 .id = prefix ## _name, \
0097 .owner = THIS_MODULE, \
0098 }, \
0099 .reg = prefix ## _reg, \
0100 .enable_bit = prefix ## _reg ## _ ## _name ## EN, \
0101 }
0102
0103 #define MC13xxx_DEFINE_SW(_name, _node, _reg, _vsel_reg, _voltages, ops) \
0104 MC13xxx_DEFINE(SW, _name, _node, _reg, _vsel_reg, _voltages, ops)
0105 #define MC13xxx_DEFINE_REGU(_name, _node, _reg, _vsel_reg, _voltages, ops) \
0106 MC13xxx_DEFINE(REGU, _name, _node, _reg, _vsel_reg, _voltages, ops)
0107
0108 #endif