diff options
| -rw-r--r-- | drivers/regulator/max8660.c | 15 |
1 files changed, 11 insertions, 4 deletions
diff --git a/drivers/regulator/max8660.c b/drivers/regulator/max8660.c index bbbe53b1b5bf..aabfb3b2407c 100644 --- a/drivers/regulator/max8660.c +++ b/drivers/regulator/max8660.c | |||
| @@ -85,11 +85,12 @@ struct max8660 { | |||
| 85 | 85 | ||
| 86 | static int max8660_write(struct max8660 *max8660, u8 reg, u8 mask, u8 val) | 86 | static int max8660_write(struct max8660 *max8660, u8 reg, u8 mask, u8 val) |
| 87 | { | 87 | { |
| 88 | static const u8 max8660_addresses[MAX8660_N_REGS] = | 88 | static const u8 max8660_addresses[MAX8660_N_REGS] = { |
| 89 | { 0x10, 0x12, 0x20, 0x23, 0x24, 0x29, 0x2a, 0x32, 0x33, 0x39, 0x80 }; | 89 | 0x10, 0x12, 0x20, 0x23, 0x24, 0x29, 0x2a, 0x32, 0x33, 0x39, 0x80 }; |
| 90 | 90 | ||
| 91 | int ret; | 91 | int ret; |
| 92 | u8 reg_val = (max8660->shadow_regs[reg] & mask) | val; | 92 | u8 reg_val = (max8660->shadow_regs[reg] & mask) | val; |
| 93 | |||
| 93 | dev_vdbg(&max8660->client->dev, "Writing reg %02x with %02x\n", | 94 | dev_vdbg(&max8660->client->dev, "Writing reg %02x with %02x\n", |
| 94 | max8660_addresses[reg], reg_val); | 95 | max8660_addresses[reg], reg_val); |
| 95 | 96 | ||
| @@ -111,6 +112,7 @@ static int max8660_dcdc_is_enabled(struct regulator_dev *rdev) | |||
| 111 | struct max8660 *max8660 = rdev_get_drvdata(rdev); | 112 | struct max8660 *max8660 = rdev_get_drvdata(rdev); |
| 112 | u8 val = max8660->shadow_regs[MAX8660_OVER1]; | 113 | u8 val = max8660->shadow_regs[MAX8660_OVER1]; |
| 113 | u8 mask = (rdev_get_id(rdev) == MAX8660_V3) ? 1 : 4; | 114 | u8 mask = (rdev_get_id(rdev) == MAX8660_V3) ? 1 : 4; |
| 115 | |||
| 114 | return !!(val & mask); | 116 | return !!(val & mask); |
| 115 | } | 117 | } |
| 116 | 118 | ||
| @@ -118,6 +120,7 @@ static int max8660_dcdc_enable(struct regulator_dev *rdev) | |||
| 118 | { | 120 | { |
| 119 | struct max8660 *max8660 = rdev_get_drvdata(rdev); | 121 | struct max8660 *max8660 = rdev_get_drvdata(rdev); |
| 120 | u8 bit = (rdev_get_id(rdev) == MAX8660_V3) ? 1 : 4; | 122 | u8 bit = (rdev_get_id(rdev) == MAX8660_V3) ? 1 : 4; |
| 123 | |||
| 121 | return max8660_write(max8660, MAX8660_OVER1, 0xff, bit); | 124 | return max8660_write(max8660, MAX8660_OVER1, 0xff, bit); |
| 122 | } | 125 | } |
| 123 | 126 | ||
| @@ -125,15 +128,16 @@ static int max8660_dcdc_disable(struct regulator_dev *rdev) | |||
| 125 | { | 128 | { |
| 126 | struct max8660 *max8660 = rdev_get_drvdata(rdev); | 129 | struct max8660 *max8660 = rdev_get_drvdata(rdev); |
| 127 | u8 mask = (rdev_get_id(rdev) == MAX8660_V3) ? ~1 : ~4; | 130 | u8 mask = (rdev_get_id(rdev) == MAX8660_V3) ? ~1 : ~4; |
| 131 | |||
| 128 | return max8660_write(max8660, MAX8660_OVER1, mask, 0); | 132 | return max8660_write(max8660, MAX8660_OVER1, mask, 0); |
| 129 | } | 133 | } |
| 130 | 134 | ||
| 131 | static int max8660_dcdc_get_voltage_sel(struct regulator_dev *rdev) | 135 | static int max8660_dcdc_get_voltage_sel(struct regulator_dev *rdev) |
| 132 | { | 136 | { |
| 133 | struct max8660 *max8660 = rdev_get_drvdata(rdev); | 137 | struct max8660 *max8660 = rdev_get_drvdata(rdev); |
| 134 | |||
| 135 | u8 reg = (rdev_get_id(rdev) == MAX8660_V3) ? MAX8660_ADTV2 : MAX8660_SDTV2; | 138 | u8 reg = (rdev_get_id(rdev) == MAX8660_V3) ? MAX8660_ADTV2 : MAX8660_SDTV2; |
| 136 | u8 selector = max8660->shadow_regs[reg]; | 139 | u8 selector = max8660->shadow_regs[reg]; |
| 140 | |||
| 137 | return selector; | 141 | return selector; |
| 138 | } | 142 | } |
| 139 | 143 | ||
| @@ -206,6 +210,7 @@ static int max8660_ldo67_is_enabled(struct regulator_dev *rdev) | |||
| 206 | struct max8660 *max8660 = rdev_get_drvdata(rdev); | 210 | struct max8660 *max8660 = rdev_get_drvdata(rdev); |
| 207 | u8 val = max8660->shadow_regs[MAX8660_OVER2]; | 211 | u8 val = max8660->shadow_regs[MAX8660_OVER2]; |
| 208 | u8 mask = (rdev_get_id(rdev) == MAX8660_V6) ? 2 : 4; | 212 | u8 mask = (rdev_get_id(rdev) == MAX8660_V6) ? 2 : 4; |
| 213 | |||
| 209 | return !!(val & mask); | 214 | return !!(val & mask); |
| 210 | } | 215 | } |
| 211 | 216 | ||
| @@ -213,6 +218,7 @@ static int max8660_ldo67_enable(struct regulator_dev *rdev) | |||
| 213 | { | 218 | { |
| 214 | struct max8660 *max8660 = rdev_get_drvdata(rdev); | 219 | struct max8660 *max8660 = rdev_get_drvdata(rdev); |
| 215 | u8 bit = (rdev_get_id(rdev) == MAX8660_V6) ? 2 : 4; | 220 | u8 bit = (rdev_get_id(rdev) == MAX8660_V6) ? 2 : 4; |
| 221 | |||
| 216 | return max8660_write(max8660, MAX8660_OVER2, 0xff, bit); | 222 | return max8660_write(max8660, MAX8660_OVER2, 0xff, bit); |
| 217 | } | 223 | } |
| 218 | 224 | ||
| @@ -220,15 +226,16 @@ static int max8660_ldo67_disable(struct regulator_dev *rdev) | |||
| 220 | { | 226 | { |
| 221 | struct max8660 *max8660 = rdev_get_drvdata(rdev); | 227 | struct max8660 *max8660 = rdev_get_drvdata(rdev); |
| 222 | u8 mask = (rdev_get_id(rdev) == MAX8660_V6) ? ~2 : ~4; | 228 | u8 mask = (rdev_get_id(rdev) == MAX8660_V6) ? ~2 : ~4; |
| 229 | |||
| 223 | return max8660_write(max8660, MAX8660_OVER2, mask, 0); | 230 | return max8660_write(max8660, MAX8660_OVER2, mask, 0); |
| 224 | } | 231 | } |
| 225 | 232 | ||
| 226 | static int max8660_ldo67_get_voltage_sel(struct regulator_dev *rdev) | 233 | static int max8660_ldo67_get_voltage_sel(struct regulator_dev *rdev) |
| 227 | { | 234 | { |
| 228 | struct max8660 *max8660 = rdev_get_drvdata(rdev); | 235 | struct max8660 *max8660 = rdev_get_drvdata(rdev); |
| 229 | |||
| 230 | u8 shift = (rdev_get_id(rdev) == MAX8660_V6) ? 0 : 4; | 236 | u8 shift = (rdev_get_id(rdev) == MAX8660_V6) ? 0 : 4; |
| 231 | u8 selector = (max8660->shadow_regs[MAX8660_L12VCR] >> shift) & 0xf; | 237 | u8 selector = (max8660->shadow_regs[MAX8660_L12VCR] >> shift) & 0xf; |
| 238 | |||
| 232 | return selector; | 239 | return selector; |
| 233 | } | 240 | } |
| 234 | 241 | ||
