aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/mfd/arizona-core.c
diff options
context:
space:
mode:
authorCharles Keepax <ckeepax@opensource.wolfsonmicro.com>2015-05-11 08:58:08 -0400
committerLee Jones <lee.jones@linaro.org>2015-06-22 07:25:13 -0400
commit96129a0eaa3f5232f433812972c7bf38004ebf6b (patch)
tree44842c16fbad8485abb6ec356101ad93614efedd /drivers/mfd/arizona-core.c
parent882bc46813177640cfe01fb4f9b3e7af60201512 (diff)
mfd: wm5110: Set DCVDD voltage to 1.175V before entering sleep mode
The low power sleep mode on wm5110 requires that the LDO1 regulator be set to 1.175V prior to entering sleep, then returned to 1.2V after exiting sleep mode. This patch apply these regulator settings. Signed-off-by: Charles Keepax <ckeepax@opensource.wolfsonmicro.com> Acked-by: Mark Brown <broonie@kernel.org> Signed-off-by: Lee Jones <lee.jones@linaro.org>
Diffstat (limited to 'drivers/mfd/arizona-core.c')
-rw-r--r--drivers/mfd/arizona-core.c52
1 files changed, 52 insertions, 0 deletions
diff --git a/drivers/mfd/arizona-core.c b/drivers/mfd/arizona-core.c
index c80ab7910615..93024acc145e 100644
--- a/drivers/mfd/arizona-core.c
+++ b/drivers/mfd/arizona-core.c
@@ -478,6 +478,37 @@ static int arizona_runtime_resume(struct device *dev)
478 goto err; 478 goto err;
479 } 479 }
480 break; 480 break;
481 case WM5110:
482 case WM8280:
483 ret = arizona_wait_for_boot(arizona);
484 if (ret)
485 goto err;
486
487 if (arizona->external_dcvdd) {
488 ret = regmap_update_bits(arizona->regmap,
489 ARIZONA_ISOLATION_CONTROL,
490 ARIZONA_ISOLATE_DCVDD1, 0);
491 if (ret) {
492 dev_err(arizona->dev,
493 "Failed to connect DCVDD: %d\n", ret);
494 goto err;
495 }
496 } else {
497 /*
498 * As this is only called for the internal regulator
499 * (where we know voltage ranges available) it is ok
500 * to request an exact range.
501 */
502 ret = regulator_set_voltage(arizona->dcvdd,
503 1200000, 1200000);
504 if (ret < 0) {
505 dev_err(arizona->dev,
506 "Failed to set resume voltage: %d\n",
507 ret);
508 goto err;
509 }
510 }
511 break;
481 default: 512 default:
482 ret = arizona_wait_for_boot(arizona); 513 ret = arizona_wait_for_boot(arizona);
483 if (ret != 0) { 514 if (ret != 0) {
@@ -528,6 +559,27 @@ static int arizona_runtime_suspend(struct device *dev)
528 ret); 559 ret);
529 return ret; 560 return ret;
530 } 561 }
562 } else {
563 switch (arizona->type) {
564 case WM5110:
565 case WM8280:
566 /*
567 * As this is only called for the internal regulator
568 * (where we know voltage ranges available) it is ok
569 * to request an exact range.
570 */
571 ret = regulator_set_voltage(arizona->dcvdd,
572 1175000, 1175000);
573 if (ret < 0) {
574 dev_err(arizona->dev,
575 "Failed to set suspend voltage: %d\n",
576 ret);
577 return ret;
578 }
579 break;
580 default:
581 break;
582 }
531 } 583 }
532 584
533 regcache_cache_only(arizona->regmap, true); 585 regcache_cache_only(arizona->regmap, true);