Commit 9c6a74c5 authored by Axel Lin's avatar Axel Lin Committed by Mark Brown

regulator: ad5398: Fix min/max current limit boundary checking

It is ok to request current limit with min_uA < chip->min_uA and
max_uA > chip->max_uA.

We need to set min_uA = chip->min_uA if (min_uA < chip->min_uA),
this ensures the equation to calcuate selator does not return negative number.

Also set max_uA = chip->max_uA if (max_uA > chip->max_uA), as suggested by
Sonic.
Signed-off-by: default avatarAxel Lin <axel.lin@gmail.com>
Acked-by: default avatarSonic Zhang <sonic.zhang@analog.com>
Signed-off-by: default avatarMark Brown <broonie@opensource.wolfsonmicro.com>
parent fca53d86
...@@ -89,9 +89,12 @@ static int ad5398_set_current_limit(struct regulator_dev *rdev, int min_uA, int ...@@ -89,9 +89,12 @@ static int ad5398_set_current_limit(struct regulator_dev *rdev, int min_uA, int
unsigned short data; unsigned short data;
int ret; int ret;
if (min_uA > chip->max_uA || min_uA < chip->min_uA) if (min_uA < chip->min_uA)
return -EINVAL; min_uA = chip->min_uA;
if (max_uA > chip->max_uA || max_uA < chip->min_uA) if (max_uA > chip->max_uA)
max_uA = chip->max_uA;
if (min_uA > chip->max_uA || max_uA < chip->min_uA)
return -EINVAL; return -EINVAL;
selector = DIV_ROUND_UP((min_uA - chip->min_uA) * chip->current_level, selector = DIV_ROUND_UP((min_uA - chip->min_uA) * chip->current_level,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment