Merge branch 'for-2.6.37' of git://linux-nfs.org/~bfields/linux
[pandora-kernel.git] / drivers / regulator / wm831x-ldo.c
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 6
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         struct regulator_desc desc;
40         int base;
41         struct wm831x *wm831x;
42         struct regulator_dev *regulator;
43 };
44
45 /*
46  * Shared
47  */
48
49 static int wm831x_ldo_is_enabled(struct regulator_dev *rdev)
50 {
51         struct wm831x_ldo *ldo = rdev_get_drvdata(rdev);
52         struct wm831x *wm831x = ldo->wm831x;
53         int mask = 1 << rdev_get_id(rdev);
54         int reg;
55
56         reg = wm831x_reg_read(wm831x, WM831X_LDO_ENABLE);
57         if (reg < 0)
58                 return reg;
59
60         if (reg & mask)
61                 return 1;
62         else
63                 return 0;
64 }
65
66 static int wm831x_ldo_enable(struct regulator_dev *rdev)
67 {
68         struct wm831x_ldo *ldo = rdev_get_drvdata(rdev);
69         struct wm831x *wm831x = ldo->wm831x;
70         int mask = 1 << rdev_get_id(rdev);
71
72         return wm831x_set_bits(wm831x, WM831X_LDO_ENABLE, mask, mask);
73 }
74
75 static int wm831x_ldo_disable(struct regulator_dev *rdev)
76 {
77         struct wm831x_ldo *ldo = rdev_get_drvdata(rdev);
78         struct wm831x *wm831x = ldo->wm831x;
79         int mask = 1 << rdev_get_id(rdev);
80
81         return wm831x_set_bits(wm831x, WM831X_LDO_ENABLE, mask, 0);
82 }
83
84 static irqreturn_t wm831x_ldo_uv_irq(int irq, void *data)
85 {
86         struct wm831x_ldo *ldo = data;
87
88         regulator_notifier_call_chain(ldo->regulator,
89                                       REGULATOR_EVENT_UNDER_VOLTAGE,
90                                       NULL);
91
92         return IRQ_HANDLED;
93 }
94
95 /*
96  * General purpose LDOs
97  */
98
99 #define WM831X_GP_LDO_SELECTOR_LOW 0xe
100 #define WM831X_GP_LDO_MAX_SELECTOR 0x1f
101
102 static int wm831x_gp_ldo_list_voltage(struct regulator_dev *rdev,
103                                       unsigned int selector)
104 {
105         /* 0.9-1.6V in 50mV steps */
106         if (selector <= WM831X_GP_LDO_SELECTOR_LOW)
107                 return 900000 + (selector * 50000);
108         /* 1.7-3.3V in 50mV steps */
109         if (selector <= WM831X_GP_LDO_MAX_SELECTOR)
110                 return 1600000 + ((selector - WM831X_GP_LDO_SELECTOR_LOW)
111                                   * 100000);
112         return -EINVAL;
113 }
114
115 static int wm831x_gp_ldo_set_voltage_int(struct regulator_dev *rdev, int reg,
116                                          int min_uV, int max_uV)
117 {
118         struct wm831x_ldo *ldo = rdev_get_drvdata(rdev);
119         struct wm831x *wm831x = ldo->wm831x;
120         int vsel, ret;
121
122         if (min_uV < 900000)
123                 vsel = 0;
124         else if (min_uV < 1700000)
125                 vsel = ((min_uV - 900000) / 50000);
126         else
127                 vsel = ((min_uV - 1700000) / 100000)
128                         + WM831X_GP_LDO_SELECTOR_LOW + 1;
129
130         ret = wm831x_gp_ldo_list_voltage(rdev, vsel);
131         if (ret < 0)
132                 return ret;
133         if (ret < min_uV || ret > max_uV)
134                 return -EINVAL;
135
136         return wm831x_set_bits(wm831x, reg, WM831X_LDO1_ON_VSEL_MASK, vsel);
137 }
138
139 static int wm831x_gp_ldo_set_voltage(struct regulator_dev *rdev,
140                                      int min_uV, int max_uV)
141 {
142         struct wm831x_ldo *ldo = rdev_get_drvdata(rdev);
143         int reg = ldo->base + WM831X_LDO_ON_CONTROL;
144
145         return wm831x_gp_ldo_set_voltage_int(rdev, reg, min_uV, max_uV);
146 }
147
148 static int wm831x_gp_ldo_set_suspend_voltage(struct regulator_dev *rdev,
149                                              int uV)
150 {
151         struct wm831x_ldo *ldo = rdev_get_drvdata(rdev);
152         int reg = ldo->base + WM831X_LDO_SLEEP_CONTROL;
153
154         return wm831x_gp_ldo_set_voltage_int(rdev, reg, uV, uV);
155 }
156
157 static int wm831x_gp_ldo_get_voltage(struct regulator_dev *rdev)
158 {
159         struct wm831x_ldo *ldo = rdev_get_drvdata(rdev);
160         struct wm831x *wm831x = ldo->wm831x;
161         int reg = ldo->base + WM831X_LDO_ON_CONTROL;
162         int ret;
163
164         ret = wm831x_reg_read(wm831x, reg);
165         if (ret < 0)
166                 return ret;
167
168         ret &= WM831X_LDO1_ON_VSEL_MASK;
169
170         return wm831x_gp_ldo_list_voltage(rdev, ret);
171 }
172
173 static unsigned int wm831x_gp_ldo_get_mode(struct regulator_dev *rdev)
174 {
175         struct wm831x_ldo *ldo = rdev_get_drvdata(rdev);
176         struct wm831x *wm831x = ldo->wm831x;
177         int ctrl_reg = ldo->base + WM831X_LDO_CONTROL;
178         int on_reg = ldo->base + WM831X_LDO_ON_CONTROL;
179         int ret;
180
181         ret = wm831x_reg_read(wm831x, on_reg);
182         if (ret < 0)
183                 return ret;
184
185         if (!(ret & WM831X_LDO1_ON_MODE))
186                 return REGULATOR_MODE_NORMAL;
187
188         ret = wm831x_reg_read(wm831x, ctrl_reg);
189         if (ret < 0)
190                 return ret;
191
192         if (ret & WM831X_LDO1_LP_MODE)
193                 return REGULATOR_MODE_STANDBY;
194         else
195                 return REGULATOR_MODE_IDLE;
196 }
197
198 static int wm831x_gp_ldo_set_mode(struct regulator_dev *rdev,
199                                   unsigned int mode)
200 {
201         struct wm831x_ldo *ldo = rdev_get_drvdata(rdev);
202         struct wm831x *wm831x = ldo->wm831x;
203         int ctrl_reg = ldo->base + WM831X_LDO_CONTROL;
204         int on_reg = ldo->base + WM831X_LDO_ON_CONTROL;
205         int ret;
206
207
208         switch (mode) {
209         case REGULATOR_MODE_NORMAL:
210                 ret = wm831x_set_bits(wm831x, on_reg,
211                                       WM831X_LDO1_ON_MODE, 0);
212                 if (ret < 0)
213                         return ret;
214                 break;
215
216         case REGULATOR_MODE_IDLE:
217                 ret = wm831x_set_bits(wm831x, ctrl_reg,
218                                       WM831X_LDO1_LP_MODE, 0);
219                 if (ret < 0)
220                         return ret;
221
222                 ret = wm831x_set_bits(wm831x, on_reg,
223                                       WM831X_LDO1_ON_MODE,
224                                       WM831X_LDO1_ON_MODE);
225                 if (ret < 0)
226                         return ret;
227                 break;
228
229         case REGULATOR_MODE_STANDBY:
230                 ret = wm831x_set_bits(wm831x, ctrl_reg,
231                                       WM831X_LDO1_LP_MODE,
232                                       WM831X_LDO1_LP_MODE);
233                 if (ret < 0)
234                         return ret;
235
236                 ret = wm831x_set_bits(wm831x, on_reg,
237                                       WM831X_LDO1_ON_MODE,
238                                       WM831X_LDO1_ON_MODE);
239                 if (ret < 0)
240                         return ret;
241                 break;
242
243         default:
244                 return -EINVAL;
245         }
246
247         return 0;
248 }
249
250 static int wm831x_gp_ldo_get_status(struct regulator_dev *rdev)
251 {
252         struct wm831x_ldo *ldo = rdev_get_drvdata(rdev);
253         struct wm831x *wm831x = ldo->wm831x;
254         int mask = 1 << rdev_get_id(rdev);
255         int ret;
256
257         /* Is the regulator on? */
258         ret = wm831x_reg_read(wm831x, WM831X_LDO_STATUS);
259         if (ret < 0)
260                 return ret;
261         if (!(ret & mask))
262                 return REGULATOR_STATUS_OFF;
263
264         /* Is it reporting under voltage? */
265         ret = wm831x_reg_read(wm831x, WM831X_LDO_UV_STATUS);
266         if (ret & mask)
267                 return REGULATOR_STATUS_ERROR;
268
269         ret = wm831x_gp_ldo_get_mode(rdev);
270         if (ret < 0)
271                 return ret;
272         else
273                 return regulator_mode_to_status(ret);
274 }
275
276 static unsigned int wm831x_gp_ldo_get_optimum_mode(struct regulator_dev *rdev,
277                                                    int input_uV,
278                                                    int output_uV, int load_uA)
279 {
280         if (load_uA < 20000)
281                 return REGULATOR_MODE_STANDBY;
282         if (load_uA < 50000)
283                 return REGULATOR_MODE_IDLE;
284         return REGULATOR_MODE_NORMAL;
285 }
286
287
288 static struct regulator_ops wm831x_gp_ldo_ops = {
289         .list_voltage = wm831x_gp_ldo_list_voltage,
290         .get_voltage = wm831x_gp_ldo_get_voltage,
291         .set_voltage = wm831x_gp_ldo_set_voltage,
292         .set_suspend_voltage = wm831x_gp_ldo_set_suspend_voltage,
293         .get_mode = wm831x_gp_ldo_get_mode,
294         .set_mode = wm831x_gp_ldo_set_mode,
295         .get_status = wm831x_gp_ldo_get_status,
296         .get_optimum_mode = wm831x_gp_ldo_get_optimum_mode,
297
298         .is_enabled = wm831x_ldo_is_enabled,
299         .enable = wm831x_ldo_enable,
300         .disable = wm831x_ldo_disable,
301 };
302
303 static __devinit int wm831x_gp_ldo_probe(struct platform_device *pdev)
304 {
305         struct wm831x *wm831x = dev_get_drvdata(pdev->dev.parent);
306         struct wm831x_pdata *pdata = wm831x->dev->platform_data;
307         int id = pdev->id % ARRAY_SIZE(pdata->ldo);
308         struct wm831x_ldo *ldo;
309         struct resource *res;
310         int ret, irq;
311
312         dev_dbg(&pdev->dev, "Probing LDO%d\n", id + 1);
313
314         if (pdata == NULL || pdata->ldo[id] == NULL)
315                 return -ENODEV;
316
317         ldo = kzalloc(sizeof(struct wm831x_ldo), GFP_KERNEL);
318         if (ldo == NULL) {
319                 dev_err(&pdev->dev, "Unable to allocate private data\n");
320                 return -ENOMEM;
321         }
322
323         ldo->wm831x = wm831x;
324
325         res = platform_get_resource(pdev, IORESOURCE_IO, 0);
326         if (res == NULL) {
327                 dev_err(&pdev->dev, "No I/O resource\n");
328                 ret = -EINVAL;
329                 goto err;
330         }
331         ldo->base = res->start;
332
333         snprintf(ldo->name, sizeof(ldo->name), "LDO%d", id + 1);
334         ldo->desc.name = ldo->name;
335         ldo->desc.id = id;
336         ldo->desc.type = REGULATOR_VOLTAGE;
337         ldo->desc.n_voltages = WM831X_GP_LDO_MAX_SELECTOR + 1;
338         ldo->desc.ops = &wm831x_gp_ldo_ops;
339         ldo->desc.owner = THIS_MODULE;
340
341         ldo->regulator = regulator_register(&ldo->desc, &pdev->dev,
342                                              pdata->ldo[id], ldo);
343         if (IS_ERR(ldo->regulator)) {
344                 ret = PTR_ERR(ldo->regulator);
345                 dev_err(wm831x->dev, "Failed to register LDO%d: %d\n",
346                         id + 1, ret);
347                 goto err;
348         }
349
350         irq = platform_get_irq_byname(pdev, "UV");
351         ret = wm831x_request_irq(wm831x, irq, wm831x_ldo_uv_irq,
352                                  IRQF_TRIGGER_RISING, ldo->name,
353                                  ldo);
354         if (ret != 0) {
355                 dev_err(&pdev->dev, "Failed to request UV IRQ %d: %d\n",
356                         irq, ret);
357                 goto err_regulator;
358         }
359
360         platform_set_drvdata(pdev, ldo);
361
362         return 0;
363
364 err_regulator:
365         regulator_unregister(ldo->regulator);
366 err:
367         kfree(ldo);
368         return ret;
369 }
370
371 static __devexit int wm831x_gp_ldo_remove(struct platform_device *pdev)
372 {
373         struct wm831x_ldo *ldo = platform_get_drvdata(pdev);
374         struct wm831x *wm831x = ldo->wm831x;
375
376         platform_set_drvdata(pdev, NULL);
377
378         wm831x_free_irq(wm831x, platform_get_irq_byname(pdev, "UV"), ldo);
379         regulator_unregister(ldo->regulator);
380         kfree(ldo);
381
382         return 0;
383 }
384
385 static struct platform_driver wm831x_gp_ldo_driver = {
386         .probe = wm831x_gp_ldo_probe,
387         .remove = __devexit_p(wm831x_gp_ldo_remove),
388         .driver         = {
389                 .name   = "wm831x-ldo",
390                 .owner  = THIS_MODULE,
391         },
392 };
393
394 /*
395  * Analogue LDOs
396  */
397
398
399 #define WM831X_ALDO_SELECTOR_LOW 0xc
400 #define WM831X_ALDO_MAX_SELECTOR 0x1f
401
402 static int wm831x_aldo_list_voltage(struct regulator_dev *rdev,
403                                       unsigned int selector)
404 {
405         /* 1-1.6V in 50mV steps */
406         if (selector <= WM831X_ALDO_SELECTOR_LOW)
407                 return 1000000 + (selector * 50000);
408         /* 1.7-3.5V in 50mV steps */
409         if (selector <= WM831X_ALDO_MAX_SELECTOR)
410                 return 1600000 + ((selector - WM831X_ALDO_SELECTOR_LOW)
411                                   * 100000);
412         return -EINVAL;
413 }
414
415 static int wm831x_aldo_set_voltage_int(struct regulator_dev *rdev, int reg,
416                                          int min_uV, int max_uV)
417 {
418         struct wm831x_ldo *ldo = rdev_get_drvdata(rdev);
419         struct wm831x *wm831x = ldo->wm831x;
420         int vsel, ret;
421
422         if (min_uV < 1000000)
423                 vsel = 0;
424         else if (min_uV < 1700000)
425                 vsel = ((min_uV - 1000000) / 50000);
426         else
427                 vsel = ((min_uV - 1700000) / 100000)
428                         + WM831X_ALDO_SELECTOR_LOW + 1;
429
430         ret = wm831x_aldo_list_voltage(rdev, vsel);
431         if (ret < 0)
432                 return ret;
433         if (ret < min_uV || ret > max_uV)
434                 return -EINVAL;
435
436         return wm831x_set_bits(wm831x, reg, WM831X_LDO7_ON_VSEL_MASK, vsel);
437 }
438
439 static int wm831x_aldo_set_voltage(struct regulator_dev *rdev,
440                                      int min_uV, int max_uV)
441 {
442         struct wm831x_ldo *ldo = rdev_get_drvdata(rdev);
443         int reg = ldo->base + WM831X_LDO_ON_CONTROL;
444
445         return wm831x_aldo_set_voltage_int(rdev, reg, min_uV, max_uV);
446 }
447
448 static int wm831x_aldo_set_suspend_voltage(struct regulator_dev *rdev,
449                                              int uV)
450 {
451         struct wm831x_ldo *ldo = rdev_get_drvdata(rdev);
452         int reg = ldo->base + WM831X_LDO_SLEEP_CONTROL;
453
454         return wm831x_aldo_set_voltage_int(rdev, reg, uV, uV);
455 }
456
457 static int wm831x_aldo_get_voltage(struct regulator_dev *rdev)
458 {
459         struct wm831x_ldo *ldo = rdev_get_drvdata(rdev);
460         struct wm831x *wm831x = ldo->wm831x;
461         int reg = ldo->base + WM831X_LDO_ON_CONTROL;
462         int ret;
463
464         ret = wm831x_reg_read(wm831x, reg);
465         if (ret < 0)
466                 return ret;
467
468         ret &= WM831X_LDO7_ON_VSEL_MASK;
469
470         return wm831x_aldo_list_voltage(rdev, ret);
471 }
472
473 static unsigned int wm831x_aldo_get_mode(struct regulator_dev *rdev)
474 {
475         struct wm831x_ldo *ldo = rdev_get_drvdata(rdev);
476         struct wm831x *wm831x = ldo->wm831x;
477         int on_reg = ldo->base + WM831X_LDO_ON_CONTROL;
478         int ret;
479
480         ret = wm831x_reg_read(wm831x, on_reg);
481         if (ret < 0)
482                 return 0;
483
484         if (ret & WM831X_LDO7_ON_MODE)
485                 return REGULATOR_MODE_IDLE;
486         else
487                 return REGULATOR_MODE_NORMAL;
488 }
489
490 static int wm831x_aldo_set_mode(struct regulator_dev *rdev,
491                                   unsigned int mode)
492 {
493         struct wm831x_ldo *ldo = rdev_get_drvdata(rdev);
494         struct wm831x *wm831x = ldo->wm831x;
495         int ctrl_reg = ldo->base + WM831X_LDO_CONTROL;
496         int on_reg = ldo->base + WM831X_LDO_ON_CONTROL;
497         int ret;
498
499
500         switch (mode) {
501         case REGULATOR_MODE_NORMAL:
502                 ret = wm831x_set_bits(wm831x, on_reg,
503                                       WM831X_LDO7_ON_MODE, 0);
504                 if (ret < 0)
505                         return ret;
506                 break;
507
508         case REGULATOR_MODE_IDLE:
509                 ret = wm831x_set_bits(wm831x, ctrl_reg,
510                                       WM831X_LDO7_ON_MODE,
511                                       WM831X_LDO7_ON_MODE);
512                 if (ret < 0)
513                         return ret;
514                 break;
515
516         default:
517                 return -EINVAL;
518         }
519
520         return 0;
521 }
522
523 static int wm831x_aldo_get_status(struct regulator_dev *rdev)
524 {
525         struct wm831x_ldo *ldo = rdev_get_drvdata(rdev);
526         struct wm831x *wm831x = ldo->wm831x;
527         int mask = 1 << rdev_get_id(rdev);
528         int ret;
529
530         /* Is the regulator on? */
531         ret = wm831x_reg_read(wm831x, WM831X_LDO_STATUS);
532         if (ret < 0)
533                 return ret;
534         if (!(ret & mask))
535                 return REGULATOR_STATUS_OFF;
536
537         /* Is it reporting under voltage? */
538         ret = wm831x_reg_read(wm831x, WM831X_LDO_UV_STATUS);
539         if (ret & mask)
540                 return REGULATOR_STATUS_ERROR;
541
542         ret = wm831x_aldo_get_mode(rdev);
543         if (ret < 0)
544                 return ret;
545         else
546                 return regulator_mode_to_status(ret);
547 }
548
549 static struct regulator_ops wm831x_aldo_ops = {
550         .list_voltage = wm831x_aldo_list_voltage,
551         .get_voltage = wm831x_aldo_get_voltage,
552         .set_voltage = wm831x_aldo_set_voltage,
553         .set_suspend_voltage = wm831x_aldo_set_suspend_voltage,
554         .get_mode = wm831x_aldo_get_mode,
555         .set_mode = wm831x_aldo_set_mode,
556         .get_status = wm831x_aldo_get_status,
557
558         .is_enabled = wm831x_ldo_is_enabled,
559         .enable = wm831x_ldo_enable,
560         .disable = wm831x_ldo_disable,
561 };
562
563 static __devinit int wm831x_aldo_probe(struct platform_device *pdev)
564 {
565         struct wm831x *wm831x = dev_get_drvdata(pdev->dev.parent);
566         struct wm831x_pdata *pdata = wm831x->dev->platform_data;
567         int id = pdev->id % ARRAY_SIZE(pdata->ldo);
568         struct wm831x_ldo *ldo;
569         struct resource *res;
570         int ret, irq;
571
572         dev_dbg(&pdev->dev, "Probing LDO%d\n", id + 1);
573
574         if (pdata == NULL || pdata->ldo[id] == NULL)
575                 return -ENODEV;
576
577         ldo = kzalloc(sizeof(struct wm831x_ldo), GFP_KERNEL);
578         if (ldo == NULL) {
579                 dev_err(&pdev->dev, "Unable to allocate private data\n");
580                 return -ENOMEM;
581         }
582
583         ldo->wm831x = wm831x;
584
585         res = platform_get_resource(pdev, IORESOURCE_IO, 0);
586         if (res == NULL) {
587                 dev_err(&pdev->dev, "No I/O resource\n");
588                 ret = -EINVAL;
589                 goto err;
590         }
591         ldo->base = res->start;
592
593         snprintf(ldo->name, sizeof(ldo->name), "LDO%d", id + 1);
594         ldo->desc.name = ldo->name;
595         ldo->desc.id = id;
596         ldo->desc.type = REGULATOR_VOLTAGE;
597         ldo->desc.n_voltages = WM831X_ALDO_MAX_SELECTOR + 1;
598         ldo->desc.ops = &wm831x_aldo_ops;
599         ldo->desc.owner = THIS_MODULE;
600
601         ldo->regulator = regulator_register(&ldo->desc, &pdev->dev,
602                                              pdata->ldo[id], ldo);
603         if (IS_ERR(ldo->regulator)) {
604                 ret = PTR_ERR(ldo->regulator);
605                 dev_err(wm831x->dev, "Failed to register LDO%d: %d\n",
606                         id + 1, ret);
607                 goto err;
608         }
609
610         irq = platform_get_irq_byname(pdev, "UV");
611         ret = wm831x_request_irq(wm831x, irq, wm831x_ldo_uv_irq,
612                                  IRQF_TRIGGER_RISING, ldo->name,
613                                  ldo);
614         if (ret != 0) {
615                 dev_err(&pdev->dev, "Failed to request UV IRQ %d: %d\n",
616                         irq, ret);
617                 goto err_regulator;
618         }
619
620         platform_set_drvdata(pdev, ldo);
621
622         return 0;
623
624 err_regulator:
625         regulator_unregister(ldo->regulator);
626 err:
627         kfree(ldo);
628         return ret;
629 }
630
631 static __devexit int wm831x_aldo_remove(struct platform_device *pdev)
632 {
633         struct wm831x_ldo *ldo = platform_get_drvdata(pdev);
634         struct wm831x *wm831x = ldo->wm831x;
635
636         wm831x_free_irq(wm831x, platform_get_irq_byname(pdev, "UV"), ldo);
637         regulator_unregister(ldo->regulator);
638         kfree(ldo);
639
640         return 0;
641 }
642
643 static struct platform_driver wm831x_aldo_driver = {
644         .probe = wm831x_aldo_probe,
645         .remove = __devexit_p(wm831x_aldo_remove),
646         .driver         = {
647                 .name   = "wm831x-aldo",
648                 .owner  = THIS_MODULE,
649         },
650 };
651
652 /*
653  * Alive LDO
654  */
655
656 #define WM831X_ALIVE_LDO_MAX_SELECTOR 0xf
657
658 static int wm831x_alive_ldo_list_voltage(struct regulator_dev *rdev,
659                                       unsigned int selector)
660 {
661         /* 0.8-1.55V in 50mV steps */
662         if (selector <= WM831X_ALIVE_LDO_MAX_SELECTOR)
663                 return 800000 + (selector * 50000);
664         return -EINVAL;
665 }
666
667 static int wm831x_alive_ldo_set_voltage_int(struct regulator_dev *rdev,
668                                             int reg,
669                                             int min_uV, int max_uV)
670 {
671         struct wm831x_ldo *ldo = rdev_get_drvdata(rdev);
672         struct wm831x *wm831x = ldo->wm831x;
673         int vsel, ret;
674
675         vsel = (min_uV - 800000) / 50000;
676
677         ret = wm831x_alive_ldo_list_voltage(rdev, vsel);
678         if (ret < 0)
679                 return ret;
680         if (ret < min_uV || ret > max_uV)
681                 return -EINVAL;
682
683         return wm831x_set_bits(wm831x, reg, WM831X_LDO11_ON_VSEL_MASK, vsel);
684 }
685
686 static int wm831x_alive_ldo_set_voltage(struct regulator_dev *rdev,
687                                      int min_uV, int max_uV)
688 {
689         struct wm831x_ldo *ldo = rdev_get_drvdata(rdev);
690         int reg = ldo->base + WM831X_ALIVE_LDO_ON_CONTROL;
691
692         return wm831x_alive_ldo_set_voltage_int(rdev, reg, min_uV, max_uV);
693 }
694
695 static int wm831x_alive_ldo_set_suspend_voltage(struct regulator_dev *rdev,
696                                              int uV)
697 {
698         struct wm831x_ldo *ldo = rdev_get_drvdata(rdev);
699         int reg = ldo->base + WM831X_ALIVE_LDO_SLEEP_CONTROL;
700
701         return wm831x_alive_ldo_set_voltage_int(rdev, reg, uV, uV);
702 }
703
704 static int wm831x_alive_ldo_get_voltage(struct regulator_dev *rdev)
705 {
706         struct wm831x_ldo *ldo = rdev_get_drvdata(rdev);
707         struct wm831x *wm831x = ldo->wm831x;
708         int reg = ldo->base + WM831X_ALIVE_LDO_ON_CONTROL;
709         int ret;
710
711         ret = wm831x_reg_read(wm831x, reg);
712         if (ret < 0)
713                 return ret;
714
715         ret &= WM831X_LDO11_ON_VSEL_MASK;
716
717         return wm831x_alive_ldo_list_voltage(rdev, ret);
718 }
719
720 static int wm831x_alive_ldo_get_status(struct regulator_dev *rdev)
721 {
722         struct wm831x_ldo *ldo = rdev_get_drvdata(rdev);
723         struct wm831x *wm831x = ldo->wm831x;
724         int mask = 1 << rdev_get_id(rdev);
725         int ret;
726
727         /* Is the regulator on? */
728         ret = wm831x_reg_read(wm831x, WM831X_LDO_STATUS);
729         if (ret < 0)
730                 return ret;
731         if (ret & mask)
732                 return REGULATOR_STATUS_ON;
733         else
734                 return REGULATOR_STATUS_OFF;
735 }
736
737 static struct regulator_ops wm831x_alive_ldo_ops = {
738         .list_voltage = wm831x_alive_ldo_list_voltage,
739         .get_voltage = wm831x_alive_ldo_get_voltage,
740         .set_voltage = wm831x_alive_ldo_set_voltage,
741         .set_suspend_voltage = wm831x_alive_ldo_set_suspend_voltage,
742         .get_status = wm831x_alive_ldo_get_status,
743
744         .is_enabled = wm831x_ldo_is_enabled,
745         .enable = wm831x_ldo_enable,
746         .disable = wm831x_ldo_disable,
747 };
748
749 static __devinit int wm831x_alive_ldo_probe(struct platform_device *pdev)
750 {
751         struct wm831x *wm831x = dev_get_drvdata(pdev->dev.parent);
752         struct wm831x_pdata *pdata = wm831x->dev->platform_data;
753         int id = pdev->id % ARRAY_SIZE(pdata->ldo);
754         struct wm831x_ldo *ldo;
755         struct resource *res;
756         int ret;
757
758         dev_dbg(&pdev->dev, "Probing LDO%d\n", id + 1);
759
760         if (pdata == NULL || pdata->ldo[id] == NULL)
761                 return -ENODEV;
762
763         ldo = kzalloc(sizeof(struct wm831x_ldo), GFP_KERNEL);
764         if (ldo == NULL) {
765                 dev_err(&pdev->dev, "Unable to allocate private data\n");
766                 return -ENOMEM;
767         }
768
769         ldo->wm831x = wm831x;
770
771         res = platform_get_resource(pdev, IORESOURCE_IO, 0);
772         if (res == NULL) {
773                 dev_err(&pdev->dev, "No I/O resource\n");
774                 ret = -EINVAL;
775                 goto err;
776         }
777         ldo->base = res->start;
778
779         snprintf(ldo->name, sizeof(ldo->name), "LDO%d", id + 1);
780         ldo->desc.name = ldo->name;
781         ldo->desc.id = id;
782         ldo->desc.type = REGULATOR_VOLTAGE;
783         ldo->desc.n_voltages = WM831X_ALIVE_LDO_MAX_SELECTOR + 1;
784         ldo->desc.ops = &wm831x_alive_ldo_ops;
785         ldo->desc.owner = THIS_MODULE;
786
787         ldo->regulator = regulator_register(&ldo->desc, &pdev->dev,
788                                              pdata->ldo[id], ldo);
789         if (IS_ERR(ldo->regulator)) {
790                 ret = PTR_ERR(ldo->regulator);
791                 dev_err(wm831x->dev, "Failed to register LDO%d: %d\n",
792                         id + 1, ret);
793                 goto err;
794         }
795
796         platform_set_drvdata(pdev, ldo);
797
798         return 0;
799
800 err:
801         kfree(ldo);
802         return ret;
803 }
804
805 static __devexit int wm831x_alive_ldo_remove(struct platform_device *pdev)
806 {
807         struct wm831x_ldo *ldo = platform_get_drvdata(pdev);
808
809         regulator_unregister(ldo->regulator);
810         kfree(ldo);
811
812         return 0;
813 }
814
815 static struct platform_driver wm831x_alive_ldo_driver = {
816         .probe = wm831x_alive_ldo_probe,
817         .remove = __devexit_p(wm831x_alive_ldo_remove),
818         .driver         = {
819                 .name   = "wm831x-alive-ldo",
820                 .owner  = THIS_MODULE,
821         },
822 };
823
824 static int __init wm831x_ldo_init(void)
825 {
826         int ret;
827
828         ret = platform_driver_register(&wm831x_gp_ldo_driver);
829         if (ret != 0)
830                 pr_err("Failed to register WM831x GP LDO driver: %d\n", ret);
831
832         ret = platform_driver_register(&wm831x_aldo_driver);
833         if (ret != 0)
834                 pr_err("Failed to register WM831x ALDO driver: %d\n", ret);
835
836         ret = platform_driver_register(&wm831x_alive_ldo_driver);
837         if (ret != 0)
838                 pr_err("Failed to register WM831x alive LDO driver: %d\n",
839                        ret);
840
841         return 0;
842 }
843 subsys_initcall(wm831x_ldo_init);
844
845 static void __exit wm831x_ldo_exit(void)
846 {
847         platform_driver_unregister(&wm831x_alive_ldo_driver);
848         platform_driver_unregister(&wm831x_aldo_driver);
849         platform_driver_unregister(&wm831x_gp_ldo_driver);
850 }
851 module_exit(wm831x_ldo_exit);
852
853 /* Module information */
854 MODULE_AUTHOR("Mark Brown <broonie@opensource.wolfsonmicro.com>");
855 MODULE_DESCRIPTION("WM831x LDO driver");
856 MODULE_LICENSE("GPL");
857 MODULE_ALIAS("platform:wm831x-ldo");
858 MODULE_ALIAS("platform:wm831x-aldo");
859 MODULE_ALIAS("platform:wm831x-aliveldo");