diff options
author | Keerthy <j-keerthy@ti.com> | 2014-05-22 05:18:29 -0400 |
---|---|---|
committer | Mark Brown <broonie@linaro.org> | 2014-05-22 06:32:12 -0400 |
commit | dbabd624d4eec50b623bab070d1e39a854b2d65c (patch) | |
tree | 38c37dd58ba96f2aa5453ac66aceb8c0fd6572ad | |
parent | c9eaa447e77efe77b7fa4c953bd62de8297fd6c5 (diff) |
regulator: palmas: Reemove open coded functions with helper functions
Reemove open coded functions with helper functions.
Signed-off-by: Keerthy <j-keerthy@ti.com>
Signed-off-by: Mark Brown <broonie@linaro.org>
-rw-r--r-- | drivers/regulator/palmas-regulator.c | 158 |
1 files changed, 26 insertions, 132 deletions
diff --git a/drivers/regulator/palmas-regulator.c b/drivers/regulator/palmas-regulator.c index 9c62b1d34685..9602eba2e63d 100644 --- a/drivers/regulator/palmas-regulator.c +++ b/drivers/regulator/palmas-regulator.c | |||
@@ -36,6 +36,18 @@ struct regs_info { | |||
36 | int sleep_id; | 36 | int sleep_id; |
37 | }; | 37 | }; |
38 | 38 | ||
39 | static const struct regulator_linear_range smps_low_ranges[] = { | ||
40 | REGULATOR_LINEAR_RANGE(500000, 0x1, 0x6, 0), | ||
41 | REGULATOR_LINEAR_RANGE(510000, 0x7, 0x79, 10000), | ||
42 | REGULATOR_LINEAR_RANGE(1650000, 0x7A, 0x7f, 0), | ||
43 | }; | ||
44 | |||
45 | static const struct regulator_linear_range smps_high_ranges[] = { | ||
46 | REGULATOR_LINEAR_RANGE(1000000, 0x1, 0x6, 0), | ||
47 | REGULATOR_LINEAR_RANGE(1020000, 0x7, 0x79, 20000), | ||
48 | REGULATOR_LINEAR_RANGE(3300000, 0x7A, 0x7f, 0), | ||
49 | }; | ||
50 | |||
39 | static const struct regs_info palmas_regs_info[] = { | 51 | static const struct regs_info palmas_regs_info[] = { |
40 | { | 52 | { |
41 | .name = "SMPS12", | 53 | .name = "SMPS12", |
@@ -280,54 +292,6 @@ static int palmas_ldo_write(struct palmas *palmas, unsigned int reg, | |||
280 | return regmap_write(palmas->regmap[REGULATOR_SLAVE], addr, value); | 292 | return regmap_write(palmas->regmap[REGULATOR_SLAVE], addr, value); |
281 | } | 293 | } |
282 | 294 | ||
283 | static int palmas_is_enabled_smps(struct regulator_dev *dev) | ||
284 | { | ||
285 | struct palmas_pmic *pmic = rdev_get_drvdata(dev); | ||
286 | int id = rdev_get_id(dev); | ||
287 | unsigned int reg; | ||
288 | |||
289 | palmas_smps_read(pmic->palmas, palmas_regs_info[id].ctrl_addr, ®); | ||
290 | |||
291 | reg &= PALMAS_SMPS12_CTRL_STATUS_MASK; | ||
292 | reg >>= PALMAS_SMPS12_CTRL_STATUS_SHIFT; | ||
293 | |||
294 | return !!(reg); | ||
295 | } | ||
296 | |||
297 | static int palmas_enable_smps(struct regulator_dev *dev) | ||
298 | { | ||
299 | struct palmas_pmic *pmic = rdev_get_drvdata(dev); | ||
300 | int id = rdev_get_id(dev); | ||
301 | unsigned int reg; | ||
302 | |||
303 | palmas_smps_read(pmic->palmas, palmas_regs_info[id].ctrl_addr, ®); | ||
304 | |||
305 | reg &= ~PALMAS_SMPS12_CTRL_MODE_ACTIVE_MASK; | ||
306 | if (pmic->current_reg_mode[id]) | ||
307 | reg |= pmic->current_reg_mode[id]; | ||
308 | else | ||
309 | reg |= SMPS_CTRL_MODE_ON; | ||
310 | |||
311 | palmas_smps_write(pmic->palmas, palmas_regs_info[id].ctrl_addr, reg); | ||
312 | |||
313 | return 0; | ||
314 | } | ||
315 | |||
316 | static int palmas_disable_smps(struct regulator_dev *dev) | ||
317 | { | ||
318 | struct palmas_pmic *pmic = rdev_get_drvdata(dev); | ||
319 | int id = rdev_get_id(dev); | ||
320 | unsigned int reg; | ||
321 | |||
322 | palmas_smps_read(pmic->palmas, palmas_regs_info[id].ctrl_addr, ®); | ||
323 | |||
324 | reg &= ~PALMAS_SMPS12_CTRL_MODE_ACTIVE_MASK; | ||
325 | |||
326 | palmas_smps_write(pmic->palmas, palmas_regs_info[id].ctrl_addr, reg); | ||
327 | |||
328 | return 0; | ||
329 | } | ||
330 | |||
331 | static int palmas_set_mode_smps(struct regulator_dev *dev, unsigned int mode) | 295 | static int palmas_set_mode_smps(struct regulator_dev *dev, unsigned int mode) |
332 | { | 296 | { |
333 | struct palmas_pmic *pmic = rdev_get_drvdata(dev); | 297 | struct palmas_pmic *pmic = rdev_get_drvdata(dev); |
@@ -382,81 +346,6 @@ static unsigned int palmas_get_mode_smps(struct regulator_dev *dev) | |||
382 | return 0; | 346 | return 0; |
383 | } | 347 | } |
384 | 348 | ||
385 | static int palmas_list_voltage_smps(struct regulator_dev *dev, | ||
386 | unsigned selector) | ||
387 | { | ||
388 | struct palmas_pmic *pmic = rdev_get_drvdata(dev); | ||
389 | int id = rdev_get_id(dev); | ||
390 | int mult = 1; | ||
391 | |||
392 | /* Read the multiplier set in VSEL register to return | ||
393 | * the correct voltage. | ||
394 | */ | ||
395 | if (pmic->range[id]) | ||
396 | mult = 2; | ||
397 | |||
398 | if (selector == 0) | ||
399 | return 0; | ||
400 | else if (selector < 6) | ||
401 | return 500000 * mult; | ||
402 | else | ||
403 | /* Voltage is linear mapping starting from selector 6, | ||
404 | * volt = (0.49V + ((selector - 5) * 0.01V)) * RANGE | ||
405 | * RANGE is either x1 or x2 | ||
406 | */ | ||
407 | return (490000 + ((selector - 5) * 10000)) * mult; | ||
408 | } | ||
409 | |||
410 | static int palmas_map_voltage_smps(struct regulator_dev *rdev, | ||
411 | int min_uV, int max_uV) | ||
412 | { | ||
413 | struct palmas_pmic *pmic = rdev_get_drvdata(rdev); | ||
414 | int id = rdev_get_id(rdev); | ||
415 | int ret, voltage; | ||
416 | |||
417 | if (min_uV == 0) | ||
418 | return 0; | ||
419 | |||
420 | if (pmic->range[id]) { /* RANGE is x2 */ | ||
421 | if (min_uV < 1000000) | ||
422 | min_uV = 1000000; | ||
423 | ret = DIV_ROUND_UP(min_uV - 1000000, 20000) + 6; | ||
424 | } else { /* RANGE is x1 */ | ||
425 | if (min_uV < 500000) | ||
426 | min_uV = 500000; | ||
427 | ret = DIV_ROUND_UP(min_uV - 500000, 10000) + 6; | ||
428 | } | ||
429 | |||
430 | /* Map back into a voltage to verify we're still in bounds */ | ||
431 | voltage = palmas_list_voltage_smps(rdev, ret); | ||
432 | if (voltage < min_uV || voltage > max_uV) | ||
433 | return -EINVAL; | ||
434 | |||
435 | return ret; | ||
436 | } | ||
437 | |||
438 | static int palma_smps_set_voltage_smps_time_sel(struct regulator_dev *rdev, | ||
439 | unsigned int old_selector, unsigned int new_selector) | ||
440 | { | ||
441 | struct palmas_pmic *pmic = rdev_get_drvdata(rdev); | ||
442 | int id = rdev_get_id(rdev); | ||
443 | int old_uv, new_uv; | ||
444 | unsigned int ramp_delay = pmic->ramp_delay[id]; | ||
445 | |||
446 | if (!ramp_delay) | ||
447 | return 0; | ||
448 | |||
449 | old_uv = palmas_list_voltage_smps(rdev, old_selector); | ||
450 | if (old_uv < 0) | ||
451 | return old_uv; | ||
452 | |||
453 | new_uv = palmas_list_voltage_smps(rdev, new_selector); | ||
454 | if (new_uv < 0) | ||
455 | return new_uv; | ||
456 | |||
457 | return DIV_ROUND_UP(abs(old_uv - new_uv), ramp_delay); | ||
458 | } | ||
459 | |||
460 | static int palmas_smps_set_ramp_delay(struct regulator_dev *rdev, | 349 | static int palmas_smps_set_ramp_delay(struct regulator_dev *rdev, |
461 | int ramp_delay) | 350 | int ramp_delay) |
462 | { | 351 | { |
@@ -493,16 +382,16 @@ static int palmas_smps_set_ramp_delay(struct regulator_dev *rdev, | |||
493 | } | 382 | } |
494 | 383 | ||
495 | static struct regulator_ops palmas_ops_smps = { | 384 | static struct regulator_ops palmas_ops_smps = { |
496 | .is_enabled = palmas_is_enabled_smps, | 385 | .is_enabled = regulator_is_enabled_regmap, |
497 | .enable = palmas_enable_smps, | 386 | .enable = regulator_enable_regmap, |
498 | .disable = palmas_disable_smps, | 387 | .disable = regulator_disable_regmap, |
499 | .set_mode = palmas_set_mode_smps, | 388 | .set_mode = palmas_set_mode_smps, |
500 | .get_mode = palmas_get_mode_smps, | 389 | .get_mode = palmas_get_mode_smps, |
501 | .get_voltage_sel = regulator_get_voltage_sel_regmap, | 390 | .get_voltage_sel = regulator_get_voltage_sel_regmap, |
502 | .set_voltage_sel = regulator_set_voltage_sel_regmap, | 391 | .set_voltage_sel = regulator_set_voltage_sel_regmap, |
503 | .list_voltage = palmas_list_voltage_smps, | 392 | .list_voltage = regulator_list_voltage_linear_range, |
504 | .map_voltage = palmas_map_voltage_smps, | 393 | .map_voltage = regulator_map_voltage_linear_range, |
505 | .set_voltage_time_sel = palma_smps_set_voltage_smps_time_sel, | 394 | .set_voltage_time_sel = regulator_set_voltage_time_sel, |
506 | .set_ramp_delay = palmas_smps_set_ramp_delay, | 395 | .set_ramp_delay = palmas_smps_set_ramp_delay, |
507 | }; | 396 | }; |
508 | 397 | ||
@@ -511,9 +400,9 @@ static struct regulator_ops palmas_ops_ext_control_smps = { | |||
511 | .get_mode = palmas_get_mode_smps, | 400 | .get_mode = palmas_get_mode_smps, |
512 | .get_voltage_sel = regulator_get_voltage_sel_regmap, | 401 | .get_voltage_sel = regulator_get_voltage_sel_regmap, |
513 | .set_voltage_sel = regulator_set_voltage_sel_regmap, | 402 | .set_voltage_sel = regulator_set_voltage_sel_regmap, |
514 | .list_voltage = palmas_list_voltage_smps, | 403 | .list_voltage = regulator_list_voltage_linear_range, |
515 | .map_voltage = palmas_map_voltage_smps, | 404 | .map_voltage = regulator_map_voltage_linear_range, |
516 | .set_voltage_time_sel = palma_smps_set_voltage_smps_time_sel, | 405 | .set_voltage_time_sel = regulator_set_voltage_time_sel, |
517 | .set_ramp_delay = palmas_smps_set_ramp_delay, | 406 | .set_ramp_delay = palmas_smps_set_ramp_delay, |
518 | }; | 407 | }; |
519 | 408 | ||
@@ -1042,12 +931,17 @@ static int palmas_regulators_probe(struct platform_device *pdev) | |||
1042 | * ranges. Read the current smps mode for later use. | 931 | * ranges. Read the current smps mode for later use. |
1043 | */ | 932 | */ |
1044 | addr = palmas_regs_info[id].vsel_addr; | 933 | addr = palmas_regs_info[id].vsel_addr; |
934 | pmic->desc[id].n_linear_ranges = 3; | ||
1045 | 935 | ||
1046 | ret = palmas_smps_read(pmic->palmas, addr, ®); | 936 | ret = palmas_smps_read(pmic->palmas, addr, ®); |
1047 | if (ret) | 937 | if (ret) |
1048 | return ret; | 938 | return ret; |
1049 | if (reg & PALMAS_SMPS12_VOLTAGE_RANGE) | 939 | if (reg & PALMAS_SMPS12_VOLTAGE_RANGE) |
1050 | pmic->range[id] = 1; | 940 | pmic->range[id] = 1; |
941 | if (pmic->range[id]) | ||
942 | pmic->desc[id].linear_ranges = smps_high_ranges; | ||
943 | else | ||
944 | pmic->desc[id].linear_ranges = smps_low_ranges; | ||
1051 | 945 | ||
1052 | if (reg_init && reg_init->roof_floor) | 946 | if (reg_init && reg_init->roof_floor) |
1053 | pmic->desc[id].ops = | 947 | pmic->desc[id].ops = |