Skip to content

Commit

Permalink
regulator: ad5398: Fix min/max current limit boundary checking
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Axel Lin authored and Mark Brown committed Jul 4, 2012
1 parent fca53d8 commit 9c6a74c
Showing 1 changed file with 6 additions and 3 deletions.
9 changes: 6 additions & 3 deletions drivers/regulator/ad5398.c
Original file line number Diff line number Diff line change
Expand Up @@ -89,9 +89,12 @@ static int ad5398_set_current_limit(struct regulator_dev *rdev, int min_uA, int
unsigned short data;
int ret;

if (min_uA > chip->max_uA || min_uA < chip->min_uA)
return -EINVAL;
if (max_uA > chip->max_uA || max_uA < chip->min_uA)
if (min_uA < chip->min_uA)
min_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;

selector = DIV_ROUND_UP((min_uA - chip->min_uA) * chip->current_level,
Expand Down

0 comments on commit 9c6a74c

Please sign in to comment.