diff options
author | Axel Lin <axel.lin@gmail.com> | 2012-02-28 23:45:35 -0500 |
---|---|---|
committer | Mark Brown <broonie@opensource.wolfsonmicro.com> | 2012-03-11 16:48:45 -0400 |
commit | ba51c6c022b64b7f3f68d7e2936a37f6ffbc7c4d (patch) | |
tree | 5fd7888545a192a3cbbba99cc1eab4f5cf73ac4c /drivers/regulator/pcf50633-regulator.c | |
parent | 89e0f0e40002e0d95b7be079fa2c2133304ce09f (diff) |
regulator: Fix n_voltage settings for pcf50633 regulator
Current code has off-by-one n_voltage settings for AUTO/DOWN*/LDO* regulators.
Take ldo1 as example:
n_voltage should be (3.6 - 0.9) / 0.1 + 1 = 28
Table 76. LDO1OUT - LDO1 output voltage select register (address 2Dh) bit description[1]
Bit Symbol Access Description
4:0 ldo1_out R/W VO(prog) = 0.9 + ldo1_out × 0.1 V (max 3.6V); e.g.
00000 : 0.9 V
00001 : 1.0 V
11000 : 3.3 V
11011 : 3.6 V
11111 : 3.6 V
The n_voltage settings for HCLDO and MEMLDO are also wrong.
n_voltage for HCLDO and MEMLDO should be (3.6 - 0.9) / 0.1 + 1 = 28
Table 88. HCLDOOUT - HCLDO output voltage select register (addr. 39h) bit description[1]
Bit Symbol Access Description
4:0 hcldo_out R/W VO(prog) = 0.9 + hcldo_out × 0.1 V (max 3.6 V); e.g.
00000 : 0.9 V
00001 : 1.0 V
11011 : 3.6 V
11111 : 3.6 V
Table 62. MEMLDOOUT - MEMLDO o/p voltage select reg. (address 26h) bit description[1]
Bit Symbol Access Description
4:0 memldo_out R/W VO(prog) = 0.9 + memldo_out × 0.1 V; e.g.
00000: 0.9 V
00001: 1.0 V
11000 : 3.3 V
11011 : 3.6 V
11111 : 3.6 V
Signed-off-by: Axel Lin <axel.lin@gmail.com>
Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Diffstat (limited to 'drivers/regulator/pcf50633-regulator.c')
-rw-r--r-- | drivers/regulator/pcf50633-regulator.c | 27 |
1 files changed, 13 insertions, 14 deletions
diff --git a/drivers/regulator/pcf50633-regulator.c b/drivers/regulator/pcf50633-regulator.c index 1d1c3105629..6db46c632f1 100644 --- a/drivers/regulator/pcf50633-regulator.c +++ b/drivers/regulator/pcf50633-regulator.c | |||
@@ -142,6 +142,7 @@ static int pcf50633_regulator_set_voltage(struct regulator_dev *rdev, | |||
142 | case PCF50633_REGULATOR_LDO5: | 142 | case PCF50633_REGULATOR_LDO5: |
143 | case PCF50633_REGULATOR_LDO6: | 143 | case PCF50633_REGULATOR_LDO6: |
144 | case PCF50633_REGULATOR_HCLDO: | 144 | case PCF50633_REGULATOR_HCLDO: |
145 | case PCF50633_REGULATOR_MEMLDO: | ||
145 | volt_bits = ldo_voltage_bits(millivolts); | 146 | volt_bits = ldo_voltage_bits(millivolts); |
146 | break; | 147 | break; |
147 | default: | 148 | default: |
@@ -175,6 +176,7 @@ static int pcf50633_regulator_voltage_value(enum pcf50633_regulator_id id, | |||
175 | case PCF50633_REGULATOR_LDO5: | 176 | case PCF50633_REGULATOR_LDO5: |
176 | case PCF50633_REGULATOR_LDO6: | 177 | case PCF50633_REGULATOR_LDO6: |
177 | case PCF50633_REGULATOR_HCLDO: | 178 | case PCF50633_REGULATOR_HCLDO: |
179 | case PCF50633_REGULATOR_MEMLDO: | ||
178 | millivolts = ldo_voltage_value(bits); | 180 | millivolts = ldo_voltage_value(bits); |
179 | break; | 181 | break; |
180 | default: | 182 | default: |
@@ -217,9 +219,6 @@ static int pcf50633_regulator_list_voltage(struct regulator_dev *rdev, | |||
217 | case PCF50633_REGULATOR_AUTO: | 219 | case PCF50633_REGULATOR_AUTO: |
218 | index += 0x2f; | 220 | index += 0x2f; |
219 | break; | 221 | break; |
220 | case PCF50633_REGULATOR_HCLDO: | ||
221 | index += 0x01; | ||
222 | break; | ||
223 | default: | 222 | default: |
224 | break; | 223 | break; |
225 | } | 224 | } |
@@ -288,27 +287,27 @@ static struct regulator_ops pcf50633_regulator_ops = { | |||
288 | 287 | ||
289 | static struct regulator_desc regulators[] = { | 288 | static struct regulator_desc regulators[] = { |
290 | [PCF50633_REGULATOR_AUTO] = | 289 | [PCF50633_REGULATOR_AUTO] = |
291 | PCF50633_REGULATOR("auto", PCF50633_REGULATOR_AUTO, 80), | 290 | PCF50633_REGULATOR("auto", PCF50633_REGULATOR_AUTO, 81), |
292 | [PCF50633_REGULATOR_DOWN1] = | 291 | [PCF50633_REGULATOR_DOWN1] = |
293 | PCF50633_REGULATOR("down1", PCF50633_REGULATOR_DOWN1, 95), | 292 | PCF50633_REGULATOR("down1", PCF50633_REGULATOR_DOWN1, 96), |
294 | [PCF50633_REGULATOR_DOWN2] = | 293 | [PCF50633_REGULATOR_DOWN2] = |
295 | PCF50633_REGULATOR("down2", PCF50633_REGULATOR_DOWN2, 95), | 294 | PCF50633_REGULATOR("down2", PCF50633_REGULATOR_DOWN2, 96), |
296 | [PCF50633_REGULATOR_LDO1] = | 295 | [PCF50633_REGULATOR_LDO1] = |
297 | PCF50633_REGULATOR("ldo1", PCF50633_REGULATOR_LDO1, 27), | 296 | PCF50633_REGULATOR("ldo1", PCF50633_REGULATOR_LDO1, 28), |
298 | [PCF50633_REGULATOR_LDO2] = | 297 | [PCF50633_REGULATOR_LDO2] = |
299 | PCF50633_REGULATOR("ldo2", PCF50633_REGULATOR_LDO2, 27), | 298 | PCF50633_REGULATOR("ldo2", PCF50633_REGULATOR_LDO2, 28), |
300 | [PCF50633_REGULATOR_LDO3] = | 299 | [PCF50633_REGULATOR_LDO3] = |
301 | PCF50633_REGULATOR("ldo3", PCF50633_REGULATOR_LDO3, 27), | 300 | PCF50633_REGULATOR("ldo3", PCF50633_REGULATOR_LDO3, 28), |
302 | [PCF50633_REGULATOR_LDO4] = | 301 | [PCF50633_REGULATOR_LDO4] = |
303 | PCF50633_REGULATOR("ldo4", PCF50633_REGULATOR_LDO4, 27), | 302 | PCF50633_REGULATOR("ldo4", PCF50633_REGULATOR_LDO4, 28), |
304 | [PCF50633_REGULATOR_LDO5] = | 303 | [PCF50633_REGULATOR_LDO5] = |
305 | PCF50633_REGULATOR("ldo5", PCF50633_REGULATOR_LDO5, 27), | 304 | PCF50633_REGULATOR("ldo5", PCF50633_REGULATOR_LDO5, 28), |
306 | [PCF50633_REGULATOR_LDO6] = | 305 | [PCF50633_REGULATOR_LDO6] = |
307 | PCF50633_REGULATOR("ldo6", PCF50633_REGULATOR_LDO6, 27), | 306 | PCF50633_REGULATOR("ldo6", PCF50633_REGULATOR_LDO6, 28), |
308 | [PCF50633_REGULATOR_HCLDO] = | 307 | [PCF50633_REGULATOR_HCLDO] = |
309 | PCF50633_REGULATOR("hcldo", PCF50633_REGULATOR_HCLDO, 26), | 308 | PCF50633_REGULATOR("hcldo", PCF50633_REGULATOR_HCLDO, 28), |
310 | [PCF50633_REGULATOR_MEMLDO] = | 309 | [PCF50633_REGULATOR_MEMLDO] = |
311 | PCF50633_REGULATOR("memldo", PCF50633_REGULATOR_MEMLDO, 0), | 310 | PCF50633_REGULATOR("memldo", PCF50633_REGULATOR_MEMLDO, 28), |
312 | }; | 311 | }; |
313 | 312 | ||
314 | static int __devinit pcf50633_regulator_probe(struct platform_device *pdev) | 313 | static int __devinit pcf50633_regulator_probe(struct platform_device *pdev) |