iio: dac: ltc2688: Use device_for_each_child_node_scoped()
authorJonathan Cameron <Jonathan.Cameron@huawei.com>
Sat, 17 Feb 2024 16:42:49 +0000 (16:42 +0000)
committerJonathan Cameron <Jonathan.Cameron@huawei.com>
Mon, 25 Mar 2024 19:50:09 +0000 (19:50 +0000)
Switching to the _scoped() version removes the need for manual
calling of fwnode_handle_put() in the paths where the code
exits the loop early. In this case that's all in error paths.

Reviewed-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Tested-by: Nuno Sa <nuno.sa@analog.com>
Reviewed-by: Nuno Sa <nuno.sa@analog.com>
Link: https://lore.kernel.org/r/20240217164249.921878-16-jic23@kernel.org
Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
drivers/iio/dac/ltc2688.c

index fc8eb53c65be3b365f04a1b47e167613184d684e..c4b1ba30f935458d58b951c36e2d85bab3c27f7a 100644 (file)
@@ -746,26 +746,21 @@ static int ltc2688_span_lookup(const struct ltc2688_state *st, int min, int max)
 static int ltc2688_channel_config(struct ltc2688_state *st)
 {
        struct device *dev = &st->spi->dev;
-       struct fwnode_handle *child;
        u32 reg, clk_input, val, tmp[2];
        int ret, span;
 
-       device_for_each_child_node(dev, child) {
+       device_for_each_child_node_scoped(dev, child) {
                struct ltc2688_chan *chan;
 
                ret = fwnode_property_read_u32(child, "reg", &reg);
-               if (ret) {
-                       fwnode_handle_put(child);
+               if (ret)
                        return dev_err_probe(dev, ret,
                                             "Failed to get reg property\n");
-               }
 
-               if (reg >= LTC2688_DAC_CHANNELS) {
-                       fwnode_handle_put(child);
+               if (reg >= LTC2688_DAC_CHANNELS)
                        return dev_err_probe(dev, -EINVAL,
                                             "reg bigger than: %d\n",
                                             LTC2688_DAC_CHANNELS);
-               }
 
                val = 0;
                chan = &st->channels[reg];
@@ -786,12 +781,10 @@ static int ltc2688_channel_config(struct ltc2688_state *st)
                if (!ret) {
                        span = ltc2688_span_lookup(st, (int)tmp[0] / 1000,
                                                   tmp[1] / 1000);
-                       if (span < 0) {
-                               fwnode_handle_put(child);
-                               return dev_err_probe(dev, -EINVAL,
+                       if (span < 0)
+                               return dev_err_probe(dev, span,
                                                     "output range not valid:[%d %d]\n",
                                                     tmp[0], tmp[1]);
-                       }
 
                        val |= FIELD_PREP(LTC2688_CH_SPAN_MSK, span);
                }
@@ -800,17 +793,14 @@ static int ltc2688_channel_config(struct ltc2688_state *st)
                                               &clk_input);
                if (!ret) {
                        if (clk_input >= LTC2688_CH_TGP_MAX) {
-                               fwnode_handle_put(child);
                                return dev_err_probe(dev, -EINVAL,
                                                     "toggle-dither-input inv value(%d)\n",
                                                     clk_input);
                        }
 
                        ret = ltc2688_tgp_clk_setup(st, chan, child, clk_input);
-                       if (ret) {
-                               fwnode_handle_put(child);
+                       if (ret)
                                return ret;
-                       }
 
                        /*
                         * 0 means software toggle which is the default mode.
@@ -844,11 +834,9 @@ static int ltc2688_channel_config(struct ltc2688_state *st)
 
                ret = regmap_write(st->regmap, LTC2688_CMD_CH_SETTING(reg),
                                   val);
-               if (ret) {
-                       fwnode_handle_put(child);
-                       return dev_err_probe(dev, -EINVAL,
+               if (ret)
+                       return dev_err_probe(dev, ret,
                                             "failed to set chan settings\n");
-               }
        }
 
        return 0;