mfd: arizona: Handle probe deferral for reset GPIO
authorCharles Keepax <ckeepax@opensource.wolfsonmicro.com>
Tue, 20 Sep 2016 15:30:14 +0000 (16:30 +0100)
committerLee Jones <lee.jones@linaro.org>
Tue, 4 Oct 2016 14:48:05 +0000 (15:48 +0100)
The Arizona CODECs will generally function correctly without a reset line
although it is strongly advised to have one, as such we do allow the system
to boot if the reset gpio is missing or incorrectly specified.  However
we should fail probe if we get a probe deferral request, this patch adds
handling for this case.

Reported-by: Richard Fitzgerald <rf@opensource.wolfsonmicro.com>
Signed-off-by: Charles Keepax <ckeepax@opensource.wolfsonmicro.com>
Signed-off-by: Lee Jones <lee.jones@linaro.org>
drivers/mfd/arizona-core.c

index dcee48fc2e06c4508591477a6760c923e272bfb9..41767f7239bbec98916da2de1ea1924b1b3beeba 100644 (file)
@@ -814,7 +814,9 @@ static int arizona_of_get_core_pdata(struct arizona *arizona)
        int count = 0;
 
        pdata->reset = of_get_named_gpio(arizona->dev->of_node, "wlf,reset", 0);
-       if (pdata->reset < 0) {
+       if (pdata->reset == -EPROBE_DEFER) {
+               return pdata->reset;
+       } else if (pdata->reset < 0) {
                dev_err(arizona->dev, "Reset GPIO missing/malformed: %d\n",
                        pdata->reset);
 
@@ -1041,11 +1043,14 @@ int arizona_dev_init(struct arizona *arizona)
        dev_set_drvdata(arizona->dev, arizona);
        mutex_init(&arizona->clk_lock);
 
-       if (dev_get_platdata(arizona->dev))
+       if (dev_get_platdata(arizona->dev)) {
                memcpy(&arizona->pdata, dev_get_platdata(arizona->dev),
                       sizeof(arizona->pdata));
-       else
-               arizona_of_get_core_pdata(arizona);
+       } else {
+               ret = arizona_of_get_core_pdata(arizona);
+               if (ret < 0)
+                       return ret;
+       }
 
        BUILD_BUG_ON(ARRAY_SIZE(arizona->mclk) != ARRAY_SIZE(mclk_name));
        for (i = 0; i < ARRAY_SIZE(arizona->mclk); i++) {