thermal: imx_tmu: Fix for temperature out of range
authorPeng Fan <peng.fan@nxp.com>
Sun, 3 May 2020 14:19:49 +0000 (22:19 +0800)
committerStefano Babic <sbabic@denx.de>
Sun, 10 May 2020 18:55:20 +0000 (20:55 +0200)
When the temperature is out of sensor's range, the Valid bit won't be
set in TRITSR register. So the polling loop won't go out.

Change the codes to retry 10 times with 100ms interval for the Valid bit.
If the timeout, we give a warning for the invalid data.

Modifed from Ye's NXP patch

Signed-off-by: Peng Fan <peng.fan@nxp.com>
drivers/thermal/imx_tmu.c

index 049f32c39eaed7418e61f85f7fff1cfdbd9b21ca..2a08d5085cfda35b809e7d4a87938de4ab485114 100644 (file)
@@ -105,15 +105,22 @@ static int read_temperature(struct udevice *dev, int *temp)
        struct imx_tmu_plat *pdata = dev_get_platdata(dev);
        ulong drv_data = dev_get_driver_data(dev);
        u32 val;
+       u32 retry = 10;
 
        do {
-               if (drv_data & FLAGS_VER2) {
+               mdelay(100);
+               retry--;
+
+               if (drv_data & FLAGS_VER2)
                        val = readl(&pdata->regs->regs_v2.tritsr);
                else
                        val = readl(&pdata->regs->regs_v1.site[pdata->id].tritsr);
-       } while (!(val & 0x80000000));
+       } while (!(val & 0x80000000) && retry > 0);
 
-       *temp = (val & 0xff) * 1000;
+       if (retry > 0)
+               *temp = (val & 0xff) * 1000;
+       else
+               return -EINVAL;
 
        return 0;
 }