]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
memory: samsung: exynos5422-dmc: use scoped device node handling to simplify error...
authorKrzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
Fri, 16 Aug 2024 10:54:28 +0000 (12:54 +0200)
committerKrzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
Wed, 21 Aug 2024 11:23:33 +0000 (13:23 +0200)
Obtain the device node reference with scoped/cleanup.h to reduce error
handling and make the code a bit simpler.

Reviewed-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
Link: https://lore.kernel.org/r/20240816-cleanup-h-of-node-put-memory-v2-4-9eed0ee16b78@linaro.org
Signed-off-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
drivers/memory/samsung/exynos5422-dmc.c

index 48ef41b8eaa03380b05e1d3f9cd7a95690a792f7..7d80322754fadac3a524b97c6857b3a5f15578af 100644 (file)
@@ -4,6 +4,7 @@
  * Author: Lukasz Luba <l.luba@partner.samsung.com>
  */
 
+#include <linux/cleanup.h>
 #include <linux/clk.h>
 #include <linux/devfreq.h>
 #include <linux/devfreq-event.h>
@@ -1178,10 +1179,10 @@ static int of_get_dram_timings(struct exynos5_dmc *dmc)
        int ret = 0;
        struct device *dev = dmc->dev;
        int idx;
-       struct device_node *np_ddr;
        u32 freq_mhz, clk_period_ps;
 
-       np_ddr = of_parse_phandle(dev->of_node, "device-handle", 0);
+       struct device_node *np_ddr __free(device_node) =
+               of_parse_phandle(dev->of_node, "device-handle", 0);
        if (!np_ddr) {
                dev_warn(dev, "could not find 'device-handle' in DT\n");
                return -EINVAL;
@@ -1189,39 +1190,31 @@ static int of_get_dram_timings(struct exynos5_dmc *dmc)
 
        dmc->timing_row = devm_kmalloc_array(dev, TIMING_COUNT,
                                             sizeof(u32), GFP_KERNEL);
-       if (!dmc->timing_row) {
-               ret = -ENOMEM;
-               goto put_node;
-       }
+       if (!dmc->timing_row)
+               return -ENOMEM;
 
        dmc->timing_data = devm_kmalloc_array(dev, TIMING_COUNT,
                                              sizeof(u32), GFP_KERNEL);
-       if (!dmc->timing_data) {
-               ret = -ENOMEM;
-               goto put_node;
-       }
+       if (!dmc->timing_data)
+               return -ENOMEM;
 
        dmc->timing_power = devm_kmalloc_array(dev, TIMING_COUNT,
                                               sizeof(u32), GFP_KERNEL);
-       if (!dmc->timing_power) {
-               ret = -ENOMEM;
-               goto put_node;
-       }
+       if (!dmc->timing_power)
+               return -ENOMEM;
 
        dmc->timings = of_lpddr3_get_ddr_timings(np_ddr, dev,
                                                 DDR_TYPE_LPDDR3,
                                                 &dmc->timings_arr_size);
        if (!dmc->timings) {
                dev_warn(dev, "could not get timings from DT\n");
-               ret = -EINVAL;
-               goto put_node;
+               return -EINVAL;
        }
 
        dmc->min_tck = of_lpddr3_get_min_tck(np_ddr, dev);
        if (!dmc->min_tck) {
                dev_warn(dev, "could not get tck from DT\n");
-               ret = -EINVAL;
-               goto put_node;
+               return -EINVAL;
        }
 
        /* Sorted array of OPPs with frequency ascending */
@@ -1241,8 +1234,6 @@ static int of_get_dram_timings(struct exynos5_dmc *dmc)
        dmc->bypass_timing_data = dmc->timing_data[idx - 1];
        dmc->bypass_timing_power = dmc->timing_power[idx - 1];
 
-put_node:
-       of_node_put(np_ddr);
        return ret;
 }