aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/regulator
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/regulator')
-rw-r--r--drivers/regulator/twl-regulator.c14
1 files changed, 11 insertions, 3 deletions
diff --git a/drivers/regulator/twl-regulator.c b/drivers/regulator/twl-regulator.c
index 181a2cfe180c..e5d222342157 100644
--- a/drivers/regulator/twl-regulator.c
+++ b/drivers/regulator/twl-regulator.c
@@ -755,12 +755,16 @@ twl6030smps_set_voltage(struct regulator_dev *rdev, int min_uV, int max_uV,
755 case 0: 755 case 0:
756 if (min_uV == 0) 756 if (min_uV == 0)
757 vsel = 0; 757 vsel = 0;
758 else if ((min_uV >= 600000) && (max_uV <= 1300000)) { 758 else if ((min_uV >= 600000) && (min_uV <= 1300000)) {
759 int calc_uV;
759 vsel = (min_uV - 600000) / 125; 760 vsel = (min_uV - 600000) / 125;
760 if (vsel % 100) 761 if (vsel % 100)
761 vsel += 100; 762 vsel += 100;
762 vsel /= 100; 763 vsel /= 100;
763 vsel++; 764 vsel++;
765 calc_uV = twl6030smps_list_voltage(rdev, vsel);
766 if (calc_uV > max_uV)
767 return -EINVAL;
764 } 768 }
765 /* Values 1..57 for vsel are linear and can be calculated 769 /* Values 1..57 for vsel are linear and can be calculated
766 * values 58..62 are non linear. 770 * values 58..62 are non linear.
@@ -781,12 +785,16 @@ twl6030smps_set_voltage(struct regulator_dev *rdev, int min_uV, int max_uV,
781 case SMPS_OFFSET_EN: 785 case SMPS_OFFSET_EN:
782 if (min_uV == 0) 786 if (min_uV == 0)
783 vsel = 0; 787 vsel = 0;
784 else if ((min_uV >= 700000) && (max_uV <= 1420000)) { 788 else if ((min_uV >= 700000) && (min_uV <= 1420000)) {
789 int calc_uV;
785 vsel = (min_uV - 700000) / 125; 790 vsel = (min_uV - 700000) / 125;
786 if (vsel % 100) 791 if (vsel % 100)
787 vsel += 100; 792 vsel += 100;
788 vsel /= 100; 793 vsel /= 100;
789 vsel++; 794 vsel++;
795 calc_uV = twl6030smps_list_voltage(rdev, vsel);
796 if (calc_uV > max_uV)
797 return -EINVAL;
790 } 798 }
791 /* Values 1..57 for vsel are linear and can be calculated 799 /* Values 1..57 for vsel are linear and can be calculated
792 * values 58..62 are non linear. 800 * values 58..62 are non linear.
@@ -819,7 +827,7 @@ twl6030smps_set_voltage(struct regulator_dev *rdev, int min_uV, int max_uV,
819 if (min_uV == 0) 827 if (min_uV == 0)
820 vsel = 0; 828 vsel = 0;
821 else if ((min_uV >= 2161000) && (max_uV <= 4321000)) { 829 else if ((min_uV >= 2161000) && (max_uV <= 4321000)) {
822 vsel = (min_uV - 1852000) / 386; 830 vsel = (min_uV - 2161000) / 386;
823 if (vsel % 100) 831 if (vsel % 100)
824 vsel += 100; 832 vsel += 100;
825 vsel /= 100; 833 vsel /= 100;