public inbox for linux-iio@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH] iio: gyro: adxrs290: Use guard(mutex) in lieu of manual lock+unlock
@ 2026-04-22 19:24 Guilherme Dias
  2026-04-22 20:36 ` Andy Shevchenko
  0 siblings, 1 reply; 3+ messages in thread
From: Guilherme Dias @ 2026-04-22 19:24 UTC (permalink / raw)
  To: lars, Michael.Hennerich, nish.malpani25, jic23, dlechner, nuno.sa,
	andy
  Cc: Guilherme Dias, João Paulo Menezes Linaris, linux-iio

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

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

diff --git a/drivers/iio/gyro/adxrs290.c b/drivers/iio/gyro/adxrs290.c
index 3efe385ebedc..86893aeeb710 100644
--- a/drivers/iio/gyro/adxrs290.c
+++ b/drivers/iio/gyro/adxrs290.c
@@ -115,65 +115,47 @@ static const int adxrs290_hpf_3db_freq_hz_table[][2] = {
 static int adxrs290_get_rate_data(struct iio_dev *indio_dev, const u8 cmd, int *val)
 {
 	struct adxrs290_state *st = iio_priv(indio_dev);
-	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;
+		return temp;
 	}
 
 	*val = sign_extend32(temp, 15);
-
-err_unlock:
-	mutex_unlock(&st->lock);
-	return ret;
 }
 
 static int adxrs290_get_temp_data(struct iio_dev *indio_dev, int *val)
 {
 	const u8 cmd = ADXRS290_READ_REG(ADXRS290_REG_TEMP0);
 	struct adxrs290_state *st = iio_priv(indio_dev);
-	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;
+		return temp;
 	}
 
 	/* extract lower 12 bits temperature reading */
 	*val = sign_extend32(temp, 11);
-
-err_unlock:
-	mutex_unlock(&st->lock);
-	return ret;
 }
 
 static int adxrs290_get_3db_freq(struct iio_dev *indio_dev, u8 *val, u8 *val2)
 {
 	const u8 cmd = ADXRS290_READ_REG(ADXRS290_REG_FILTER);
 	struct adxrs290_state *st = iio_priv(indio_dev);
-	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;
+		return temp;
 	}
 
 	*val = FIELD_GET(ADXRS290_LPF_MASK, temp);
 	*val2 = FIELD_GET(ADXRS290_HPF_MASK, temp);
-
-err_unlock:
-	mutex_unlock(&st->lock);
-	return ret;
 }
 
 static int adxrs290_spi_write_reg(struct spi_device *spi, const u8 reg,
@@ -220,11 +202,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,21 +219,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;
 }
 
 static void adxrs290_chip_off_action(void *data)
@@ -506,22 +484,17 @@ 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,
 				  sizeof(st->buffer.channels));
-	if (ret < 0)
-		goto out_unlock_notify;
-
+	if (ret < 0){
+		iio_trigger_notify_done(indio_dev->trig);
+		return IRQ_HANDLED;
+	}
 	iio_push_to_buffers_with_timestamp(indio_dev, &st->buffer,
 					   pf->timestamp);
-
-out_unlock_notify:
-	mutex_unlock(&st->lock);
-	iio_trigger_notify_done(indio_dev->trig);
-
-	return IRQ_HANDLED;
 }
 
 #define ADXRS290_ANGL_VEL_CHANNEL(reg, axis) {				\
-- 
2.43.0


^ permalink raw reply related	[flat|nested] 3+ messages in thread

* Re: [PATCH] iio: gyro: adxrs290: Use guard(mutex) in lieu of manual lock+unlock
  2026-04-22 19:24 [PATCH] iio: gyro: adxrs290: Use guard(mutex) in lieu of manual lock+unlock Guilherme Dias
@ 2026-04-22 20:36 ` Andy Shevchenko
  2026-04-22 20:38   ` Andy Shevchenko
  0 siblings, 1 reply; 3+ messages in thread
From: Andy Shevchenko @ 2026-04-22 20:36 UTC (permalink / raw)
  To: Guilherme Dias
  Cc: lars, Michael.Hennerich, nish.malpani25, jic23, dlechner, nuno.sa,
	andy, João Paulo Menezes Linaris, linux-iio

On Wed, Apr 22, 2026 at 04:24:36PM -0300, Guilherme Dias wrote:
> Use guard(mutex) to clean up adxrs290's error+unlock handling.

...

>  static int adxrs290_get_rate_data(struct iio_dev *indio_dev, const u8 cmd, int *val)
>  {
>  	struct adxrs290_state *st = iio_priv(indio_dev);
> -	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;
> +		return temp;
>  	}

Now this breaks Coding Style. We do not use {} for single statements.

>  	*val = sign_extend32(temp, 15);
> -
> -err_unlock:
> -	mutex_unlock(&st->lock);
> -	return ret;
>  }

Ditto for the rest.

...

>  	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;

Have you even compiled this?

>  }

-- 
With Best Regards,
Andy Shevchenko



^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [PATCH] iio: gyro: adxrs290: Use guard(mutex) in lieu of manual lock+unlock
  2026-04-22 20:36 ` Andy Shevchenko
@ 2026-04-22 20:38   ` Andy Shevchenko
  0 siblings, 0 replies; 3+ messages in thread
From: Andy Shevchenko @ 2026-04-22 20:38 UTC (permalink / raw)
  To: Guilherme Dias
  Cc: lars, Michael.Hennerich, nish.malpani25, jic23, dlechner, nuno.sa,
	andy, João Paulo Menezes Linaris, linux-iio

On Wed, Apr 22, 2026 at 11:36:09PM +0300, Andy Shevchenko wrote:
> On Wed, Apr 22, 2026 at 04:24:36PM -0300, Guilherme Dias wrote:

...

> Have you even compiled this?

Taking this into account, I insist you to start reading documentation and
review others' patches in IIO before doing yours. Two people in developers in
this patch and none of them even compiled?!

-- 
With Best Regards,
Andy Shevchenko



^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2026-04-22 20:38 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-04-22 19:24 [PATCH] iio: gyro: adxrs290: Use guard(mutex) in lieu of manual lock+unlock Guilherme Dias
2026-04-22 20:36 ` Andy Shevchenko
2026-04-22 20:38   ` Andy Shevchenko

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox