Commit 60e8c1e34d3ab74556fb9b25f26fa34b9879ee30
Committed by
Mark Brown
1 parent
1cb7b43f67
regulator: pbias: Convert to use regmap helper functions
This patch converts this driver to use the regmap helper functions provided by regulator core. Signed-off-by: Axel Lin <axel.lin@ingics.com> Acked-by: Balaji T K <balajitk@ti.com> Signed-off-by: Mark Brown <broonie@linaro.org>
Showing 1 changed file with 19 additions and 55 deletions Side-by-side Diff
drivers/regulator/pbias-regulator.c
... | ... | @@ -38,85 +38,44 @@ |
38 | 38 | struct pbias_regulator_data { |
39 | 39 | struct regulator_desc desc; |
40 | 40 | void __iomem *pbias_addr; |
41 | - unsigned int pbias_reg; | |
42 | 41 | struct regulator_dev *dev; |
43 | 42 | struct regmap *syscon; |
44 | 43 | const struct pbias_reg_info *info; |
45 | 44 | int voltage; |
46 | 45 | }; |
47 | 46 | |
48 | -static int pbias_regulator_set_voltage(struct regulator_dev *dev, | |
49 | - int min_uV, int max_uV, unsigned *selector) | |
50 | -{ | |
51 | - struct pbias_regulator_data *data = rdev_get_drvdata(dev); | |
52 | - const struct pbias_reg_info *info = data->info; | |
53 | - int ret, vmode; | |
47 | +static const unsigned int pbias_volt_table[] = { | |
48 | + 1800000, | |
49 | + 3000000 | |
50 | +}; | |
54 | 51 | |
55 | - if (min_uV <= 1800000) | |
56 | - vmode = 0; | |
57 | - else if (min_uV > 1800000) | |
58 | - vmode = info->vmode; | |
59 | - | |
60 | - ret = regmap_update_bits(data->syscon, data->pbias_reg, | |
61 | - info->vmode, vmode); | |
62 | - | |
63 | - return ret; | |
64 | -} | |
65 | - | |
66 | -static int pbias_regulator_get_voltage(struct regulator_dev *rdev) | |
67 | -{ | |
68 | - struct pbias_regulator_data *data = rdev_get_drvdata(rdev); | |
69 | - const struct pbias_reg_info *info = data->info; | |
70 | - int value, voltage; | |
71 | - | |
72 | - regmap_read(data->syscon, data->pbias_reg, &value); | |
73 | - value &= info->vmode; | |
74 | - | |
75 | - voltage = value ? 3000000 : 1800000; | |
76 | - | |
77 | - return voltage; | |
78 | -} | |
79 | - | |
80 | 52 | static int pbias_regulator_enable(struct regulator_dev *rdev) |
81 | 53 | { |
82 | 54 | struct pbias_regulator_data *data = rdev_get_drvdata(rdev); |
83 | 55 | const struct pbias_reg_info *info = data->info; |
84 | - int ret; | |
85 | 56 | |
86 | - ret = regmap_update_bits(data->syscon, data->pbias_reg, | |
87 | - info->enable_mask, info->enable); | |
88 | - | |
89 | - return ret; | |
57 | + return regmap_update_bits(data->syscon, rdev->desc->enable_reg, | |
58 | + info->enable_mask, info->enable); | |
90 | 59 | } |
91 | 60 | |
92 | -static int pbias_regulator_disable(struct regulator_dev *rdev) | |
93 | -{ | |
94 | - struct pbias_regulator_data *data = rdev_get_drvdata(rdev); | |
95 | - const struct pbias_reg_info *info = data->info; | |
96 | - int ret; | |
97 | - | |
98 | - ret = regmap_update_bits(data->syscon, data->pbias_reg, | |
99 | - info->enable_mask, 0); | |
100 | - return ret; | |
101 | -} | |
102 | - | |
103 | 61 | static int pbias_regulator_is_enable(struct regulator_dev *rdev) |
104 | 62 | { |
105 | 63 | struct pbias_regulator_data *data = rdev_get_drvdata(rdev); |
106 | 64 | const struct pbias_reg_info *info = data->info; |
107 | 65 | int value; |
108 | 66 | |
109 | - regmap_read(data->syscon, data->pbias_reg, &value); | |
67 | + regmap_read(data->syscon, rdev->desc->enable_reg, &value); | |
110 | 68 | |
111 | 69 | return (value & info->enable_mask) == info->enable; |
112 | 70 | } |
113 | 71 | |
114 | 72 | static struct regulator_ops pbias_regulator_voltage_ops = { |
115 | - .set_voltage = pbias_regulator_set_voltage, | |
116 | - .get_voltage = pbias_regulator_get_voltage, | |
117 | - .enable = pbias_regulator_enable, | |
118 | - .disable = pbias_regulator_disable, | |
119 | - .is_enabled = pbias_regulator_is_enable, | |
73 | + .list_voltage = regulator_list_voltage_table, | |
74 | + .get_voltage_sel = regulator_get_voltage_sel_regmap, | |
75 | + .set_voltage_sel = regulator_set_voltage_sel_regmap, | |
76 | + .enable = pbias_regulator_enable, | |
77 | + .disable = regulator_disable_regmap, | |
78 | + .is_enabled = pbias_regulator_is_enable, | |
120 | 79 | }; |
121 | 80 | |
122 | 81 | static const struct pbias_reg_info pbias_mmc_omap2430 = { |
... | ... | @@ -192,6 +151,7 @@ |
192 | 151 | if (IS_ERR(syscon)) |
193 | 152 | return PTR_ERR(syscon); |
194 | 153 | |
154 | + cfg.regmap = syscon; | |
195 | 155 | cfg.dev = &pdev->dev; |
196 | 156 | |
197 | 157 | for (idx = 0; idx < PBIAS_NUM_REGS && data_idx < count; idx++) { |
198 | 158 | |
199 | 159 | |
... | ... | @@ -207,15 +167,19 @@ |
207 | 167 | if (!res) |
208 | 168 | return -EINVAL; |
209 | 169 | |
210 | - drvdata[data_idx].pbias_reg = res->start; | |
211 | 170 | drvdata[data_idx].syscon = syscon; |
212 | 171 | drvdata[data_idx].info = info; |
213 | 172 | drvdata[data_idx].desc.name = info->name; |
214 | 173 | drvdata[data_idx].desc.owner = THIS_MODULE; |
215 | 174 | drvdata[data_idx].desc.type = REGULATOR_VOLTAGE; |
216 | 175 | drvdata[data_idx].desc.ops = &pbias_regulator_voltage_ops; |
176 | + drvdata[data_idx].desc.volt_table = pbias_volt_table; | |
217 | 177 | drvdata[data_idx].desc.n_voltages = 2; |
218 | 178 | drvdata[data_idx].desc.enable_time = info->enable_time; |
179 | + drvdata[data_idx].desc.vsel_reg = res->start; | |
180 | + drvdata[data_idx].desc.vsel_mask = info->vmode; | |
181 | + drvdata[data_idx].desc.enable_reg = res->start; | |
182 | + drvdata[data_idx].desc.enable_mask = info->enable_mask; | |
219 | 183 | |
220 | 184 | cfg.init_data = pbias_matches[idx].init_data; |
221 | 185 | cfg.driver_data = &drvdata[data_idx]; |