* [PATCH 1/2] regulator: as3711: Fix valid min_uV/max_UV checking in as3711_bound_check
@ 2012-11-23 16:50 Axel Lin
2012-11-23 16:53 ` [PATCH 2/2] regulator: as3711: Fix the logic in as3711_sel_check Axel Lin
` (2 more replies)
0 siblings, 3 replies; 5+ messages in thread
From: Axel Lin @ 2012-11-23 16:50 UTC (permalink / raw)
To: Mark Brown; +Cc: Guennadi Liakhovetski, Liam Girdwood, linux-kernel
Below cases are supposed to be valid:
min_uV == max_uV == info->max_uV
min_uV == max_uV == rdev->desc->min_uV
Don't return -EINVAL for above cases.
This patch also includes below cleanups:
- Use rdev_get_drvdata(rdev) instead of rdev->reg_data.
- Remove unnecessary WARN_ON, it looks pointless.
Signed-off-by: Axel Lin <axel.lin@ingics.com>
---
drivers/regulator/as3711-regulator.c | 9 +++------
1 file changed, 3 insertions(+), 6 deletions(-)
diff --git a/drivers/regulator/as3711-regulator.c b/drivers/regulator/as3711-regulator.c
index 81578bf..5e813b9 100644
--- a/drivers/regulator/as3711-regulator.c
+++ b/drivers/regulator/as3711-regulator.c
@@ -69,17 +69,14 @@ static int as3711_list_voltage_dldo(struct regulator_dev *rdev,
static int as3711_bound_check(struct regulator_dev *rdev,
int *min_uV, int *max_uV)
{
- struct as3711_regulator_info *info = container_of(rdev->desc,
- struct as3711_regulator_info, desc);
- struct as3711_regulator *reg = rdev->reg_data;
-
- WARN_ON(reg->reg_info != info);
+ struct as3711_regulator *reg = rdev_get_drvdata(rdev);
+ struct as3711_regulator_info *info = reg->reg_info;
dev_dbg(&rdev->dev, "%s(), %d, %d, %d\n", __func__,
*min_uV, rdev->desc->min_uV, info->max_uV);
if (*max_uV < *min_uV ||
- *min_uV >= info->max_uV || rdev->desc->min_uV >= *max_uV)
+ *min_uV > info->max_uV || rdev->desc->min_uV > *max_uV)
return -EINVAL;
if (rdev->desc->n_voltages == 1)
--
1.7.9.5
^ permalink raw reply related [flat|nested] 5+ messages in thread* [PATCH 2/2] regulator: as3711: Fix the logic in as3711_sel_check 2012-11-23 16:50 [PATCH 1/2] regulator: as3711: Fix valid min_uV/max_UV checking in as3711_bound_check Axel Lin @ 2012-11-23 16:53 ` Axel Lin 2012-11-26 13:46 ` Guennadi Liakhovetski 2012-11-26 13:45 ` [PATCH 1/2] regulator: as3711: Fix valid min_uV/max_UV checking in as3711_bound_check Guennadi Liakhovetski 2012-11-27 20:25 ` Mark Brown 2 siblings, 1 reply; 5+ messages in thread From: Axel Lin @ 2012-11-23 16:53 UTC (permalink / raw) To: Mark Brown; +Cc: Guennadi Liakhovetski, Liam Girdwood, linux-kernel Below equation means the "voltage" is the "smallest" voltage within specific range. ret = DIV_ROUND_UP(min - bottom) / step; voltage = ret * step + bottom; If we do try 1 down when (voltage > max), new voltage is then less than min voltage. Which means the new voltage is not in the requested voltage range. This patch also includes below cleanups: - Use DIV_ROUND_UP - rename variable 'ret' to 'sel' for better readability because as3711_sel_check returns the selector. Signed-off-by: Axel Lin <axel.lin@ingics.com> --- drivers/regulator/as3711-regulator.c | 23 ++++++++--------------- 1 file changed, 8 insertions(+), 15 deletions(-) diff --git a/drivers/regulator/as3711-regulator.c b/drivers/regulator/as3711-regulator.c index 5e813b9..2f1341d 100644 --- a/drivers/regulator/as3711-regulator.c +++ b/drivers/regulator/as3711-regulator.c @@ -93,24 +93,17 @@ static int as3711_bound_check(struct regulator_dev *rdev, static int as3711_sel_check(int min, int max, int bottom, int step) { - int ret, voltage; + int sel, voltage; /* Round up min, when dividing: keeps us within the range */ - ret = (min - bottom + step - 1) / step; - voltage = ret * step + bottom; + sel = DIV_ROUND_UP(min - bottom, step); + voltage = sel * step + bottom; pr_debug("%s(): select %d..%d in %d+N*%d: %d\n", __func__, - min, max, bottom, step, ret); - if (voltage > max) { - /* - * Try 1 down. It will take us below min, but as long we stay - * above bottom, we're fine. - */ - ret--; - voltage = ret * step + bottom; - if (voltage < bottom) - return -EINVAL; - } - return ret; + min, max, bottom, step, sel); + if (voltage > max) + return -EINVAL; + + return sel; } static int as3711_map_voltage_sd(struct regulator_dev *rdev, -- 1.7.9.5 ^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PATCH 2/2] regulator: as3711: Fix the logic in as3711_sel_check 2012-11-23 16:53 ` [PATCH 2/2] regulator: as3711: Fix the logic in as3711_sel_check Axel Lin @ 2012-11-26 13:46 ` Guennadi Liakhovetski 0 siblings, 0 replies; 5+ messages in thread From: Guennadi Liakhovetski @ 2012-11-26 13:46 UTC (permalink / raw) To: Axel Lin; +Cc: Mark Brown, Liam Girdwood, linux-kernel On Sat, 24 Nov 2012, Axel Lin wrote: > Below equation means the "voltage" is the "smallest" voltage within specific > range. > > ret = DIV_ROUND_UP(min - bottom) / step; > voltage = ret * step + bottom; > > If we do try 1 down when (voltage > max), new voltage is then less than min > voltage. Which means the new voltage is not in the requested voltage range. > > This patch also includes below cleanups: > - Use DIV_ROUND_UP > - rename variable 'ret' to 'sel' for better readability because as3711_sel_check > returns the selector. > > Signed-off-by: Axel Lin <axel.lin@ingics.com> Acked-by: Guennadi Liakhovetski <g.liakhovetski@gmx.de> Thanks Guennadi > --- > drivers/regulator/as3711-regulator.c | 23 ++++++++--------------- > 1 file changed, 8 insertions(+), 15 deletions(-) > > diff --git a/drivers/regulator/as3711-regulator.c b/drivers/regulator/as3711-regulator.c > index 5e813b9..2f1341d 100644 > --- a/drivers/regulator/as3711-regulator.c > +++ b/drivers/regulator/as3711-regulator.c > @@ -93,24 +93,17 @@ static int as3711_bound_check(struct regulator_dev *rdev, > > static int as3711_sel_check(int min, int max, int bottom, int step) > { > - int ret, voltage; > + int sel, voltage; > > /* Round up min, when dividing: keeps us within the range */ > - ret = (min - bottom + step - 1) / step; > - voltage = ret * step + bottom; > + sel = DIV_ROUND_UP(min - bottom, step); > + voltage = sel * step + bottom; > pr_debug("%s(): select %d..%d in %d+N*%d: %d\n", __func__, > - min, max, bottom, step, ret); > - if (voltage > max) { > - /* > - * Try 1 down. It will take us below min, but as long we stay > - * above bottom, we're fine. > - */ > - ret--; > - voltage = ret * step + bottom; > - if (voltage < bottom) > - return -EINVAL; > - } > - return ret; > + min, max, bottom, step, sel); > + if (voltage > max) > + return -EINVAL; > + > + return sel; > } > > static int as3711_map_voltage_sd(struct regulator_dev *rdev, > -- > 1.7.9.5 > > > --- Guennadi Liakhovetski, Ph.D. Freelance Open-Source Software Developer http://www.open-technology.de/ ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH 1/2] regulator: as3711: Fix valid min_uV/max_UV checking in as3711_bound_check 2012-11-23 16:50 [PATCH 1/2] regulator: as3711: Fix valid min_uV/max_UV checking in as3711_bound_check Axel Lin 2012-11-23 16:53 ` [PATCH 2/2] regulator: as3711: Fix the logic in as3711_sel_check Axel Lin @ 2012-11-26 13:45 ` Guennadi Liakhovetski 2012-11-27 20:25 ` Mark Brown 2 siblings, 0 replies; 5+ messages in thread From: Guennadi Liakhovetski @ 2012-11-26 13:45 UTC (permalink / raw) To: Axel Lin; +Cc: Mark Brown, Liam Girdwood, linux-kernel On Sat, 24 Nov 2012, Axel Lin wrote: > Below cases are supposed to be valid: > > min_uV == max_uV == info->max_uV > min_uV == max_uV == rdev->desc->min_uV > > Don't return -EINVAL for above cases. > > This patch also includes below cleanups: > - Use rdev_get_drvdata(rdev) instead of rdev->reg_data. > - Remove unnecessary WARN_ON, it looks pointless. > > Signed-off-by: Axel Lin <axel.lin@ingics.com> Acked-by: Guennadi Liakhovetski <g.liakhovetski@gmx.de> Thanks Guennadi > --- > drivers/regulator/as3711-regulator.c | 9 +++------ > 1 file changed, 3 insertions(+), 6 deletions(-) > > diff --git a/drivers/regulator/as3711-regulator.c b/drivers/regulator/as3711-regulator.c > index 81578bf..5e813b9 100644 > --- a/drivers/regulator/as3711-regulator.c > +++ b/drivers/regulator/as3711-regulator.c > @@ -69,17 +69,14 @@ static int as3711_list_voltage_dldo(struct regulator_dev *rdev, > static int as3711_bound_check(struct regulator_dev *rdev, > int *min_uV, int *max_uV) > { > - struct as3711_regulator_info *info = container_of(rdev->desc, > - struct as3711_regulator_info, desc); > - struct as3711_regulator *reg = rdev->reg_data; > - > - WARN_ON(reg->reg_info != info); > + struct as3711_regulator *reg = rdev_get_drvdata(rdev); > + struct as3711_regulator_info *info = reg->reg_info; > > dev_dbg(&rdev->dev, "%s(), %d, %d, %d\n", __func__, > *min_uV, rdev->desc->min_uV, info->max_uV); > > if (*max_uV < *min_uV || > - *min_uV >= info->max_uV || rdev->desc->min_uV >= *max_uV) > + *min_uV > info->max_uV || rdev->desc->min_uV > *max_uV) > return -EINVAL; > > if (rdev->desc->n_voltages == 1) > -- > 1.7.9.5 > > > --- Guennadi Liakhovetski, Ph.D. Freelance Open-Source Software Developer http://www.open-technology.de/ ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH 1/2] regulator: as3711: Fix valid min_uV/max_UV checking in as3711_bound_check 2012-11-23 16:50 [PATCH 1/2] regulator: as3711: Fix valid min_uV/max_UV checking in as3711_bound_check Axel Lin 2012-11-23 16:53 ` [PATCH 2/2] regulator: as3711: Fix the logic in as3711_sel_check Axel Lin 2012-11-26 13:45 ` [PATCH 1/2] regulator: as3711: Fix valid min_uV/max_UV checking in as3711_bound_check Guennadi Liakhovetski @ 2012-11-27 20:25 ` Mark Brown 2 siblings, 0 replies; 5+ messages in thread From: Mark Brown @ 2012-11-27 20:25 UTC (permalink / raw) To: Axel Lin; +Cc: Guennadi Liakhovetski, Liam Girdwood, linux-kernel [-- Attachment #1: Type: text/plain, Size: 207 bytes --] On Sat, Nov 24, 2012 at 12:50:52AM +0800, Axel Lin wrote: > Below cases are supposed to be valid: > > min_uV == max_uV == info->max_uV > min_uV == max_uV == rdev->desc->min_uV Applied both, thanks. [-- Attachment #2: Digital signature --] [-- Type: application/pgp-signature, Size: 836 bytes --] ^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2012-11-27 20:25 UTC | newest] Thread overview: 5+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2012-11-23 16:50 [PATCH 1/2] regulator: as3711: Fix valid min_uV/max_UV checking in as3711_bound_check Axel Lin 2012-11-23 16:53 ` [PATCH 2/2] regulator: as3711: Fix the logic in as3711_sel_check Axel Lin 2012-11-26 13:46 ` Guennadi Liakhovetski 2012-11-26 13:45 ` [PATCH 1/2] regulator: as3711: Fix valid min_uV/max_UV checking in as3711_bound_check Guennadi Liakhovetski 2012-11-27 20:25 ` Mark Brown
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox