diff options
author | Marek Szyprowski <m.szyprowski@samsung.com> | 2018-04-16 06:11:53 -0400 |
---|---|---|
committer | Eduardo Valentin <edubezval@gmail.com> | 2018-04-27 09:17:30 -0400 |
commit | c8da6cdef57b459ac0fd5d9d348f8460a575ae90 (patch) | |
tree | 386dd09c09fb8609c07f3f5a7317782ef11b55f5 | |
parent | 88fc6f73fddf64eb507b04f7b2bd01d7291db514 (diff) |
thermal: exynos: Propagate error value from tmu_read()
tmu_read() in case of Exynos4210 might return error for out of bound
values. Current code ignores such value, what leads to reporting critical
temperature value. Add proper error code propagation to exynos_get_temp()
function.
Signed-off-by: Marek Szyprowski <m.szyprowski@samsung.com>
CC: stable@vger.kernel.org # v4.6+
Signed-off-by: Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com>
Signed-off-by: Eduardo Valentin <edubezval@gmail.com>
-rw-r--r-- | drivers/thermal/samsung/exynos_tmu.c | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/drivers/thermal/samsung/exynos_tmu.c b/drivers/thermal/samsung/exynos_tmu.c index 986cbd01aaaa..ac83f721db24 100644 --- a/drivers/thermal/samsung/exynos_tmu.c +++ b/drivers/thermal/samsung/exynos_tmu.c | |||
@@ -892,6 +892,7 @@ static void exynos7_tmu_control(struct platform_device *pdev, bool on) | |||
892 | static int exynos_get_temp(void *p, int *temp) | 892 | static int exynos_get_temp(void *p, int *temp) |
893 | { | 893 | { |
894 | struct exynos_tmu_data *data = p; | 894 | struct exynos_tmu_data *data = p; |
895 | int value, ret = 0; | ||
895 | 896 | ||
896 | if (!data || !data->tmu_read || !data->enabled) | 897 | if (!data || !data->tmu_read || !data->enabled) |
897 | return -EINVAL; | 898 | return -EINVAL; |
@@ -899,12 +900,16 @@ static int exynos_get_temp(void *p, int *temp) | |||
899 | mutex_lock(&data->lock); | 900 | mutex_lock(&data->lock); |
900 | clk_enable(data->clk); | 901 | clk_enable(data->clk); |
901 | 902 | ||
902 | *temp = code_to_temp(data, data->tmu_read(data)) * MCELSIUS; | 903 | value = data->tmu_read(data); |
904 | if (value < 0) | ||
905 | ret = value; | ||
906 | else | ||
907 | *temp = code_to_temp(data, value) * MCELSIUS; | ||
903 | 908 | ||
904 | clk_disable(data->clk); | 909 | clk_disable(data->clk); |
905 | mutex_unlock(&data->lock); | 910 | mutex_unlock(&data->lock); |
906 | 911 | ||
907 | return 0; | 912 | return ret; |
908 | } | 913 | } |
909 | 914 | ||
910 | #ifdef CONFIG_THERMAL_EMULATION | 915 | #ifdef CONFIG_THERMAL_EMULATION |