Message ID | 20250217141630.897334-16-jic23@kernel.org (mailing list archive) |
---|---|
State | New |
Headers | show |
Series | IIO: ADCs: Sparse friendly claim of direct mode | expand |
On Mon, 2025-02-17 at 14:16 +0000, Jonathan Cameron wrote: > From: Jonathan Cameron <Jonathan.Cameron@huawei.com> > > Factor out everything under the direct mode claim allowing direct returns > in error paths. > > Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com> > --- Reviewed-by: Nuno Sá <nuno.sa@analog.com> > drivers/iio/adc/ad7791.c | 30 ++++++++++++++++++------------ > 1 file changed, 18 insertions(+), 12 deletions(-) > > diff --git a/drivers/iio/adc/ad7791.c b/drivers/iio/adc/ad7791.c > index 76118fe22db8..e49d4843f304 100644 > --- a/drivers/iio/adc/ad7791.c > +++ b/drivers/iio/adc/ad7791.c > @@ -310,15 +310,11 @@ static int ad7791_read_raw(struct iio_dev *indio_dev, > return -EINVAL; > } > > -static int ad7791_write_raw(struct iio_dev *indio_dev, > +static int __ad7791_write_raw(struct iio_dev *indio_dev, > struct iio_chan_spec const *chan, int val, int val2, long mask) > { > struct ad7791_state *st = iio_priv(indio_dev); > - int ret, i; > - > - ret = iio_device_claim_direct_mode(indio_dev); > - if (ret) > - return ret; > + int i; > > switch (mask) { > case IIO_CHAN_INFO_SAMP_FREQ: > @@ -328,20 +324,30 @@ static int ad7791_write_raw(struct iio_dev *indio_dev, > break; > } > > - if (i == ARRAY_SIZE(ad7791_sample_freq_avail)) { > - ret = -EINVAL; > - break; > - } > + if (i == ARRAY_SIZE(ad7791_sample_freq_avail)) > + return -EINVAL; > > st->filter &= ~AD7791_FILTER_RATE_MASK; > st->filter |= i; > ad_sd_write_reg(&st->sd, AD7791_REG_FILTER, > sizeof(st->filter), > st->filter); > - break; > + return 0; > default: > - ret = -EINVAL; > + return -EINVAL; > } > +} > + > +static int ad7791_write_raw(struct iio_dev *indio_dev, > + struct iio_chan_spec const *chan, int val, int val2, long mask) > +{ > + int ret; > + > + ret = iio_device_claim_direct_mode(indio_dev); > + if (ret) > + return ret; > + > + ret = __ad7791_write_raw(indio_dev, chan, val, val2, mask); > > iio_device_release_direct_mode(indio_dev); > return ret;
diff --git a/drivers/iio/adc/ad7791.c b/drivers/iio/adc/ad7791.c index 76118fe22db8..e49d4843f304 100644 --- a/drivers/iio/adc/ad7791.c +++ b/drivers/iio/adc/ad7791.c @@ -310,15 +310,11 @@ static int ad7791_read_raw(struct iio_dev *indio_dev, return -EINVAL; } -static int ad7791_write_raw(struct iio_dev *indio_dev, +static int __ad7791_write_raw(struct iio_dev *indio_dev, struct iio_chan_spec const *chan, int val, int val2, long mask) { struct ad7791_state *st = iio_priv(indio_dev); - int ret, i; - - ret = iio_device_claim_direct_mode(indio_dev); - if (ret) - return ret; + int i; switch (mask) { case IIO_CHAN_INFO_SAMP_FREQ: @@ -328,20 +324,30 @@ static int ad7791_write_raw(struct iio_dev *indio_dev, break; } - if (i == ARRAY_SIZE(ad7791_sample_freq_avail)) { - ret = -EINVAL; - break; - } + if (i == ARRAY_SIZE(ad7791_sample_freq_avail)) + return -EINVAL; st->filter &= ~AD7791_FILTER_RATE_MASK; st->filter |= i; ad_sd_write_reg(&st->sd, AD7791_REG_FILTER, sizeof(st->filter), st->filter); - break; + return 0; default: - ret = -EINVAL; + return -EINVAL; } +} + +static int ad7791_write_raw(struct iio_dev *indio_dev, + struct iio_chan_spec const *chan, int val, int val2, long mask) +{ + int ret; + + ret = iio_device_claim_direct_mode(indio_dev); + if (ret) + return ret; + + ret = __ad7791_write_raw(indio_dev, chan, val, val2, mask); iio_device_release_direct_mode(indio_dev); return ret;