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