On Tue, 20 Sep 2022 13:28:09 +0200 Nuno Sá <nuno.sa@xxxxxxxxxx> wrote: > The iio_device lock is only meant for internal use. Hence define a > device local lock to protect against concurrent accesses. > > Signed-off-by: Nuno Sá <nuno.sa@xxxxxxxxxx> Looks good. Not sure how we missed cleaning this one up earlier given how simple it is! Anyhow, given Andy's feedback I'll wait for v2 to pick this up. > --- > drivers/iio/adc/axp288_adc.c | 8 ++++++-- > 1 file changed, 6 insertions(+), 2 deletions(-) > > diff --git a/drivers/iio/adc/axp288_adc.c b/drivers/iio/adc/axp288_adc.c > index 580361bd9849..3bbb96156739 100644 > --- a/drivers/iio/adc/axp288_adc.c > +++ b/drivers/iio/adc/axp288_adc.c > @@ -9,6 +9,7 @@ > > #include <linux/dmi.h> > #include <linux/module.h> > +#include <linux/mutex.h> > #include <linux/kernel.h> > #include <linux/device.h> > #include <linux/regmap.h> > @@ -50,6 +51,8 @@ enum axp288_adc_id { > struct axp288_adc_info { > int irq; > struct regmap *regmap; > + /* lock to protect against multiple access to the device */ > + struct mutex lock; > bool ts_enabled; > }; > > @@ -161,7 +164,7 @@ static int axp288_adc_read_raw(struct iio_dev *indio_dev, > int ret; > struct axp288_adc_info *info = iio_priv(indio_dev); > > - mutex_lock(&indio_dev->mlock); > + mutex_lock(&info->lock); > switch (mask) { > case IIO_CHAN_INFO_RAW: > if (axp288_adc_set_ts(info, AXP288_ADC_TS_CURRENT_ON_ONDEMAND, > @@ -178,7 +181,7 @@ static int axp288_adc_read_raw(struct iio_dev *indio_dev, > default: > ret = -EINVAL; > } > - mutex_unlock(&indio_dev->mlock); > + mutex_unlock(&info->lock); > > return ret; > } > @@ -264,6 +267,7 @@ static int axp288_adc_probe(struct platform_device *pdev) > return -ENOMEM; > > info = iio_priv(indio_dev); > + mutex_init(&info->lock); > info->irq = platform_get_irq(pdev, 0); > if (info->irq < 0) > return info->irq;