diff options
Diffstat (limited to 'drivers')
| -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 | /* |
