iio: dac: ad5421: Replace indio_dev->mlock with own device lock
authorSergiu Cuciurean <sergiu.cuciurean@analog.com>
Thu, 14 May 2020 09:17:53 +0000 (12:17 +0300)
committerJonathan Cameron <Jonathan.Cameron@huawei.com>
Sat, 16 May 2020 15:27:20 +0000 (16:27 +0100)
As part of the general cleanup of indio_dev->mlock, this change replaces
it with a local lock on the device's state structure.

Signed-off-by: Sergiu Cuciurean <sergiu.cuciurean@analog.com>
Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
drivers/iio/dac/ad5421.c

index 63063e8..fec2776 100644 (file)
  * @current_range:     current range which the device is configured for
  * @data:              spi transfer buffers
  * @fault_mask:                software masking of events
+ * @lock       lock to protect the data buffer during SPI ops
  */
 struct ad5421_state {
        struct spi_device               *spi;
        unsigned int                    ctrl;
        enum ad5421_current_range       current_range;
        unsigned int                    fault_mask;
+       struct mutex                    lock;
 
        /*
         * DMA (thus cache coherency maintenance) requires the
@@ -142,11 +144,12 @@ static int ad5421_write_unlocked(struct iio_dev *indio_dev,
 static int ad5421_write(struct iio_dev *indio_dev, unsigned int reg,
        unsigned int val)
 {
+       struct ad5421_state *st = iio_priv(indio_dev);
        int ret;
 
-       mutex_lock(&indio_dev->mlock);
+       mutex_lock(&st->lock);
        ret = ad5421_write_unlocked(indio_dev, reg, val);
-       mutex_unlock(&indio_dev->mlock);
+       mutex_unlock(&st->lock);
 
        return ret;
 }
@@ -166,7 +169,7 @@ static int ad5421_read(struct iio_dev *indio_dev, unsigned int reg)
                },
        };
 
-       mutex_lock(&indio_dev->mlock);
+       mutex_lock(&st->lock);
 
        st->data[0].d32 = cpu_to_be32((1 << 23) | (reg << 16));
 
@@ -174,7 +177,7 @@ static int ad5421_read(struct iio_dev *indio_dev, unsigned int reg)
        if (ret >= 0)
                ret = be32_to_cpu(st->data[1].d32) & 0xffff;
 
-       mutex_unlock(&indio_dev->mlock);
+       mutex_unlock(&st->lock);
 
        return ret;
 }
@@ -185,14 +188,14 @@ static int ad5421_update_ctrl(struct iio_dev *indio_dev, unsigned int set,
        struct ad5421_state *st = iio_priv(indio_dev);
        unsigned int ret;
 
-       mutex_lock(&indio_dev->mlock);
+       mutex_lock(&st->lock);
 
        st->ctrl &= ~clr;
        st->ctrl |= set;
 
        ret = ad5421_write_unlocked(indio_dev, AD5421_REG_CTRL, st->ctrl);
 
-       mutex_unlock(&indio_dev->mlock);
+       mutex_unlock(&st->lock);
 
        return ret;
 }
@@ -400,12 +403,12 @@ static int ad5421_write_event_config(struct iio_dev *indio_dev,
                return -EINVAL;
        }
 
-       mutex_lock(&indio_dev->mlock);
+       mutex_lock(&st->lock);
        if (state)
                st->fault_mask |= mask;
        else
                st->fault_mask &= ~mask;
-       mutex_unlock(&indio_dev->mlock);
+       mutex_unlock(&st->lock);
 
        return 0;
 }
@@ -491,6 +494,8 @@ static int ad5421_probe(struct spi_device *spi)
        indio_dev->channels = ad5421_channels;
        indio_dev->num_channels = ARRAY_SIZE(ad5421_channels);
 
+       mutex_init(&st->lock);
+
        st->ctrl = AD5421_CTRL_WATCHDOG_DISABLE |
                        AD5421_CTRL_AUTO_FAULT_READBACK;