greybus: arche-platform: Put APB in reset if of_platform_populate() fails
authorViresh Kumar <viresh.kumar@linaro.org>
Mon, 11 Jan 2016 05:59:05 +0000 (11:29 +0530)
committerGreg Kroah-Hartman <gregkh@google.com>
Mon, 11 Jan 2016 23:58:01 +0000 (15:58 -0800)
The current implementation around of_platform_populate() is not so
great. On error, we first print an error message, followed by a success
message and finally we return an error.

And over that we don't undo what we did initially.

This patch puts the APB back into reset and create a separate error
path to make things clear.

Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
Reviewed-by: Vaibhav Hiremath <vaibhav.hiremath@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
drivers/staging/greybus/arche-platform.c

index 93d90b2dc866bd7d752538073bd3981fd51d97c3..67bbd71ec3d1d44604e20947f6d549f3c46ebc87 100644 (file)
@@ -156,13 +156,16 @@ static int arche_platform_probe(struct platform_device *pdev)
 
        /* probe all childs here */
        ret = of_platform_populate(np, NULL, NULL, dev);
-       if (ret)
+       if (ret) {
+               arche_platform_cleanup(arche_pdata);
                dev_err(dev, "no child node found\n");
+               return ret;
+       }
 
        export_gpios(arche_pdata);
 
        dev_info(dev, "Device registered successfully\n");
-       return ret;
+       return 0;
 }
 
 static int arche_remove_child(struct device *dev, void *unused)