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) + iio_device_claim_direct_scoped(return -EBUSY, indio_dev) { ret = ad7266_read_single(st, val, chan->address); - *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; -- 2.34.1