[PATCH] iio: gyro: adxrs290: Use guard(mutex) in lieu of manual lock+unlock

Guilherme Dias guilhermeabreu200105 em usp.br
Qua Abr 22 18:28:55 -03 2026


Use guard(mutex) to clean up adxrs290's error+unlock handling.

Signed-off-by: Guilherme Dias <guilhermeabreu200105 em usp.br>
Co-developed-by: João Paulo Menezes Linaris <jplinaris em usp.br>
Signed-off-by: João Paulo Menezes Linaris <jplinaris em usp.br>
---
 drivers/iio/gyro/adxrs290.c | 47 +++++++++++--------------------------
 1 file changed, 14 insertions(+), 33 deletions(-)

diff --git a/drivers/iio/gyro/adxrs290.c b/drivers/iio/gyro/adxrs290.c
index 3efe385ebedc..5fa4944c7c16 100644
--- a/drivers/iio/gyro/adxrs290.c
+++ b/drivers/iio/gyro/adxrs290.c
@@ -118,17 +118,12 @@ static int adxrs290_get_rate_data(struct iio_dev *indio_dev, const u8 cmd, int *
 	int ret = 0;
 	int temp;
 
-	mutex_lock(&st->lock);
+	guard(mutex)(&st->lock);
 	temp = spi_w8r16(st->spi, cmd);
-	if (temp < 0) {
-		ret = temp;
-		goto err_unlock;
-	}
+	if (temp < 0)
+		return temp;
 
 	*val = sign_extend32(temp, 15);
-
-err_unlock:
-	mutex_unlock(&st->lock);
 	return ret;
 }
 
@@ -139,18 +134,13 @@ static int adxrs290_get_temp_data(struct iio_dev *indio_dev, int *val)
 	int ret = 0;
 	int temp;
 
-	mutex_lock(&st->lock);
+	guard(mutex)(&st->lock);
 	temp = spi_w8r16(st->spi, cmd);
-	if (temp < 0) {
-		ret = temp;
-		goto err_unlock;
-	}
+	if (temp < 0)
+		return temp;
 
 	/* extract lower 12 bits temperature reading */
 	*val = sign_extend32(temp, 11);
-
-err_unlock:
-	mutex_unlock(&st->lock);
 	return ret;
 }
 
@@ -161,18 +151,13 @@ static int adxrs290_get_3db_freq(struct iio_dev *indio_dev, u8 *val, u8 *val2)
 	int ret = 0;
 	short temp;
 
-	mutex_lock(&st->lock);
+	guard(mutex)(&st->lock);
 	temp = spi_w8r8(st->spi, cmd);
-	if (temp < 0) {
-		ret = temp;
-		goto err_unlock;
-	}
+	if (temp < 0)
+		return temp;
 
 	*val = FIELD_GET(ADXRS290_LPF_MASK, temp);
 	*val2 = FIELD_GET(ADXRS290_HPF_MASK, temp);
-
-err_unlock:
-	mutex_unlock(&st->lock);
 	return ret;
 }
 
@@ -220,11 +205,11 @@ static int adxrs290_set_mode(struct iio_dev *indio_dev, enum adxrs290_mode mode)
 	if (st->mode == mode)
 		return 0;
 
-	mutex_lock(&st->lock);
+	guard(mutex)(&st->lock);
 
 	ret = spi_w8r8(st->spi, ADXRS290_READ_REG(ADXRS290_REG_POWER_CTL));
 	if (ret < 0)
-		goto out_unlock;
+		return ret;
 
 	val = ret;
 
@@ -237,20 +222,17 @@ static int adxrs290_set_mode(struct iio_dev *indio_dev, enum adxrs290_mode mode)
 		break;
 	default:
 		ret = -EINVAL;
-		goto out_unlock;
+		return ret;
 	}
 
 	ret = adxrs290_spi_write_reg(st->spi, ADXRS290_REG_POWER_CTL, val);
 	if (ret < 0) {
 		dev_err(&st->spi->dev, "unable to set mode: %d\n", ret);
-		goto out_unlock;
+		return ret;
 	}
 
 	/* update cached mode */
 	st->mode = mode;
-
-out_unlock:
-	mutex_unlock(&st->lock);
 	return ret;
 }
 
@@ -506,7 +488,7 @@ static irqreturn_t adxrs290_trigger_handler(int irq, void *p)
 	u8 tx = ADXRS290_READ_REG(ADXRS290_REG_DATAX0);
 	int ret;
 
-	mutex_lock(&st->lock);
+	guard(mutex)(&st->lock);
 
 	/* exercise a bulk data capture starting from reg DATAX0... */
 	ret = spi_write_then_read(st->spi, &tx, sizeof(tx), st->buffer.channels,
@@ -518,7 +500,6 @@ static irqreturn_t adxrs290_trigger_handler(int irq, void *p)
 					   pf->timestamp);
 
 out_unlock_notify:
-	mutex_unlock(&st->lock);
 	iio_trigger_notify_done(indio_dev->trig);
 
 	return IRQ_HANDLED;
-- 
2.43.0



Mais detalhes sobre a lista de discussão kernel