mirror of
https://github.com/AsahiLinux/u-boot
synced 2024-11-10 15:14:43 +00:00
thermal: imx: fix calculation
Fix calculation. do_div can not handle negative values. Use div_s64_rem to handle the calculation. Signed-off-by: Peng Fan <peng.fan@nxp.com> Cc: Stefano Babic <sbabic@denx.de>
This commit is contained in:
parent
4fac417168
commit
80512547ba
1 changed files with 6 additions and 4 deletions
|
@ -16,6 +16,7 @@
|
||||||
#include <dm.h>
|
#include <dm.h>
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
#include <malloc.h>
|
#include <malloc.h>
|
||||||
|
#include <linux/math64.h>
|
||||||
#include <thermal.h>
|
#include <thermal.h>
|
||||||
#include <imx_thermal.h>
|
#include <imx_thermal.h>
|
||||||
|
|
||||||
|
@ -55,8 +56,9 @@ static int read_cpu_temperature(struct udevice *dev)
|
||||||
struct thermal_data *priv = dev_get_priv(dev);
|
struct thermal_data *priv = dev_get_priv(dev);
|
||||||
u32 fuse = priv->fuse;
|
u32 fuse = priv->fuse;
|
||||||
int t1, n1;
|
int t1, n1;
|
||||||
u64 c1, c2;
|
s64 c1, c2;
|
||||||
u64 temp64;
|
s64 temp64;
|
||||||
|
s32 rem;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Sensor data layout:
|
* Sensor data layout:
|
||||||
|
@ -88,7 +90,7 @@ static int read_cpu_temperature(struct udevice *dev)
|
||||||
*/
|
*/
|
||||||
temp64 = FACTOR0;
|
temp64 = FACTOR0;
|
||||||
temp64 *= 1000000;
|
temp64 *= 1000000;
|
||||||
do_div(temp64, FACTOR1 * n1 - FACTOR2);
|
temp64 = div_s64_rem(temp64, FACTOR1 * n1 - FACTOR2, &rem);
|
||||||
c1 = temp64;
|
c1 = temp64;
|
||||||
c2 = n1 * c1 + 1000000 * t1;
|
c2 = n1 * c1 + 1000000 * t1;
|
||||||
|
|
||||||
|
@ -123,7 +125,7 @@ static int read_cpu_temperature(struct udevice *dev)
|
||||||
writel(TEMPSENSE0_FINISHED, &anatop->tempsense0_clr);
|
writel(TEMPSENSE0_FINISHED, &anatop->tempsense0_clr);
|
||||||
|
|
||||||
/* Tmeas = (c2 - Nmeas * c1 + OFFSET) / 1000000 */
|
/* Tmeas = (c2 - Nmeas * c1 + OFFSET) / 1000000 */
|
||||||
temperature = lldiv(c2 - n_meas * c1 + OFFSET, 1000000);
|
temperature = div_s64_rem(c2 - n_meas * c1 + OFFSET, 1000000, &rem);
|
||||||
|
|
||||||
/* power down anatop thermal sensor */
|
/* power down anatop thermal sensor */
|
||||||
writel(TEMPSENSE0_POWER_DOWN, &anatop->tempsense0_set);
|
writel(TEMPSENSE0_POWER_DOWN, &anatop->tempsense0_set);
|
||||||
|
|
Loading…
Reference in a new issue