]> git.sur5r.net Git - u-boot/commitdiff
thermal: imx: fix calculation
authorPeng Fan <peng.fan@nxp.com>
Tue, 18 Apr 2017 12:41:53 +0000 (20:41 +0800)
committerStefano Babic <sbabic@denx.de>
Thu, 18 May 2017 09:23:31 +0000 (11:23 +0200)
Fix calculation. do_div can not handle negative values.
Use div_s64_rem to handle the calculation.

Signed-off-by: Peng Fan <peng.fan@nxp.com>
Cc: Stefano Babic <sbabic@denx.de>
drivers/thermal/imx_thermal.c

index b159464d82e79499e035df75d6a16866f62c19da..d137bfdca0b5a54ce7f8365ceb488980ecd16e70 100644 (file)
@@ -16,6 +16,7 @@
 #include <dm.h>
 #include <errno.h>
 #include <malloc.h>
+#include <linux/math64.h>
 #include <thermal.h>
 #include <imx_thermal.h>
 
@@ -55,8 +56,9 @@ static int read_cpu_temperature(struct udevice *dev)
        struct thermal_data *priv = dev_get_priv(dev);
        u32 fuse = priv->fuse;
        int t1, n1;
-       u64 c1, c2;
-       u64 temp64;
+       s64 c1, c2;
+       s64 temp64;
+       s32 rem;
 
        /*
         * Sensor data layout:
@@ -88,7 +90,7 @@ static int read_cpu_temperature(struct udevice *dev)
         */
        temp64 = FACTOR0;
        temp64 *= 1000000;
-       do_div(temp64, FACTOR1 * n1 - FACTOR2);
+       temp64 = div_s64_rem(temp64, FACTOR1 * n1 - FACTOR2, &rem);
        c1 = temp64;
        c2 = n1 * c1 + 1000000 * t1;
 
@@ -123,7 +125,7 @@ static int read_cpu_temperature(struct udevice *dev)
        writel(TEMPSENSE0_FINISHED, &anatop->tempsense0_clr);
 
        /* Tmeas = (c2 - Nmeas * c1 + OFFSET) / 1000000 */
-       temperature = lldiv(c2 - n_meas * c1 + OFFSET, 1000000);
+       temperature = div_s64_rem(c2 - n_meas * c1 + OFFSET, 1000000, &rem);
 
        /* power down anatop thermal sensor */
        writel(TEMPSENSE0_POWER_DOWN, &anatop->tempsense0_set);