On Wed, 8 May 2024 12:54:35 -0300 Fernando Yang <hagisf@xxxxxx> wrote: > Switching to the _scoped() version can make the error > handling more natural instead of delayed until direct > mode was released. > > Co-developed-by: Eduardo Figueredo <eduardofp@xxxxxx> > Signed-off-by: Eduardo Figueredo <eduardofp@xxxxxx> > Signed-off-by: Fernando Yang <hagisf@xxxxxx> > --- > drivers/iio/adc/ad7266.c | 15 +++++++++------ > 1 file changed, 9 insertions(+), 6 deletions(-) > > diff --git a/drivers/iio/adc/ad7266.c b/drivers/iio/adc/ad7266.c > index 8b03d4469..3fc34a3a8 100644 > --- a/drivers/iio/adc/ad7266.c > +++ b/drivers/iio/adc/ad7266.c > @@ -63,12 +63,14 @@ static int ad7266_powerdown(struct ad7266_state *st) > static int ad7266_preenable(struct iio_dev *indio_dev) > { > struct ad7266_state *st = iio_priv(indio_dev); > + > return ad7266_wakeup(st); > } > > static int ad7266_postdisable(struct iio_dev *indio_dev) > { > struct ad7266_state *st = iio_priv(indio_dev); > + > return ad7266_powerdown(st); > } > > @@ -151,15 +153,16 @@ static int ad7266_read_raw(struct iio_dev *indio_dev, > > switch (m) { > case IIO_CHAN_INFO_RAW: > - iio_device_claim_direct_scoped(return -EBUSY, indio_dev) This isn't the existing code. I'm guessing you have another commit ahead of this one on your branch? > + iio_device_claim_direct_scoped(return -EBUSY, indio_dev) { > ret = ad7266_read_single(st, val, chan->address); Not checking ret here is a bug in the existing code. Please fix that as a precursor patch before making the _scoped change. The check will have to be immediately after iio_device_release_direct_mode() in the existing code. > > - *val = (*val >> 2) & 0xfff; > - if (chan->scan_type.sign == 's') > - *val = sign_extend32(*val, > - chan->scan_type.realbits - 1); > + *val = (*val >> 2) & 0xfff; > + if (chan->scan_type.sign == 's') > + *val = sign_extend32(*val, > + chan->scan_type.realbits - 1); > > - return IIO_VAL_INT; > + return IIO_VAL_INT; > + } > unreachable(); > case IIO_CHAN_INFO_SCALE: > scale_mv = st->vref_mv;