1 /*
2  * wm831x-ldo.c  --  LDO driver for the WM831x series
3  *
4  * Copyright 2009 Wolfson Microelectronics PLC.
5  *
6  * Author: Mark Brown <broonie@opensource.wolfsonmicro.com>
7  *
8  *  This program is free software; you can redistribute  it and/or modify it
9  *  under  the terms of  the GNU General  Public License as published by the
10  *  Free Software Foundation;  either version 2 of the  License, or (at your
11  *  option) any later version.
12  */
13 
14 #include <linux/module.h>
15 #include <linux/moduleparam.h>
16 #include <linux/init.h>
17 #include <linux/bitops.h>
18 #include <linux/err.h>
19 #include <linux/i2c.h>
20 #include <linux/platform_device.h>
21 #include <linux/regulator/driver.h>
22 #include <linux/slab.h>
23 
24 #include <linux/mfd/wm831x/core.h>
25 #include <linux/mfd/wm831x/regulator.h>
26 #include <linux/mfd/wm831x/pdata.h>
27 
28 #define WM831X_LDO_MAX_NAME 9
29 
30 #define WM831X_LDO_CONTROL       0
31 #define WM831X_LDO_ON_CONTROL    1
32 #define WM831X_LDO_SLEEP_CONTROL 2
33 
34 #define WM831X_ALIVE_LDO_ON_CONTROL    0
35 #define WM831X_ALIVE_LDO_SLEEP_CONTROL 1
36 
37 struct wm831x_ldo {
38 	char name[WM831X_LDO_MAX_NAME];
39 	char supply_name[WM831X_LDO_MAX_NAME];
40 	struct regulator_desc desc;
41 	int base;
42 	struct wm831x *wm831x;
43 	struct regulator_dev *regulator;
44 };
45 
46 /*
47  * Shared
48  */
49 
50 static irqreturn_t wm831x_ldo_uv_irq(int irq, void *data)
51 {
52 	struct wm831x_ldo *ldo = data;
53 
54 	regulator_notifier_call_chain(ldo->regulator,
55 				      REGULATOR_EVENT_UNDER_VOLTAGE,
56 				      NULL);
57 
58 	return IRQ_HANDLED;
59 }
60 
61 /*
62  * General purpose LDOs
63  */
64 
65 static const struct regulator_linear_range wm831x_gp_ldo_ranges[] = {
66 	{ .min_uV =  900000, .max_uV = 1650000, .min_sel =  0, .max_sel = 14,
67 	  .uV_step =  50000 },
68 	{ .min_uV = 1700000, .max_uV = 3300000, .min_sel = 15, .max_sel = 31,
69 	  .uV_step = 100000 },
70 };
71 
72 static int wm831x_gp_ldo_set_suspend_voltage(struct regulator_dev *rdev,
73 					     int uV)
74 {
75 	struct wm831x_ldo *ldo = rdev_get_drvdata(rdev);
76 	struct wm831x *wm831x = ldo->wm831x;
77 	int sel, reg = ldo->base + WM831X_LDO_SLEEP_CONTROL;
78 
79 	sel = regulator_map_voltage_linear_range(rdev, uV, uV);
80 	if (sel < 0)
81 		return sel;
82 
83 	return wm831x_set_bits(wm831x, reg, WM831X_LDO1_ON_VSEL_MASK, sel);
84 }
85 
86 static unsigned int wm831x_gp_ldo_get_mode(struct regulator_dev *rdev)
87 {
88 	struct wm831x_ldo *ldo = rdev_get_drvdata(rdev);
89 	struct wm831x *wm831x = ldo->wm831x;
90 	int ctrl_reg = ldo->base + WM831X_LDO_CONTROL;
91 	int on_reg = ldo->base + WM831X_LDO_ON_CONTROL;
92 	int ret;
93 
94 	ret = wm831x_reg_read(wm831x, on_reg);
95 	if (ret < 0)
96 		return ret;
97 
98 	if (!(ret & WM831X_LDO1_ON_MODE))
99 		return REGULATOR_MODE_NORMAL;
100 
101 	ret = wm831x_reg_read(wm831x, ctrl_reg);
102 	if (ret < 0)
103 		return ret;
104 
105 	if (ret & WM831X_LDO1_LP_MODE)
106 		return REGULATOR_MODE_STANDBY;
107 	else
108 		return REGULATOR_MODE_IDLE;
109 }
110 
111 static int wm831x_gp_ldo_set_mode(struct regulator_dev *rdev,
112 				  unsigned int mode)
113 {
114 	struct wm831x_ldo *ldo = rdev_get_drvdata(rdev);
115 	struct wm831x *wm831x = ldo->wm831x;
116 	int ctrl_reg = ldo->base + WM831X_LDO_CONTROL;
117 	int on_reg = ldo->base + WM831X_LDO_ON_CONTROL;
118 	int ret;
119 
120 
121 	switch (mode) {
122 	case REGULATOR_MODE_NORMAL:
123 		ret = wm831x_set_bits(wm831x, on_reg,
124 				      WM831X_LDO1_ON_MODE, 0);
125 		if (ret < 0)
126 			return ret;
127 		break;
128 
129 	case REGULATOR_MODE_IDLE:
130 		ret = wm831x_set_bits(wm831x, ctrl_reg,
131 				      WM831X_LDO1_LP_MODE, 0);
132 		if (ret < 0)
133 			return ret;
134 
135 		ret = wm831x_set_bits(wm831x, on_reg,
136 				      WM831X_LDO1_ON_MODE,
137 				      WM831X_LDO1_ON_MODE);
138 		if (ret < 0)
139 			return ret;
140 		break;
141 
142 	case REGULATOR_MODE_STANDBY:
143 		ret = wm831x_set_bits(wm831x, ctrl_reg,
144 				      WM831X_LDO1_LP_MODE,
145 				      WM831X_LDO1_LP_MODE);
146 		if (ret < 0)
147 			return ret;
148 
149 		ret = wm831x_set_bits(wm831x, on_reg,
150 				      WM831X_LDO1_ON_MODE,
151 				      WM831X_LDO1_ON_MODE);
152 		if (ret < 0)
153 			return ret;
154 		break;
155 
156 	default:
157 		return -EINVAL;
158 	}
159 
160 	return 0;
161 }
162 
163 static int wm831x_gp_ldo_get_status(struct regulator_dev *rdev)
164 {
165 	struct wm831x_ldo *ldo = rdev_get_drvdata(rdev);
166 	struct wm831x *wm831x = ldo->wm831x;
167 	int mask = 1 << rdev_get_id(rdev);
168 	int ret;
169 
170 	/* Is the regulator on? */
171 	ret = wm831x_reg_read(wm831x, WM831X_LDO_STATUS);
172 	if (ret < 0)
173 		return ret;
174 	if (!(ret & mask))
175 		return REGULATOR_STATUS_OFF;
176 
177 	/* Is it reporting under voltage? */
178 	ret = wm831x_reg_read(wm831x, WM831X_LDO_UV_STATUS);
179 	if (ret < 0)
180 		return ret;
181 	if (ret & mask)
182 		return REGULATOR_STATUS_ERROR;
183 
184 	ret = wm831x_gp_ldo_get_mode(rdev);
185 	if (ret < 0)
186 		return ret;
187 	else
188 		return regulator_mode_to_status(ret);
189 }
190 
191 static unsigned int wm831x_gp_ldo_get_optimum_mode(struct regulator_dev *rdev,
192 						   int input_uV,
193 						   int output_uV, int load_uA)
194 {
195 	if (load_uA < 20000)
196 		return REGULATOR_MODE_STANDBY;
197 	if (load_uA < 50000)
198 		return REGULATOR_MODE_IDLE;
199 	return REGULATOR_MODE_NORMAL;
200 }
201 
202 
203 static struct regulator_ops wm831x_gp_ldo_ops = {
204 	.list_voltage = regulator_list_voltage_linear_range,
205 	.map_voltage = regulator_map_voltage_linear_range,
206 	.get_voltage_sel = regulator_get_voltage_sel_regmap,
207 	.set_voltage_sel = regulator_set_voltage_sel_regmap,
208 	.set_suspend_voltage = wm831x_gp_ldo_set_suspend_voltage,
209 	.get_mode = wm831x_gp_ldo_get_mode,
210 	.set_mode = wm831x_gp_ldo_set_mode,
211 	.get_status = wm831x_gp_ldo_get_status,
212 	.get_optimum_mode = wm831x_gp_ldo_get_optimum_mode,
213 	.get_bypass = regulator_get_bypass_regmap,
214 	.set_bypass = regulator_set_bypass_regmap,
215 
216 	.is_enabled = regulator_is_enabled_regmap,
217 	.enable = regulator_enable_regmap,
218 	.disable = regulator_disable_regmap,
219 };
220 
221 static int wm831x_gp_ldo_probe(struct platform_device *pdev)
222 {
223 	struct wm831x *wm831x = dev_get_drvdata(pdev->dev.parent);
224 	struct wm831x_pdata *pdata = dev_get_platdata(wm831x->dev);
225 	struct regulator_config config = { };
226 	int id;
227 	struct wm831x_ldo *ldo;
228 	struct resource *res;
229 	int ret, irq;
230 
231 	if (pdata && pdata->wm831x_num)
232 		id = (pdata->wm831x_num * 10) + 1;
233 	else
234 		id = 0;
235 	id = pdev->id - id;
236 
237 	dev_dbg(&pdev->dev, "Probing LDO%d\n", id + 1);
238 
239 	ldo = devm_kzalloc(&pdev->dev, sizeof(struct wm831x_ldo), GFP_KERNEL);
240 	if (ldo == NULL) {
241 		dev_err(&pdev->dev, "Unable to allocate private data\n");
242 		return -ENOMEM;
243 	}
244 
245 	ldo->wm831x = wm831x;
246 
247 	res = platform_get_resource(pdev, IORESOURCE_REG, 0);
248 	if (res == NULL) {
249 		dev_err(&pdev->dev, "No REG resource\n");
250 		ret = -EINVAL;
251 		goto err;
252 	}
253 	ldo->base = res->start;
254 
255 	snprintf(ldo->name, sizeof(ldo->name), "LDO%d", id + 1);
256 	ldo->desc.name = ldo->name;
257 
258 	snprintf(ldo->supply_name, sizeof(ldo->supply_name),
259 		 "LDO%dVDD", id + 1);
260 	ldo->desc.supply_name = ldo->supply_name;
261 
262 	ldo->desc.id = id;
263 	ldo->desc.type = REGULATOR_VOLTAGE;
264 	ldo->desc.n_voltages = 32;
265 	ldo->desc.ops = &wm831x_gp_ldo_ops;
266 	ldo->desc.owner = THIS_MODULE;
267 	ldo->desc.vsel_reg = ldo->base + WM831X_LDO_ON_CONTROL;
268 	ldo->desc.vsel_mask = WM831X_LDO1_ON_VSEL_MASK;
269 	ldo->desc.enable_reg = WM831X_LDO_ENABLE;
270 	ldo->desc.enable_mask = 1 << id;
271 	ldo->desc.bypass_reg = ldo->base;
272 	ldo->desc.bypass_mask = WM831X_LDO1_SWI;
273 	ldo->desc.linear_ranges = wm831x_gp_ldo_ranges;
274 	ldo->desc.n_linear_ranges = ARRAY_SIZE(wm831x_gp_ldo_ranges);
275 
276 	config.dev = pdev->dev.parent;
277 	if (pdata)
278 		config.init_data = pdata->ldo[id];
279 	config.driver_data = ldo;
280 	config.regmap = wm831x->regmap;
281 
282 	ldo->regulator = regulator_register(&ldo->desc, &config);
283 	if (IS_ERR(ldo->regulator)) {
284 		ret = PTR_ERR(ldo->regulator);
285 		dev_err(wm831x->dev, "Failed to register LDO%d: %d\n",
286 			id + 1, ret);
287 		goto err;
288 	}
289 
290 	irq = wm831x_irq(wm831x, platform_get_irq_byname(pdev, "UV"));
291 	ret = request_threaded_irq(irq, NULL, wm831x_ldo_uv_irq,
292 				   IRQF_TRIGGER_RISING, ldo->name,
293 				   ldo);
294 	if (ret != 0) {
295 		dev_err(&pdev->dev, "Failed to request UV IRQ %d: %d\n",
296 			irq, ret);
297 		goto err_regulator;
298 	}
299 
300 	platform_set_drvdata(pdev, ldo);
301 
302 	return 0;
303 
304 err_regulator:
305 	regulator_unregister(ldo->regulator);
306 err:
307 	return ret;
308 }
309 
310 static int wm831x_gp_ldo_remove(struct platform_device *pdev)
311 {
312 	struct wm831x_ldo *ldo = platform_get_drvdata(pdev);
313 
314 	free_irq(wm831x_irq(ldo->wm831x,
315 			    platform_get_irq_byname(pdev, "UV")), ldo);
316 	regulator_unregister(ldo->regulator);
317 
318 	return 0;
319 }
320 
321 static struct platform_driver wm831x_gp_ldo_driver = {
322 	.probe = wm831x_gp_ldo_probe,
323 	.remove = wm831x_gp_ldo_remove,
324 	.driver		= {
325 		.name	= "wm831x-ldo",
326 		.owner	= THIS_MODULE,
327 	},
328 };
329 
330 /*
331  * Analogue LDOs
332  */
333 
334 static const struct regulator_linear_range wm831x_aldo_ranges[] = {
335 	{ .min_uV = 1000000, .max_uV = 1650000, .min_sel =  0, .max_sel = 12,
336 	  .uV_step =  50000 },
337 	{ .min_uV = 1700000, .max_uV = 3500000, .min_sel = 13, .max_sel = 31,
338 	  .uV_step = 100000 },
339 };
340 
341 static int wm831x_aldo_set_suspend_voltage(struct regulator_dev *rdev,
342 					     int uV)
343 {
344 	struct wm831x_ldo *ldo = rdev_get_drvdata(rdev);
345 	struct wm831x *wm831x = ldo->wm831x;
346 	int sel, reg = ldo->base + WM831X_LDO_SLEEP_CONTROL;
347 
348 	sel = regulator_map_voltage_linear_range(rdev, uV, uV);
349 	if (sel < 0)
350 		return sel;
351 
352 	return wm831x_set_bits(wm831x, reg, WM831X_LDO7_ON_VSEL_MASK, sel);
353 }
354 
355 static unsigned int wm831x_aldo_get_mode(struct regulator_dev *rdev)
356 {
357 	struct wm831x_ldo *ldo = rdev_get_drvdata(rdev);
358 	struct wm831x *wm831x = ldo->wm831x;
359 	int on_reg = ldo->base + WM831X_LDO_ON_CONTROL;
360 	int ret;
361 
362 	ret = wm831x_reg_read(wm831x, on_reg);
363 	if (ret < 0)
364 		return 0;
365 
366 	if (ret & WM831X_LDO7_ON_MODE)
367 		return REGULATOR_MODE_IDLE;
368 	else
369 		return REGULATOR_MODE_NORMAL;
370 }
371 
372 static int wm831x_aldo_set_mode(struct regulator_dev *rdev,
373 				  unsigned int mode)
374 {
375 	struct wm831x_ldo *ldo = rdev_get_drvdata(rdev);
376 	struct wm831x *wm831x = ldo->wm831x;
377 	int on_reg = ldo->base + WM831X_LDO_ON_CONTROL;
378 	int ret;
379 
380 
381 	switch (mode) {
382 	case REGULATOR_MODE_NORMAL:
383 		ret = wm831x_set_bits(wm831x, on_reg, WM831X_LDO7_ON_MODE, 0);
384 		if (ret < 0)
385 			return ret;
386 		break;
387 
388 	case REGULATOR_MODE_IDLE:
389 		ret = wm831x_set_bits(wm831x, on_reg, WM831X_LDO7_ON_MODE,
390 				      WM831X_LDO7_ON_MODE);
391 		if (ret < 0)
392 			return ret;
393 		break;
394 
395 	default:
396 		return -EINVAL;
397 	}
398 
399 	return 0;
400 }
401 
402 static int wm831x_aldo_get_status(struct regulator_dev *rdev)
403 {
404 	struct wm831x_ldo *ldo = rdev_get_drvdata(rdev);
405 	struct wm831x *wm831x = ldo->wm831x;
406 	int mask = 1 << rdev_get_id(rdev);
407 	int ret;
408 
409 	/* Is the regulator on? */
410 	ret = wm831x_reg_read(wm831x, WM831X_LDO_STATUS);
411 	if (ret < 0)
412 		return ret;
413 	if (!(ret & mask))
414 		return REGULATOR_STATUS_OFF;
415 
416 	/* Is it reporting under voltage? */
417 	ret = wm831x_reg_read(wm831x, WM831X_LDO_UV_STATUS);
418 	if (ret < 0)
419 		return ret;
420 	if (ret & mask)
421 		return REGULATOR_STATUS_ERROR;
422 
423 	ret = wm831x_aldo_get_mode(rdev);
424 	if (ret < 0)
425 		return ret;
426 	else
427 		return regulator_mode_to_status(ret);
428 }
429 
430 static struct regulator_ops wm831x_aldo_ops = {
431 	.list_voltage = regulator_list_voltage_linear_range,
432 	.map_voltage = regulator_map_voltage_linear_range,
433 	.get_voltage_sel = regulator_get_voltage_sel_regmap,
434 	.set_voltage_sel = regulator_set_voltage_sel_regmap,
435 	.set_suspend_voltage = wm831x_aldo_set_suspend_voltage,
436 	.get_mode = wm831x_aldo_get_mode,
437 	.set_mode = wm831x_aldo_set_mode,
438 	.get_status = wm831x_aldo_get_status,
439 	.set_bypass = regulator_set_bypass_regmap,
440 	.get_bypass = regulator_get_bypass_regmap,
441 
442 	.is_enabled = regulator_is_enabled_regmap,
443 	.enable = regulator_enable_regmap,
444 	.disable = regulator_disable_regmap,
445 };
446 
447 static int wm831x_aldo_probe(struct platform_device *pdev)
448 {
449 	struct wm831x *wm831x = dev_get_drvdata(pdev->dev.parent);
450 	struct wm831x_pdata *pdata = dev_get_platdata(wm831x->dev);
451 	struct regulator_config config = { };
452 	int id;
453 	struct wm831x_ldo *ldo;
454 	struct resource *res;
455 	int ret, irq;
456 
457 	if (pdata && pdata->wm831x_num)
458 		id = (pdata->wm831x_num * 10) + 1;
459 	else
460 		id = 0;
461 	id = pdev->id - id;
462 
463 	dev_dbg(&pdev->dev, "Probing LDO%d\n", id + 1);
464 
465 	ldo = devm_kzalloc(&pdev->dev, sizeof(struct wm831x_ldo), GFP_KERNEL);
466 	if (ldo == NULL) {
467 		dev_err(&pdev->dev, "Unable to allocate private data\n");
468 		return -ENOMEM;
469 	}
470 
471 	ldo->wm831x = wm831x;
472 
473 	res = platform_get_resource(pdev, IORESOURCE_REG, 0);
474 	if (res == NULL) {
475 		dev_err(&pdev->dev, "No REG resource\n");
476 		ret = -EINVAL;
477 		goto err;
478 	}
479 	ldo->base = res->start;
480 
481 	snprintf(ldo->name, sizeof(ldo->name), "LDO%d", id + 1);
482 	ldo->desc.name = ldo->name;
483 
484 	snprintf(ldo->supply_name, sizeof(ldo->supply_name),
485 		 "LDO%dVDD", id + 1);
486 	ldo->desc.supply_name = ldo->supply_name;
487 
488 	ldo->desc.id = id;
489 	ldo->desc.type = REGULATOR_VOLTAGE;
490 	ldo->desc.n_voltages = 32;
491 	ldo->desc.linear_ranges = wm831x_aldo_ranges;
492 	ldo->desc.n_linear_ranges = ARRAY_SIZE(wm831x_aldo_ranges);
493 	ldo->desc.ops = &wm831x_aldo_ops;
494 	ldo->desc.owner = THIS_MODULE;
495 	ldo->desc.vsel_reg = ldo->base + WM831X_LDO_ON_CONTROL;
496 	ldo->desc.vsel_mask = WM831X_LDO7_ON_VSEL_MASK;
497 	ldo->desc.enable_reg = WM831X_LDO_ENABLE;
498 	ldo->desc.enable_mask = 1 << id;
499 	ldo->desc.bypass_reg = ldo->base;
500 	ldo->desc.bypass_mask = WM831X_LDO7_SWI;
501 
502 	config.dev = pdev->dev.parent;
503 	if (pdata)
504 		config.init_data = pdata->ldo[id];
505 	config.driver_data = ldo;
506 	config.regmap = wm831x->regmap;
507 
508 	ldo->regulator = regulator_register(&ldo->desc, &config);
509 	if (IS_ERR(ldo->regulator)) {
510 		ret = PTR_ERR(ldo->regulator);
511 		dev_err(wm831x->dev, "Failed to register LDO%d: %d\n",
512 			id + 1, ret);
513 		goto err;
514 	}
515 
516 	irq = wm831x_irq(wm831x, platform_get_irq_byname(pdev, "UV"));
517 	ret = request_threaded_irq(irq, NULL, wm831x_ldo_uv_irq,
518 				   IRQF_TRIGGER_RISING, ldo->name, ldo);
519 	if (ret != 0) {
520 		dev_err(&pdev->dev, "Failed to request UV IRQ %d: %d\n",
521 			irq, ret);
522 		goto err_regulator;
523 	}
524 
525 	platform_set_drvdata(pdev, ldo);
526 
527 	return 0;
528 
529 err_regulator:
530 	regulator_unregister(ldo->regulator);
531 err:
532 	return ret;
533 }
534 
535 static int wm831x_aldo_remove(struct platform_device *pdev)
536 {
537 	struct wm831x_ldo *ldo = platform_get_drvdata(pdev);
538 
539 	free_irq(wm831x_irq(ldo->wm831x, platform_get_irq_byname(pdev, "UV")),
540 		 ldo);
541 	regulator_unregister(ldo->regulator);
542 
543 	return 0;
544 }
545 
546 static struct platform_driver wm831x_aldo_driver = {
547 	.probe = wm831x_aldo_probe,
548 	.remove = wm831x_aldo_remove,
549 	.driver		= {
550 		.name	= "wm831x-aldo",
551 		.owner	= THIS_MODULE,
552 	},
553 };
554 
555 /*
556  * Alive LDO
557  */
558 
559 #define WM831X_ALIVE_LDO_MAX_SELECTOR 0xf
560 
561 static int wm831x_alive_ldo_set_suspend_voltage(struct regulator_dev *rdev,
562 					     int uV)
563 {
564 	struct wm831x_ldo *ldo = rdev_get_drvdata(rdev);
565 	struct wm831x *wm831x = ldo->wm831x;
566 	int sel, reg = ldo->base + WM831X_ALIVE_LDO_SLEEP_CONTROL;
567 
568 	sel = regulator_map_voltage_linear(rdev, uV, uV);
569 	if (sel < 0)
570 		return sel;
571 
572 	return wm831x_set_bits(wm831x, reg, WM831X_LDO11_ON_VSEL_MASK, sel);
573 }
574 
575 static int wm831x_alive_ldo_get_status(struct regulator_dev *rdev)
576 {
577 	struct wm831x_ldo *ldo = rdev_get_drvdata(rdev);
578 	struct wm831x *wm831x = ldo->wm831x;
579 	int mask = 1 << rdev_get_id(rdev);
580 	int ret;
581 
582 	/* Is the regulator on? */
583 	ret = wm831x_reg_read(wm831x, WM831X_LDO_STATUS);
584 	if (ret < 0)
585 		return ret;
586 	if (ret & mask)
587 		return REGULATOR_STATUS_ON;
588 	else
589 		return REGULATOR_STATUS_OFF;
590 }
591 
592 static struct regulator_ops wm831x_alive_ldo_ops = {
593 	.list_voltage = regulator_list_voltage_linear,
594 	.map_voltage = regulator_map_voltage_linear,
595 	.get_voltage_sel = regulator_get_voltage_sel_regmap,
596 	.set_voltage_sel = regulator_set_voltage_sel_regmap,
597 	.set_suspend_voltage = wm831x_alive_ldo_set_suspend_voltage,
598 	.get_status = wm831x_alive_ldo_get_status,
599 
600 	.is_enabled = regulator_is_enabled_regmap,
601 	.enable = regulator_enable_regmap,
602 	.disable = regulator_disable_regmap,
603 };
604 
605 static int wm831x_alive_ldo_probe(struct platform_device *pdev)
606 {
607 	struct wm831x *wm831x = dev_get_drvdata(pdev->dev.parent);
608 	struct wm831x_pdata *pdata = dev_get_platdata(wm831x->dev);
609 	struct regulator_config config = { };
610 	int id;
611 	struct wm831x_ldo *ldo;
612 	struct resource *res;
613 	int ret;
614 
615 	if (pdata && pdata->wm831x_num)
616 		id = (pdata->wm831x_num * 10) + 1;
617 	else
618 		id = 0;
619 	id = pdev->id - id;
620 
621 
622 	dev_dbg(&pdev->dev, "Probing LDO%d\n", id + 1);
623 
624 	ldo = devm_kzalloc(&pdev->dev, sizeof(struct wm831x_ldo), GFP_KERNEL);
625 	if (ldo == NULL) {
626 		dev_err(&pdev->dev, "Unable to allocate private data\n");
627 		return -ENOMEM;
628 	}
629 
630 	ldo->wm831x = wm831x;
631 
632 	res = platform_get_resource(pdev, IORESOURCE_REG, 0);
633 	if (res == NULL) {
634 		dev_err(&pdev->dev, "No REG resource\n");
635 		ret = -EINVAL;
636 		goto err;
637 	}
638 	ldo->base = res->start;
639 
640 	snprintf(ldo->name, sizeof(ldo->name), "LDO%d", id + 1);
641 	ldo->desc.name = ldo->name;
642 
643 	snprintf(ldo->supply_name, sizeof(ldo->supply_name),
644 		 "LDO%dVDD", id + 1);
645 	ldo->desc.supply_name = ldo->supply_name;
646 
647 	ldo->desc.id = id;
648 	ldo->desc.type = REGULATOR_VOLTAGE;
649 	ldo->desc.n_voltages = WM831X_ALIVE_LDO_MAX_SELECTOR + 1;
650 	ldo->desc.ops = &wm831x_alive_ldo_ops;
651 	ldo->desc.owner = THIS_MODULE;
652 	ldo->desc.vsel_reg = ldo->base + WM831X_ALIVE_LDO_ON_CONTROL;
653 	ldo->desc.vsel_mask = WM831X_LDO11_ON_VSEL_MASK;
654 	ldo->desc.enable_reg = WM831X_LDO_ENABLE;
655 	ldo->desc.enable_mask = 1 << id;
656 	ldo->desc.min_uV = 800000;
657 	ldo->desc.uV_step = 50000;
658 	ldo->desc.enable_time = 1000;
659 
660 	config.dev = pdev->dev.parent;
661 	if (pdata)
662 		config.init_data = pdata->ldo[id];
663 	config.driver_data = ldo;
664 	config.regmap = wm831x->regmap;
665 
666 	ldo->regulator = regulator_register(&ldo->desc, &config);
667 	if (IS_ERR(ldo->regulator)) {
668 		ret = PTR_ERR(ldo->regulator);
669 		dev_err(wm831x->dev, "Failed to register LDO%d: %d\n",
670 			id + 1, ret);
671 		goto err;
672 	}
673 
674 	platform_set_drvdata(pdev, ldo);
675 
676 	return 0;
677 
678 err:
679 	return ret;
680 }
681 
682 static int wm831x_alive_ldo_remove(struct platform_device *pdev)
683 {
684 	struct wm831x_ldo *ldo = platform_get_drvdata(pdev);
685 
686 	regulator_unregister(ldo->regulator);
687 
688 	return 0;
689 }
690 
691 static struct platform_driver wm831x_alive_ldo_driver = {
692 	.probe = wm831x_alive_ldo_probe,
693 	.remove = wm831x_alive_ldo_remove,
694 	.driver		= {
695 		.name	= "wm831x-alive-ldo",
696 		.owner	= THIS_MODULE,
697 	},
698 };
699 
700 static int __init wm831x_ldo_init(void)
701 {
702 	int ret;
703 
704 	ret = platform_driver_register(&wm831x_gp_ldo_driver);
705 	if (ret != 0)
706 		pr_err("Failed to register WM831x GP LDO driver: %d\n", ret);
707 
708 	ret = platform_driver_register(&wm831x_aldo_driver);
709 	if (ret != 0)
710 		pr_err("Failed to register WM831x ALDO driver: %d\n", ret);
711 
712 	ret = platform_driver_register(&wm831x_alive_ldo_driver);
713 	if (ret != 0)
714 		pr_err("Failed to register WM831x alive LDO driver: %d\n",
715 		       ret);
716 
717 	return 0;
718 }
719 subsys_initcall(wm831x_ldo_init);
720 
721 static void __exit wm831x_ldo_exit(void)
722 {
723 	platform_driver_unregister(&wm831x_alive_ldo_driver);
724 	platform_driver_unregister(&wm831x_aldo_driver);
725 	platform_driver_unregister(&wm831x_gp_ldo_driver);
726 }
727 module_exit(wm831x_ldo_exit);
728 
729 /* Module information */
730 MODULE_AUTHOR("Mark Brown <broonie@opensource.wolfsonmicro.com>");
731 MODULE_DESCRIPTION("WM831x LDO driver");
732 MODULE_LICENSE("GPL");
733 MODULE_ALIAS("platform:wm831x-ldo");
734 MODULE_ALIAS("platform:wm831x-aldo");
735 MODULE_ALIAS("platform:wm831x-aliveldo");
736