diff options
Diffstat (limited to 'drivers/regulator/palmas-regulator.c')
| -rw-r--r-- | drivers/regulator/palmas-regulator.c | 23 |
1 files changed, 15 insertions, 8 deletions
diff --git a/drivers/regulator/palmas-regulator.c b/drivers/regulator/palmas-regulator.c index 17d19fbbc490..46c7e88f8381 100644 --- a/drivers/regulator/palmas-regulator.c +++ b/drivers/regulator/palmas-regulator.c | |||
| @@ -486,9 +486,12 @@ static int palmas_map_voltage_ldo(struct regulator_dev *rdev, | |||
| 486 | { | 486 | { |
| 487 | int ret, voltage; | 487 | int ret, voltage; |
| 488 | 488 | ||
| 489 | ret = ((min_uV - 900000) / 50000) + 1; | 489 | if (min_uV == 0) |
| 490 | if (ret < 0) | 490 | return 0; |
| 491 | return ret; | 491 | |
| 492 | if (min_uV < 900000) | ||
| 493 | min_uV = 900000; | ||
| 494 | ret = DIV_ROUND_UP(min_uV - 900000, 50000) + 1; | ||
| 492 | 495 | ||
| 493 | /* Map back into a voltage to verify we're still in bounds */ | 496 | /* Map back into a voltage to verify we're still in bounds */ |
| 494 | voltage = palmas_list_voltage_ldo(rdev, ret); | 497 | voltage = palmas_list_voltage_ldo(rdev, ret); |
| @@ -586,7 +589,7 @@ static int palmas_ldo_init(struct palmas *palmas, int id, | |||
| 586 | 589 | ||
| 587 | addr = palmas_regs_info[id].ctrl_addr; | 590 | addr = palmas_regs_info[id].ctrl_addr; |
| 588 | 591 | ||
| 589 | ret = palmas_smps_read(palmas, addr, ®); | 592 | ret = palmas_ldo_read(palmas, addr, ®); |
| 590 | if (ret) | 593 | if (ret) |
| 591 | return ret; | 594 | return ret; |
| 592 | 595 | ||
| @@ -596,7 +599,7 @@ static int palmas_ldo_init(struct palmas *palmas, int id, | |||
| 596 | if (reg_init->mode_sleep) | 599 | if (reg_init->mode_sleep) |
| 597 | reg |= PALMAS_LDO1_CTRL_MODE_SLEEP; | 600 | reg |= PALMAS_LDO1_CTRL_MODE_SLEEP; |
| 598 | 601 | ||
| 599 | ret = palmas_smps_write(palmas, addr, reg); | 602 | ret = palmas_ldo_write(palmas, addr, reg); |
| 600 | if (ret) | 603 | if (ret) |
| 601 | return ret; | 604 | return ret; |
| 602 | 605 | ||
| @@ -630,7 +633,7 @@ static __devinit int palmas_probe(struct platform_device *pdev) | |||
| 630 | 633 | ||
| 631 | ret = palmas_smps_read(palmas, PALMAS_SMPS_CTRL, ®); | 634 | ret = palmas_smps_read(palmas, PALMAS_SMPS_CTRL, ®); |
| 632 | if (ret) | 635 | if (ret) |
| 633 | goto err_unregister_regulator; | 636 | return ret; |
| 634 | 637 | ||
| 635 | if (reg & PALMAS_SMPS_CTRL_SMPS12_SMPS123_EN) | 638 | if (reg & PALMAS_SMPS_CTRL_SMPS12_SMPS123_EN) |
| 636 | pmic->smps123 = 1; | 639 | pmic->smps123 = 1; |
| @@ -676,7 +679,9 @@ static __devinit int palmas_probe(struct platform_device *pdev) | |||
| 676 | case PALMAS_REG_SMPS10: | 679 | case PALMAS_REG_SMPS10: |
| 677 | pmic->desc[id].n_voltages = PALMAS_SMPS10_NUM_VOLTAGES; | 680 | pmic->desc[id].n_voltages = PALMAS_SMPS10_NUM_VOLTAGES; |
| 678 | pmic->desc[id].ops = &palmas_ops_smps10; | 681 | pmic->desc[id].ops = &palmas_ops_smps10; |
| 679 | pmic->desc[id].vsel_reg = PALMAS_SMPS10_CTRL; | 682 | pmic->desc[id].vsel_reg = |
| 683 | PALMAS_BASE_TO_REG(PALMAS_SMPS_BASE, | ||
| 684 | PALMAS_SMPS10_CTRL); | ||
| 680 | pmic->desc[id].vsel_mask = SMPS10_VSEL; | 685 | pmic->desc[id].vsel_mask = SMPS10_VSEL; |
| 681 | pmic->desc[id].enable_reg = | 686 | pmic->desc[id].enable_reg = |
| 682 | PALMAS_BASE_TO_REG(PALMAS_SMPS_BASE, | 687 | PALMAS_BASE_TO_REG(PALMAS_SMPS_BASE, |
| @@ -778,8 +783,10 @@ static __devinit int palmas_probe(struct platform_device *pdev) | |||
| 778 | reg_init = pdata->reg_init[id]; | 783 | reg_init = pdata->reg_init[id]; |
| 779 | if (reg_init) { | 784 | if (reg_init) { |
| 780 | ret = palmas_ldo_init(palmas, id, reg_init); | 785 | ret = palmas_ldo_init(palmas, id, reg_init); |
| 781 | if (ret) | 786 | if (ret) { |
| 787 | regulator_unregister(pmic->rdev[id]); | ||
| 782 | goto err_unregister_regulator; | 788 | goto err_unregister_regulator; |
| 789 | } | ||
| 783 | } | 790 | } |
| 784 | } | 791 | } |
| 785 | } | 792 | } |
