On Tue, 20 Sep 2022 13:28:11 +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. As with previous patch, mention the additional include cleanup. > > Signed-off-by: Nuno Sá <nuno.sa@xxxxxxxxxx> > --- > drivers/iio/adc/lpc32xx_adc.c | 10 +++++++--- > 1 file changed, 7 insertions(+), 3 deletions(-) > > diff --git a/drivers/iio/adc/lpc32xx_adc.c b/drivers/iio/adc/lpc32xx_adc.c > index b56ce15255cf..4136cf536d58 100644 > --- a/drivers/iio/adc/lpc32xx_adc.c > +++ b/drivers/iio/adc/lpc32xx_adc.c > @@ -15,6 +15,7 @@ > #include <linux/io.h> > #include <linux/module.h> > #include <linux/mod_devicetable.h> > +#include <linux/mutex.h> > #include <linux/platform_device.h> > #include <linux/regulator/consumer.h> > > @@ -49,6 +50,8 @@ struct lpc32xx_adc_state { > struct clk *clk; > struct completion completion; > struct regulator *vref; > + /* lock to protect against multiple access to the device */ > + struct mutex lock; > > u32 value; > }; > @@ -64,10 +67,10 @@ static int lpc32xx_read_raw(struct iio_dev *indio_dev, > > switch (mask) { > case IIO_CHAN_INFO_RAW: > - mutex_lock(&indio_dev->mlock); > + mutex_lock(&st->lock); > ret = clk_prepare_enable(st->clk); > if (ret) { > - mutex_unlock(&indio_dev->mlock); > + mutex_unlock(&st->lock); > return ret; > } > /* Measurement setup */ > @@ -80,7 +83,7 @@ static int lpc32xx_read_raw(struct iio_dev *indio_dev, > wait_for_completion(&st->completion); /* set by ISR */ > clk_disable_unprepare(st->clk); > *val = st->value; > - mutex_unlock(&indio_dev->mlock); > + mutex_unlock(&st->lock); > > return IIO_VAL_INT; > > @@ -158,6 +161,7 @@ static int lpc32xx_adc_probe(struct platform_device *pdev) > return -ENOMEM; > > st = iio_priv(iodev); > + mutex_init(&st->lock); > > st->adc_base = devm_ioremap(&pdev->dev, res->start, > resource_size(res));