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