thermal: imx: handle error path in one place to save duplicated code
authorAnson Huang <Anson.Huang@nxp.com>
Thu, 13 Sep 2018 09:13:06 +0000 (17:13 +0800)
committerEduardo Valentin <edubezval@gmail.com>
Tue, 23 Oct 2018 00:37:05 +0000 (17:37 -0700)
During probe phase, the error path can be handled in one place and
use goto method to save many duplicated code.

Signed-off-by: Anson Huang <Anson.Huang@nxp.com>
Reviewed-by: Daniel Lezcano <daniel.lezcano@linaro.org>
Signed-off-by: Eduardo Valentin <edubezval@gmail.com>
drivers/thermal/imx_thermal.c

index 6cfa2a82209e4957acc9ce7b59b9edd5d0b3dd19..15661549eb67a79d2974e0d1b0166422acd3ee5e 100644 (file)
@@ -762,9 +762,7 @@ static int imx_thermal_probe(struct platform_device *pdev)
                if (ret != -EPROBE_DEFER)
                        dev_err(&pdev->dev,
                                "failed to get thermal clk: %d\n", ret);
-               cpufreq_cooling_unregister(data->cdev);
-               cpufreq_cpu_put(data->policy);
-               return ret;
+               goto cpufreq_put;
        }
 
        /*
@@ -777,9 +775,7 @@ static int imx_thermal_probe(struct platform_device *pdev)
        ret = clk_prepare_enable(data->thermal_clk);
        if (ret) {
                dev_err(&pdev->dev, "failed to enable thermal clk: %d\n", ret);
-               cpufreq_cooling_unregister(data->cdev);
-               cpufreq_cpu_put(data->policy);
-               return ret;
+               goto cpufreq_put;
        }
 
        data->tz = thermal_zone_device_register("imx_thermal_zone",
@@ -792,10 +788,7 @@ static int imx_thermal_probe(struct platform_device *pdev)
                ret = PTR_ERR(data->tz);
                dev_err(&pdev->dev,
                        "failed to register thermal zone device %d\n", ret);
-               clk_disable_unprepare(data->thermal_clk);
-               cpufreq_cooling_unregister(data->cdev);
-               cpufreq_cpu_put(data->policy);
-               return ret;
+               goto clk_disable;
        }
 
        dev_info(&pdev->dev, "%s CPU temperature grade - max:%dC"
@@ -827,14 +820,20 @@ static int imx_thermal_probe(struct platform_device *pdev)
                        0, "imx_thermal", data);
        if (ret < 0) {
                dev_err(&pdev->dev, "failed to request alarm irq: %d\n", ret);
-               clk_disable_unprepare(data->thermal_clk);
-               thermal_zone_device_unregister(data->tz);
-               cpufreq_cooling_unregister(data->cdev);
-               cpufreq_cpu_put(data->policy);
-               return ret;
+               goto thermal_zone_unregister;
        }
 
        return 0;
+
+thermal_zone_unregister:
+       thermal_zone_device_unregister(data->tz);
+clk_disable:
+       clk_disable_unprepare(data->thermal_clk);
+cpufreq_put:
+       cpufreq_cooling_unregister(data->cdev);
+       cpufreq_cpu_put(data->policy);
+
+       return ret;
 }
 
 static int imx_thermal_remove(struct platform_device *pdev)