iio: adc: qcom-vadc-common: use fixp_linear_interpolate
authorDmitry Baryshkov <dmitry.baryshkov@linaro.org>
Fri, 4 Dec 2020 02:54:58 +0000 (05:54 +0300)
committerJonathan Cameron <Jonathan.Cameron@huawei.com>
Sat, 16 Jan 2021 18:19:00 +0000 (18:19 +0000)
Use new function fixp_linear_interpolate() instead of hand-coding the
linear interpolation.

Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
Link: https://lore.kernel.org/r/20201204025509.1075506-5-dmitry.baryshkov@linaro.org
Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
drivers/iio/adc/qcom-vadc-common.c

index d11f334..40d77b3 100644 (file)
@@ -2,6 +2,7 @@
 #include <linux/bug.h>
 #include <linux/kernel.h>
 #include <linux/bitops.h>
+#include <linux/fixp-arith.h>
 #include <linux/math64.h>
 #include <linux/log2.h>
 #include <linux/err.h>
@@ -368,10 +369,9 @@ static int qcom_vadc_map_voltage_temp(const struct vadc_map_pt *pts,
        } else {
                /* result is between search_index and search_index-1 */
                /* interpolate linearly */
-               *output = (((s32)((pts[i].y - pts[i - 1].y) *
-                       (input - pts[i - 1].x)) /
-                       (pts[i].x - pts[i - 1].x)) +
-                       pts[i - 1].y);
+               *output = fixp_linear_interpolate(pts[i - 1].x, pts[i - 1].y,
+                                                 pts[i].x, pts[i].y,
+                                                 input);
        }
 
        return 0;