[PATCH] thermal: of: fix cooling_spec.args for 64bit

Wei Ni
2015-05-07T04:29:17Z

The THERMAL_NO_LIMIT is defined as -1UL, when it is set in DT,
the of-thermal will use of_parse_phandle_with_args() to parse it.
Since the args is uint32_t, so in 32bit system, the of framework
will read it as 0xffffffff, it's the expected value "-1".
But in 64bit system, this value is read as 0x00000000ffffffff,
it's not a negative value, it will cause problems.

This change can fix this issue.

Signed-off-by: Wei Ni <wni@nvidia.com>
---
drivers/thermal/of-thermal.c | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/drivers/thermal/of-thermal.c b/drivers/thermal/of-thermal.c
index 9e8c614103ef..8d6b4070dea3 100644
--- a/drivers/thermal/of-thermal.c
+++ b/drivers/thermal/of-thermal.c
@@ -613,8 +613,10 @@ static int thermal_of_populate_bind_params(struct device_node *np,
}
__tbp->cooling_device = cooling_spec.np;
if (cooling_spec.args_count >= 2) { /* at least min and max */
- __tbp->min = cooling_spec.args[0];
- __tbp->max = cooling_spec.args[1];
+ __tbp->min = cooling_spec.args[0] == -1U ?
+ THERMAL_NO_LIMIT : cooling_spec.args[0];
+ __tbp->max = cooling_spec.args[1] == -1U ?
+ THERMAL_NO_LIMIT : cooling_spec.args[1];
} else {
pr_err("wrong reference to cooling device, missing limits\n");
}
--
1.9.1