Linux kernel .get_temp() callback reports values in millicelsius,
U-Boot currently reports them in celsius. Align the two and report
in millicelsius. Update drivers accordingly. Update callsites that
use thermal_get_temp() as well.

The 'temperature' command now reports temperature in millicelsius
as well, with additional accuracy. This changes command line ABI
slightly.

Signed-off-by: Marek Vasut <marek.vasut+rene...@mailbox.org>
---
Cc: "NXP i.MX U-Boot Team" <uboot-...@nxp.com>
Cc: Adam Ford <aford...@gmail.com>
Cc: Alice Guo <alice....@nxp.com>
Cc: Andrew Goodbody <andrew.goodb...@linaro.org>
Cc: David Zang <davidzan...@gmail.com>
Cc: Fabio Estevam <feste...@gmail.com>
Cc: Jaehoon Chung <jh80.ch...@samsung.com>
Cc: Mathieu Othacehe <othac...@gnu.org>
Cc: Nobuhiro Iwamatsu <iwama...@nigauri.org>
Cc: Peng Fan <peng....@nxp.com>
Cc: Simon Glass <s...@chromium.org>
Cc: Stefano Babic <sba...@nabladev.com>
Cc: Tom Rini <tr...@konsulko.com>
Cc: Ye Li <ye...@nxp.com>
Cc: u-boot@lists.denx.de
---
 arch/arm/mach-imx/cpu.c             | 1 +
 arch/arm/mach-imx/imx8ulp/soc.c     | 2 +-
 cmd/temperature.c                   | 2 +-
 drivers/cpu/imx8_cpu.c              | 2 +-
 drivers/mmc/omap_hsmmc.c            | 1 +
 drivers/thermal/imx_scu_thermal.c   | 2 +-
 drivers/thermal/imx_thermal.c       | 2 +-
 drivers/thermal/imx_tmu.c           | 2 +-
 drivers/thermal/rcar_gen3_thermal.c | 6 +++---
 drivers/thermal/thermal_sandbox.c   | 2 +-
 drivers/thermal/ti-bandgap.c        | 2 +-
 drivers/thermal/ti-lm74.c           | 2 +-
 include/thermal.h                   | 2 +-
 13 files changed, 15 insertions(+), 13 deletions(-)

diff --git a/arch/arm/mach-imx/cpu.c b/arch/arm/mach-imx/cpu.c
index 17de9ff98ec..cc215b771ef 100644
--- a/arch/arm/mach-imx/cpu.c
+++ b/arch/arm/mach-imx/cpu.c
@@ -230,6 +230,7 @@ int print_cpuinfo(void)
        ret = uclass_get_device(UCLASS_THERMAL, 0, &thermal_dev);
        if (!ret) {
                ret = thermal_get_temp(thermal_dev, &cpu_tmp);
+               cpu_tmp /= 1000;
 
                if (!ret)
                        printf(" at %dC", cpu_tmp);
diff --git a/arch/arm/mach-imx/imx8ulp/soc.c b/arch/arm/mach-imx/imx8ulp/soc.c
index e85cb0dd252..b10762a9e07 100644
--- a/arch/arm/mach-imx/imx8ulp/soc.c
+++ b/arch/arm/mach-imx/imx8ulp/soc.c
@@ -279,7 +279,7 @@ int print_cpuinfo(void)
        if (!ret) {
                ret = thermal_get_temp(udev, &temp);
                if (!ret)
-                       printf("CPU current temperature: %dC\n", temp);
+                       printf("CPU current temperature: %dC\n", temp / 1000);
                else
                        debug(" - failed to get CPU current temperature\n");
        } else {
diff --git a/cmd/temperature.c b/cmd/temperature.c
index 41e422fc937..c145d019364 100644
--- a/cmd/temperature.c
+++ b/cmd/temperature.c
@@ -32,7 +32,7 @@ static int do_get(struct cmd_tbl *cmdtp, int flag, int argc,
        if (ret)
                return CMD_RET_FAILURE;
 
-       printf("%s: %d C\n", dev->name, temp);
+       printf("%s: %d mC\n", dev->name, temp);
 
        return CMD_RET_SUCCESS;
 }
diff --git a/drivers/cpu/imx8_cpu.c b/drivers/cpu/imx8_cpu.c
index 950630453f9..4a7e951ce19 100644
--- a/drivers/cpu/imx8_cpu.c
+++ b/drivers/cpu/imx8_cpu.c
@@ -190,7 +190,7 @@ static int cpu_imx_get_temp(struct cpu_imx_plat *plat)
                return 0xdeadbeef;
        }
 
-       return cpu_tmp;
+       return cpu_tmp / 1000;
 }
 #else
 static int cpu_imx_get_temp(struct cpu_imx_plat *plat)
diff --git a/drivers/mmc/omap_hsmmc.c b/drivers/mmc/omap_hsmmc.c
index 92bc72b267c..ae742080643 100644
--- a/drivers/mmc/omap_hsmmc.c
+++ b/drivers/mmc/omap_hsmmc.c
@@ -651,6 +651,7 @@ static int omap_hsmmc_execute_tuning(struct udevice *dev, 
uint opcode)
                printf("Couldn't get temperature for tuning\n");
                return ret;
        }
+       temperature /= 1000;
        val = readl(&mmc_base->dll);
        val |= DLL_SWT;
        writel(val, &mmc_base->dll);
diff --git a/drivers/thermal/imx_scu_thermal.c 
b/drivers/thermal/imx_scu_thermal.c
index fc2b0e227b2..6b0b1d10d9d 100644
--- a/drivers/thermal/imx_scu_thermal.c
+++ b/drivers/thermal/imx_scu_thermal.c
@@ -72,7 +72,7 @@ int imx_sc_thermal_get_temp(struct udevice *dev, int *temp)
                        break;
        }
 
-       *temp = cpu_temp / 1000;
+       *temp = cpu_temp;
 
        return 0;
 }
diff --git a/drivers/thermal/imx_thermal.c b/drivers/thermal/imx_thermal.c
index ea1fcc3dcb2..d04035950ee 100644
--- a/drivers/thermal/imx_thermal.c
+++ b/drivers/thermal/imx_thermal.c
@@ -223,7 +223,7 @@ int imx_thermal_get_temp(struct udevice *dev, int *temp)
                cpu_tmp = read_cpu_temperature(dev);
        }
 
-       *temp = cpu_tmp;
+       *temp = cpu_tmp * 1000;
 
        return 0;
 }
diff --git a/drivers/thermal/imx_tmu.c b/drivers/thermal/imx_tmu.c
index 70d002aee25..51a072e23c6 100644
--- a/drivers/thermal/imx_tmu.c
+++ b/drivers/thermal/imx_tmu.c
@@ -245,7 +245,7 @@ int imx_tmu_get_temp(struct udevice *dev, int *temp)
                        return ret;
        }
 
-       *temp = cpu_tmp / 1000;
+       *temp = cpu_tmp;
 
        return 0;
 }
diff --git a/drivers/thermal/rcar_gen3_thermal.c 
b/drivers/thermal/rcar_gen3_thermal.c
index 83433e8d8f0..ffbe4a625e4 100644
--- a/drivers/thermal/rcar_gen3_thermal.c
+++ b/drivers/thermal/rcar_gen3_thermal.c
@@ -161,7 +161,7 @@ static int rcar_gen3_thermal_get_temp(struct udevice *dev, 
int *temp)
        const struct equation_set_coef *coef;
        int adj, decicelsius, reg, thcode;
 
-       /* Read register and convert to degree Celsius */
+       /* Read register and convert to millidegree Celsius */
        reg = rcar_gen3_thermal_read(tsc, REG_GEN3_TEMP) & CTEMP_MASK;
 
        if (reg < tsc->thcode[1]) {
@@ -184,8 +184,8 @@ static int rcar_gen3_thermal_get_temp(struct udevice *dev, 
int *temp)
 
        /* Guaranteed operating range is -40C to 125C. */
 
-       /* Reporting is done in degree Celsius */
-       *temp = (decicelsius * 100 + adj * 1000) / 1000;
+       /* Reporting is done in millidegree Celsius */
+       *temp = decicelsius * 100 + adj * 1000;
 
        return 0;
 }
diff --git a/drivers/thermal/thermal_sandbox.c 
b/drivers/thermal/thermal_sandbox.c
index b7c567d76cd..2e1f1559e53 100644
--- a/drivers/thermal/thermal_sandbox.c
+++ b/drivers/thermal/thermal_sandbox.c
@@ -12,7 +12,7 @@
 static int sandbox_thermal_get_temp(struct udevice *dev, int *temp)
 {
        /* Simply return 100 deg C */
-       *temp = 100;
+       *temp = 100 * 1000;
 
        return 0;
 }
diff --git a/drivers/thermal/ti-bandgap.c b/drivers/thermal/ti-bandgap.c
index 0ea17a909dd..dc869f108e4 100644
--- a/drivers/thermal/ti-bandgap.c
+++ b/drivers/thermal/ti-bandgap.c
@@ -163,7 +163,7 @@ static int ti_bandgap_get_temp(struct udevice *dev,  int 
*temp)
        struct ti_bandgap *bgp = dev_get_priv(dev);
 
        bgp->adc_val = 0x3ff & readl(bgp->base + CTRL_CORE_TEMP_SENSOR_MPU);
-       *temp = dra752_adc_to_temp[bgp->adc_val - DRA752_ADC_START_VALUE];
+       *temp = dra752_adc_to_temp[bgp->adc_val - DRA752_ADC_START_VALUE] * 
1000;
 
        return 0;
 }
diff --git a/drivers/thermal/ti-lm74.c b/drivers/thermal/ti-lm74.c
index 7d56f75df06..20d0e39ece1 100644
--- a/drivers/thermal/ti-lm74.c
+++ b/drivers/thermal/ti-lm74.c
@@ -28,7 +28,7 @@ static int ti_lm74_get_temp(struct udevice *dev, int *temp)
 
        raw = ((buf[0] << 8) + buf[1]) >> 3;
 
-       *temp = (((int)raw * 125) + 1000) / 2000;
+       *temp = (((int)raw * 125) + 1000) / 2;
 
        return 0;
 }
diff --git a/include/thermal.h b/include/thermal.h
index 52a3317fd54..74b1c62466b 100644
--- a/include/thermal.h
+++ b/include/thermal.h
@@ -25,7 +25,7 @@ struct dm_thermal_ops {
         * It will enable and initialize any Thermal hardware as necessary.
         *
         * @dev:        The Thermal device
-        * @temp:       pointer that returns the measured temperature
+        * @temp:       pointer that returns the measured temperature in 
millidegree Celsius
         */
        int (*get_temp)(struct udevice *dev, int *temp);
 };
-- 
2.50.1

Reply via email to