From: Vaibhav Hiremath Date: Wed, 24 Feb 2016 20:57:36 +0000 (+0530) Subject: greybus: arche-platform: Fix exit path in probe fn X-Git-Tag: v4.9-rc1~119^2~378^2~21^2~651 X-Git-Url: https://git.karo-electronics.de/?a=commitdiff_plain;h=6743a6fd963aba000b128fd0b5c420a8f4b0dcde;p=karo-tx-linux.git greybus: arche-platform: Fix exit path in probe fn If SVC coldboot fails or if of_platform_populate() fn fails, then state of device needs to be reverted. Importantly, if of_platform_populate() fails, then poweroff the SVC. Testing Done: Tested on DB3.5 platform. Signed-off-by: Vaibhav Hiremath Reviewed-by: Michael Scott Signed-off-by: Greg Kroah-Hartman --- diff --git a/drivers/staging/greybus/arche-platform.c b/drivers/staging/greybus/arche-platform.c index efeafb373cf1..c99a375bbafb 100644 --- a/drivers/staging/greybus/arche-platform.c +++ b/drivers/staging/greybus/arche-platform.c @@ -387,13 +387,13 @@ static int arche_platform_probe(struct platform_device *pdev) ret = arche_platform_coldboot_seq(arche_pdata); if (ret) { dev_err(dev, "Failed to cold boot svc %d\n", ret); - return ret; + goto err_coldboot; } ret = of_platform_populate(np, NULL, NULL, dev); if (ret) { dev_err(dev, "failed to populate child nodes %d\n", ret); - return ret; + goto err_populate; } INIT_DELAYED_WORK(&arche_pdata->delayed_work, svc_delayed_work); @@ -401,6 +401,12 @@ static int arche_platform_probe(struct platform_device *pdev) dev_info(dev, "Device registered successfully\n"); return 0; + +err_populate: + arche_platform_poweroff_seq(arche_pdata); +err_coldboot: + device_remove_file(&pdev->dev, &dev_attr_state); + return ret; } static int arche_remove_child(struct device *dev, void *unused)