diff options
author | Axel Lin <axel.lin@gmail.com> | 2012-04-10 02:21:01 -0400 |
---|---|---|
committer | Mark Brown <broonie@opensource.wolfsonmicro.com> | 2012-04-10 05:14:01 -0400 |
commit | 2e42a7dc407163dd99ab5741b6fd167877708623 (patch) | |
tree | 0d25b62ca62fc39cdb29b731ffdf91e93ff3f996 /drivers/regulator/max8998.c | |
parent | 2358b7763ee6673c0d08ddf9dcfe96e982e9b26f (diff) |
regulator: max8998: Use simple equation to get selector
It's more efficient to get the best selector by simple equation.
Signed-off-by: Axel Lin <axel.lin@gmail.com>
Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Diffstat (limited to 'drivers/regulator/max8998.c')
-rw-r--r-- | drivers/regulator/max8998.c | 19 |
1 files changed, 10 insertions, 9 deletions
diff --git a/drivers/regulator/max8998.c b/drivers/regulator/max8998.c index 74b0b0c94120..7e831a94bf84 100644 --- a/drivers/regulator/max8998.c +++ b/drivers/regulator/max8998.c | |||
@@ -306,8 +306,7 @@ static int max8998_set_voltage_ldo(struct regulator_dev *rdev, | |||
306 | int min_vol = min_uV / 1000, max_vol = max_uV / 1000; | 306 | int min_vol = min_uV / 1000, max_vol = max_uV / 1000; |
307 | const struct voltage_map_desc *desc; | 307 | const struct voltage_map_desc *desc; |
308 | int ldo = rdev_get_id(rdev); | 308 | int ldo = rdev_get_id(rdev); |
309 | int reg, shift = 0, mask, ret; | 309 | int reg, shift = 0, mask, ret, i; |
310 | int i = 0; | ||
311 | 310 | ||
312 | if (ldo >= ARRAY_SIZE(ldo_voltage_map)) | 311 | if (ldo >= ARRAY_SIZE(ldo_voltage_map)) |
313 | return -EINVAL; | 312 | return -EINVAL; |
@@ -319,9 +318,10 @@ static int max8998_set_voltage_ldo(struct regulator_dev *rdev, | |||
319 | if (max_vol < desc->min || min_vol > desc->max) | 318 | if (max_vol < desc->min || min_vol > desc->max) |
320 | return -EINVAL; | 319 | return -EINVAL; |
321 | 320 | ||
322 | while (desc->min + desc->step*i < min_vol && | 321 | if (min_vol < desc->min) |
323 | desc->min + desc->step*i < desc->max) | 322 | min_vol = desc->min; |
324 | i++; | 323 | |
324 | i = DIV_ROUND_UP(min_vol - desc->min, desc->step); | ||
325 | 325 | ||
326 | if (desc->min + desc->step*i > max_vol) | 326 | if (desc->min + desc->step*i > max_vol) |
327 | return -EINVAL; | 327 | return -EINVAL; |
@@ -359,7 +359,7 @@ static int max8998_set_voltage_buck(struct regulator_dev *rdev, | |||
359 | const struct voltage_map_desc *desc; | 359 | const struct voltage_map_desc *desc; |
360 | int buck = rdev_get_id(rdev); | 360 | int buck = rdev_get_id(rdev); |
361 | int reg, shift = 0, mask, ret; | 361 | int reg, shift = 0, mask, ret; |
362 | int difference = 0, i = 0, j = 0, previous_vol = 0; | 362 | int difference = 0, i, j = 0, previous_vol = 0; |
363 | u8 val = 0; | 363 | u8 val = 0; |
364 | static u8 buck1_last_val; | 364 | static u8 buck1_last_val; |
365 | 365 | ||
@@ -374,9 +374,10 @@ static int max8998_set_voltage_buck(struct regulator_dev *rdev, | |||
374 | if (max_vol < desc->min || min_vol > desc->max) | 374 | if (max_vol < desc->min || min_vol > desc->max) |
375 | return -EINVAL; | 375 | return -EINVAL; |
376 | 376 | ||
377 | while (desc->min + desc->step*i < min_vol && | 377 | if (min_vol < desc->min) |
378 | desc->min + desc->step*i < desc->max) | 378 | min_vol = desc->min; |
379 | i++; | 379 | |
380 | i = DIV_ROUND_UP(min_vol - desc->min, desc->step); | ||
380 | 381 | ||
381 | if (desc->min + desc->step*i > max_vol) | 382 | if (desc->min + desc->step*i > max_vol) |
382 | return -EINVAL; | 383 | return -EINVAL; |