In current version of the driver there is error in temperature calculation. So lets fix it using proper linear function. Signed-off-by: Paweł Jarosz <paweljarosz3691@xxxxxxxxx> --- drivers/thermal/thermal-generic-adc.c | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/drivers/thermal/thermal-generic-adc.c b/drivers/thermal/thermal-generic-adc.c index 73f55d6..1190aee 100644 --- a/drivers/thermal/thermal-generic-adc.c +++ b/drivers/thermal/thermal-generic-adc.c @@ -26,7 +26,7 @@ struct gadc_thermal_info { static int gadc_thermal_adc_to_temp(struct gadc_thermal_info *gti, int val) { - int temp, adc_hi, adc_lo; + int temp, adc1, adc2, temp1, temp2; int i; for (i = 0; i < gti->nlookup_table; i++) { @@ -39,10 +39,13 @@ static int gadc_thermal_adc_to_temp(struct gadc_thermal_info *gti, int val) } else if (i >= (gti->nlookup_table - 1)) { temp = gti->lookup_table[2 * (gti->nlookup_table - 1)]; } else { - adc_hi = gti->lookup_table[2 * i - 1]; - adc_lo = gti->lookup_table[2 * i + 1]; - temp = gti->lookup_table[2 * i]; - temp -= ((val - adc_lo) * 1000) / (adc_hi - adc_lo); + adc1 = gti->lookup_table[2 * i - 1]; + adc2 = gti->lookup_table[2 * i + 1]; + + temp1 = gti->lookup_table[2 * i - 2]; + temp2 = gti->lookup_table[2 * i]; + + temp = (val - adc1) * (temp2 - temp1) / (adc2 - adc1) + temp1; } return temp; -- 2.7.4 -- To unsubscribe from this list: send the line "unsubscribe linux-iio" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html