iio: filter: admv8818: Support frequencies >= 2^32

[ Upstream commit 9016776f1301627de78a633bda7c898425a56572 ]

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: f34fe888ad ("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>
Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
Brian Pellegrino
2025-03-28 13:48:31 -04:00
committed by Greg Kroah-Hartman
parent 786cdbd4da
commit ca0012a632

View File

@@ -402,6 +402,19 @@ static int admv8818_read_lpf_freq(struct admv8818_state *st, u64 *lpf_freq)
return ret; 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, static int admv8818_write_raw(struct iio_dev *indio_dev,
struct iio_chan_spec const *chan, struct iio_chan_spec const *chan,
int val, int val2, long info) 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); u64 freq = ((u64)val2 << 32 | (u32)val);
if ((s64)freq < 0)
return -EINVAL;
switch (info) { switch (info) {
case IIO_CHAN_INFO_LOW_PASS_FILTER_3DB_FREQUENCY: case IIO_CHAN_INFO_LOW_PASS_FILTER_3DB_FREQUENCY:
return admv8818_lpf_select(st, freq); return admv8818_lpf_select(st, freq);
@@ -571,6 +587,7 @@ set_mode:
static const struct iio_info admv8818_info = { static const struct iio_info admv8818_info = {
.write_raw = admv8818_write_raw, .write_raw = admv8818_write_raw,
.write_raw_get_fmt = admv8818_write_raw_get_fmt,
.read_raw = admv8818_read_raw, .read_raw = admv8818_read_raw,
.debugfs_reg_access = &admv8818_reg_access, .debugfs_reg_access = &admv8818_reg_access,
}; };