Message ID | 20250307150216.374643-5-sam.winchenbach@framepointer.org (mailing list archive) |
---|---|
State | New |
Headers | show |
Series | [v6,1/6] dt-bindings: iio: filter: Add lpf/hpf freq margins | expand |
On Fri, 7 Mar 2025 10:02:15 -0500 Sam Winchenbach <sam.winchenbach@framepointer.org> wrote: Patch title should be iio: core: driver core is stuff in drivers/base/ > Prior to this patch it was only possible to read 64 bit integers. > > Signed-off-by: Sam Winchenbach <sam.winchenbach@framepointer.org> > --- > drivers/iio/industrialio-core.c | 12 ++++++++++++ > 1 file changed, 12 insertions(+) > > diff --git a/drivers/iio/industrialio-core.c b/drivers/iio/industrialio-core.c > index a2117ad1337d..b2436b8f3eea 100644 > --- a/drivers/iio/industrialio-core.c > +++ b/drivers/iio/industrialio-core.c > @@ -965,8 +965,10 @@ static ssize_t iio_write_channel_info(struct device *dev, > struct iio_dev_attr *this_attr = to_iio_dev_attr(attr); > int ret, fract_mult = 100000; > int integer, fract = 0; > + long long integer64; > bool is_char = false; > bool scale_db = false; > + bool is_64bit = false; > > /* Assumes decimal - precision based on number of digits */ > if (!indio_dev->info->write_raw) > @@ -990,6 +992,9 @@ static ssize_t iio_write_channel_info(struct device *dev, > case IIO_VAL_CHAR: > is_char = true; > break; > + case IIO_VAL_INT_64: > + is_64bit = true; > + break; > default: > return -EINVAL; > } > @@ -1000,6 +1005,13 @@ static ssize_t iio_write_channel_info(struct device *dev, > if (sscanf(buf, "%c", &ch) != 1) > return -EINVAL; > integer = ch; > + } else if (is_64bit) { > + ret = kstrtoll(buf, 0, &integer64); > + if (ret) > + return ret; > + > + fract = (int)(integer64 >> 32); > + integer = (int)(integer64 & 0xFFFFFFFF); > } else { > ret = __iio_str_to_fixpoint(buf, fract_mult, &integer, &fract, > scale_db);
diff --git a/drivers/iio/industrialio-core.c b/drivers/iio/industrialio-core.c index a2117ad1337d..b2436b8f3eea 100644 --- a/drivers/iio/industrialio-core.c +++ b/drivers/iio/industrialio-core.c @@ -965,8 +965,10 @@ static ssize_t iio_write_channel_info(struct device *dev, struct iio_dev_attr *this_attr = to_iio_dev_attr(attr); int ret, fract_mult = 100000; int integer, fract = 0; + long long integer64; bool is_char = false; bool scale_db = false; + bool is_64bit = false; /* Assumes decimal - precision based on number of digits */ if (!indio_dev->info->write_raw) @@ -990,6 +992,9 @@ static ssize_t iio_write_channel_info(struct device *dev, case IIO_VAL_CHAR: is_char = true; break; + case IIO_VAL_INT_64: + is_64bit = true; + break; default: return -EINVAL; } @@ -1000,6 +1005,13 @@ static ssize_t iio_write_channel_info(struct device *dev, if (sscanf(buf, "%c", &ch) != 1) return -EINVAL; integer = ch; + } else if (is_64bit) { + ret = kstrtoll(buf, 0, &integer64); + if (ret) + return ret; + + fract = (int)(integer64 >> 32); + integer = (int)(integer64 & 0xFFFFFFFF); } else { ret = __iio_str_to_fixpoint(buf, fract_mult, &integer, &fract, scale_db);
Prior to this patch it was only possible to read 64 bit integers. Signed-off-by: Sam Winchenbach <sam.winchenbach@framepointer.org> --- drivers/iio/industrialio-core.c | 12 ++++++++++++ 1 file changed, 12 insertions(+)