aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
Diffstat (limited to 'drivers')
-rw-r--r--drivers/regulator/max8660.c15
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
86static int max8660_write(struct max8660 *max8660, u8 reg, u8 mask, u8 val) 86static 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
131static int max8660_dcdc_get_voltage_sel(struct regulator_dev *rdev) 135static 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
226static int max8660_ldo67_get_voltage_sel(struct regulator_dev *rdev) 233static 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