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: Axel Lin <axel.lin@gmail.com> Acked-by: Sonic Zhang <sonic.zhang@analog.com> Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
This commit is contained in:
parent
fca53d862d
commit
9c6a74c5e0
|
@ -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,
|
||||||
|
|
Loading…
Reference in New Issue