]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
iio: adc: ad7768-1: refactor ad7768_write_raw()
authorJonathan Santos <Jonathan.Santos@analog.com>
Wed, 14 Jan 2026 09:27:14 +0000 (06:27 -0300)
committerJonathan Cameron <Jonathan.Cameron@huawei.com>
Thu, 22 Jan 2026 20:53:18 +0000 (20:53 +0000)
Squash __ad7768_write_raw() back to ad7768_write_raw() to allow the
addition of new attributes without requiring a direct mode claim.

Signed-off-by: Jonathan Santos <Jonathan.Santos@analog.com>
Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
drivers/iio/adc/ad7768-1.c

index 89b0ca8f584c414f1e6c04b34d3654f31a900860..bd4b2e090c5bb39bc43acf3b78e7088249c3627d 100644 (file)
@@ -742,6 +742,19 @@ static int ad7768_get_filter_type_attr(struct iio_dev *dev,
        return ad7768_filter_regval_to_type[FIELD_GET(mask, mode)];
 }
 
+static int ad7768_update_dec_rate(struct iio_dev *dev, unsigned int dec_rate)
+{
+       struct ad7768_state *st = iio_priv(dev);
+       int ret;
+
+       ret = ad7768_configure_dig_fil(dev, st->filter_type, dec_rate);
+       if (ret)
+               return ret;
+
+       /* Update sampling frequency */
+       return ad7768_set_freq(st, st->samp_freq);
+}
+
 static const struct iio_enum ad7768_filter_type_iio_enum = {
        .items = ad7768_filter_enum,
        .num_items = ARRAY_SIZE(ad7768_filter_enum),
@@ -867,44 +880,33 @@ static int ad7768_read_avail(struct iio_dev *indio_dev,
        }
 }
 
-static int __ad7768_write_raw(struct iio_dev *indio_dev,
-                             struct iio_chan_spec const *chan,
-                             int val, int val2, long info)
+static int ad7768_write_raw(struct iio_dev *indio_dev,
+                           struct iio_chan_spec const *chan,
+                           int val, int val2, long info)
 {
        struct ad7768_state *st = iio_priv(indio_dev);
        int ret;
 
        switch (info) {
        case IIO_CHAN_INFO_SAMP_FREQ:
-               return ad7768_set_freq(st, val);
+               if (!iio_device_claim_direct(indio_dev))
+                       return -EBUSY;
 
+               ret = ad7768_set_freq(st, val);
+               iio_device_release_direct(indio_dev);
+               return ret;
        case IIO_CHAN_INFO_OVERSAMPLING_RATIO:
-               ret = ad7768_configure_dig_fil(indio_dev, st->filter_type, val);
-               if (ret)
-                       return ret;
+               if (!iio_device_claim_direct(indio_dev))
+                       return -EBUSY;
 
-               /* Update sampling frequency */
-               return ad7768_set_freq(st, st->samp_freq);
+               ret = ad7768_update_dec_rate(indio_dev, val);
+               iio_device_release_direct(indio_dev);
+               return ret;
        default:
                return -EINVAL;
        }
 }
 
-static int ad7768_write_raw(struct iio_dev *indio_dev,
-                           struct iio_chan_spec const *chan,
-                           int val, int val2, long info)
-{
-       int ret;
-
-       if (!iio_device_claim_direct(indio_dev))
-               return -EBUSY;
-
-       ret = __ad7768_write_raw(indio_dev, chan, val, val2, info);
-       iio_device_release_direct(indio_dev);
-
-       return ret;
-}
-
 static int ad7768_read_label(struct iio_dev *indio_dev,
        const struct iio_chan_spec *chan, char *label)
 {