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:
committed by
Greg Kroah-Hartman
parent
786cdbd4da
commit
ca0012a632
@@ -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,
|
||||||
};
|
};
|
||||||
|
Reference in New Issue
Block a user