Commit 60e8c1e34d3ab74556fb9b25f26fa34b9879ee30

Authored by Axel Lin
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];