Message ID | 20200826064257.53475-1-alexandru.ardelean@analog.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | iio: frequency: adf4350: Replace indio_dev->mlock with own device lock | expand |
On Wed, 26 Aug 2020 09:42:57 +0300 Alexandru Ardelean <alexandru.ardelean@analog.com> wrote: > From: Sergiu Cuciurean <sergiu.cuciurean@analog.com> > > 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: Alexandru Ardelean <alexandru.ardelean@analog.com> > --- > drivers/iio/frequency/adf4350.c | 15 +++++++++------ > 1 file changed, 9 insertions(+), 6 deletions(-) > > diff --git a/drivers/iio/frequency/adf4350.c b/drivers/iio/frequency/adf4350.c > index 409c9c47161e..3f37a57cd3c3 100644 > --- a/drivers/iio/frequency/adf4350.c > +++ b/drivers/iio/frequency/adf4350.c > @@ -47,6 +47,7 @@ struct adf4350_state { > unsigned long regs[6]; > unsigned long regs_hw[6]; > unsigned long long freq_req; > + struct mutex lock; Same thing about need for a comment in the code on what the lock scope is. I'm sure checkpatch used to moan about this. I guess maybe it stopped doing so at some stage. Jonathan > /* > * DMA (thus cache coherency maintenance) requires the > * transfer buffers to live in their own cache lines. > @@ -99,7 +100,7 @@ static int adf4350_reg_access(struct iio_dev *indio_dev, > if (reg > ADF4350_REG5) > return -EINVAL; > > - mutex_lock(&indio_dev->mlock); > + mutex_lock(&st->lock); > if (readval == NULL) { > st->regs[reg] = writeval & ~(BIT(0) | BIT(1) | BIT(2)); > ret = adf4350_sync_config(st); > @@ -107,7 +108,7 @@ static int adf4350_reg_access(struct iio_dev *indio_dev, > *readval = st->regs_hw[reg]; > ret = 0; > } > - mutex_unlock(&indio_dev->mlock); > + mutex_unlock(&st->lock); > > return ret; > } > @@ -254,7 +255,7 @@ static ssize_t adf4350_write(struct iio_dev *indio_dev, > if (ret) > return ret; > > - mutex_lock(&indio_dev->mlock); > + mutex_lock(&st->lock); > switch ((u32)private) { > case ADF4350_FREQ: > ret = adf4350_set_freq(st, readin); > @@ -295,7 +296,7 @@ static ssize_t adf4350_write(struct iio_dev *indio_dev, > default: > ret = -EINVAL; > } > - mutex_unlock(&indio_dev->mlock); > + mutex_unlock(&st->lock); > > return ret ? ret : len; > } > @@ -309,7 +310,7 @@ static ssize_t adf4350_read(struct iio_dev *indio_dev, > unsigned long long val; > int ret = 0; > > - mutex_lock(&indio_dev->mlock); > + mutex_lock(&st->lock); > switch ((u32)private) { > case ADF4350_FREQ: > val = (u64)((st->r0_int * st->r1_mod) + st->r0_fract) * > @@ -338,7 +339,7 @@ static ssize_t adf4350_read(struct iio_dev *indio_dev, > ret = -EINVAL; > val = 0; > } > - mutex_unlock(&indio_dev->mlock); > + mutex_unlock(&st->lock); > > return ret < 0 ? ret : sprintf(buf, "%llu\n", val); > } > @@ -539,6 +540,8 @@ static int adf4350_probe(struct spi_device *spi) > indio_dev->channels = &adf4350_chan; > indio_dev->num_channels = 1; > > + mutex_init(&st->lock); > + > st->chspc = pdata->channel_spacing; > if (clk) { > st->clk = clk;
diff --git a/drivers/iio/frequency/adf4350.c b/drivers/iio/frequency/adf4350.c index 409c9c47161e..3f37a57cd3c3 100644 --- a/drivers/iio/frequency/adf4350.c +++ b/drivers/iio/frequency/adf4350.c @@ -47,6 +47,7 @@ struct adf4350_state { unsigned long regs[6]; unsigned long regs_hw[6]; unsigned long long freq_req; + struct mutex lock; /* * DMA (thus cache coherency maintenance) requires the * transfer buffers to live in their own cache lines. @@ -99,7 +100,7 @@ static int adf4350_reg_access(struct iio_dev *indio_dev, if (reg > ADF4350_REG5) return -EINVAL; - mutex_lock(&indio_dev->mlock); + mutex_lock(&st->lock); if (readval == NULL) { st->regs[reg] = writeval & ~(BIT(0) | BIT(1) | BIT(2)); ret = adf4350_sync_config(st); @@ -107,7 +108,7 @@ static int adf4350_reg_access(struct iio_dev *indio_dev, *readval = st->regs_hw[reg]; ret = 0; } - mutex_unlock(&indio_dev->mlock); + mutex_unlock(&st->lock); return ret; } @@ -254,7 +255,7 @@ static ssize_t adf4350_write(struct iio_dev *indio_dev, if (ret) return ret; - mutex_lock(&indio_dev->mlock); + mutex_lock(&st->lock); switch ((u32)private) { case ADF4350_FREQ: ret = adf4350_set_freq(st, readin); @@ -295,7 +296,7 @@ static ssize_t adf4350_write(struct iio_dev *indio_dev, default: ret = -EINVAL; } - mutex_unlock(&indio_dev->mlock); + mutex_unlock(&st->lock); return ret ? ret : len; } @@ -309,7 +310,7 @@ static ssize_t adf4350_read(struct iio_dev *indio_dev, unsigned long long val; int ret = 0; - mutex_lock(&indio_dev->mlock); + mutex_lock(&st->lock); switch ((u32)private) { case ADF4350_FREQ: val = (u64)((st->r0_int * st->r1_mod) + st->r0_fract) * @@ -338,7 +339,7 @@ static ssize_t adf4350_read(struct iio_dev *indio_dev, ret = -EINVAL; val = 0; } - mutex_unlock(&indio_dev->mlock); + mutex_unlock(&st->lock); return ret < 0 ? ret : sprintf(buf, "%llu\n", val); } @@ -539,6 +540,8 @@ static int adf4350_probe(struct spi_device *spi) indio_dev->channels = &adf4350_chan; indio_dev->num_channels = 1; + mutex_init(&st->lock); + st->chspc = pdata->channel_spacing; if (clk) { st->clk = clk;