• Tony Lindgren's avatar
    thermal: ti-soc-thermal: Fix bogus thermal shutdowns for omap4430 · 30d24fab
    Tony Lindgren authored
    We can sometimes get bogus thermal shutdowns on omap4430 at least with
    droid4 running idle with a battery charger connected:
    
    thermal thermal_zone0: critical temperature reached (143 C), shutting down
    
    Dumping out the register values shows we can occasionally get a 0x7f value
    that is outside the TRM listed values in the ADC conversion table. And then
    we get a normal value when reading again after that. Reading the register
    multiple times does not seem help avoiding the bogus values as they stay
    until the next sample is ready.
    
    Looking at the TRM chapter "18.4.10.2.3 ADC Codes Versus Temperature", we
    should have values from 13 to 107 listed with a total of 95 values. But
    looking at the omap4430_adc_to_temp array, the values are off, and the
    end values are missing. And it seems that the 4430 ADC table is similar
    to omap3630 rather than omap4460.
    
    Let's fix the issue by using values based on the omap3630 table and just
    ignoring invalid values. Compared to the 4430 TRM, the omap3630 table has
    the missing values added while the TRM table only shows every second
    value.
    
    Note that sometimes the ADC register values within the valid table can
    also be way off for about 1 out of 10 values. But it seems that those
    just show about 25 C too low values rather than too high values. So those
    do not cause a bogus thermal shutdown.
    
    Fixes: 1a31270e ("staging: omap-thermal: add OMAP4 data structures")
    Cc: Merlijn Wajer <merlijn@wizzup.org>
    Cc: Pavel Machek <pavel@ucw.cz>
    Cc: Sebastian Reichel <sebastian.reichel@collabora.com>
    Signed-off-by: default avatarTony Lindgren <tony@atomide.com>
    Signed-off-by: default avatarDaniel Lezcano <daniel.lezcano@linaro.org>
    Link: https://lore.kernel.org/r/20200706183338.25622-1-tony@atomide.com
    30d24fab
omap4-thermal-data.c 9.38 KB