All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jonathan Cameron <jic23@kernel.org>
To: linux-iio@vger.kernel.org
Cc: "Mudit Sharma" <muditsharma.info@gmail.com>,
	"Julien Stephan" <jstephan@baylibre.com>,
	"Mariel Tinaco" <Mariel.Tinaco@analog.com>,
	"Angelo Dureghello" <adureghello@baylibre.com>,
	"Gustavo Silva" <gustavograzs@gmail.com>,
	"Nuno Sa" <nuno.sa@analog.com>,
	"João Paulo Gonçalves" <joao.goncalves@toradex.com>,
	"ChiYuan Huang" <cy_huang@richtek.com>,
	"Ramona Alexandra Nechita" <ramona.nechita@analog.com>,
	"Trevor Gamblin" <tgamblin@baylibre.com>,
	"Guillaume Stols" <gstols@baylibre.com>,
	"David Lechner" <dlechner@baylibre.com>,
	"Cosmin Tanislav" <demonsingur@gmail.com>,
	"Marcelo Schmitt" <marcelo.schmitt@analog.com>,
	"Gwendal Grignou" <gwendal@chromium.org>,
	"Antoni Pokusinski" <apokusinski01@gmail.com>,
	"Tomasz Duszynski" <tomasz.duszynski@octakon.com>,
	"Jonathan Cameron" <Jonathan.Cameron@huawei.com>
Subject: [PATCH 02/27] iio: chemical: scd30: Use guard(mutex) to allow early returns
Date: Tue,  4 Feb 2025 20:02:24 +0000	[thread overview]
Message-ID: <20250204200250.636721-3-jic23@kernel.org> (raw)
In-Reply-To: <20250204200250.636721-1-jic23@kernel.org>

From: Jonathan Cameron <Jonathan.Cameron@huawei.com>

Auto cleanup based release of the lock allows for simpler code flow in a
few functions with large multiplexing style switch statements and no
common operations following the switch.

Suggested-by: David Lechner <dlechner@baylibre.com>
Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
Cc: Tomasz Duszynski <tomasz.duszynski@octakon.com>
---
 drivers/iio/chemical/scd30_core.c | 63 ++++++++++++++-----------------
 1 file changed, 28 insertions(+), 35 deletions(-)

diff --git a/drivers/iio/chemical/scd30_core.c b/drivers/iio/chemical/scd30_core.c
index d613c54cb28d..7a864b52adf1 100644
--- a/drivers/iio/chemical/scd30_core.c
+++ b/drivers/iio/chemical/scd30_core.c
@@ -6,6 +6,7 @@
  */
 #include <linux/bits.h>
 #include <linux/completion.h>
+#include <linux/cleanup.h>
 #include <linux/delay.h>
 #include <linux/device.h>
 #include <linux/errno.h>
@@ -198,112 +199,104 @@ static int scd30_read_raw(struct iio_dev *indio_dev, struct iio_chan_spec const
 			  int *val, int *val2, long mask)
 {
 	struct scd30_state *state = iio_priv(indio_dev);
-	int ret = -EINVAL;
+	int ret;
 	u16 tmp;
 
-	mutex_lock(&state->lock);
+	guard(mutex)(&state->lock);
 	switch (mask) {
 	case IIO_CHAN_INFO_RAW:
 	case IIO_CHAN_INFO_PROCESSED:
 		if (chan->output) {
 			*val = state->pressure_comp;
-			ret = IIO_VAL_INT;
-			break;
+			return IIO_VAL_INT;
 		}
 
 		ret = iio_device_claim_direct_mode(indio_dev);
 		if (ret)
-			break;
+			return ret;
 
 		ret = scd30_read(state);
 		if (ret) {
 			iio_device_release_direct_mode(indio_dev);
-			break;
+			return ret;
 		}
 
 		*val = state->meas[chan->address];
 		iio_device_release_direct_mode(indio_dev);
-		ret = IIO_VAL_INT;
-		break;
+		return IIO_VAL_INT;
 	case IIO_CHAN_INFO_SCALE:
 		*val = 0;
 		*val2 = 1;
-		ret = IIO_VAL_INT_PLUS_MICRO;
-		break;
+		return IIO_VAL_INT_PLUS_MICRO;
 	case IIO_CHAN_INFO_SAMP_FREQ:
 		ret = scd30_command_read(state, CMD_MEAS_INTERVAL, &tmp);
 		if (ret)
-			break;
+			return ret;
 
 		*val = 0;
 		*val2 = 1000000000 / tmp;
-		ret = IIO_VAL_INT_PLUS_NANO;
-		break;
+		return IIO_VAL_INT_PLUS_NANO;
 	case IIO_CHAN_INFO_CALIBBIAS:
 		ret = scd30_command_read(state, CMD_TEMP_OFFSET, &tmp);
 		if (ret)
-			break;
+			return ret;
 
 		*val = tmp;
-		ret = IIO_VAL_INT;
-		break;
+		return IIO_VAL_INT;
+	default:
+		return -EINVAL;
 	}
-	mutex_unlock(&state->lock);
-
-	return ret;
 }
 
 static int scd30_write_raw(struct iio_dev *indio_dev, struct iio_chan_spec const *chan,
 			   int val, int val2, long mask)
 {
 	struct scd30_state *state = iio_priv(indio_dev);
-	int ret = -EINVAL;
+	int ret;
 
-	mutex_lock(&state->lock);
+	guard(mutex)(&state->lock);
 	switch (mask) {
 	case IIO_CHAN_INFO_SAMP_FREQ:
 		if (val)
-			break;
+			return -EINVAL;
 
 		val = 1000000000 / val2;
 		if (val < SCD30_MEAS_INTERVAL_MIN_S || val > SCD30_MEAS_INTERVAL_MAX_S)
-			break;
+			return -EINVAL;
 
 		ret = scd30_command_write(state, CMD_MEAS_INTERVAL, val);
 		if (ret)
-			break;
+			return ret;
 
 		state->meas_interval = val;
-		break;
+		return 0;
 	case IIO_CHAN_INFO_RAW:
 		switch (chan->type) {
 		case IIO_PRESSURE:
 			if (val < SCD30_PRESSURE_COMP_MIN_MBAR ||
 			    val > SCD30_PRESSURE_COMP_MAX_MBAR)
-				break;
+				return -EINVAL;
 
 			ret = scd30_command_write(state, CMD_START_MEAS, val);
 			if (ret)
-				break;
+				return ret;
 
 			state->pressure_comp = val;
-			break;
+			return 0;
 		default:
-			break;
+			return -EINVAL;
 		}
-		break;
 	case IIO_CHAN_INFO_CALIBBIAS:
 		if (val < 0 || val > SCD30_TEMP_OFFSET_MAX)
-			break;
+			return -EINVAL;
 		/*
 		 * Manufacturer does not explicitly specify min/max sensible
 		 * values hence check is omitted for simplicity.
 		 */
-		ret = scd30_command_write(state, CMD_TEMP_OFFSET / 10, val);
+		return scd30_command_write(state, CMD_TEMP_OFFSET / 10, val);
+	default:
+		return -EINVAL;
 	}
-	mutex_unlock(&state->lock);
-
-	return ret;
 }
 
 static int scd30_write_raw_get_fmt(struct iio_dev *indio_dev, struct iio_chan_spec const *chan,
-- 
2.48.1


  parent reply	other threads:[~2025-02-04 20:03 UTC|newest]

Thread overview: 40+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-02-04 20:02 [PATCH 00/27] iio: improve handling of direct mode claim and release Jonathan Cameron
2025-02-04 20:02 ` [PATCH 01/27] iio: core: Rework claim and release of direct mode to work with sparse Jonathan Cameron
2025-02-05 23:03   ` David Lechner
2025-02-04 20:02 ` Jonathan Cameron [this message]
2025-02-05 23:05   ` [PATCH 02/27] iio: chemical: scd30: Use guard(mutex) to allow early returns David Lechner
2025-02-04 20:02 ` [PATCH 03/27] iio: chemical: scd30: Switch to sparse friendly claim/release_direct() Jonathan Cameron
2025-02-04 20:02 ` [PATCH 04/27] iio: temperature: tmp006: Stop using iio_device_claim_direct_scoped() Jonathan Cameron
2025-02-04 20:02 ` [PATCH 05/27] iio: proximity: sx9310: " Jonathan Cameron
2025-02-05 19:00   ` Gwendal Grignou
2025-02-04 20:02 ` [PATCH 06/27] iio: proximity: sx9324: " Jonathan Cameron
2025-02-05 19:00   ` Gwendal Grignou
2025-02-04 20:02 ` [PATCH 07/27] iio: proximity: sx9360: " Jonathan Cameron
2025-02-05 19:01   ` Gwendal Grignou
2025-02-04 20:02 ` [PATCH 08/27] iio: accel: adxl367: " Jonathan Cameron
2025-02-04 20:02 ` [PATCH 09/27] iio: adc: ad4000: " Jonathan Cameron
2025-02-04 20:02 ` [PATCH 10/27] iio: adc: ad4130: " Jonathan Cameron
2025-02-04 20:02 ` [PATCH 11/27] iio: adc: ad4695: " Jonathan Cameron
2025-02-05 23:28   ` David Lechner
2025-02-09 17:54     ` Jonathan Cameron
2025-02-04 20:02 ` [PATCH 12/27] iio: adc: ad7606: " Jonathan Cameron
2025-02-04 20:02 ` [PATCH 13/27] iio: adc: ad7625: " Jonathan Cameron
2025-02-05 19:04   ` Trevor Gamblin
2025-02-04 20:02 ` [PATCH 14/27] iio: adc: ad7779: " Jonathan Cameron
2025-02-04 20:02 ` [PATCH 15/27] iio: adc: ad9467: " Jonathan Cameron
2025-02-04 20:02 ` [PATCH 16/27] iio: adc: max1363: " Jonathan Cameron
2025-02-04 20:02 ` [PATCH 17/27] iio: adc: rtq6056: " Jonathan Cameron
2025-02-07  1:48   ` ChiYuan Huang
2025-02-04 20:02 ` [PATCH 18/27] iio: adc: ti-adc161s626: " Jonathan Cameron
2025-02-04 20:02 ` [PATCH 19/27] iio: adc: ti-ads1119: " Jonathan Cameron
2025-02-04 20:02 ` [PATCH 20/27] iio: addac: ad74413r: " Jonathan Cameron
2025-02-04 20:02 ` [PATCH 21/27] iio: chemical: ens160: " Jonathan Cameron
2025-02-07 22:23   ` Gustavo Silva
2025-02-04 20:02 ` [PATCH 22/27] iio: dac: ad3552r-hs: " Jonathan Cameron
2025-02-04 20:02 ` [PATCH 23/27] iio: dac: ad8460: " Jonathan Cameron
2025-02-04 20:02 ` [PATCH 24/27] iio: dummy: " Jonathan Cameron
2025-02-04 20:02 ` [PATCH 25/27] iio: imu: bmi323: " Jonathan Cameron
2025-02-04 20:02 ` [PATCH 26/27] iio: light: bh1745: " Jonathan Cameron
2025-02-07 23:48   ` Mudit Sharma
2025-02-04 20:02 ` [PATCH 27/27] iio: Drop iio_device_claim_direct_scoped() and related infrastructure Jonathan Cameron
2025-02-05 23:43 ` [PATCH 00/27] iio: improve handling of direct mode claim and release David Lechner

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=20250204200250.636721-3-jic23@kernel.org \
    --to=jic23@kernel.org \
    --cc=Jonathan.Cameron@huawei.com \
    --cc=Mariel.Tinaco@analog.com \
    --cc=adureghello@baylibre.com \
    --cc=apokusinski01@gmail.com \
    --cc=cy_huang@richtek.com \
    --cc=demonsingur@gmail.com \
    --cc=dlechner@baylibre.com \
    --cc=gstols@baylibre.com \
    --cc=gustavograzs@gmail.com \
    --cc=gwendal@chromium.org \
    --cc=joao.goncalves@toradex.com \
    --cc=jstephan@baylibre.com \
    --cc=linux-iio@vger.kernel.org \
    --cc=marcelo.schmitt@analog.com \
    --cc=muditsharma.info@gmail.com \
    --cc=nuno.sa@analog.com \
    --cc=ramona.nechita@analog.com \
    --cc=tgamblin@baylibre.com \
    --cc=tomasz.duszynski@octakon.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.