All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Nuno Sá" <noname.nuno@gmail.com>
To: Jonathan Cameron <jic23@kernel.org>,
	linux-iio@vger.kernel.org,
	"Rafael J . Wysocki" <rafael@kernel.org>,
	Len Brown <lenb@kernel.org>,
	linux-acpi@vger.kernel.org,
	Andy Shevchenko <andriy.shevchenko@linux.intel.com>,
	Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	Daniel Scally <djrscally@gmail.com>,
	Heikki Krogerus <heikki.krogerus@linux.intel.com>,
	Sakari Ailus <sakari.ailus@linux.intel.com>
Cc: "Nuno Sá" <nuno.sa@analog.com>,
	"Cosmin Tanislav" <cosmin.tanislav@analog.com>,
	"Rasmus Villemoes" <linux@rasmusvillemoes.dk>,
	"Tomislav Denis" <tomislav.denis@avl.com>,
	"Marek Vasut" <marex@denx.de>,
	"Olivier Moysan" <olivier.moysan@foss.st.com>,
	"Fabrice Gasnier" <fabrice.gasnier@foss.st.com>,
	"Lad Prabhakar" <prabhakar.mahadev-lad.rj@bp.renesas.com>,
	"Dmitry Baryshkov" <dmitry.baryshkov@linaro.org>,
	"Marijn Suijten" <marijn.suijten@somainline.org>,
	"Marius Cristea" <marius.cristea@microchip.com>,
	"Ibrahim Tilki" <Ibrahim.Tilki@analog.com>,
	"Jonathan Cameron" <Jonathan.Cameron@huawei.com>
Subject: Re: [PATCH 13/13] iio: temp: ltc2983: Use __free(fwnode_handle) to replace fwnode_handle_put() calls
Date: Mon, 15 Jan 2024 11:29:57 +0100	[thread overview]
Message-ID: <6c2715f597a7005765429196630cafb7f4279d25.camel@gmail.com> (raw)
In-Reply-To: <20240114172009.179893-14-jic23@kernel.org>

On Sun, 2024-01-14 at 17:20 +0000, Jonathan Cameron wrote:
> From: Jonathan Cameron <Jonathan.Cameron@huawei.com>
> 
> This use of the new cleanup.h scope based freeing infrastructure allows
> us to exit directly from error conditions and in the good path with
> the reference obtained from fwnode_find_reference() (which may be an error
> pointer) automatically released.
> 
> Cc: Cosmin Tanislav <cosmin.tanislav@analog.com>
> Cc: Nuno Sá <nuno.sa@analog.com>
> Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
> ---

I guess this one could also benefit from using dev_err_probe(). Anyways:

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

I might also be able to test this one...

>  drivers/iio/temperature/ltc2983.c | 70 ++++++++++---------------------
>  1 file changed, 21 insertions(+), 49 deletions(-)
> 
> diff --git a/drivers/iio/temperature/ltc2983.c
> b/drivers/iio/temperature/ltc2983.c
> index fcb96c44d954..4357364e611e 100644
> --- a/drivers/iio/temperature/ltc2983.c
> +++ b/drivers/iio/temperature/ltc2983.c
> @@ -656,7 +656,7 @@ ltc2983_thermocouple_new(const struct fwnode_handle
> *child, struct ltc2983_data
>  			 const struct ltc2983_sensor *sensor)
>  {
>  	struct ltc2983_thermocouple *thermo;
> -	struct fwnode_handle *ref;
> +	struct fwnode_handle *ref __free(fwnode_handle) = NULL;
>  	u32 oc_current;
>  	int ret;
>  
> @@ -714,7 +714,7 @@ ltc2983_thermocouple_new(const struct fwnode_handle
> *child, struct ltc2983_data
>  			 * the error right away.
>  			 */
>  			dev_err(&st->spi->dev, "Property reg must be
> given\n");
> -			goto fail;
> +			return ERR_PTR(ret);
>  		}
>  	}
>  
> @@ -725,22 +725,15 @@ ltc2983_thermocouple_new(const struct fwnode_handle
> *child, struct ltc2983_data
>  		thermo->custom = __ltc2983_custom_sensor_new(st, child,
>  							     propname, false,
>  							     16384, true);
> -		if (IS_ERR(thermo->custom)) {
> -			ret = PTR_ERR(thermo->custom);
> -			goto fail;
> -		}
> +		if (IS_ERR(thermo->custom))
> +			return ERR_CAST(thermo->custom);
>  	}
>  
>  	/* set common parameters */
>  	thermo->sensor.fault_handler = ltc2983_thermocouple_fault_handler;
>  	thermo->sensor.assign_chan = ltc2983_thermocouple_assign_chan;
>  
> -	fwnode_handle_put(ref);
>  	return &thermo->sensor;
> -
> -fail:
> -	fwnode_handle_put(ref);
> -	return ERR_PTR(ret);
>  }
>  
>  static struct ltc2983_sensor *
> @@ -750,7 +743,7 @@ ltc2983_rtd_new(const struct fwnode_handle *child, struct
> ltc2983_data *st,
>  	struct ltc2983_rtd *rtd;
>  	int ret = 0;
>  	struct device *dev = &st->spi->dev;
> -	struct fwnode_handle *ref;
> +	struct fwnode_handle *ref __free(fwnode_handle) = NULL;
>  	u32 excitation_current = 0, n_wires = 0;
>  
>  	rtd = devm_kzalloc(dev, sizeof(*rtd), GFP_KERNEL);
> @@ -766,7 +759,7 @@ ltc2983_rtd_new(const struct fwnode_handle *child, struct
> ltc2983_data *st,
>  	ret = fwnode_property_read_u32(ref, "reg", &rtd->r_sense_chan);
>  	if (ret) {
>  		dev_err(dev, "Property reg must be given\n");
> -		goto fail;
> +		return ERR_PTR(ret);
>  	}
>  
>  	ret = fwnode_property_read_u32(child, "adi,number-of-wires",
> &n_wires);
> @@ -787,8 +780,7 @@ ltc2983_rtd_new(const struct fwnode_handle *child, struct
> ltc2983_data *st,
>  			break;
>  		default:
>  			dev_err(dev, "Invalid number of wires:%u\n",
> n_wires);
> -			ret = -EINVAL;
> -			goto fail;
> +			return ERR_PTR(-EINVAL);
>  		}
>  	}
>  
> @@ -798,8 +790,7 @@ ltc2983_rtd_new(const struct fwnode_handle *child, struct
> ltc2983_data *st,
>  			if (n_wires == 2 || n_wires == 3) {
>  				dev_err(dev,
>  					"Rotation not allowed for 2/3 Wire
> RTDs");
> -				ret = -EINVAL;
> -				goto fail;
> +				return ERR_PTR(-EINVAL);
>  			}
>  			rtd->sensor_config |= LTC2983_RTD_C_ROTATE(1);
>  		} else {
> @@ -829,16 +820,14 @@ ltc2983_rtd_new(const struct fwnode_handle *child,
> struct ltc2983_data *st,
>  				"Invalid rsense chann:%d to use in kelvin
> rsense",
>  				rtd->r_sense_chan);
>  
> -			ret = -EINVAL;
> -			goto fail;
> +			return ERR_PTR(-EINVAL);
>  		}
>  
>  		if (sensor->chan < min || sensor->chan > max) {
>  			dev_err(dev, "Invalid chann:%d for the rtd config",
>  				sensor->chan);
>  
> -			ret = -EINVAL;
> -			goto fail;
> +			return ERR_PTR(-EINVAL);
>  		}
>  	} else {
>  		/* same as differential case */
> @@ -846,8 +835,7 @@ ltc2983_rtd_new(const struct fwnode_handle *child, struct
> ltc2983_data *st,
>  			dev_err(&st->spi->dev,
>  				"Invalid chann:%d for RTD", sensor->chan);
>  
> -			ret = -EINVAL;
> -			goto fail;
> +			return ERR_PTR(-EINVAL);
>  		}
>  	}
>  
> @@ -856,10 +844,8 @@ ltc2983_rtd_new(const struct fwnode_handle *child, struct
> ltc2983_data *st,
>  		rtd->custom = __ltc2983_custom_sensor_new(st, child,
>  							  "adi,custom-rtd",
>  							  false, 2048,
> false);
> -		if (IS_ERR(rtd->custom)) {
> -			ret = PTR_ERR(rtd->custom);
> -			goto fail;
> -		}
> +		if (IS_ERR(rtd->custom))
> +			return ERR_CAST(rtd->custom);
>  	}
>  
>  	/* set common parameters */
> @@ -901,18 +887,13 @@ ltc2983_rtd_new(const struct fwnode_handle *child,
> struct ltc2983_data *st,
>  			dev_err(&st->spi->dev,
>  				"Invalid value for excitation current(%u)",
>  				excitation_current);
> -			ret = -EINVAL;
> -			goto fail;
> +			return ERR_PTR(-EINVAL);
>  		}
>  	}
>  
>  	fwnode_property_read_u32(child, "adi,rtd-curve", &rtd->rtd_curve);
>  
> -	fwnode_handle_put(ref);
>  	return &rtd->sensor;
> -fail:
> -	fwnode_handle_put(ref);
> -	return ERR_PTR(ret);
>  }
>  
>  static struct ltc2983_sensor *
> @@ -921,7 +902,7 @@ ltc2983_thermistor_new(const struct fwnode_handle *child,
> struct ltc2983_data *s
>  {
>  	struct ltc2983_thermistor *thermistor;
>  	struct device *dev = &st->spi->dev;
> -	struct fwnode_handle *ref;
> +	struct fwnode_handle *ref __free(fwnode_handle) = NULL;
>  	u32 excitation_current = 0;
>  	int ret = 0;
>  
> @@ -938,7 +919,7 @@ ltc2983_thermistor_new(const struct fwnode_handle *child,
> struct ltc2983_data *s
>  	ret = fwnode_property_read_u32(ref, "reg", &thermistor-
> >r_sense_chan);
>  	if (ret) {
>  		dev_err(dev, "rsense channel must be configured...\n");
> -		goto fail;
> +		return ERR_PTR(ret);
>  	}
>  
>  	if (fwnode_property_read_bool(child, "adi,single-ended")) {
> @@ -958,8 +939,7 @@ ltc2983_thermistor_new(const struct fwnode_handle *child,
> struct ltc2983_data *s
>  		dev_err(&st->spi->dev,
>  			"Invalid chann:%d for differential thermistor",
>  			sensor->chan);
> -		ret = -EINVAL;
> -		goto fail;
> +		return ERR_PTR(-EINVAL);
>  	}
>  
>  	/* check custom sensor */
> @@ -978,10 +958,8 @@ ltc2983_thermistor_new(const struct fwnode_handle *child,
> struct ltc2983_data *s
>  								 propname,
>  								 steinhart,
>  								 64, false);
> -		if (IS_ERR(thermistor->custom)) {
> -			ret = PTR_ERR(thermistor->custom);
> -			goto fail;
> -		}
> +		if (IS_ERR(thermistor->custom))
> +			return ERR_CAST(thermistor->custom);
>  	}
>  	/* set common parameters */
>  	thermistor->sensor.fault_handler = ltc2983_common_fault_handler;
> @@ -1005,8 +983,7 @@ ltc2983_thermistor_new(const struct fwnode_handle *child,
> struct ltc2983_data *s
>  			    LTC2983_SENSOR_THERMISTOR_STEINHART) {
>  				dev_err(&st->spi->dev,
>  					"Auto Range not allowed for custom
> sensors\n");
> -				ret = -EINVAL;
> -				goto fail;
> +				return ERR_PTR(-EINVAL);
>  			}
>  			thermistor->excitation_current = 0x0c;
>  			break;
> @@ -1047,16 +1024,11 @@ ltc2983_thermistor_new(const struct fwnode_handle
> *child, struct ltc2983_data *s
>  			dev_err(&st->spi->dev,
>  				"Invalid value for excitation current(%u)",
>  				excitation_current);
> -			ret = -EINVAL;
> -			goto fail;
> +			return ERR_PTR(-EINVAL);
>  		}
>  	}
>  
> -	fwnode_handle_put(ref);
>  	return &thermistor->sensor;
> -fail:
> -	fwnode_handle_put(ref);
> -	return ERR_PTR(ret);
>  }
>  
>  static struct ltc2983_sensor *


  reply	other threads:[~2024-01-15 10:26 UTC|newest]

Thread overview: 24+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-01-14 17:19 [PATCH 00/13] device property / IIO: Use cleanup.h magic for fwnode_handle_put() handling Jonathan Cameron
2024-01-14 17:19 ` [PATCH 01/13] device property: Add cleanup.h based fwnode_handle_put() scope based cleanup Jonathan Cameron
2024-01-21 12:28   ` Andy Shevchenko
2024-01-21 16:38     ` Jonathan Cameron
2024-01-21 18:06   ` Lukas Wunner
2024-01-21 18:20     ` Lukas Wunner
2024-01-14 17:19 ` [PATCH 02/13] iio: adc: max11410: Use __free(fwnode_handle) to replace fwnode_handle_put() calls Jonathan Cameron
2024-01-14 17:19 ` [PATCH 03/13] iio: adc: mcp3564: " Jonathan Cameron
2024-01-14 17:20 ` [PATCH 04/13] iio: adc: qcom-spmi-adc5: " Jonathan Cameron
2024-01-14 17:20 ` [PATCH 05/13] iio: adc: rzg2l_adc: " Jonathan Cameron
2024-01-14 17:20 ` [PATCH 06/13] iio: adc: stm32: " Jonathan Cameron
2024-01-14 17:20 ` [PATCH 07/13] iio: adc: ti-ads1015: " Jonathan Cameron
2024-01-14 17:20 ` [PATCH 08/13] iio: adc: ti-ads131e08: " Jonathan Cameron
2024-01-14 17:20 ` [PATCH 09/13] iio: addac: ad74413r: " Jonathan Cameron
2024-01-15 10:17   ` Nuno Sá
2024-02-11 18:53     ` Jonathan Cameron
2024-01-14 17:20 ` [PATCH 10/13] iio: dac: ad3552: " Jonathan Cameron
2024-01-15 10:19   ` Nuno Sá
2024-01-14 17:20 ` [PATCH 11/13] iio: dac: ad5770r: " Jonathan Cameron
2024-01-14 17:20 ` [PATCH 12/13] iio: dac: ltc2688: " Jonathan Cameron
2024-01-15 10:26   ` Nuno Sá
2024-01-14 17:20 ` [PATCH 13/13] iio: temp: ltc2983: " Jonathan Cameron
2024-01-15 10:29   ` Nuno Sá [this message]
2024-01-21 12:27 ` [PATCH 00/13] device property / IIO: Use cleanup.h magic for fwnode_handle_put() handling Andy Shevchenko

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=6c2715f597a7005765429196630cafb7f4279d25.camel@gmail.com \
    --to=noname.nuno@gmail.com \
    --cc=Ibrahim.Tilki@analog.com \
    --cc=Jonathan.Cameron@huawei.com \
    --cc=andriy.shevchenko@linux.intel.com \
    --cc=cosmin.tanislav@analog.com \
    --cc=djrscally@gmail.com \
    --cc=dmitry.baryshkov@linaro.org \
    --cc=fabrice.gasnier@foss.st.com \
    --cc=gregkh@linuxfoundation.org \
    --cc=heikki.krogerus@linux.intel.com \
    --cc=jic23@kernel.org \
    --cc=lenb@kernel.org \
    --cc=linux-acpi@vger.kernel.org \
    --cc=linux-iio@vger.kernel.org \
    --cc=linux@rasmusvillemoes.dk \
    --cc=marex@denx.de \
    --cc=marijn.suijten@somainline.org \
    --cc=marius.cristea@microchip.com \
    --cc=nuno.sa@analog.com \
    --cc=olivier.moysan@foss.st.com \
    --cc=prabhakar.mahadev-lad.rj@bp.renesas.com \
    --cc=rafael@kernel.org \
    --cc=sakari.ailus@linux.intel.com \
    --cc=tomislav.denis@avl.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.