From: Dmitry Torokhov <dmitry.torokhov@gmail.com>
To: Jonathan Cameron <jic23@kernel.org>
Cc: "David Lechner" <dlechner@baylibre.com>,
"Nuno Sá" <nuno.sa@analog.com>,
"Andy Shevchenko" <andy@kernel.org>,
"Linus Walleij" <linusw@kernel.org>,
"Bartosz Golaszewski" <brgl@kernel.org>,
linux-iio@vger.kernel.org, linux-kernel@vger.kernel.org,
linux-gpio@vger.kernel.org
Subject: [PATCH v2 3/4] iio: adc: ti-ads7950: switch to using guard() notation
Date: Wed, 18 Feb 2026 18:29:27 -0800 [thread overview]
Message-ID: <20260219022929.3558081-4-dmitry.torokhov@gmail.com> (raw)
In-Reply-To: <20260219022929.3558081-1-dmitry.torokhov@gmail.com>
guard() notation allows early returns when encountering errors, making
control flow more obvious. Use it.
Also variables that now only hold error codes (or 0) are renamed to
"error" to make their purpose clearer.
Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
---
drivers/iio/adc/ti-ads7950.c | 105 ++++++++++++++++-------------------
1 file changed, 48 insertions(+), 57 deletions(-)
diff --git a/drivers/iio/adc/ti-ads7950.c b/drivers/iio/adc/ti-ads7950.c
index 2a7d4a1d9fa9..d31397f37ec4 100644
--- a/drivers/iio/adc/ti-ads7950.c
+++ b/drivers/iio/adc/ti-ads7950.c
@@ -306,18 +306,17 @@ static irqreturn_t ti_ads7950_trigger_handler(int irq, void *p)
struct iio_poll_func *pf = p;
struct iio_dev *indio_dev = pf->indio_dev;
struct ti_ads7950_state *st = iio_priv(indio_dev);
- int ret;
+ int error;
- mutex_lock(&st->slock);
- ret = spi_sync(st->spi, &st->ring_msg);
- if (ret < 0)
- goto out;
+ scoped_guard(mutex, &st->slock) {
+ error = spi_sync(st->spi, &st->ring_msg);
+ if (error)
+ break;
- iio_push_to_buffers_with_timestamp(indio_dev, &st->rx_buf[2],
- iio_get_time_ns(indio_dev));
+ iio_push_to_buffers_with_timestamp(indio_dev, &st->rx_buf[2],
+ iio_get_time_ns(indio_dev));
+ }
-out:
- mutex_unlock(&st->slock);
iio_trigger_notify_done(indio_dev->trig);
return IRQ_HANDLED;
@@ -326,22 +325,19 @@ static irqreturn_t ti_ads7950_trigger_handler(int irq, void *p)
static int ti_ads7950_scan_direct(struct iio_dev *indio_dev, unsigned int ch)
{
struct ti_ads7950_state *st = iio_priv(indio_dev);
- int ret, cmd;
+ int error;
+ int cmd;
+
+ guard(mutex)(&st->slock);
- mutex_lock(&st->slock);
cmd = TI_ADS7950_MAN_CMD(TI_ADS7950_CR_CHAN(ch));
st->single_tx = cmd;
- ret = spi_sync(st->spi, &st->scan_single_msg);
- if (ret)
- goto out;
-
- ret = st->single_rx;
-
-out:
- mutex_unlock(&st->slock);
+ error = spi_sync(st->spi, &st->scan_single_msg);
+ if (error)
+ return error;
- return ret;
+ return st->single_rx;
}
static int ti_ads7950_get_range(struct ti_ads7950_state *st)
@@ -407,9 +403,9 @@ static int ti_ads7950_set(struct gpio_chip *chip, unsigned int offset,
int value)
{
struct ti_ads7950_state *st = gpiochip_get_data(chip);
- int ret;
+ int error;
- mutex_lock(&st->slock);
+ guard(mutex)(&st->slock);
if (value)
st->cmd_settings_bitmask |= BIT(offset);
@@ -417,47 +413,44 @@ static int ti_ads7950_set(struct gpio_chip *chip, unsigned int offset,
st->cmd_settings_bitmask &= ~BIT(offset);
st->single_tx = TI_ADS7950_MAN_CMD_SETTINGS(st);
- ret = spi_sync(st->spi, &st->scan_single_msg);
-
- mutex_unlock(&st->slock);
+ error = spi_sync(st->spi, &st->scan_single_msg);
+ if (error)
+ return error;
- return ret;
+ return 0;
}
static int ti_ads7950_get(struct gpio_chip *chip, unsigned int offset)
{
struct ti_ads7950_state *st = gpiochip_get_data(chip);
- int ret = 0;
bool state;
+ int error;
- mutex_lock(&st->slock);
+ guard(mutex)(&st->slock);
/* If set as output, return the output */
if (st->gpio_cmd_settings_bitmask & BIT(offset)) {
state = st->cmd_settings_bitmask & BIT(offset);
- goto out;
+ return state;
}
/* GPIO data bit sets SDO bits 12-15 to GPIO input */
st->cmd_settings_bitmask |= TI_ADS7950_CR_GPIO_DATA;
st->single_tx = TI_ADS7950_MAN_CMD_SETTINGS(st);
- ret = spi_sync(st->spi, &st->scan_single_msg);
- if (ret)
- goto out;
+ error = spi_sync(st->spi, &st->scan_single_msg);
+ if (error)
+ return error;
state = (st->single_rx >> 12) & BIT(offset);
/* Revert back to original settings */
st->cmd_settings_bitmask &= ~TI_ADS7950_CR_GPIO_DATA;
st->single_tx = TI_ADS7950_MAN_CMD_SETTINGS(st);
- ret = spi_sync(st->spi, &st->scan_single_msg);
- if (ret)
- goto out;
-
-out:
- mutex_unlock(&st->slock);
+ error = spi_sync(st->spi, &st->scan_single_msg);
+ if (error)
+ return error;
- return ret ?: state;
+ return state;
}
static int ti_ads7950_get_direction(struct gpio_chip *chip,
@@ -473,9 +466,9 @@ static int _ti_ads7950_set_direction(struct gpio_chip *chip, int offset,
int input)
{
struct ti_ads7950_state *st = gpiochip_get_data(chip);
- int ret = 0;
+ int error;
- mutex_lock(&st->slock);
+ guard(mutex)(&st->slock);
/* Only change direction if needed */
if (input && (st->gpio_cmd_settings_bitmask & BIT(offset)))
@@ -483,15 +476,14 @@ static int _ti_ads7950_set_direction(struct gpio_chip *chip, int offset,
else if (!input && !(st->gpio_cmd_settings_bitmask & BIT(offset)))
st->gpio_cmd_settings_bitmask |= BIT(offset);
else
- goto out;
+ return 0;
st->single_tx = TI_ADS7950_GPIO_CMD_SETTINGS(st);
- ret = spi_sync(st->spi, &st->scan_single_msg);
+ error = spi_sync(st->spi, &st->scan_single_msg);
+ if (error)
+ return error;
-out:
- mutex_unlock(&st->slock);
-
- return ret;
+ return 0;
}
static int ti_ads7950_direction_input(struct gpio_chip *chip,
@@ -514,27 +506,26 @@ static int ti_ads7950_direction_output(struct gpio_chip *chip,
static int ti_ads7950_init_hw(struct ti_ads7950_state *st)
{
- int ret = 0;
+ int error;
- mutex_lock(&st->slock);
+ guard(mutex)(&st->slock);
/* Settings for Manual/Auto1/Auto2 commands */
/* Default to 5v ref */
st->cmd_settings_bitmask = TI_ADS7950_CR_RANGE_5V;
st->single_tx = TI_ADS7950_MAN_CMD_SETTINGS(st);
- ret = spi_sync(st->spi, &st->scan_single_msg);
- if (ret)
- goto out;
+ error = spi_sync(st->spi, &st->scan_single_msg);
+ if (error)
+ return error;
/* Settings for GPIO command */
st->gpio_cmd_settings_bitmask = 0x0;
st->single_tx = TI_ADS7950_GPIO_CMD_SETTINGS(st);
- ret = spi_sync(st->spi, &st->scan_single_msg);
-
-out:
- mutex_unlock(&st->slock);
+ error = spi_sync(st->spi, &st->scan_single_msg);
+ if (error)
+ return error;
- return ret;
+ return 0;
}
static int ti_ads7950_probe(struct spi_device *spi)
--
2.53.0.335.g19a08e0c02-goog
next prev parent reply other threads:[~2026-02-19 2:29 UTC|newest]
Thread overview: 26+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-02-19 2:29 [PATCH v2 0/4] ti-ads7950: fix gpio handling and facelift Dmitry Torokhov
2026-02-19 2:29 ` [PATCH v2 1/4] iio: adc: ti-ads7950: normalize return value of gpio_get Dmitry Torokhov
2026-02-19 7:52 ` Andy Shevchenko
2026-02-19 9:17 ` Bartosz Golaszewski
2026-02-19 18:25 ` Linus Walleij
2026-02-22 14:03 ` Jonathan Cameron
2026-02-22 21:22 ` Dmitry Torokhov
2026-02-19 2:29 ` [PATCH v2 2/4] iio: adc: ti-ads7950: do not clobber gpio state in ti_ads7950_get() Dmitry Torokhov
2026-02-19 7:55 ` Andy Shevchenko
2026-02-21 17:21 ` David Lechner
2026-02-19 2:29 ` Dmitry Torokhov [this message]
2026-02-19 7:51 ` [PATCH v2 3/4] iio: adc: ti-ads7950: switch to using guard() notation Andy Shevchenko
2026-02-21 17:20 ` David Lechner
2026-02-22 21:31 ` Dmitry Torokhov
2026-02-23 16:35 ` David Lechner
2026-02-21 17:34 ` David Lechner
2026-02-22 21:37 ` Dmitry Torokhov
2026-02-23 16:31 ` David Lechner
2026-02-19 2:29 ` [PATCH v2 4/4] iio: adc: ti-ads7950: complete conversion to using managed resources Dmitry Torokhov
2026-02-19 7:59 ` Andy Shevchenko
2026-02-21 0:09 ` Dmitry Torokhov
2026-02-22 19:12 ` Andy Shevchenko
2026-02-23 20:52 ` Jonathan Cameron
2026-02-21 17:43 ` David Lechner
2026-02-22 14:09 ` Jonathan Cameron
2026-02-22 21:39 ` Dmitry Torokhov
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=20260219022929.3558081-4-dmitry.torokhov@gmail.com \
--to=dmitry.torokhov@gmail.com \
--cc=andy@kernel.org \
--cc=brgl@kernel.org \
--cc=dlechner@baylibre.com \
--cc=jic23@kernel.org \
--cc=linusw@kernel.org \
--cc=linux-gpio@vger.kernel.org \
--cc=linux-iio@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=nuno.sa@analog.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox