summaryrefslogtreecommitdiff
path: root/drivers/thermal
diff options
context:
space:
mode:
authorPeng Fan <peng.fan@nxp.com>2020-05-03 17:19:49 +0300
committerStefano Babic <sbabic@denx.de>2020-05-10 21:55:20 +0300
commitb5447b98f24784459225ea0cc2729b1cdb1e3136 (patch)
tree85016cfc8189ebfcbc69dcfa39d749fc56253276 /drivers/thermal
parent84897408c688e3d3962e8cd7e92f3ad99c17005d (diff)
downloadu-boot-b5447b98f24784459225ea0cc2729b1cdb1e3136.tar.xz
thermal: imx_tmu: Fix for temperature out of range
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>
Diffstat (limited to 'drivers/thermal')
-rw-r--r--drivers/thermal/imx_tmu.c13
1 files changed, 10 insertions, 3 deletions
diff --git a/drivers/thermal/imx_tmu.c b/drivers/thermal/imx_tmu.c
index 049f32c39e..2a08d5085c 100644
--- a/drivers/thermal/imx_tmu.c
+++ b/drivers/thermal/imx_tmu.c
@@ -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;
}