Commit 36564d7e authored by Andrey Smirnov's avatar Andrey Smirnov Committed by Daniel Lezcano

thermal: qoriq: Do not report invalid temperature reading

Before returning measured temperature data to upper layer we need to
make sure that the reading was marked as "valid" to avoid reporting
bogus data.
Signed-off-by: default avatarAndrey Smirnov <andrew.smirnov@gmail.com>
Reviewed-by: default avatarDaniel Lezcano <daniel.lezcano@linaro.org>
Tested-by: default avatarLucas Stach <l.stach@pengutronix.de>
Cc: Chris Healy <cphealy@gmail.com>
Cc: Lucas Stach <l.stach@pengutronix.de>
Cc: Eduardo Valentin <edubezval@gmail.com>
Cc: Daniel Lezcano <daniel.lezcano@linaro.org>
Cc: Angus Ainslie (Purism) <angus@akkea.ca>
Cc: linux-imx@nxp.com
Cc: linux-pm@vger.kernel.org
Cc: linux-kernel@vger.kernel.org
Signed-off-by: default avatarDaniel Lezcano <daniel.lezcano@linaro.org>
Link: https://lore.kernel.org/r/20191210164153.10463-11-andrew.smirnov@gmail.com
parent 45038e03
...@@ -49,6 +49,7 @@ ...@@ -49,6 +49,7 @@
#define REGS_TRITSR(n) (0x100 + 16 * (n)) /* Immediate Temperature #define REGS_TRITSR(n) (0x100 + 16 * (n)) /* Immediate Temperature
* Site Register * Site Register
*/ */
#define TRITSR_V BIT(31)
#define REGS_TTRnCR(n) (0xf10 + 4 * (n)) /* Temperature Range n #define REGS_TTRnCR(n) (0xf10 + 4 * (n)) /* Temperature Range n
* Control Register * Control Register
*/ */
...@@ -81,8 +82,24 @@ static int tmu_get_temp(void *p, int *temp) ...@@ -81,8 +82,24 @@ static int tmu_get_temp(void *p, int *temp)
struct qoriq_sensor *qsensor = p; struct qoriq_sensor *qsensor = p;
struct qoriq_tmu_data *qdata = qoriq_sensor_to_data(qsensor); struct qoriq_tmu_data *qdata = qoriq_sensor_to_data(qsensor);
u32 val; u32 val;
/*
* REGS_TRITSR(id) has the following layout:
*
* 31 ... 7 6 5 4 3 2 1 0
* V TEMP
*
* Where V bit signifies if the measurement is ready and is
* within sensor range. TEMP is an 8 bit value representing
* temperature in C.
*/
if (regmap_read_poll_timeout(qdata->regmap,
REGS_TRITSR(qsensor->id),
val,
val & TRITSR_V,
USEC_PER_MSEC,
10 * USEC_PER_MSEC))
return -ENODATA;
regmap_read(qdata->regmap, REGS_TRITSR(qsensor->id), &val);
*temp = (val & 0xff) * 1000; *temp = (val & 0xff) * 1000;
return 0; return 0;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment