regulator: ad5398: Fix min/max current limit boundary checking
Subsystems (2)
PATCH v3 1/1 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.
--- drivers/regulator/ad5398.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-)
drivers/regulator/ad5398.c +6 -3
@@ -89,9 +89,12 @@ static int ad5398_set_current_limit(struct regulator_dev *rdev, int min_uA, intunsigned 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,
Signature · 1 line
1.7.9.5
Quoted 44 lines
-----Original Message-----
From: Axel Lin [mailto:[email protected]]
Sent: Wednesday, July 04, 2012 11:55 AM
To: Mark Brown
Cc: [email protected]; Zhang, Sonic; Lars-Peter Clausen; Liam Girdwood
Subject: [PATCH v3] regulator: ad5398: Fix min/max current limit boundary checkingIt is ok to request current limit with
min_uA<chip->min_uAandmax_uA>chip->max_uA.We need to set
min_uA=chip->min_uAif (min_uA<chip->min_uA), this ensures the equation to calcuate selator does not return negative number.Also set
max_uA=chip->max_uAif (max_uA>chip->max_uA), as suggested by Sonic.Signed-off-by Axel Lin <[email protected]>---
drivers/regulator/ad5398.c| 9 ++++++---1 file changed, 6 insertions(+), 3 deletions(-)drivers/regulator/ad5398.c +6
-3@@ -89,9 +89,12 @@ static int ad5398_set_current_limit(struct regulator_dev *rdev, int min_uA, intunsigned 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,
Quoted 5 lines
--
1.7.9.5
���{.n�+�������+%�����ݶ��w��{.n�+����{��G�����{ay�ʇڙ�,j��f���h��������z_�(�階�ݢj"���m������G������?����&���~��iO��z��v�^�m����������?�I�
Mark Brown
AppliedQuoted 2 lines · Axel Lin
It is ok to request current limit with
min_uA<chip->min_uAandmax_uA>chip->max_uA.
Applied, thanks.