aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/regulator/wm831x-dcdc.c
diff options
context:
space:
mode:
authorMark Brown <broonie@opensource.wolfsonmicro.com>2011-07-25 17:20:32 -0400
committerLiam Girdwood <lrg@slimlogic.co.uk>2011-07-28 05:20:49 -0400
commitb47ba9fdd336b318a6a6431e6a4556df99272277 (patch)
treededf6af728b6a2ce5167af53f5032fa74abdbc35 /drivers/regulator/wm831x-dcdc.c
parent24b4315051ef2b9155d23ccbad528daab3b65eb6 (diff)
regulator: Set up GPIO for WM831x VSEL before enabling VSEL mode
If the VSEL is not in use prior to us starting up then we need to make sure we initialise the GPIO before we push the DVS control to being done by the GPIO. Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com> Signed-off-by: Liam Girdwood <lrg@slimlogic.co.uk>
Diffstat (limited to 'drivers/regulator/wm831x-dcdc.c')
-rw-r--r--drivers/regulator/wm831x-dcdc.c41
1 files changed, 20 insertions, 21 deletions
diff --git a/drivers/regulator/wm831x-dcdc.c b/drivers/regulator/wm831x-dcdc.c
index 2ee482306784..95249f7a0e39 100644
--- a/drivers/regulator/wm831x-dcdc.c
+++ b/drivers/regulator/wm831x-dcdc.c
@@ -456,27 +456,6 @@ static __devinit void wm831x_buckv_dvs_init(struct wm831x_dcdc *dcdc,
456 if (!pdata || !pdata->dvs_gpio) 456 if (!pdata || !pdata->dvs_gpio)
457 return; 457 return;
458 458
459 switch (pdata->dvs_control_src) {
460 case 1:
461 ctrl = 2 << WM831X_DC1_DVS_SRC_SHIFT;
462 break;
463 case 2:
464 ctrl = 3 << WM831X_DC1_DVS_SRC_SHIFT;
465 break;
466 default:
467 dev_err(wm831x->dev, "Invalid DVS control source %d for %s\n",
468 pdata->dvs_control_src, dcdc->name);
469 return;
470 }
471
472 ret = wm831x_set_bits(wm831x, dcdc->base + WM831X_DCDC_DVS_CONTROL,
473 WM831X_DC1_DVS_SRC_MASK, ctrl);
474 if (ret < 0) {
475 dev_err(wm831x->dev, "Failed to set %s DVS source: %d\n",
476 dcdc->name, ret);
477 return;
478 }
479
480 ret = gpio_request(pdata->dvs_gpio, "DCDC DVS"); 459 ret = gpio_request(pdata->dvs_gpio, "DCDC DVS");
481 if (ret < 0) { 460 if (ret < 0) {
482 dev_err(wm831x->dev, "Failed to get %s DVS GPIO: %d\n", 461 dev_err(wm831x->dev, "Failed to get %s DVS GPIO: %d\n",
@@ -498,6 +477,26 @@ static __devinit void wm831x_buckv_dvs_init(struct wm831x_dcdc *dcdc,
498 } 477 }
499 478
500 dcdc->dvs_gpio = pdata->dvs_gpio; 479 dcdc->dvs_gpio = pdata->dvs_gpio;
480
481 switch (pdata->dvs_control_src) {
482 case 1:
483 ctrl = 2 << WM831X_DC1_DVS_SRC_SHIFT;
484 break;
485 case 2:
486 ctrl = 3 << WM831X_DC1_DVS_SRC_SHIFT;
487 break;
488 default:
489 dev_err(wm831x->dev, "Invalid DVS control source %d for %s\n",
490 pdata->dvs_control_src, dcdc->name);
491 return;
492 }
493
494 ret = wm831x_set_bits(wm831x, dcdc->base + WM831X_DCDC_DVS_CONTROL,
495 WM831X_DC1_DVS_SRC_MASK, ctrl);
496 if (ret < 0) {
497 dev_err(wm831x->dev, "Failed to set %s DVS source: %d\n",
498 dcdc->name, ret);
499 }
501} 500}
502 501
503static __devinit int wm831x_buckv_probe(struct platform_device *pdev) 502static __devinit int wm831x_buckv_probe(struct platform_device *pdev)