diff options
Diffstat (limited to 'drivers/mfd/arizona-core.c')
-rw-r--r-- | drivers/mfd/arizona-core.c | 52 |
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); |