diff options
author | Axel Lin <axel.lin@ingics.com> | 2016-05-31 05:26:00 -0400 |
---|---|---|
committer | Mark Brown <broonie@kernel.org> | 2016-05-31 11:38:01 -0400 |
commit | c714a588fc39dc8c8f70014f5691217717983fb3 (patch) | |
tree | 141938bca2f2372640f3f34a88714c58d8ebe00b | |
parent | 1a695a905c18548062509178b98bc91e67510864 (diff) |
regulator: tps51632: Fix setting ramp delay
According to the datasheet:
SLEW Register(Address = 07h)
b7 b6 b5 b4 b3 b2 b1 b0
48mV/us 42mV/us 36mV/us 30mV/us 24mV/us 18mV/us 12mV/us 6mV/us
Current code does not set correct slew rate in some cases:
e.g. Assume ramp_delay is 10000, current code sets slew register to 6mV/us.
Fix the logic to set slew register.
Signed-off-by: Axel Lin <axel.lin@ingics.com>
Acked-by: Laxman Dewangan <ldewangan@nvidia.com>
Signed-off-by: Mark Brown <broonie@kernel.org>
-rw-r--r-- | drivers/regulator/tps51632-regulator.c | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/drivers/regulator/tps51632-regulator.c b/drivers/regulator/tps51632-regulator.c index 572816e30095..c139890c1514 100644 --- a/drivers/regulator/tps51632-regulator.c +++ b/drivers/regulator/tps51632-regulator.c | |||
@@ -94,11 +94,14 @@ static int tps51632_dcdc_set_ramp_delay(struct regulator_dev *rdev, | |||
94 | int ramp_delay) | 94 | int ramp_delay) |
95 | { | 95 | { |
96 | struct tps51632_chip *tps = rdev_get_drvdata(rdev); | 96 | struct tps51632_chip *tps = rdev_get_drvdata(rdev); |
97 | int bit = ramp_delay/6000; | 97 | int bit; |
98 | int ret; | 98 | int ret; |
99 | 99 | ||
100 | if (bit) | 100 | if (ramp_delay == 0) |
101 | bit--; | 101 | bit = 0; |
102 | else | ||
103 | bit = DIV_ROUND_UP(ramp_delay, 6000) - 1; | ||
104 | |||
102 | ret = regmap_write(tps->regmap, TPS51632_SLEW_REGS, BIT(bit)); | 105 | ret = regmap_write(tps->regmap, TPS51632_SLEW_REGS, BIT(bit)); |
103 | if (ret < 0) | 106 | if (ret < 0) |
104 | dev_err(tps->dev, "SLEW reg write failed, err %d\n", ret); | 107 | dev_err(tps->dev, "SLEW reg write failed, err %d\n", ret); |