regulator: twl-regulator: Fix off-by-one vsel setting in twl6030smps_set_voltage
Subsystems (2)
PATCH 1/1 regulator: twl-regulator: Fix off-by-one vsel setting in twl6030smps_set_voltage
commit 268a1 "regulator: twl-regulator: Use DIV_ROUND_UP at appropriate places" introduced an off-by-one bug for setting vsel.
The linear calculation code in twl6030smps_list_voltage() does subtract index by 1 so we need the vsel++ after DIV_ROUND_UP.
The original code use this trick to differentiate if we are going to set the voltage to 0 or the voltage falls within the linear calculation range.
Signed-off-by Axel Lin <[email protected]>
--- drivers/regulator/twl-regulator.c | 14 ++++++++++---- 1 files changed, 10 insertions(+), 4 deletions(-)
drivers/regulator/twl-regulator.c +10 -4
@@ -788,6 +788,7 @@ twl6030smps_set_voltage(struct regulator_dev *rdev, int min_uV, int max_uV,else if ((min_uV >=600000 ) && (min_uV <=1300000 )) {int calc_uV; vsel =DIV_ROUND_UP (min_uV -600000 ,12500 ); + vsel++; calc_uV =twl6030smps_list_voltage (rdev, vsel);if (calc_uV > max_uV)return -EINVAL ;
@@ -814,6 +815,7 @@ twl6030smps_set_voltage(struct regulator_dev *rdev, int min_uV, int max_uV,else if ((min_uV >=700000 ) && (min_uV <=1420000 )) {int calc_uV; vsel =DIV_ROUND_UP (min_uV -700000 ,12500 ); + vsel++; calc_uV =twl6030smps_list_voltage (rdev, vsel);if (calc_uV > max_uV)return -EINVAL ;
@@ -835,16 +837,20 @@ twl6030smps_set_voltage(struct regulator_dev *rdev, int min_uV, int max_uV,return -EINVAL ;break ;case SMPS_EXTENDED_EN : -if (min_uV ==0 ) +if (min_uV ==0 ) { vsel =0 ; -else if ((min_uV >=1852000 ) && (max_uV <=4013600 )) + }else if ((min_uV >=1852000 ) && (max_uV <=4013600 )) { vsel =DIV_ROUND_UP (min_uV -1852000 ,38600 ); + vsel++; + }break ;case SMPS_OFFSET_EN |SMPS_EXTENDED_EN : -if (min_uV ==0 ) +if (min_uV ==0 ) { vsel =0 ; -else if ((min_uV >=2161000 ) && (max_uV <=4321000 )) + }else if ((min_uV >=2161000 ) && (max_uV <=4321000 )) { vsel =DIV_ROUND_UP (min_uV -2161000 ,38600 ); + vsel++; + }break ; }
Signature · 1 line
1.7.5.4
Mark Brown
AppliedQuoted 2 lines · Axel Lin
commit 268a1 "regulator: twl-regulator: Use
DIV_ROUND_UPat appropriate places" introduced an off-by-one bug for setting vsel.
Applied, thanks.