iio: adc: ad7791: Factor out core of ad7791_write_raw() to simplify error handling

Factor out everything under the direct mode claim allowing direct returns
in error paths.

Reviewed-by: Nuno Sá <nuno.sa@analog.com>
Link: https://patch.msgid.link/20250217141630.897334-16-jic23@kernel.org
Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
This commit is contained in:
Jonathan Cameron
2025-02-17 14:16:15 +00:00
parent 15bed4f0cb
commit c05cbf02df

View File

@@ -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;