iio: adc: mcp3564: Use device_for_each_child_node_scoped()
authorJonathan Cameron <Jonathan.Cameron@huawei.com>
Sun, 28 Apr 2024 17:40:19 +0000 (18:40 +0100)
committerJonathan Cameron <Jonathan.Cameron@huawei.com>
Mon, 29 Apr 2024 19:55:24 +0000 (20:55 +0100)
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: Marcelo Schmitt <marcelo.schmitt1@gmail.com>
Reviewed-by: Marius Cristea <marius.cristea@microchip.com>
Link: https://lore.kernel.org/r/20240428174020.1832825-2-jic23@kernel.org
Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
drivers/iio/adc/mcp3564.c

index 311b613b605754026aafa8857a4910c6a810d4b5..e2ae13f1e842e8a1fe34d176e9be12cd13d12b29 100644 (file)
@@ -998,7 +998,6 @@ static int mcp3564_parse_fw_children(struct iio_dev *indio_dev)
        struct mcp3564_state *adc = iio_priv(indio_dev);
        struct device *dev = &adc->spi->dev;
        struct iio_chan_spec *channels;
-       struct fwnode_handle *child;
        struct iio_chan_spec chanspec = mcp3564_channel_template;
        struct iio_chan_spec temp_chanspec = mcp3564_temp_channel_template;
        struct iio_chan_spec burnout_chanspec = mcp3564_burnout_channel_template;
@@ -1025,7 +1024,7 @@ static int mcp3564_parse_fw_children(struct iio_dev *indio_dev)
        if (!channels)
                return dev_err_probe(dev, -ENOMEM, "Can't allocate memory\n");
 
-       device_for_each_child_node(dev, child) {
+       device_for_each_child_node_scoped(dev, child) {
                node_name = fwnode_get_name(child);
 
                if (fwnode_property_present(child, "diff-channels")) {
@@ -1033,26 +1032,25 @@ static int mcp3564_parse_fw_children(struct iio_dev *indio_dev)
                                                             "diff-channels",
                                                             inputs,
                                                             ARRAY_SIZE(inputs));
+                       if (ret)
+                               return ret;
+
                        chanspec.differential = 1;
                } else {
                        ret = fwnode_property_read_u32(child, "reg", &inputs[0]);
+                       if (ret)
+                               return ret;
 
                        chanspec.differential = 0;
                        inputs[1] = MCP3564_AGND;
                }
-               if (ret) {
-                       fwnode_handle_put(child);
-                       return ret;
-               }
 
                if (inputs[0] > MCP3564_INTERNAL_VCM ||
-                   inputs[1] > MCP3564_INTERNAL_VCM) {
-                       fwnode_handle_put(child);
+                   inputs[1] > MCP3564_INTERNAL_VCM)
                        return dev_err_probe(&indio_dev->dev, -EINVAL,
                                             "Channel index > %d, for %s\n",
                                             MCP3564_INTERNAL_VCM + 1,
                                             node_name);
-               }
 
                chanspec.address = (inputs[0] << 4) | inputs[1];
                chanspec.channel = inputs[0];