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

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
Loading
Loading
Loading
Loading
+6 −3
Original line number Diff line number Diff line
@@ -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,