]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
iio: adc: ad7791: Factor out core of ad7791_write_raw() to simplify error handling
authorJonathan Cameron <Jonathan.Cameron@huawei.com>
Mon, 17 Feb 2025 14:16:15 +0000 (14:16 +0000)
committerJonathan Cameron <Jonathan.Cameron@huawei.com>
Tue, 4 Mar 2025 13:17:49 +0000 (13:17 +0000)
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>
drivers/iio/adc/ad7791.c

index 76118fe22db8f325997f5848a3ed13b0200d3a76..e49d4843f304c3d9386e48869543f23fb23dbaa2 100644 (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;