iio: imu: adis: move to the cleanup magic
authorNuno Sa <nuno.sa@analog.com>
Tue, 18 Jun 2024 13:32:05 +0000 (15:32 +0200)
committerJonathan Cameron <Jonathan.Cameron@huawei.com>
Tue, 25 Jun 2024 20:04:49 +0000 (21:04 +0100)
This makes locking and handling error paths simpler.

Signed-off-by: Nuno Sa <nuno.sa@analog.com>
Link: https://patch.msgid.link/20240618-dev-iio-adis-cleanup-v1-2-bd93ce7845c7@analog.com
Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
drivers/iio/imu/adis.c
drivers/iio/imu/adis_buffer.c
include/linux/iio/imu/adis.h

index 495caf4ce87a2d8260c9bc1e9bae9ae0ec9721a7..876848b42f69bd5d2b3d62919d2d61e37de9830c 100644 (file)
@@ -466,17 +466,17 @@ int adis_single_conversion(struct iio_dev *indio_dev,
        unsigned int uval;
        int ret;
 
-       mutex_lock(&adis->state_lock);
+       guard(mutex)(&adis->state_lock);
 
        ret = __adis_read_reg(adis, chan->address, &uval,
                              chan->scan_type.storagebits / 8);
        if (ret)
-               goto err_unlock;
+               return ret;
 
        if (uval & error_mask) {
                ret = __adis_check_status(adis);
                if (ret)
-                       goto err_unlock;
+                       return ret;
        }
 
        if (chan->scan_type.sign == 's')
@@ -484,10 +484,7 @@ int adis_single_conversion(struct iio_dev *indio_dev,
        else
                *val = uval & ((1 << chan->scan_type.realbits) - 1);
 
-       ret = IIO_VAL_INT;
-err_unlock:
-       mutex_unlock(&adis->state_lock);
-       return ret;
+       return IIO_VAL_INT;
 }
 EXPORT_SYMBOL_NS_GPL(adis_single_conversion, IIO_ADISLIB);
 
index 5bde698cce1898fae96448f52fe805c12b904c16..b7c1cc04492a8e89e0a50882016d18bb4e81781f 100644 (file)
@@ -130,24 +130,20 @@ static int adis_paging_trigger_handler(struct adis *adis)
 {
        int ret;
 
-       mutex_lock(&adis->state_lock);
+       guard(mutex)(&adis->state_lock);
        if (adis->current_page != 0) {
                adis->tx[0] = ADIS_WRITE_REG(ADIS_REG_PAGE_ID);
                adis->tx[1] = 0;
                ret = spi_write(adis->spi, adis->tx, 2);
                if (ret) {
                        dev_err(&adis->spi->dev, "Failed to change device page: %d\n", ret);
-                       mutex_unlock(&adis->state_lock);
                        return ret;
                }
 
                adis->current_page = 0;
        }
 
-       ret = spi_sync(adis->spi, &adis->msg);
-       mutex_unlock(&adis->state_lock);
-
-       return ret;
+       return spi_sync(adis->spi, &adis->msg);
 }
 
 static irqreturn_t adis_trigger_handler(int irq, void *p)
index 4bb0a53cf7ea713e9a56ede0018dfa0174d54672..93dad627378fd6e05ca8b70678c65da654f330c1 100644 (file)
@@ -9,6 +9,7 @@
 #ifndef __IIO_ADIS_H__
 #define __IIO_ADIS_H__
 
+#include <linux/cleanup.h>
 #include <linux/spi/spi.h>
 #include <linux/interrupt.h>
 #include <linux/iio/iio.h>
@@ -150,13 +151,8 @@ int __adis_reset(struct adis *adis);
  */
 static inline int adis_reset(struct adis *adis)
 {
-       int ret;
-
-       mutex_lock(&adis->state_lock);
-       ret = __adis_reset(adis);
-       mutex_unlock(&adis->state_lock);
-
-       return ret;
+       guard(mutex)(&adis->state_lock);
+       return __adis_reset(adis);
 }
 
 int __adis_write_reg(struct adis *adis, unsigned int reg,
@@ -248,13 +244,8 @@ static inline int __adis_read_reg_32(struct adis *adis, unsigned int reg,
 static inline int adis_write_reg(struct adis *adis, unsigned int reg,
                                 unsigned int val, unsigned int size)
 {
-       int ret;
-
-       mutex_lock(&adis->state_lock);
-       ret = __adis_write_reg(adis, reg, val, size);
-       mutex_unlock(&adis->state_lock);
-
-       return ret;
+       guard(mutex)(&adis->state_lock);
+       return __adis_write_reg(adis, reg, val, size);
 }
 
 /**
@@ -267,13 +258,8 @@ static inline int adis_write_reg(struct adis *adis, unsigned int reg,
 static int adis_read_reg(struct adis *adis, unsigned int reg,
                         unsigned int *val, unsigned int size)
 {
-       int ret;
-
-       mutex_lock(&adis->state_lock);
-       ret = __adis_read_reg(adis, reg, val, size);
-       mutex_unlock(&adis->state_lock);
-
-       return ret;
+       guard(mutex)(&adis->state_lock);
+       return __adis_read_reg(adis, reg, val, size);
 }
 
 /**
@@ -365,12 +351,8 @@ int __adis_update_bits_base(struct adis *adis, unsigned int reg, const u32 mask,
 static inline int adis_update_bits_base(struct adis *adis, unsigned int reg,
                                        const u32 mask, const u32 val, u8 size)
 {
-       int ret;
-
-       mutex_lock(&adis->state_lock);
-       ret = __adis_update_bits_base(adis, reg, mask, val, size);
-       mutex_unlock(&adis->state_lock);
-       return ret;
+       guard(mutex)(&adis->state_lock);
+       return __adis_update_bits_base(adis, reg, mask, val, size);
 }
 
 /**
@@ -411,24 +393,14 @@ int __adis_enable_irq(struct adis *adis, bool enable);
 
 static inline int adis_enable_irq(struct adis *adis, bool enable)
 {
-       int ret;
-
-       mutex_lock(&adis->state_lock);
-       ret = __adis_enable_irq(adis, enable);
-       mutex_unlock(&adis->state_lock);
-
-       return ret;
+       guard(mutex)(&adis->state_lock);
+       return __adis_enable_irq(adis, enable);
 }
 
 static inline int adis_check_status(struct adis *adis)
 {
-       int ret;
-
-       mutex_lock(&adis->state_lock);
-       ret = __adis_check_status(adis);
-       mutex_unlock(&adis->state_lock);
-
-       return ret;
+       guard(mutex)(&adis->state_lock);
+       return __adis_check_status(adis);
 }
 
 static inline void adis_dev_lock(struct adis *adis)