[PATCH v5 05/10] iio: afe: rescale: add INT_PLUS_{MICRO,NANO} support

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



From: Liam Beguin <lvb@xxxxxxxxxx>

Some ADCs use IIO_VAL_INT_PLUS_{NANO,MICRO} scale types.
Add support for these to allow using the iio-rescaler with them.

Signed-off-by: Liam Beguin <lvb@xxxxxxxxxx>
---
 drivers/iio/afe/iio-rescale.c | 15 +++++++++++++++
 1 file changed, 15 insertions(+)

diff --git a/drivers/iio/afe/iio-rescale.c b/drivers/iio/afe/iio-rescale.c
index 4c3cfd4d5181..a2b220b5ba86 100644
--- a/drivers/iio/afe/iio-rescale.c
+++ b/drivers/iio/afe/iio-rescale.c
@@ -92,7 +92,22 @@ static int rescale_read_raw(struct iio_dev *indio_dev,
 			do_div(tmp, 1000000000LL);
 			*val = tmp;
 			return ret;
+		case IIO_VAL_INT_PLUS_NANO:
+			tmp = ((s64)*val * 1000000000LL + *val2) * rescale->numerator;
+			do_div(tmp, rescale->denominator);
+
+			*val = div_s64(tmp, 1000000000LL);
+			*val2 = tmp - *val * 1000000000LL;
+			return ret;
+		case IIO_VAL_INT_PLUS_MICRO:
+			tmp = ((s64)*val * 1000000LL + *val2) * rescale->numerator;
+			do_div(tmp, rescale->denominator);
+
+			*val = div_s64(tmp, 1000000LL);
+			*val2 = tmp - *val * 1000000LL;
+			return ret;
 		default:
+			dev_err(&indio_dev->dev, "unsupported type %d\n", ret);
 			return -EOPNOTSUPP;
 		}
 	default:
-- 
2.30.1.489.g328c10930387




[Index of Archives]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Input]     [Linux Kernel]     [Linux SCSI]     [X.org]

  Powered by Linux