iio:pressure:ms5611: fix ms5607 temp compensation
authorGregor Boirie <gregor.boirie@parrot.com>
Wed, 17 Feb 2016 17:52:49 +0000 (18:52 +0100)
committerJonathan Cameron <jic23@kernel.org>
Wed, 24 Feb 2016 20:40:46 +0000 (20:40 +0000)
Computation of sens2 was wrong and is fixed by this patch, sens2 should be:
    2 * (t - 2000)^2
See page 8 of ms5607 datasheet here:
    http://www.meas-spec.com/product/pressure/MS5607-02BA03.aspx

Signed-off-by: Gregor Boirie <gregor.boirie@parrot.com>
Acked-by: Lucas De Marchi <lucas.demarchi@intel.com>
Acked-by: Peter Meerwald-Stadler <pmeerw@pmeerw.net>
Signed-off-by: Jonathan Cameron <jic23@kernel.org>
drivers/iio/pressure/ms5611_core.c

index c7885f0c819f6354eb11c0cfe53e6be58dba71ca..84ab8d234a7f027e22e3749dd8d19d61477e6564 100644 (file)
@@ -136,17 +136,17 @@ static int ms5607_temp_and_pressure_compensate(struct ms5611_chip_info *chip_inf
 
        t = 2000 + ((chip_info->prom[6] * dt) >> 23);
        if (t < 2000) {
-               s64 off2, sens2, t2;
+               s64 off2, sens2, t2, tmp;
 
                t2 = (dt * dt) >> 31;
-               off2 = (61 * (t - 2000) * (t - 2000)) >> 4;
-               sens2 = off2 << 1;
+               tmp = (t - 2000) * (t - 2000);
+               off2 = (61 * tmp) >> 4;
+               sens2 = tmp << 1;
 
                if (t < -1500) {
-                       s64 tmp = (t + 1500) * (t + 1500);
-
+                       tmp = (t + 1500) * (t + 1500);
                        off2 += 15 * tmp;
-                       sens2 += (8 * tmp);
+                       sens2 += 8 * tmp;
                }
 
                t -= t2;