diff mbox series

[v4,05/15] iio: adc: max11410: Use device_for_each_child_node_scoped()

Message ID 20240217164249.921878-6-jic23@kernel.org
State New
Headers show
Series device property / IIO: Use cleanup.h magic for fwnode_handle_put() handling. | expand

Commit Message

Jonathan Cameron Feb. 17, 2024, 4:42 p.m. UTC
From: Jonathan Cameron <Jonathan.Cameron@huawei.com>

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.

Cc: Nuno Sá <nuno.sa@analog.com>
Cc: Ibrahim Tilki <Ibrahim.Tilki@analog.com>
Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
---
 drivers/iio/adc/max11410.c | 27 +++++++--------------------
 1 file changed, 7 insertions(+), 20 deletions(-)

Comments

Nuno Sá Feb. 19, 2024, 1:54 p.m. UTC | #1
On Sat, 2024-02-17 at 16:42 +0000, Jonathan Cameron wrote:
> From: Jonathan Cameron <Jonathan.Cameron@huawei.com>
> 
> 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.
> 
> Cc: Nuno Sá <nuno.sa@analog.com>
> Cc: Ibrahim Tilki <Ibrahim.Tilki@analog.com>
> Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
> ---

Reviewed-by: Nuno Sa <nuno.sa@analog.com>

>  drivers/iio/adc/max11410.c | 27 +++++++--------------------
>  1 file changed, 7 insertions(+), 20 deletions(-)
> 
> diff --git a/drivers/iio/adc/max11410.c b/drivers/iio/adc/max11410.c
> index 6af829349b4e..45368850b220 100644
> --- a/drivers/iio/adc/max11410.c
> +++ b/drivers/iio/adc/max11410.c
> @@ -696,7 +696,6 @@ static int max11410_parse_channels(struct max11410_state
> *st,
>  	struct device *dev = &st->spi_dev->dev;
>  	struct max11410_channel_config *cfg;
>  	struct iio_chan_spec *channels;
> -	struct fwnode_handle *child;
>  	u32 reference, sig_path;
>  	const char *node_name;
>  	u32 inputs[2], scale;
> @@ -720,7 +719,7 @@ static int max11410_parse_channels(struct max11410_state
> *st,
>  	if (!st->channels)
>  		return -ENOMEM;
>  
> -	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")) {
>  			ret = fwnode_property_read_u32_array(child,
> @@ -735,47 +734,37 @@ static int max11410_parse_channels(struct max11410_state
> *st,
>  			inputs[1] = 0;
>  			chanspec.differential = 0;
>  		}
> -		if (ret) {
> -			fwnode_handle_put(child);
> +		if (ret)
>  			return ret;
> -		}
>  
>  		if (inputs[0] > MAX11410_CHANNEL_INDEX_MAX ||
> -		    inputs[1] > MAX11410_CHANNEL_INDEX_MAX) {
> -			fwnode_handle_put(child);
> +		    inputs[1] > MAX11410_CHANNEL_INDEX_MAX)
>  			return dev_err_probe(&indio_dev->dev, -EINVAL,
>  					     "Invalid channel index for %s,
> should be less than %d\n",
>  					     node_name,
>  					     MAX11410_CHANNEL_INDEX_MAX + 1);
> -		}
>  
>  		cfg = &st->channels[chan_idx];
>  
>  		reference = MAX11410_REFSEL_AVDD_AGND;
>  		fwnode_property_read_u32(child, "adi,reference", &reference);
> -		if (reference > MAX11410_REFSEL_MAX) {
> -			fwnode_handle_put(child);
> +		if (reference > MAX11410_REFSEL_MAX)
>  			return dev_err_probe(&indio_dev->dev, -EINVAL,
>  					     "Invalid adi,reference value for
> %s, should be less than %d.\n",
>  					     node_name, MAX11410_REFSEL_MAX +
> 1);
> -		}
>  
>  		if (!max11410_get_vrefp(st, reference) ||
> -		    (!max11410_get_vrefn(st, reference) && reference <= 2)) {
> -			fwnode_handle_put(child);
> +		    (!max11410_get_vrefn(st, reference) && reference <= 2))
>  			return dev_err_probe(&indio_dev->dev, -EINVAL,
>  					     "Invalid VREF configuration for
> %s, either specify corresponding VREF regulators or change adi,reference
> property.\n",
>  					     node_name);
> -		}
>  
>  		sig_path = MAX11410_PGA_SIG_PATH_BUFFERED;
>  		fwnode_property_read_u32(child, "adi,input-mode", &sig_path);
> -		if (sig_path > MAX11410_SIG_PATH_MAX) {
> -			fwnode_handle_put(child);
> +		if (sig_path > MAX11410_SIG_PATH_MAX)
>  			return dev_err_probe(&indio_dev->dev, -EINVAL,
>  					     "Invalid adi,input-mode value
> for %s, should be less than %d.\n",
>  					     node_name, MAX11410_SIG_PATH_MAX
> + 1);
> -		}
>  
>  		fwnode_property_read_u32(child, "settling-time-us",
>  					 &cfg->settling_time_us);
> @@ -793,10 +782,8 @@ static int max11410_parse_channels(struct max11410_state
> *st,
>  			cfg->scale_avail = devm_kcalloc(dev,
> MAX11410_SCALE_AVAIL_SIZE * 2,
>  							sizeof(*cfg-
> >scale_avail),
>  							GFP_KERNEL);
> -			if (!cfg->scale_avail) {
> -				fwnode_handle_put(child);
> +			if (!cfg->scale_avail)
>  				return -ENOMEM;
> -			}
>  
>  			scale = max11410_get_scale(st, *cfg);
>  			for (i = 0; i < MAX11410_SCALE_AVAIL_SIZE; i++) {
diff mbox series

Patch

diff --git a/drivers/iio/adc/max11410.c b/drivers/iio/adc/max11410.c
index 6af829349b4e..45368850b220 100644
--- a/drivers/iio/adc/max11410.c
+++ b/drivers/iio/adc/max11410.c
@@ -696,7 +696,6 @@  static int max11410_parse_channels(struct max11410_state *st,
 	struct device *dev = &st->spi_dev->dev;
 	struct max11410_channel_config *cfg;
 	struct iio_chan_spec *channels;
-	struct fwnode_handle *child;
 	u32 reference, sig_path;
 	const char *node_name;
 	u32 inputs[2], scale;
@@ -720,7 +719,7 @@  static int max11410_parse_channels(struct max11410_state *st,
 	if (!st->channels)
 		return -ENOMEM;
 
-	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")) {
 			ret = fwnode_property_read_u32_array(child,
@@ -735,47 +734,37 @@  static int max11410_parse_channels(struct max11410_state *st,
 			inputs[1] = 0;
 			chanspec.differential = 0;
 		}
-		if (ret) {
-			fwnode_handle_put(child);
+		if (ret)
 			return ret;
-		}
 
 		if (inputs[0] > MAX11410_CHANNEL_INDEX_MAX ||
-		    inputs[1] > MAX11410_CHANNEL_INDEX_MAX) {
-			fwnode_handle_put(child);
+		    inputs[1] > MAX11410_CHANNEL_INDEX_MAX)
 			return dev_err_probe(&indio_dev->dev, -EINVAL,
 					     "Invalid channel index for %s, should be less than %d\n",
 					     node_name,
 					     MAX11410_CHANNEL_INDEX_MAX + 1);
-		}
 
 		cfg = &st->channels[chan_idx];
 
 		reference = MAX11410_REFSEL_AVDD_AGND;
 		fwnode_property_read_u32(child, "adi,reference", &reference);
-		if (reference > MAX11410_REFSEL_MAX) {
-			fwnode_handle_put(child);
+		if (reference > MAX11410_REFSEL_MAX)
 			return dev_err_probe(&indio_dev->dev, -EINVAL,
 					     "Invalid adi,reference value for %s, should be less than %d.\n",
 					     node_name, MAX11410_REFSEL_MAX + 1);
-		}
 
 		if (!max11410_get_vrefp(st, reference) ||
-		    (!max11410_get_vrefn(st, reference) && reference <= 2)) {
-			fwnode_handle_put(child);
+		    (!max11410_get_vrefn(st, reference) && reference <= 2))
 			return dev_err_probe(&indio_dev->dev, -EINVAL,
 					     "Invalid VREF configuration for %s, either specify corresponding VREF regulators or change adi,reference property.\n",
 					     node_name);
-		}
 
 		sig_path = MAX11410_PGA_SIG_PATH_BUFFERED;
 		fwnode_property_read_u32(child, "adi,input-mode", &sig_path);
-		if (sig_path > MAX11410_SIG_PATH_MAX) {
-			fwnode_handle_put(child);
+		if (sig_path > MAX11410_SIG_PATH_MAX)
 			return dev_err_probe(&indio_dev->dev, -EINVAL,
 					     "Invalid adi,input-mode value for %s, should be less than %d.\n",
 					     node_name, MAX11410_SIG_PATH_MAX + 1);
-		}
 
 		fwnode_property_read_u32(child, "settling-time-us",
 					 &cfg->settling_time_us);
@@ -793,10 +782,8 @@  static int max11410_parse_channels(struct max11410_state *st,
 			cfg->scale_avail = devm_kcalloc(dev, MAX11410_SCALE_AVAIL_SIZE * 2,
 							sizeof(*cfg->scale_avail),
 							GFP_KERNEL);
-			if (!cfg->scale_avail) {
-				fwnode_handle_put(child);
+			if (!cfg->scale_avail)
 				return -ENOMEM;
-			}
 
 			scale = max11410_get_scale(st, *cfg);
 			for (i = 0; i < MAX11410_SCALE_AVAIL_SIZE; i++) {