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>
This commit is contained in:
Peng Fan 2020-05-03 22:19:49 +08:00 committed by Stefano Babic
parent 84897408c6
commit b5447b98f2
1 changed files with 10 additions and 3 deletions

View 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;
}