aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarek Szyprowski <m.szyprowski@samsung.com>2018-04-16 06:11:53 -0400
committerEduardo Valentin <edubezval@gmail.com>2018-04-27 09:17:30 -0400
commitc8da6cdef57b459ac0fd5d9d348f8460a575ae90 (patch)
tree386dd09c09fb8609c07f3f5a7317782ef11b55f5
parent88fc6f73fddf64eb507b04f7b2bd01d7291db514 (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.c9
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)
892static int exynos_get_temp(void *p, int *temp) 892static 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