aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKeerthy <j-keerthy@ti.com>2014-05-22 05:18:29 -0400
committerMark Brown <broonie@linaro.org>2014-05-22 06:32:12 -0400
commitdbabd624d4eec50b623bab070d1e39a854b2d65c (patch)
tree38c37dd58ba96f2aa5453ac66aceb8c0fd6572ad
parentc9eaa447e77efe77b7fa4c953bd62de8297fd6c5 (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.c158
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
39static 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
45static 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
39static const struct regs_info palmas_regs_info[] = { 51static 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
283static 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, &reg);
290
291 reg &= PALMAS_SMPS12_CTRL_STATUS_MASK;
292 reg >>= PALMAS_SMPS12_CTRL_STATUS_SHIFT;
293
294 return !!(reg);
295}
296
297static 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, &reg);
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
316static 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, &reg);
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
331static int palmas_set_mode_smps(struct regulator_dev *dev, unsigned int mode) 295static 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
385static 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
410static 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
438static 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
460static int palmas_smps_set_ramp_delay(struct regulator_dev *rdev, 349static 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
495static struct regulator_ops palmas_ops_smps = { 384static 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, &reg); 936 ret = palmas_smps_read(pmic->palmas, addr, &reg);
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 =