diff options
Diffstat (limited to 'drivers/mfd/arizona-core.c')
-rw-r--r-- | drivers/mfd/arizona-core.c | 41 |
1 files changed, 24 insertions, 17 deletions
diff --git a/drivers/mfd/arizona-core.c b/drivers/mfd/arizona-core.c index 1c3ae57082ed..07e6e27be23c 100644 --- a/drivers/mfd/arizona-core.c +++ b/drivers/mfd/arizona-core.c | |||
@@ -508,19 +508,31 @@ int arizona_of_get_type(struct device *dev) | |||
508 | } | 508 | } |
509 | EXPORT_SYMBOL_GPL(arizona_of_get_type); | 509 | EXPORT_SYMBOL_GPL(arizona_of_get_type); |
510 | 510 | ||
511 | int arizona_of_get_named_gpio(struct arizona *arizona, const char *prop, | ||
512 | bool mandatory) | ||
513 | { | ||
514 | int gpio; | ||
515 | |||
516 | gpio = of_get_named_gpio(arizona->dev->of_node, prop, 0); | ||
517 | if (gpio < 0) { | ||
518 | if (mandatory) | ||
519 | dev_err(arizona->dev, | ||
520 | "Mandatory DT gpio %s missing/malformed: %d\n", | ||
521 | prop, gpio); | ||
522 | |||
523 | gpio = 0; | ||
524 | } | ||
525 | |||
526 | return gpio; | ||
527 | } | ||
528 | EXPORT_SYMBOL_GPL(arizona_of_get_named_gpio); | ||
529 | |||
511 | static int arizona_of_get_core_pdata(struct arizona *arizona) | 530 | static int arizona_of_get_core_pdata(struct arizona *arizona) |
512 | { | 531 | { |
532 | struct arizona_pdata *pdata = &arizona->pdata; | ||
513 | int ret, i; | 533 | int ret, i; |
514 | 534 | ||
515 | arizona->pdata.reset = of_get_named_gpio(arizona->dev->of_node, | 535 | pdata->reset = arizona_of_get_named_gpio(arizona, "wlf,reset", true); |
516 | "wlf,reset", 0); | ||
517 | if (arizona->pdata.reset < 0) | ||
518 | arizona->pdata.reset = 0; | ||
519 | |||
520 | arizona->pdata.ldoena = of_get_named_gpio(arizona->dev->of_node, | ||
521 | "wlf,ldoena", 0); | ||
522 | if (arizona->pdata.ldoena < 0) | ||
523 | arizona->pdata.ldoena = 0; | ||
524 | 536 | ||
525 | ret = of_property_read_u32_array(arizona->dev->of_node, | 537 | ret = of_property_read_u32_array(arizona->dev->of_node, |
526 | "wlf,gpio-defaults", | 538 | "wlf,gpio-defaults", |
@@ -652,6 +664,9 @@ int arizona_dev_init(struct arizona *arizona) | |||
652 | return -EINVAL; | 664 | return -EINVAL; |
653 | } | 665 | } |
654 | 666 | ||
667 | /* Mark DCVDD as external, LDO1 driver will clear if internal */ | ||
668 | arizona->external_dcvdd = true; | ||
669 | |||
655 | ret = mfd_add_devices(arizona->dev, -1, early_devs, | 670 | ret = mfd_add_devices(arizona->dev, -1, early_devs, |
656 | ARRAY_SIZE(early_devs), NULL, 0, NULL); | 671 | ARRAY_SIZE(early_devs), NULL, 0, NULL); |
657 | if (ret != 0) { | 672 | if (ret != 0) { |
@@ -851,14 +866,6 @@ int arizona_dev_init(struct arizona *arizona) | |||
851 | arizona->pdata.gpio_defaults[i]); | 866 | arizona->pdata.gpio_defaults[i]); |
852 | } | 867 | } |
853 | 868 | ||
854 | /* | ||
855 | * LDO1 can only be used to supply DCVDD so if it has no | ||
856 | * consumers then DCVDD is supplied externally. | ||
857 | */ | ||
858 | if (arizona->pdata.ldo1 && | ||
859 | arizona->pdata.ldo1->num_consumer_supplies == 0) | ||
860 | arizona->external_dcvdd = true; | ||
861 | |||
862 | pm_runtime_set_autosuspend_delay(arizona->dev, 100); | 869 | pm_runtime_set_autosuspend_delay(arizona->dev, 100); |
863 | pm_runtime_use_autosuspend(arizona->dev); | 870 | pm_runtime_use_autosuspend(arizona->dev); |
864 | pm_runtime_enable(arizona->dev); | 871 | pm_runtime_enable(arizona->dev); |