diff options
-rw-r--r-- | drivers/regulator/ab8500.c | 20 |
1 files changed, 10 insertions, 10 deletions
diff --git a/drivers/regulator/ab8500.c b/drivers/regulator/ab8500.c index c884a5c4b473..e3d1d063025a 100644 --- a/drivers/regulator/ab8500.c +++ b/drivers/regulator/ab8500.c | |||
@@ -37,6 +37,7 @@ | |||
37 | * @voltage_bank: bank to control regulator voltage | 37 | * @voltage_bank: bank to control regulator voltage |
38 | * @voltage_reg: register to control regulator voltage | 38 | * @voltage_reg: register to control regulator voltage |
39 | * @voltage_mask: mask to control regulator voltage | 39 | * @voltage_mask: mask to control regulator voltage |
40 | * @voltage_shift: shift to control regulator voltage | ||
40 | * @delay: startup/set voltage delay in us | 41 | * @delay: startup/set voltage delay in us |
41 | */ | 42 | */ |
42 | struct ab8500_regulator_info { | 43 | struct ab8500_regulator_info { |
@@ -50,6 +51,7 @@ struct ab8500_regulator_info { | |||
50 | u8 voltage_bank; | 51 | u8 voltage_bank; |
51 | u8 voltage_reg; | 52 | u8 voltage_reg; |
52 | u8 voltage_mask; | 53 | u8 voltage_mask; |
54 | u8 voltage_shift; | ||
53 | unsigned int delay; | 55 | unsigned int delay; |
54 | }; | 56 | }; |
55 | 57 | ||
@@ -195,17 +197,14 @@ static int ab8500_regulator_get_voltage_sel(struct regulator_dev *rdev) | |||
195 | } | 197 | } |
196 | 198 | ||
197 | dev_vdbg(rdev_get_dev(rdev), | 199 | dev_vdbg(rdev_get_dev(rdev), |
198 | "%s-get_voltage (bank, reg, mask, value): 0x%x, 0x%x, 0x%x," | 200 | "%s-get_voltage (bank, reg, mask, shift, value): " |
199 | " 0x%x\n", | 201 | "0x%x, 0x%x, 0x%x, 0x%x, 0x%x\n", |
200 | info->desc.name, info->voltage_bank, info->voltage_reg, | 202 | info->desc.name, info->voltage_bank, |
201 | info->voltage_mask, regval); | 203 | info->voltage_reg, info->voltage_mask, |
204 | info->voltage_shift, regval); | ||
202 | 205 | ||
203 | /* vintcore has a different layout */ | ||
204 | val = regval & info->voltage_mask; | 206 | val = regval & info->voltage_mask; |
205 | if (info->desc.id == AB8500_LDO_INTCORE) | 207 | return val >> info->voltage_shift; |
206 | return val >> 0x3; | ||
207 | else | ||
208 | return val; | ||
209 | } | 208 | } |
210 | 209 | ||
211 | static int ab8500_regulator_set_voltage_sel(struct regulator_dev *rdev, | 210 | static int ab8500_regulator_set_voltage_sel(struct regulator_dev *rdev, |
@@ -221,7 +220,7 @@ static int ab8500_regulator_set_voltage_sel(struct regulator_dev *rdev, | |||
221 | } | 220 | } |
222 | 221 | ||
223 | /* set the registers for the request */ | 222 | /* set the registers for the request */ |
224 | regval = (u8)selector; | 223 | regval = (u8)selector << info->voltage_shift; |
225 | ret = abx500_mask_and_set_register_interruptible(info->dev, | 224 | ret = abx500_mask_and_set_register_interruptible(info->dev, |
226 | info->voltage_bank, info->voltage_reg, | 225 | info->voltage_bank, info->voltage_reg, |
227 | info->voltage_mask, regval); | 226 | info->voltage_mask, regval); |
@@ -343,6 +342,7 @@ static struct ab8500_regulator_info | |||
343 | .voltage_bank = 0x03, | 342 | .voltage_bank = 0x03, |
344 | .voltage_reg = 0x80, | 343 | .voltage_reg = 0x80, |
345 | .voltage_mask = 0x38, | 344 | .voltage_mask = 0x38, |
345 | .voltage_shift = 3, | ||
346 | }, | 346 | }, |
347 | 347 | ||
348 | /* | 348 | /* |