]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
iio: filter: admv8818: Support frequencies >= 2^32
authorBrian Pellegrino <bpellegrino@arka.org>
Fri, 28 Mar 2025 17:48:31 +0000 (13:48 -0400)
committerJonathan Cameron <Jonathan.Cameron@huawei.com>
Tue, 22 Apr 2025 18:09:52 +0000 (19:09 +0100)
This patch allows writing u64 values to the ADMV8818's high and low-pass
filter frequencies. It includes the following changes:

- Rejects negative frequencies in admv8818_write_raw.
- Adds a write_raw_get_fmt function to admv8818's iio_info, returning
  IIO_VAL_INT_64 for the high and low-pass filter 3dB frequency channels.

Fixes: f34fe888ad05 ("iio:filter:admv8818: add support for ADMV8818")
Signed-off-by: Brian Pellegrino <bpellegrino@arka.org>
Signed-off-by: Sam Winchenbach <swinchenbach@arka.org>
Link: https://patch.msgid.link/20250328174831.227202-7-sam.winchenbach@framepointer.org
Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
drivers/iio/filter/admv8818.c

index 380e119b3cf549f4d7778b48652e5366f19d9ae9..cc8ce0fe74e7c6e738accd1e5f2035ccfee299db 100644 (file)
@@ -402,6 +402,19 @@ static int admv8818_read_lpf_freq(struct admv8818_state *st, u64 *lpf_freq)
        return ret;
 }
 
+static int admv8818_write_raw_get_fmt(struct iio_dev *indio_dev,
+                                                               struct iio_chan_spec const *chan,
+                                                               long mask)
+{
+       switch (mask) {
+       case IIO_CHAN_INFO_LOW_PASS_FILTER_3DB_FREQUENCY:
+       case IIO_CHAN_INFO_HIGH_PASS_FILTER_3DB_FREQUENCY:
+               return IIO_VAL_INT_64;
+       default:
+               return -EINVAL;
+       }
+}
+
 static int admv8818_write_raw(struct iio_dev *indio_dev,
                              struct iio_chan_spec const *chan,
                              int val, int val2, long info)
@@ -410,6 +423,9 @@ static int admv8818_write_raw(struct iio_dev *indio_dev,
 
        u64 freq = ((u64)val2 << 32 | (u32)val);
 
+       if ((s64)freq < 0)
+               return -EINVAL;
+
        switch (info) {
        case IIO_CHAN_INFO_LOW_PASS_FILTER_3DB_FREQUENCY:
                return admv8818_lpf_select(st, freq);
@@ -571,6 +587,7 @@ set_mode:
 
 static const struct iio_info admv8818_info = {
        .write_raw = admv8818_write_raw,
+       .write_raw_get_fmt = admv8818_write_raw_get_fmt,
        .read_raw = admv8818_read_raw,
        .debugfs_reg_access = &admv8818_reg_access,
 };