diff options
-rw-r--r-- | drivers/regulator/Kconfig | 1 | ||||
-rw-r--r-- | drivers/regulator/core.c | 3 | ||||
-rw-r--r-- | drivers/regulator/fixed.c | 5 | ||||
-rw-r--r-- | drivers/regulator/max8649.c | 155 | ||||
-rw-r--r-- | drivers/regulator/tps65023-regulator.c | 87 | ||||
-rw-r--r-- | drivers/regulator/tps65910-regulator.c | 51 | ||||
-rw-r--r-- | include/linux/mfd/tps65910.h | 33 |
7 files changed, 143 insertions, 192 deletions
diff --git a/drivers/regulator/Kconfig b/drivers/regulator/Kconfig index 9713b1b860cb..4e919b2ac7ee 100644 --- a/drivers/regulator/Kconfig +++ b/drivers/regulator/Kconfig | |||
@@ -93,6 +93,7 @@ config REGULATOR_MAX1586 | |||
93 | config REGULATOR_MAX8649 | 93 | config REGULATOR_MAX8649 |
94 | tristate "Maxim 8649 voltage regulator" | 94 | tristate "Maxim 8649 voltage regulator" |
95 | depends on I2C | 95 | depends on I2C |
96 | select REGMAP_I2C | ||
96 | help | 97 | help |
97 | This driver controls a Maxim 8649 voltage output regulator via | 98 | This driver controls a Maxim 8649 voltage output regulator via |
98 | I2C bus. | 99 | I2C bus. |
diff --git a/drivers/regulator/core.c b/drivers/regulator/core.c index 9867ebc00bed..f489bed2d848 100644 --- a/drivers/regulator/core.c +++ b/drivers/regulator/core.c | |||
@@ -2560,7 +2560,8 @@ static int add_regulator_attributes(struct regulator_dev *rdev) | |||
2560 | int status = 0; | 2560 | int status = 0; |
2561 | 2561 | ||
2562 | /* some attributes need specific methods to be displayed */ | 2562 | /* some attributes need specific methods to be displayed */ |
2563 | if (ops->get_voltage || ops->get_voltage_sel) { | 2563 | if ((ops->get_voltage && ops->get_voltage(rdev) >= 0) || |
2564 | (ops->get_voltage_sel && ops->get_voltage_sel(rdev) >= 0)) { | ||
2564 | status = device_create_file(dev, &dev_attr_microvolts); | 2565 | status = device_create_file(dev, &dev_attr_microvolts); |
2565 | if (status < 0) | 2566 | if (status < 0) |
2566 | return status; | 2567 | return status; |
diff --git a/drivers/regulator/fixed.c b/drivers/regulator/fixed.c index 703c26b756dc..6828dce72371 100644 --- a/drivers/regulator/fixed.c +++ b/drivers/regulator/fixed.c | |||
@@ -135,7 +135,10 @@ static int fixed_voltage_get_voltage(struct regulator_dev *dev) | |||
135 | { | 135 | { |
136 | struct fixed_voltage_data *data = rdev_get_drvdata(dev); | 136 | struct fixed_voltage_data *data = rdev_get_drvdata(dev); |
137 | 137 | ||
138 | return data->microvolts; | 138 | if (data->microvolts) |
139 | return data->microvolts; | ||
140 | else | ||
141 | return -EINVAL; | ||
139 | } | 142 | } |
140 | 143 | ||
141 | static int fixed_voltage_list_voltage(struct regulator_dev *dev, | 144 | static int fixed_voltage_list_voltage(struct regulator_dev *dev, |
diff --git a/drivers/regulator/max8649.c b/drivers/regulator/max8649.c index 524a5da23c75..b06a2399587c 100644 --- a/drivers/regulator/max8649.c +++ b/drivers/regulator/max8649.c | |||
@@ -16,6 +16,7 @@ | |||
16 | #include <linux/regulator/driver.h> | 16 | #include <linux/regulator/driver.h> |
17 | #include <linux/slab.h> | 17 | #include <linux/slab.h> |
18 | #include <linux/regulator/max8649.h> | 18 | #include <linux/regulator/max8649.h> |
19 | #include <linux/regmap.h> | ||
19 | 20 | ||
20 | #define MAX8649_DCDC_VMIN 750000 /* uV */ | 21 | #define MAX8649_DCDC_VMIN 750000 /* uV */ |
21 | #define MAX8649_DCDC_VMAX 1380000 /* uV */ | 22 | #define MAX8649_DCDC_VMAX 1380000 /* uV */ |
@@ -49,9 +50,8 @@ | |||
49 | 50 | ||
50 | struct max8649_regulator_info { | 51 | struct max8649_regulator_info { |
51 | struct regulator_dev *regulator; | 52 | struct regulator_dev *regulator; |
52 | struct i2c_client *i2c; | ||
53 | struct device *dev; | 53 | struct device *dev; |
54 | struct mutex io_lock; | 54 | struct regmap *regmap; |
55 | 55 | ||
56 | int vol_reg; | 56 | int vol_reg; |
57 | unsigned mode:2; /* bit[1:0] = VID1, VID0 */ | 57 | unsigned mode:2; /* bit[1:0] = VID1, VID0 */ |
@@ -63,71 +63,6 @@ struct max8649_regulator_info { | |||
63 | 63 | ||
64 | /* I2C operations */ | 64 | /* I2C operations */ |
65 | 65 | ||
66 | static inline int max8649_read_device(struct i2c_client *i2c, | ||
67 | int reg, int bytes, void *dest) | ||
68 | { | ||
69 | unsigned char data; | ||
70 | int ret; | ||
71 | |||
72 | data = (unsigned char)reg; | ||
73 | ret = i2c_master_send(i2c, &data, 1); | ||
74 | if (ret < 0) | ||
75 | return ret; | ||
76 | ret = i2c_master_recv(i2c, dest, bytes); | ||
77 | if (ret < 0) | ||
78 | return ret; | ||
79 | return 0; | ||
80 | } | ||
81 | |||
82 | static inline int max8649_write_device(struct i2c_client *i2c, | ||
83 | int reg, int bytes, void *src) | ||
84 | { | ||
85 | unsigned char buf[bytes + 1]; | ||
86 | int ret; | ||
87 | |||
88 | buf[0] = (unsigned char)reg; | ||
89 | memcpy(&buf[1], src, bytes); | ||
90 | |||
91 | ret = i2c_master_send(i2c, buf, bytes + 1); | ||
92 | if (ret < 0) | ||
93 | return ret; | ||
94 | return 0; | ||
95 | } | ||
96 | |||
97 | static int max8649_reg_read(struct i2c_client *i2c, int reg) | ||
98 | { | ||
99 | struct max8649_regulator_info *info = i2c_get_clientdata(i2c); | ||
100 | unsigned char data; | ||
101 | int ret; | ||
102 | |||
103 | mutex_lock(&info->io_lock); | ||
104 | ret = max8649_read_device(i2c, reg, 1, &data); | ||
105 | mutex_unlock(&info->io_lock); | ||
106 | |||
107 | if (ret < 0) | ||
108 | return ret; | ||
109 | return (int)data; | ||
110 | } | ||
111 | |||
112 | static int max8649_set_bits(struct i2c_client *i2c, int reg, | ||
113 | unsigned char mask, unsigned char data) | ||
114 | { | ||
115 | struct max8649_regulator_info *info = i2c_get_clientdata(i2c); | ||
116 | unsigned char value; | ||
117 | int ret; | ||
118 | |||
119 | mutex_lock(&info->io_lock); | ||
120 | ret = max8649_read_device(i2c, reg, 1, &value); | ||
121 | if (ret < 0) | ||
122 | goto out; | ||
123 | value &= ~mask; | ||
124 | value |= data; | ||
125 | ret = max8649_write_device(i2c, reg, 1, &value); | ||
126 | out: | ||
127 | mutex_unlock(&info->io_lock); | ||
128 | return ret; | ||
129 | } | ||
130 | |||
131 | static inline int check_range(int min_uV, int max_uV) | 66 | static inline int check_range(int min_uV, int max_uV) |
132 | { | 67 | { |
133 | if ((min_uV < MAX8649_DCDC_VMIN) || (max_uV > MAX8649_DCDC_VMAX) | 68 | if ((min_uV < MAX8649_DCDC_VMIN) || (max_uV > MAX8649_DCDC_VMAX) |
@@ -144,13 +79,14 @@ static int max8649_list_voltage(struct regulator_dev *rdev, unsigned index) | |||
144 | static int max8649_get_voltage(struct regulator_dev *rdev) | 79 | static int max8649_get_voltage(struct regulator_dev *rdev) |
145 | { | 80 | { |
146 | struct max8649_regulator_info *info = rdev_get_drvdata(rdev); | 81 | struct max8649_regulator_info *info = rdev_get_drvdata(rdev); |
82 | unsigned int val; | ||
147 | unsigned char data; | 83 | unsigned char data; |
148 | int ret; | 84 | int ret; |
149 | 85 | ||
150 | ret = max8649_reg_read(info->i2c, info->vol_reg); | 86 | ret = regmap_read(info->regmap, info->vol_reg, &val); |
151 | if (ret < 0) | 87 | if (ret != 0) |
152 | return ret; | 88 | return ret; |
153 | data = (unsigned char)ret & MAX8649_VOL_MASK; | 89 | data = (unsigned char)val & MAX8649_VOL_MASK; |
154 | return max8649_list_voltage(rdev, data); | 90 | return max8649_list_voltage(rdev, data); |
155 | } | 91 | } |
156 | 92 | ||
@@ -170,14 +106,14 @@ static int max8649_set_voltage(struct regulator_dev *rdev, | |||
170 | mask = MAX8649_VOL_MASK; | 106 | mask = MAX8649_VOL_MASK; |
171 | *selector = data & mask; | 107 | *selector = data & mask; |
172 | 108 | ||
173 | return max8649_set_bits(info->i2c, info->vol_reg, mask, data); | 109 | return regmap_update_bits(info->regmap, info->vol_reg, mask, data); |
174 | } | 110 | } |
175 | 111 | ||
176 | /* EN_PD means pulldown on EN input */ | 112 | /* EN_PD means pulldown on EN input */ |
177 | static int max8649_enable(struct regulator_dev *rdev) | 113 | static int max8649_enable(struct regulator_dev *rdev) |
178 | { | 114 | { |
179 | struct max8649_regulator_info *info = rdev_get_drvdata(rdev); | 115 | struct max8649_regulator_info *info = rdev_get_drvdata(rdev); |
180 | return max8649_set_bits(info->i2c, MAX8649_CONTROL, MAX8649_EN_PD, 0); | 116 | return regmap_update_bits(info->regmap, MAX8649_CONTROL, MAX8649_EN_PD, 0); |
181 | } | 117 | } |
182 | 118 | ||
183 | /* | 119 | /* |
@@ -187,38 +123,40 @@ static int max8649_enable(struct regulator_dev *rdev) | |||
187 | static int max8649_disable(struct regulator_dev *rdev) | 123 | static int max8649_disable(struct regulator_dev *rdev) |
188 | { | 124 | { |
189 | struct max8649_regulator_info *info = rdev_get_drvdata(rdev); | 125 | struct max8649_regulator_info *info = rdev_get_drvdata(rdev); |
190 | return max8649_set_bits(info->i2c, MAX8649_CONTROL, MAX8649_EN_PD, | 126 | return regmap_update_bits(info->regmap, MAX8649_CONTROL, MAX8649_EN_PD, |
191 | MAX8649_EN_PD); | 127 | MAX8649_EN_PD); |
192 | } | 128 | } |
193 | 129 | ||
194 | static int max8649_is_enabled(struct regulator_dev *rdev) | 130 | static int max8649_is_enabled(struct regulator_dev *rdev) |
195 | { | 131 | { |
196 | struct max8649_regulator_info *info = rdev_get_drvdata(rdev); | 132 | struct max8649_regulator_info *info = rdev_get_drvdata(rdev); |
133 | unsigned int val; | ||
197 | int ret; | 134 | int ret; |
198 | 135 | ||
199 | ret = max8649_reg_read(info->i2c, MAX8649_CONTROL); | 136 | ret = regmap_read(info->regmap, MAX8649_CONTROL, &val); |
200 | if (ret < 0) | 137 | if (ret != 0) |
201 | return ret; | 138 | return ret; |
202 | return !((unsigned char)ret & MAX8649_EN_PD); | 139 | return !((unsigned char)val & MAX8649_EN_PD); |
203 | } | 140 | } |
204 | 141 | ||
205 | static int max8649_enable_time(struct regulator_dev *rdev) | 142 | static int max8649_enable_time(struct regulator_dev *rdev) |
206 | { | 143 | { |
207 | struct max8649_regulator_info *info = rdev_get_drvdata(rdev); | 144 | struct max8649_regulator_info *info = rdev_get_drvdata(rdev); |
208 | int voltage, rate, ret; | 145 | int voltage, rate, ret; |
146 | unsigned int val; | ||
209 | 147 | ||
210 | /* get voltage */ | 148 | /* get voltage */ |
211 | ret = max8649_reg_read(info->i2c, info->vol_reg); | 149 | ret = regmap_read(info->regmap, info->vol_reg, &val); |
212 | if (ret < 0) | 150 | if (ret != 0) |
213 | return ret; | 151 | return ret; |
214 | ret &= MAX8649_VOL_MASK; | 152 | val &= MAX8649_VOL_MASK; |
215 | voltage = max8649_list_voltage(rdev, (unsigned char)ret); /* uV */ | 153 | voltage = max8649_list_voltage(rdev, (unsigned char)ret); /* uV */ |
216 | 154 | ||
217 | /* get rate */ | 155 | /* get rate */ |
218 | ret = max8649_reg_read(info->i2c, MAX8649_RAMP); | 156 | ret = regmap_read(info->regmap, MAX8649_RAMP, &val); |
219 | if (ret < 0) | 157 | if (ret != 0) |
220 | return ret; | 158 | return ret; |
221 | ret = (ret & MAX8649_RAMP_MASK) >> 5; | 159 | ret = (val & MAX8649_RAMP_MASK) >> 5; |
222 | rate = (32 * 1000) >> ret; /* uV/uS */ | 160 | rate = (32 * 1000) >> ret; /* uV/uS */ |
223 | 161 | ||
224 | return DIV_ROUND_UP(voltage, rate); | 162 | return DIV_ROUND_UP(voltage, rate); |
@@ -230,12 +168,12 @@ static int max8649_set_mode(struct regulator_dev *rdev, unsigned int mode) | |||
230 | 168 | ||
231 | switch (mode) { | 169 | switch (mode) { |
232 | case REGULATOR_MODE_FAST: | 170 | case REGULATOR_MODE_FAST: |
233 | max8649_set_bits(info->i2c, info->vol_reg, MAX8649_FORCE_PWM, | 171 | regmap_update_bits(info->regmap, info->vol_reg, MAX8649_FORCE_PWM, |
234 | MAX8649_FORCE_PWM); | 172 | MAX8649_FORCE_PWM); |
235 | break; | 173 | break; |
236 | case REGULATOR_MODE_NORMAL: | 174 | case REGULATOR_MODE_NORMAL: |
237 | max8649_set_bits(info->i2c, info->vol_reg, | 175 | regmap_update_bits(info->regmap, info->vol_reg, |
238 | MAX8649_FORCE_PWM, 0); | 176 | MAX8649_FORCE_PWM, 0); |
239 | break; | 177 | break; |
240 | default: | 178 | default: |
241 | return -EINVAL; | 179 | return -EINVAL; |
@@ -246,10 +184,13 @@ static int max8649_set_mode(struct regulator_dev *rdev, unsigned int mode) | |||
246 | static unsigned int max8649_get_mode(struct regulator_dev *rdev) | 184 | static unsigned int max8649_get_mode(struct regulator_dev *rdev) |
247 | { | 185 | { |
248 | struct max8649_regulator_info *info = rdev_get_drvdata(rdev); | 186 | struct max8649_regulator_info *info = rdev_get_drvdata(rdev); |
187 | unsigned int val; | ||
249 | int ret; | 188 | int ret; |
250 | 189 | ||
251 | ret = max8649_reg_read(info->i2c, info->vol_reg); | 190 | ret = regmap_read(info->regmap, info->vol_reg, &val); |
252 | if (ret & MAX8649_FORCE_PWM) | 191 | if (ret != 0) |
192 | return ret; | ||
193 | if (val & MAX8649_FORCE_PWM) | ||
253 | return REGULATOR_MODE_FAST; | 194 | return REGULATOR_MODE_FAST; |
254 | return REGULATOR_MODE_NORMAL; | 195 | return REGULATOR_MODE_NORMAL; |
255 | } | 196 | } |
@@ -275,11 +216,17 @@ static struct regulator_desc dcdc_desc = { | |||
275 | .owner = THIS_MODULE, | 216 | .owner = THIS_MODULE, |
276 | }; | 217 | }; |
277 | 218 | ||
219 | static struct regmap_config max8649_regmap_config = { | ||
220 | .reg_bits = 8, | ||
221 | .val_bits = 8, | ||
222 | }; | ||
223 | |||
278 | static int __devinit max8649_regulator_probe(struct i2c_client *client, | 224 | static int __devinit max8649_regulator_probe(struct i2c_client *client, |
279 | const struct i2c_device_id *id) | 225 | const struct i2c_device_id *id) |
280 | { | 226 | { |
281 | struct max8649_platform_data *pdata = client->dev.platform_data; | 227 | struct max8649_platform_data *pdata = client->dev.platform_data; |
282 | struct max8649_regulator_info *info = NULL; | 228 | struct max8649_regulator_info *info = NULL; |
229 | unsigned int val; | ||
283 | unsigned char data; | 230 | unsigned char data; |
284 | int ret; | 231 | int ret; |
285 | 232 | ||
@@ -289,9 +236,14 @@ static int __devinit max8649_regulator_probe(struct i2c_client *client, | |||
289 | return -ENOMEM; | 236 | return -ENOMEM; |
290 | } | 237 | } |
291 | 238 | ||
292 | info->i2c = client; | 239 | info->regmap = regmap_init_i2c(client, &max8649_regmap_config); |
240 | if (IS_ERR(info->regmap)) { | ||
241 | ret = PTR_ERR(info->regmap); | ||
242 | dev_err(&client->dev, "Failed to allocate register map: %d\n", ret); | ||
243 | goto fail; | ||
244 | } | ||
245 | |||
293 | info->dev = &client->dev; | 246 | info->dev = &client->dev; |
294 | mutex_init(&info->io_lock); | ||
295 | i2c_set_clientdata(client, info); | 247 | i2c_set_clientdata(client, info); |
296 | 248 | ||
297 | info->mode = pdata->mode; | 249 | info->mode = pdata->mode; |
@@ -312,8 +264,8 @@ static int __devinit max8649_regulator_probe(struct i2c_client *client, | |||
312 | break; | 264 | break; |
313 | } | 265 | } |
314 | 266 | ||
315 | ret = max8649_reg_read(info->i2c, MAX8649_CHIP_ID1); | 267 | ret = regmap_read(info->regmap, MAX8649_CHIP_ID1, &val); |
316 | if (ret < 0) { | 268 | if (ret != 0) { |
317 | dev_err(info->dev, "Failed to detect ID of MAX8649:%d\n", | 269 | dev_err(info->dev, "Failed to detect ID of MAX8649:%d\n", |
318 | ret); | 270 | ret); |
319 | goto out; | 271 | goto out; |
@@ -321,29 +273,29 @@ static int __devinit max8649_regulator_probe(struct i2c_client *client, | |||
321 | dev_info(info->dev, "Detected MAX8649 (ID:%x)\n", ret); | 273 | dev_info(info->dev, "Detected MAX8649 (ID:%x)\n", ret); |
322 | 274 | ||
323 | /* enable VID0 & VID1 */ | 275 | /* enable VID0 & VID1 */ |
324 | max8649_set_bits(info->i2c, MAX8649_CONTROL, MAX8649_VID_MASK, 0); | 276 | regmap_update_bits(info->regmap, MAX8649_CONTROL, MAX8649_VID_MASK, 0); |
325 | 277 | ||
326 | /* enable/disable external clock synchronization */ | 278 | /* enable/disable external clock synchronization */ |
327 | info->extclk = pdata->extclk; | 279 | info->extclk = pdata->extclk; |
328 | data = (info->extclk) ? MAX8649_SYNC_EXTCLK : 0; | 280 | data = (info->extclk) ? MAX8649_SYNC_EXTCLK : 0; |
329 | max8649_set_bits(info->i2c, info->vol_reg, MAX8649_SYNC_EXTCLK, data); | 281 | regmap_update_bits(info->regmap, info->vol_reg, MAX8649_SYNC_EXTCLK, data); |
330 | if (info->extclk) { | 282 | if (info->extclk) { |
331 | /* set external clock frequency */ | 283 | /* set external clock frequency */ |
332 | info->extclk_freq = pdata->extclk_freq; | 284 | info->extclk_freq = pdata->extclk_freq; |
333 | max8649_set_bits(info->i2c, MAX8649_SYNC, MAX8649_EXT_MASK, | 285 | regmap_update_bits(info->regmap, MAX8649_SYNC, MAX8649_EXT_MASK, |
334 | info->extclk_freq << 6); | 286 | info->extclk_freq << 6); |
335 | } | 287 | } |
336 | 288 | ||
337 | if (pdata->ramp_timing) { | 289 | if (pdata->ramp_timing) { |
338 | info->ramp_timing = pdata->ramp_timing; | 290 | info->ramp_timing = pdata->ramp_timing; |
339 | max8649_set_bits(info->i2c, MAX8649_RAMP, MAX8649_RAMP_MASK, | 291 | regmap_update_bits(info->regmap, MAX8649_RAMP, MAX8649_RAMP_MASK, |
340 | info->ramp_timing << 5); | 292 | info->ramp_timing << 5); |
341 | } | 293 | } |
342 | 294 | ||
343 | info->ramp_down = pdata->ramp_down; | 295 | info->ramp_down = pdata->ramp_down; |
344 | if (info->ramp_down) { | 296 | if (info->ramp_down) { |
345 | max8649_set_bits(info->i2c, MAX8649_RAMP, MAX8649_RAMP_DOWN, | 297 | regmap_update_bits(info->regmap, MAX8649_RAMP, MAX8649_RAMP_DOWN, |
346 | MAX8649_RAMP_DOWN); | 298 | MAX8649_RAMP_DOWN); |
347 | } | 299 | } |
348 | 300 | ||
349 | info->regulator = regulator_register(&dcdc_desc, &client->dev, | 301 | info->regulator = regulator_register(&dcdc_desc, &client->dev, |
@@ -358,6 +310,8 @@ static int __devinit max8649_regulator_probe(struct i2c_client *client, | |||
358 | dev_info(info->dev, "Max8649 regulator device is detected.\n"); | 310 | dev_info(info->dev, "Max8649 regulator device is detected.\n"); |
359 | return 0; | 311 | return 0; |
360 | out: | 312 | out: |
313 | regmap_exit(info->regmap); | ||
314 | fail: | ||
361 | kfree(info); | 315 | kfree(info); |
362 | return ret; | 316 | return ret; |
363 | } | 317 | } |
@@ -369,6 +323,7 @@ static int __devexit max8649_regulator_remove(struct i2c_client *client) | |||
369 | if (info) { | 323 | if (info) { |
370 | if (info->regulator) | 324 | if (info->regulator) |
371 | regulator_unregister(info->regulator); | 325 | regulator_unregister(info->regulator); |
326 | regmap_exit(info->regmap); | ||
372 | kfree(info); | 327 | kfree(info); |
373 | } | 328 | } |
374 | 329 | ||
diff --git a/drivers/regulator/tps65023-regulator.c b/drivers/regulator/tps65023-regulator.c index 7fd3b9092d1b..18d61a0529a9 100644 --- a/drivers/regulator/tps65023-regulator.c +++ b/drivers/regulator/tps65023-regulator.c | |||
@@ -152,48 +152,21 @@ struct tps_driver_data { | |||
152 | u8 core_regulator; | 152 | u8 core_regulator; |
153 | }; | 153 | }; |
154 | 154 | ||
155 | static int tps_65023_set_bits(struct tps_pmic *tps, u8 reg, u8 mask) | ||
156 | { | ||
157 | return regmap_update_bits(tps->regmap, reg, mask, mask); | ||
158 | } | ||
159 | |||
160 | static int tps_65023_clear_bits(struct tps_pmic *tps, u8 reg, u8 mask) | ||
161 | { | ||
162 | return regmap_update_bits(tps->regmap, reg, mask, 0); | ||
163 | } | ||
164 | |||
165 | static int tps_65023_reg_read(struct tps_pmic *tps, u8 reg) | ||
166 | { | ||
167 | unsigned int val; | ||
168 | int ret; | ||
169 | |||
170 | ret = regmap_read(tps->regmap, reg, &val); | ||
171 | |||
172 | if (ret != 0) | ||
173 | return ret; | ||
174 | else | ||
175 | return val; | ||
176 | } | ||
177 | |||
178 | static int tps_65023_reg_write(struct tps_pmic *tps, u8 reg, u8 val) | ||
179 | { | ||
180 | return regmap_write(tps->regmap, reg, val); | ||
181 | } | ||
182 | |||
183 | static int tps65023_dcdc_is_enabled(struct regulator_dev *dev) | 155 | static int tps65023_dcdc_is_enabled(struct regulator_dev *dev) |
184 | { | 156 | { |
185 | struct tps_pmic *tps = rdev_get_drvdata(dev); | 157 | struct tps_pmic *tps = rdev_get_drvdata(dev); |
186 | int data, dcdc = rdev_get_id(dev); | 158 | int data, dcdc = rdev_get_id(dev); |
159 | int ret; | ||
187 | u8 shift; | 160 | u8 shift; |
188 | 161 | ||
189 | if (dcdc < TPS65023_DCDC_1 || dcdc > TPS65023_DCDC_3) | 162 | if (dcdc < TPS65023_DCDC_1 || dcdc > TPS65023_DCDC_3) |
190 | return -EINVAL; | 163 | return -EINVAL; |
191 | 164 | ||
192 | shift = TPS65023_NUM_REGULATOR - dcdc; | 165 | shift = TPS65023_NUM_REGULATOR - dcdc; |
193 | data = tps_65023_reg_read(tps, TPS65023_REG_REG_CTRL); | 166 | ret = regmap_read(tps->regmap, TPS65023_REG_REG_CTRL, &data); |
194 | 167 | ||
195 | if (data < 0) | 168 | if (ret != 0) |
196 | return data; | 169 | return ret; |
197 | else | 170 | else |
198 | return (data & 1<<shift) ? 1 : 0; | 171 | return (data & 1<<shift) ? 1 : 0; |
199 | } | 172 | } |
@@ -202,16 +175,17 @@ static int tps65023_ldo_is_enabled(struct regulator_dev *dev) | |||
202 | { | 175 | { |
203 | struct tps_pmic *tps = rdev_get_drvdata(dev); | 176 | struct tps_pmic *tps = rdev_get_drvdata(dev); |
204 | int data, ldo = rdev_get_id(dev); | 177 | int data, ldo = rdev_get_id(dev); |
178 | int ret; | ||
205 | u8 shift; | 179 | u8 shift; |
206 | 180 | ||
207 | if (ldo < TPS65023_LDO_1 || ldo > TPS65023_LDO_2) | 181 | if (ldo < TPS65023_LDO_1 || ldo > TPS65023_LDO_2) |
208 | return -EINVAL; | 182 | return -EINVAL; |
209 | 183 | ||
210 | shift = (ldo == TPS65023_LDO_1 ? 1 : 2); | 184 | shift = (ldo == TPS65023_LDO_1 ? 1 : 2); |
211 | data = tps_65023_reg_read(tps, TPS65023_REG_REG_CTRL); | 185 | ret = regmap_read(tps->regmap, TPS65023_REG_REG_CTRL, &data); |
212 | 186 | ||
213 | if (data < 0) | 187 | if (ret != 0) |
214 | return data; | 188 | return ret; |
215 | else | 189 | else |
216 | return (data & 1<<shift) ? 1 : 0; | 190 | return (data & 1<<shift) ? 1 : 0; |
217 | } | 191 | } |
@@ -226,7 +200,7 @@ static int tps65023_dcdc_enable(struct regulator_dev *dev) | |||
226 | return -EINVAL; | 200 | return -EINVAL; |
227 | 201 | ||
228 | shift = TPS65023_NUM_REGULATOR - dcdc; | 202 | shift = TPS65023_NUM_REGULATOR - dcdc; |
229 | return tps_65023_set_bits(tps, TPS65023_REG_REG_CTRL, 1 << shift); | 203 | return regmap_update_bits(tps->regmap, TPS65023_REG_REG_CTRL, 1 << shift, 1 << shift); |
230 | } | 204 | } |
231 | 205 | ||
232 | static int tps65023_dcdc_disable(struct regulator_dev *dev) | 206 | static int tps65023_dcdc_disable(struct regulator_dev *dev) |
@@ -239,7 +213,7 @@ static int tps65023_dcdc_disable(struct regulator_dev *dev) | |||
239 | return -EINVAL; | 213 | return -EINVAL; |
240 | 214 | ||
241 | shift = TPS65023_NUM_REGULATOR - dcdc; | 215 | shift = TPS65023_NUM_REGULATOR - dcdc; |
242 | return tps_65023_clear_bits(tps, TPS65023_REG_REG_CTRL, 1 << shift); | 216 | return regmap_update_bits(tps->regmap, TPS65023_REG_REG_CTRL, 1 << shift, 0); |
243 | } | 217 | } |
244 | 218 | ||
245 | static int tps65023_ldo_enable(struct regulator_dev *dev) | 219 | static int tps65023_ldo_enable(struct regulator_dev *dev) |
@@ -252,7 +226,7 @@ static int tps65023_ldo_enable(struct regulator_dev *dev) | |||
252 | return -EINVAL; | 226 | return -EINVAL; |
253 | 227 | ||
254 | shift = (ldo == TPS65023_LDO_1 ? 1 : 2); | 228 | shift = (ldo == TPS65023_LDO_1 ? 1 : 2); |
255 | return tps_65023_set_bits(tps, TPS65023_REG_REG_CTRL, 1 << shift); | 229 | return regmap_update_bits(tps->regmap, TPS65023_REG_REG_CTRL, 1 << shift, 1 << shift); |
256 | } | 230 | } |
257 | 231 | ||
258 | static int tps65023_ldo_disable(struct regulator_dev *dev) | 232 | static int tps65023_ldo_disable(struct regulator_dev *dev) |
@@ -265,21 +239,22 @@ static int tps65023_ldo_disable(struct regulator_dev *dev) | |||
265 | return -EINVAL; | 239 | return -EINVAL; |
266 | 240 | ||
267 | shift = (ldo == TPS65023_LDO_1 ? 1 : 2); | 241 | shift = (ldo == TPS65023_LDO_1 ? 1 : 2); |
268 | return tps_65023_clear_bits(tps, TPS65023_REG_REG_CTRL, 1 << shift); | 242 | return regmap_update_bits(tps->regmap, TPS65023_REG_REG_CTRL, 1 << shift, 0); |
269 | } | 243 | } |
270 | 244 | ||
271 | static int tps65023_dcdc_get_voltage(struct regulator_dev *dev) | 245 | static int tps65023_dcdc_get_voltage(struct regulator_dev *dev) |
272 | { | 246 | { |
273 | struct tps_pmic *tps = rdev_get_drvdata(dev); | 247 | struct tps_pmic *tps = rdev_get_drvdata(dev); |
248 | int ret; | ||
274 | int data, dcdc = rdev_get_id(dev); | 249 | int data, dcdc = rdev_get_id(dev); |
275 | 250 | ||
276 | if (dcdc < TPS65023_DCDC_1 || dcdc > TPS65023_DCDC_3) | 251 | if (dcdc < TPS65023_DCDC_1 || dcdc > TPS65023_DCDC_3) |
277 | return -EINVAL; | 252 | return -EINVAL; |
278 | 253 | ||
279 | if (dcdc == tps->core_regulator) { | 254 | if (dcdc == tps->core_regulator) { |
280 | data = tps_65023_reg_read(tps, TPS65023_REG_DEF_CORE); | 255 | ret = regmap_read(tps->regmap, TPS65023_REG_DEF_CORE, &data); |
281 | if (data < 0) | 256 | if (ret != 0) |
282 | return data; | 257 | return ret; |
283 | data &= (tps->info[dcdc]->table_len - 1); | 258 | data &= (tps->info[dcdc]->table_len - 1); |
284 | return tps->info[dcdc]->table[data] * 1000; | 259 | return tps->info[dcdc]->table[data] * 1000; |
285 | } else | 260 | } else |
@@ -318,13 +293,13 @@ static int tps65023_dcdc_set_voltage(struct regulator_dev *dev, | |||
318 | if (vsel == tps->info[dcdc]->table_len) | 293 | if (vsel == tps->info[dcdc]->table_len) |
319 | goto failed; | 294 | goto failed; |
320 | 295 | ||
321 | ret = tps_65023_reg_write(tps, TPS65023_REG_DEF_CORE, vsel); | 296 | ret = regmap_write(tps->regmap, TPS65023_REG_DEF_CORE, vsel); |
322 | 297 | ||
323 | /* Tell the chip that we have changed the value in DEFCORE | 298 | /* Tell the chip that we have changed the value in DEFCORE |
324 | * and its time to update the core voltage | 299 | * and its time to update the core voltage |
325 | */ | 300 | */ |
326 | tps_65023_set_bits(tps, TPS65023_REG_CON_CTRL2, | 301 | regmap_update_bits(tps->regmap, TPS65023_REG_CON_CTRL2, |
327 | TPS65023_REG_CTRL2_GO); | 302 | TPS65023_REG_CTRL2_GO, TPS65023_REG_CTRL2_GO); |
328 | 303 | ||
329 | return ret; | 304 | return ret; |
330 | 305 | ||
@@ -336,13 +311,14 @@ static int tps65023_ldo_get_voltage(struct regulator_dev *dev) | |||
336 | { | 311 | { |
337 | struct tps_pmic *tps = rdev_get_drvdata(dev); | 312 | struct tps_pmic *tps = rdev_get_drvdata(dev); |
338 | int data, ldo = rdev_get_id(dev); | 313 | int data, ldo = rdev_get_id(dev); |
314 | int ret; | ||
339 | 315 | ||
340 | if (ldo < TPS65023_LDO_1 || ldo > TPS65023_LDO_2) | 316 | if (ldo < TPS65023_LDO_1 || ldo > TPS65023_LDO_2) |
341 | return -EINVAL; | 317 | return -EINVAL; |
342 | 318 | ||
343 | data = tps_65023_reg_read(tps, TPS65023_REG_LDO_CTRL); | 319 | ret = regmap_read(tps->regmap, TPS65023_REG_LDO_CTRL, &data); |
344 | if (data < 0) | 320 | if (ret != 0) |
345 | return data; | 321 | return ret; |
346 | 322 | ||
347 | data >>= (TPS65023_LDO_CTRL_LDOx_SHIFT(ldo - TPS65023_LDO_1)); | 323 | data >>= (TPS65023_LDO_CTRL_LDOx_SHIFT(ldo - TPS65023_LDO_1)); |
348 | data &= (tps->info[ldo]->table_len - 1); | 324 | data &= (tps->info[ldo]->table_len - 1); |
@@ -354,6 +330,7 @@ static int tps65023_ldo_set_voltage(struct regulator_dev *dev, | |||
354 | { | 330 | { |
355 | struct tps_pmic *tps = rdev_get_drvdata(dev); | 331 | struct tps_pmic *tps = rdev_get_drvdata(dev); |
356 | int data, vsel, ldo = rdev_get_id(dev); | 332 | int data, vsel, ldo = rdev_get_id(dev); |
333 | int ret; | ||
357 | 334 | ||
358 | if (ldo < TPS65023_LDO_1 || ldo > TPS65023_LDO_2) | 335 | if (ldo < TPS65023_LDO_1 || ldo > TPS65023_LDO_2) |
359 | return -EINVAL; | 336 | return -EINVAL; |
@@ -377,13 +354,13 @@ static int tps65023_ldo_set_voltage(struct regulator_dev *dev, | |||
377 | 354 | ||
378 | *selector = vsel; | 355 | *selector = vsel; |
379 | 356 | ||
380 | data = tps_65023_reg_read(tps, TPS65023_REG_LDO_CTRL); | 357 | ret = regmap_read(tps->regmap, TPS65023_REG_LDO_CTRL, &data); |
381 | if (data < 0) | 358 | if (ret != 0) |
382 | return data; | 359 | return ret; |
383 | 360 | ||
384 | data &= TPS65023_LDO_CTRL_LDOx_MASK(ldo - TPS65023_LDO_1); | 361 | data &= TPS65023_LDO_CTRL_LDOx_MASK(ldo - TPS65023_LDO_1); |
385 | data |= (vsel << (TPS65023_LDO_CTRL_LDOx_SHIFT(ldo - TPS65023_LDO_1))); | 362 | data |= (vsel << (TPS65023_LDO_CTRL_LDOx_SHIFT(ldo - TPS65023_LDO_1))); |
386 | return tps_65023_reg_write(tps, TPS65023_REG_LDO_CTRL, data); | 363 | return regmap_write(tps->regmap, TPS65023_REG_LDO_CTRL, data); |
387 | } | 364 | } |
388 | 365 | ||
389 | static int tps65023_dcdc_list_voltage(struct regulator_dev *dev, | 366 | static int tps65023_dcdc_list_voltage(struct regulator_dev *dev, |
@@ -511,12 +488,12 @@ static int __devinit tps_65023_probe(struct i2c_client *client, | |||
511 | i2c_set_clientdata(client, tps); | 488 | i2c_set_clientdata(client, tps); |
512 | 489 | ||
513 | /* Enable setting output voltage by I2C */ | 490 | /* Enable setting output voltage by I2C */ |
514 | tps_65023_clear_bits(tps, TPS65023_REG_CON_CTRL2, | 491 | regmap_update_bits(tps->regmap, TPS65023_REG_CON_CTRL2, |
515 | TPS65023_REG_CTRL2_CORE_ADJ); | 492 | TPS65023_REG_CTRL2_CORE_ADJ, TPS65023_REG_CTRL2_CORE_ADJ); |
516 | 493 | ||
517 | /* Enable setting output voltage by I2C */ | 494 | /* Enable setting output voltage by I2C */ |
518 | tps_65023_clear_bits(tps, TPS65023_REG_CON_CTRL2, | 495 | regmap_update_bits(tps->regmap, TPS65023_REG_CON_CTRL2, |
519 | TPS65023_REG_CTRL2_CORE_ADJ); | 496 | TPS65023_REG_CTRL2_CORE_ADJ, TPS65023_REG_CTRL2_CORE_ADJ); |
520 | 497 | ||
521 | return 0; | 498 | return 0; |
522 | 499 | ||
diff --git a/drivers/regulator/tps65910-regulator.c b/drivers/regulator/tps65910-regulator.c index eaea9b4a09d0..5c15ba01e9c7 100644 --- a/drivers/regulator/tps65910-regulator.c +++ b/drivers/regulator/tps65910-regulator.c | |||
@@ -25,30 +25,6 @@ | |||
25 | #include <linux/gpio.h> | 25 | #include <linux/gpio.h> |
26 | #include <linux/mfd/tps65910.h> | 26 | #include <linux/mfd/tps65910.h> |
27 | 27 | ||
28 | #define TPS65910_REG_VRTC 0 | ||
29 | #define TPS65910_REG_VIO 1 | ||
30 | #define TPS65910_REG_VDD1 2 | ||
31 | #define TPS65910_REG_VDD2 3 | ||
32 | #define TPS65910_REG_VDD3 4 | ||
33 | #define TPS65910_REG_VDIG1 5 | ||
34 | #define TPS65910_REG_VDIG2 6 | ||
35 | #define TPS65910_REG_VPLL 7 | ||
36 | #define TPS65910_REG_VDAC 8 | ||
37 | #define TPS65910_REG_VAUX1 9 | ||
38 | #define TPS65910_REG_VAUX2 10 | ||
39 | #define TPS65910_REG_VAUX33 11 | ||
40 | #define TPS65910_REG_VMMC 12 | ||
41 | |||
42 | #define TPS65911_REG_VDDCTRL 4 | ||
43 | #define TPS65911_REG_LDO1 5 | ||
44 | #define TPS65911_REG_LDO2 6 | ||
45 | #define TPS65911_REG_LDO3 7 | ||
46 | #define TPS65911_REG_LDO4 8 | ||
47 | #define TPS65911_REG_LDO5 9 | ||
48 | #define TPS65911_REG_LDO6 10 | ||
49 | #define TPS65911_REG_LDO7 11 | ||
50 | #define TPS65911_REG_LDO8 12 | ||
51 | |||
52 | #define TPS65910_SUPPLY_STATE_ENABLED 0x1 | 28 | #define TPS65910_SUPPLY_STATE_ENABLED 0x1 |
53 | 29 | ||
54 | /* supported VIO voltages in milivolts */ | 30 | /* supported VIO voltages in milivolts */ |
@@ -664,10 +640,10 @@ static int tps65910_set_voltage_dcdc(struct regulator_dev *dev, | |||
664 | 640 | ||
665 | switch (id) { | 641 | switch (id) { |
666 | case TPS65910_REG_VDD1: | 642 | case TPS65910_REG_VDD1: |
667 | dcdc_mult = (selector / VDD1_2_NUM_VOLTS) + 1; | 643 | dcdc_mult = (selector / VDD1_2_NUM_VOLT_FINE) + 1; |
668 | if (dcdc_mult == 1) | 644 | if (dcdc_mult == 1) |
669 | dcdc_mult--; | 645 | dcdc_mult--; |
670 | vsel = (selector % VDD1_2_NUM_VOLTS) + 3; | 646 | vsel = (selector % VDD1_2_NUM_VOLT_FINE) + 3; |
671 | 647 | ||
672 | tps65910_modify_bits(pmic, TPS65910_VDD1, | 648 | tps65910_modify_bits(pmic, TPS65910_VDD1, |
673 | (dcdc_mult << VDD1_VGAIN_SEL_SHIFT), | 649 | (dcdc_mult << VDD1_VGAIN_SEL_SHIFT), |
@@ -675,10 +651,10 @@ static int tps65910_set_voltage_dcdc(struct regulator_dev *dev, | |||
675 | tps65910_reg_write(pmic, TPS65910_VDD1_OP, vsel); | 651 | tps65910_reg_write(pmic, TPS65910_VDD1_OP, vsel); |
676 | break; | 652 | break; |
677 | case TPS65910_REG_VDD2: | 653 | case TPS65910_REG_VDD2: |
678 | dcdc_mult = (selector / VDD1_2_NUM_VOLTS) + 1; | 654 | dcdc_mult = (selector / VDD1_2_NUM_VOLT_FINE) + 1; |
679 | if (dcdc_mult == 1) | 655 | if (dcdc_mult == 1) |
680 | dcdc_mult--; | 656 | dcdc_mult--; |
681 | vsel = (selector % VDD1_2_NUM_VOLTS) + 3; | 657 | vsel = (selector % VDD1_2_NUM_VOLT_FINE) + 3; |
682 | 658 | ||
683 | tps65910_modify_bits(pmic, TPS65910_VDD2, | 659 | tps65910_modify_bits(pmic, TPS65910_VDD2, |
684 | (dcdc_mult << VDD2_VGAIN_SEL_SHIFT), | 660 | (dcdc_mult << VDD2_VGAIN_SEL_SHIFT), |
@@ -756,9 +732,9 @@ static int tps65910_list_voltage_dcdc(struct regulator_dev *dev, | |||
756 | switch (id) { | 732 | switch (id) { |
757 | case TPS65910_REG_VDD1: | 733 | case TPS65910_REG_VDD1: |
758 | case TPS65910_REG_VDD2: | 734 | case TPS65910_REG_VDD2: |
759 | mult = (selector / VDD1_2_NUM_VOLTS) + 1; | 735 | mult = (selector / VDD1_2_NUM_VOLT_FINE) + 1; |
760 | volt = VDD1_2_MIN_VOLT + | 736 | volt = VDD1_2_MIN_VOLT + |
761 | (selector % VDD1_2_NUM_VOLTS) * VDD1_2_OFFSET; | 737 | (selector % VDD1_2_NUM_VOLT_FINE) * VDD1_2_OFFSET; |
762 | break; | 738 | break; |
763 | case TPS65911_REG_VDDCTRL: | 739 | case TPS65911_REG_VDDCTRL: |
764 | volt = VDDCTRL_MIN_VOLT + (selector * VDDCTRL_OFFSET); | 740 | volt = VDDCTRL_MIN_VOLT + (selector * VDDCTRL_OFFSET); |
@@ -885,8 +861,6 @@ static __devinit int tps65910_probe(struct platform_device *pdev) | |||
885 | if (!pmic_plat_data) | 861 | if (!pmic_plat_data) |
886 | return -EINVAL; | 862 | return -EINVAL; |
887 | 863 | ||
888 | reg_data = pmic_plat_data->tps65910_pmic_init_data; | ||
889 | |||
890 | pmic = kzalloc(sizeof(*pmic), GFP_KERNEL); | 864 | pmic = kzalloc(sizeof(*pmic), GFP_KERNEL); |
891 | if (!pmic) | 865 | if (!pmic) |
892 | return -ENOMEM; | 866 | return -ENOMEM; |
@@ -937,7 +911,16 @@ static __devinit int tps65910_probe(struct platform_device *pdev) | |||
937 | goto err_free_info; | 911 | goto err_free_info; |
938 | } | 912 | } |
939 | 913 | ||
940 | for (i = 0; i < pmic->num_regulators; i++, info++, reg_data++) { | 914 | for (i = 0; i < pmic->num_regulators && i < TPS65910_NUM_REGS; |
915 | i++, info++) { | ||
916 | |||
917 | reg_data = pmic_plat_data->tps65910_pmic_init_data[i]; | ||
918 | |||
919 | /* Regulator API handles empty constraints but not NULL | ||
920 | * constraints */ | ||
921 | if (!reg_data) | ||
922 | continue; | ||
923 | |||
941 | /* Register the regulators */ | 924 | /* Register the regulators */ |
942 | pmic->info[i] = info; | 925 | pmic->info[i] = info; |
943 | 926 | ||
@@ -947,6 +930,8 @@ static __devinit int tps65910_probe(struct platform_device *pdev) | |||
947 | 930 | ||
948 | if (i == TPS65910_REG_VDD1 || i == TPS65910_REG_VDD2) { | 931 | if (i == TPS65910_REG_VDD1 || i == TPS65910_REG_VDD2) { |
949 | pmic->desc[i].ops = &tps65910_ops_dcdc; | 932 | pmic->desc[i].ops = &tps65910_ops_dcdc; |
933 | pmic->desc[i].n_voltages = VDD1_2_NUM_VOLT_FINE * | ||
934 | VDD1_2_NUM_VOLT_COARSE; | ||
950 | } else if (i == TPS65910_REG_VDD3) { | 935 | } else if (i == TPS65910_REG_VDD3) { |
951 | if (tps65910_chip_id(tps65910) == TPS65910) | 936 | if (tps65910_chip_id(tps65910) == TPS65910) |
952 | pmic->desc[i].ops = &tps65910_ops_vdd3; | 937 | pmic->desc[i].ops = &tps65910_ops_vdd3; |
diff --git a/include/linux/mfd/tps65910.h b/include/linux/mfd/tps65910.h index 82b4c8801a4f..d0cb12eba402 100644 --- a/include/linux/mfd/tps65910.h +++ b/include/linux/mfd/tps65910.h | |||
@@ -243,7 +243,8 @@ | |||
243 | 243 | ||
244 | 244 | ||
245 | /*Registers VDD1, VDD2 voltage values definitions */ | 245 | /*Registers VDD1, VDD2 voltage values definitions */ |
246 | #define VDD1_2_NUM_VOLTS 73 | 246 | #define VDD1_2_NUM_VOLT_FINE 73 |
247 | #define VDD1_2_NUM_VOLT_COARSE 3 | ||
247 | #define VDD1_2_MIN_VOLT 6000 | 248 | #define VDD1_2_MIN_VOLT 6000 |
248 | #define VDD1_2_OFFSET 125 | 249 | #define VDD1_2_OFFSET 125 |
249 | 250 | ||
@@ -739,6 +740,34 @@ | |||
739 | #define TPS65910_GPIO_STS BIT(1) | 740 | #define TPS65910_GPIO_STS BIT(1) |
740 | #define TPS65910_GPIO_SET BIT(0) | 741 | #define TPS65910_GPIO_SET BIT(0) |
741 | 742 | ||
743 | /* Regulator Index Definitions */ | ||
744 | #define TPS65910_REG_VRTC 0 | ||
745 | #define TPS65910_REG_VIO 1 | ||
746 | #define TPS65910_REG_VDD1 2 | ||
747 | #define TPS65910_REG_VDD2 3 | ||
748 | #define TPS65910_REG_VDD3 4 | ||
749 | #define TPS65910_REG_VDIG1 5 | ||
750 | #define TPS65910_REG_VDIG2 6 | ||
751 | #define TPS65910_REG_VPLL 7 | ||
752 | #define TPS65910_REG_VDAC 8 | ||
753 | #define TPS65910_REG_VAUX1 9 | ||
754 | #define TPS65910_REG_VAUX2 10 | ||
755 | #define TPS65910_REG_VAUX33 11 | ||
756 | #define TPS65910_REG_VMMC 12 | ||
757 | |||
758 | #define TPS65911_REG_VDDCTRL 4 | ||
759 | #define TPS65911_REG_LDO1 5 | ||
760 | #define TPS65911_REG_LDO2 6 | ||
761 | #define TPS65911_REG_LDO3 7 | ||
762 | #define TPS65911_REG_LDO4 8 | ||
763 | #define TPS65911_REG_LDO5 9 | ||
764 | #define TPS65911_REG_LDO6 10 | ||
765 | #define TPS65911_REG_LDO7 11 | ||
766 | #define TPS65911_REG_LDO8 12 | ||
767 | |||
768 | /* Max number of TPS65910/11 regulators */ | ||
769 | #define TPS65910_NUM_REGS 13 | ||
770 | |||
742 | /** | 771 | /** |
743 | * struct tps65910_board | 772 | * struct tps65910_board |
744 | * Board platform data may be used to initialize regulators. | 773 | * Board platform data may be used to initialize regulators. |
@@ -750,7 +779,7 @@ struct tps65910_board { | |||
750 | int irq_base; | 779 | int irq_base; |
751 | int vmbch_threshold; | 780 | int vmbch_threshold; |
752 | int vmbch2_threshold; | 781 | int vmbch2_threshold; |
753 | struct regulator_init_data *tps65910_pmic_init_data; | 782 | struct regulator_init_data *tps65910_pmic_init_data[TPS65910_NUM_REGS]; |
754 | }; | 783 | }; |
755 | 784 | ||
756 | /** | 785 | /** |