[PATCH v5 07/16] iio: adc: xilinx-xadc: Use guard() for mutex locking

From: Dileep Kumar Nagavarapu

Date: Tue Nov 10 2026 - 00:11:20 EST


Use guard() helper for mutex handling instead of explicit
mutex_lock()/mutex_unlock() sequences.

This removes the need for explicit unlocks and the
error-path labels that only existed to release the mutex,
simplifying the control flow

No functional change intended

Co-developed-by: Sai Krishna Potthuri <sai.krishna.potthuri@xxxxxxx>
Signed-off-by: Sai Krishna Potthuri <sai.krishna.potthuri@xxxxxxx>
Signed-off-by: Dileep Kumar Nagavarapu <dileepkumar.nagavarapu@xxxxxxx>
---
drivers/iio/adc/xilinx-xadc-core.c | 15 +++++----------
drivers/iio/adc/xilinx-xadc-events.c | 23 ++++++++---------------
drivers/iio/adc/xilinx-xadc.h | 6 ++----
3 files changed, 15 insertions(+), 29 deletions(-)

diff --git a/drivers/iio/adc/xilinx-xadc-core.c b/drivers/iio/adc/xilinx-xadc-core.c
index ea874420b940..093a7172cc06 100644
--- a/drivers/iio/adc/xilinx-xadc-core.c
+++ b/drivers/iio/adc/xilinx-xadc-core.c
@@ -583,9 +583,8 @@ static int xadc_update_adc_reg(struct xadc *xadc, unsigned int reg, u16 mask, u1
{
int ret;

- mutex_lock(&xadc->mutex);
+ guard(mutex)(&xadc->mutex);
ret = _xadc_update_adc_reg(xadc, reg, mask, val);
- mutex_unlock(&xadc->mutex);

return ret;
}
@@ -675,13 +674,12 @@ static int xadc_trigger_set_state(struct iio_trigger *trigger, bool state)
unsigned int val;
int ret = 0;

- mutex_lock(&xadc->mutex);
+ guard(mutex)(&xadc->mutex);

if (state) {
/* Only one of the two triggers can be active at a time. */
if (xadc->trigger != NULL) {
- ret = -EBUSY;
- goto err_out;
+ return -EBUSY;
} else {
xadc->trigger = trigger;
if (trigger == xadc->convst_trigger)
@@ -691,7 +689,7 @@ static int xadc_trigger_set_state(struct iio_trigger *trigger, bool state)
}
ret = _xadc_update_adc_reg(xadc, XADC_REG_CONF1, XADC_CONF0_EC, convst);
if (ret)
- goto err_out;
+ return ret;
} else {
xadc->trigger = NULL;
}
@@ -706,10 +704,7 @@ static int xadc_trigger_set_state(struct iio_trigger *trigger, bool state)
xadc_write_reg(xadc, XADC_AXI_REG_IPIER, val);
}

-err_out:
- mutex_unlock(&xadc->mutex);
-
- return ret;
+ return 0;
}

static const struct iio_trigger_ops xadc_trigger_ops = {
diff --git a/drivers/iio/adc/xilinx-xadc-events.c b/drivers/iio/adc/xilinx-xadc-events.c
index f5b5aad6e313..f20614edd153 100644
--- a/drivers/iio/adc/xilinx-xadc-events.c
+++ b/drivers/iio/adc/xilinx-xadc-events.c
@@ -129,7 +129,7 @@ int xadc_write_event_config(struct iio_dev *indio_dev, const struct iio_chan_spe
u16 cfg, old_cfg;
int ret;

- mutex_lock(&xadc->mutex);
+ guard(mutex)(&xadc->mutex);

if (state)
xadc->alarm_mask |= alarm;
@@ -140,7 +140,7 @@ int xadc_write_event_config(struct iio_dev *indio_dev, const struct iio_chan_spe

ret = _xadc_read_adc_reg(xadc, XADC_REG_CONF1, &cfg);
if (ret)
- goto err_out;
+ return ret;

old_cfg = cfg;
cfg |= XADC_CONF1_ALARM_MASK;
@@ -148,12 +148,9 @@ int xadc_write_event_config(struct iio_dev *indio_dev, const struct iio_chan_spe
cfg &= ~((xadc->alarm_mask & 0x08) >> 3); /* ot */
cfg &= ~((xadc->alarm_mask & 0x07) << 1); /* temp, vccint, vccaux */
if (old_cfg != cfg)
- ret = _xadc_write_adc_reg(xadc, XADC_REG_CONF1, cfg);
+ return _xadc_write_adc_reg(xadc, XADC_REG_CONF1, cfg);

-err_out:
- mutex_unlock(&xadc->mutex);
-
- return ret;
+ return 0;
}

int xadc_read_event_value(struct iio_dev *indio_dev, const struct iio_chan_spec *chan,
@@ -194,7 +191,7 @@ int xadc_write_event_value(struct iio_dev *indio_dev, const struct iio_chan_spec
if (val < 0 || val > 0xffff)
return -EINVAL;

- mutex_lock(&xadc->mutex);
+ guard(mutex)(&xadc->mutex);

switch (info) {
case IIO_EV_INFO_VALUE:
@@ -204,7 +201,6 @@ int xadc_write_event_value(struct iio_dev *indio_dev, const struct iio_chan_spec
xadc->temp_hysteresis = val;
break;
default:
- mutex_unlock(&xadc->mutex);
return -EINVAL;
}

@@ -230,14 +226,11 @@ int xadc_write_event_value(struct iio_dev *indio_dev, const struct iio_chan_spec
ret = _xadc_write_adc_reg(xadc, XADC_REG_THRESHOLD(offset + 4),
xadc->threshold[offset + 4]);
if (ret)
- goto out_unlock;
+ return ret;
}

if (info == IIO_EV_INFO_VALUE)
- ret = _xadc_write_adc_reg(xadc, XADC_REG_THRESHOLD(offset), val);
+ return _xadc_write_adc_reg(xadc, XADC_REG_THRESHOLD(offset), val);

-out_unlock:
- mutex_unlock(&xadc->mutex);
-
- return ret;
+ return 0;
}
diff --git a/drivers/iio/adc/xilinx-xadc.h b/drivers/iio/adc/xilinx-xadc.h
index f5bf2d08eedc..90fa3e77b1a5 100644
--- a/drivers/iio/adc/xilinx-xadc.h
+++ b/drivers/iio/adc/xilinx-xadc.h
@@ -101,9 +101,8 @@ static inline int xadc_read_adc_reg(struct xadc *xadc, unsigned int reg, u16 *va
{
int ret;

- mutex_lock(&xadc->mutex);
+ guard(mutex)(&xadc->mutex);
ret = _xadc_read_adc_reg(xadc, reg, val);
- mutex_unlock(&xadc->mutex);
return ret;
}

@@ -111,9 +110,8 @@ static inline int xadc_write_adc_reg(struct xadc *xadc, unsigned int reg, u16 va
{
int ret;

- mutex_lock(&xadc->mutex);
+ guard(mutex)(&xadc->mutex);
ret = _xadc_write_adc_reg(xadc, reg, val);
- mutex_unlock(&xadc->mutex);
return ret;
}

--
2.34.1