forked from ~ljy/RK356X_SDK_RELEASE

hc
2023-12-09 95099d4622f8cb224d94e314c7a8e0df60b13f87
kernel/drivers/regulator/anatop-regulator.c
....@@ -23,18 +23,10 @@
2323 #define LDO_FET_FULL_ON 0x1f
2424
2525 struct anatop_regulator {
26
- u32 control_reg;
27
- struct regmap *anatop;
28
- int vol_bit_shift;
29
- int vol_bit_width;
3026 u32 delay_reg;
3127 int delay_bit_shift;
3228 int delay_bit_width;
33
- int min_bit_val;
34
- int min_voltage;
35
- int max_voltage;
3629 struct regulator_desc rdesc;
37
- struct regulator_init_data *initdata;
3830 bool bypass;
3931 int sel;
4032 };
....@@ -55,7 +47,7 @@
5547 * to calculate how many steps LDO need to
5648 * ramp up, and how much delay needed. (us)
5749 */
58
- regmap_read(anatop_reg->anatop, anatop_reg->delay_reg, &val);
50
+ regmap_read(reg->regmap, anatop_reg->delay_reg, &val);
5951 val = (val >> anatop_reg->delay_bit_shift) &
6052 ((1 << anatop_reg->delay_bit_width) - 1);
6153 ret = (new_sel - old_sel) * (LDO_RAMP_UP_UNIT_IN_CYCLES <<
....@@ -147,7 +139,7 @@
147139 .map_voltage = regulator_map_voltage_linear,
148140 };
149141
150
-static struct regulator_ops anatop_core_rops = {
142
+static const struct regulator_ops anatop_core_rops = {
151143 .enable = anatop_regmap_enable,
152144 .disable = anatop_regmap_disable,
153145 .is_enabled = anatop_regmap_is_enabled,
....@@ -170,6 +162,13 @@
170162 struct anatop_regulator *sreg;
171163 struct regulator_init_data *initdata;
172164 struct regulator_config config = { };
165
+ struct regmap *regmap;
166
+ u32 control_reg;
167
+ u32 vol_bit_shift;
168
+ u32 vol_bit_width;
169
+ u32 min_bit_val;
170
+ u32 min_voltage;
171
+ u32 max_voltage;
173172 int ret = 0;
174173 u32 val;
175174
....@@ -192,48 +191,41 @@
192191 return -ENOMEM;
193192
194193 initdata->supply_regulator = "vin";
195
- sreg->initdata = initdata;
196194
197195 anatop_np = of_get_parent(np);
198196 if (!anatop_np)
199197 return -ENODEV;
200
- sreg->anatop = syscon_node_to_regmap(anatop_np);
198
+ regmap = syscon_node_to_regmap(anatop_np);
201199 of_node_put(anatop_np);
202
- if (IS_ERR(sreg->anatop))
203
- return PTR_ERR(sreg->anatop);
200
+ if (IS_ERR(regmap))
201
+ return PTR_ERR(regmap);
204202
205
- ret = of_property_read_u32(np, "anatop-reg-offset",
206
- &sreg->control_reg);
203
+ ret = of_property_read_u32(np, "anatop-reg-offset", &control_reg);
207204 if (ret) {
208205 dev_err(dev, "no anatop-reg-offset property set\n");
209206 return ret;
210207 }
211
- ret = of_property_read_u32(np, "anatop-vol-bit-width",
212
- &sreg->vol_bit_width);
208
+ ret = of_property_read_u32(np, "anatop-vol-bit-width", &vol_bit_width);
213209 if (ret) {
214210 dev_err(dev, "no anatop-vol-bit-width property set\n");
215211 return ret;
216212 }
217
- ret = of_property_read_u32(np, "anatop-vol-bit-shift",
218
- &sreg->vol_bit_shift);
213
+ ret = of_property_read_u32(np, "anatop-vol-bit-shift", &vol_bit_shift);
219214 if (ret) {
220215 dev_err(dev, "no anatop-vol-bit-shift property set\n");
221216 return ret;
222217 }
223
- ret = of_property_read_u32(np, "anatop-min-bit-val",
224
- &sreg->min_bit_val);
218
+ ret = of_property_read_u32(np, "anatop-min-bit-val", &min_bit_val);
225219 if (ret) {
226220 dev_err(dev, "no anatop-min-bit-val property set\n");
227221 return ret;
228222 }
229
- ret = of_property_read_u32(np, "anatop-min-voltage",
230
- &sreg->min_voltage);
223
+ ret = of_property_read_u32(np, "anatop-min-voltage", &min_voltage);
231224 if (ret) {
232225 dev_err(dev, "no anatop-min-voltage property set\n");
233226 return ret;
234227 }
235
- ret = of_property_read_u32(np, "anatop-max-voltage",
236
- &sreg->max_voltage);
228
+ ret = of_property_read_u32(np, "anatop-max-voltage", &max_voltage);
237229 if (ret) {
238230 dev_err(dev, "no anatop-max-voltage property set\n");
239231 return ret;
....@@ -247,24 +239,23 @@
247239 of_property_read_u32(np, "anatop-delay-bit-shift",
248240 &sreg->delay_bit_shift);
249241
250
- rdesc->n_voltages = (sreg->max_voltage - sreg->min_voltage) / 25000 + 1
251
- + sreg->min_bit_val;
252
- rdesc->min_uV = sreg->min_voltage;
242
+ rdesc->n_voltages = (max_voltage - min_voltage) / 25000 + 1
243
+ + min_bit_val;
244
+ rdesc->min_uV = min_voltage;
253245 rdesc->uV_step = 25000;
254
- rdesc->linear_min_sel = sreg->min_bit_val;
255
- rdesc->vsel_reg = sreg->control_reg;
256
- rdesc->vsel_mask = ((1 << sreg->vol_bit_width) - 1) <<
257
- sreg->vol_bit_shift;
246
+ rdesc->linear_min_sel = min_bit_val;
247
+ rdesc->vsel_reg = control_reg;
248
+ rdesc->vsel_mask = ((1 << vol_bit_width) - 1) << vol_bit_shift;
258249 rdesc->min_dropout_uV = 125000;
259250
260251 config.dev = &pdev->dev;
261252 config.init_data = initdata;
262253 config.driver_data = sreg;
263254 config.of_node = pdev->dev.of_node;
264
- config.regmap = sreg->anatop;
255
+ config.regmap = regmap;
265256
266257 /* Only core regulators have the ramp up delay configuration. */
267
- if (sreg->control_reg && sreg->delay_bit_width) {
258
+ if (control_reg && sreg->delay_bit_width) {
268259 rdesc->ops = &anatop_core_rops;
269260
270261 ret = regmap_read(config.regmap, rdesc->vsel_reg, &val);
....@@ -273,7 +264,7 @@
273264 return ret;
274265 }
275266
276
- sreg->sel = (val & rdesc->vsel_mask) >> sreg->vol_bit_shift;
267
+ sreg->sel = (val & rdesc->vsel_mask) >> vol_bit_shift;
277268 if (sreg->sel == LDO_FET_FULL_ON) {
278269 sreg->sel = 0;
279270 sreg->bypass = true;
....@@ -306,7 +297,7 @@
306297 anatop_rops.disable = regulator_disable_regmap;
307298 anatop_rops.is_enabled = regulator_is_enabled_regmap;
308299
309
- rdesc->enable_reg = sreg->control_reg;
300
+ rdesc->enable_reg = control_reg;
310301 rdesc->enable_mask = BIT(enable_bit);
311302 }
312303 }
....@@ -314,9 +305,13 @@
314305 /* register regulator */
315306 rdev = devm_regulator_register(dev, rdesc, &config);
316307 if (IS_ERR(rdev)) {
317
- dev_err(dev, "failed to register %s\n",
318
- rdesc->name);
319
- return PTR_ERR(rdev);
308
+ ret = PTR_ERR(rdev);
309
+ if (ret == -EPROBE_DEFER)
310
+ dev_dbg(dev, "failed to register %s, deferring...\n",
311
+ rdesc->name);
312
+ else
313
+ dev_err(dev, "failed to register %s\n", rdesc->name);
314
+ return ret;
320315 }
321316
322317 platform_set_drvdata(pdev, rdev);