staging: ad7606: Replace mlock with driver private lock
Subsystems (4)
PATCH RESEND 1/1 staging: ad7606: Replace mlock with driver private lock
The IIO subsystem is redefining iio_dev->mlock to be used by the IIO core only for protecting device operating mode changes. ie. Changes between INDIO_DIRECT_MODE, INDIO_BUFFER_* modes.
In this driver, mlock was being used to protect hardware state changes. Replace it with a lock in the devices global data.
Signed-off-by Arushi Singhal <[email protected]>
--- drivers/staging/iio/adc/ad7606.c | 8 ++++---- drivers/staging/iio/adc/ad7606.h | 2 ++ 2 files changed, 6 insertions(+), 4 deletions(-)
drivers/staging/iio/adc/ad7606.c +4 -4
@@ -208,7 +208,7 @@ static int ad7606_write_raw(struct iio_dev *indio_dev,switch (mask) {case IIO_CHAN_INFO_SCALE : ret = -EINVAL ; -mutex_lock (&indio_dev->mlock); +mutex_lock (&st->lock);for (i =0 ; i <ARRAY_SIZE (scale_avail); i++)if (val2 == scale_avail[i][1 ]) {gpiod_set_value (st->gpio_range, i);
@@ -217,7 +217,7 @@ static int ad7606_write_raw(struct iio_dev *indio_dev, ret =0 ;break ; } -mutex_unlock (&indio_dev->mlock); +mutex_unlock (&st->lock);return ret;case IIO_CHAN_INFO_OVERSAMPLING_RATIO :
@@ -231,11 +231,11 @@ static int ad7606_write_raw(struct iio_dev *indio_dev, values[1 ] = (ret >>1 ) &1 ; values[2 ] = (ret >>2 ) &1 ; -mutex_lock (&indio_dev->mlock); +mutex_lock (&st->lock);gpiod_set_array_value (ARRAY_SIZE (values), st->gpio_os->desc, values); st->oversampling = val; -mutex_unlock (&indio_dev->mlock); +mutex_unlock (&st->lock);return 0 ;default :
drivers/staging/iio/adc/ad7606.h +2 -0
@@ -14,6 +14,7 @@* @name: identification string for chip * @channels: channel specification * @num_channels: number of channels +* @lock protect sensor state */ struct ad7606_chip_info {
@@ -37,6 +38,7 @@ struct ad7606_state {bool done;void __iomem *base_address; +struct mutex lock;/* protect sensor state */ struct gpio_desc *gpio_convst;struct gpio_desc *gpio_reset;struct gpio_desc *gpio_range;
Signature · 1 line
2.11.0
Quoted 8 lines · Arushi Singhal
The IIO subsystem is redefining
iio_dev->mlockto be used by the IIO core only for protecting device operating mode changes. ie. Changes betweenINDIO_DIRECT_MODE, INDIO_BUFFER_* modes.In this driver, mlock was being used to protect hardware state changes. Replace it with a lock in the devices global data.
Signed-off-by Arushi Singhal <[email protected]>
Hi,
Looks good, but mutex_init() is missing.
- Lars
Quoted 62 lines
--- drivers/staging/iio/adc/ad7606.c | 8 ++++---- drivers/staging/iio/adc/ad7606.h | 2 ++ 2 files changed, 6 insertions(+), 4 deletions(-)drivers/staging/iio/adc/ad7606.c +4
-4@@ -208,7 +208,7 @@ static int ad7606_write_raw(struct iio_dev *indio_dev,switch (mask) {case IIO_CHAN_INFO_SCALE : ret = -EINVAL ; -mutex_lock (&indio_dev->mlock); +mutex_lock (&st->lock);for (i =0 ; i <ARRAY_SIZE (scale_avail); i++)if (val2 == scale_avail[i][1 ]) {gpiod_set_value (st->gpio_range, i);@@ -217,7 +217,7 @@ static int ad7606_write_raw(struct iio_dev *indio_dev, ret =0 ;break ; } -mutex_unlock (&indio_dev->mlock); +mutex_unlock (&st->lock);return ret;case IIO_CHAN_INFO_OVERSAMPLING_RATIO :@@ -231,11 +231,11 @@ static int ad7606_write_raw(struct iio_dev *indio_dev, values[1 ] = (ret >>1 ) &1 ; values[2 ] = (ret >>2 ) &1 ; -mutex_lock (&indio_dev->mlock); +mutex_lock (&st->lock);gpiod_set_array_value (ARRAY_SIZE (values), st->gpio_os->desc, values); st->oversampling = val; -mutex_unlock (&indio_dev->mlock); +mutex_unlock (&st->lock);return 0 ;default :drivers/staging/iio/adc/ad7606.h +2
-0@@ -14,6 +14,7 @@* @name: identification string for chip * @channels: channel specification * @num_channels: number of channels +* @lock protect sensor state */ struct ad7606_chip_info {@@ -37,6 +38,7 @@ struct ad7606_state {bool done;void __iomem *base_address; +struct mutex lock;/* protect sensor state */ struct gpio_desc *gpio_convst;struct gpio_desc *gpio_reset;struct gpio_desc *gpio_range;