• Chris Morgan's avatar
    power: supply: rk817: Fix low SOC bugs · baba1315
    Chris Morgan authored
    When the SOC approaches zero, an integer overflows in the columb
    counter causing the driver to react poorly. This makes the driver
    think it's at (above) the fully charged capacity when in fact it's
    zero. It would then write this full capacity to NVRAM which would be
    used on boot if the device remained off for less than 5 hours and
    not plugged in.
    
    This can be fixed and guarded against by doing the following:
     - Changing the type of tmp in rk817_read_or_set_full_charge_on_boot()
       to be an int instead of a u32. That way we can account for negative
       numbers.
     - Guard against negative values for the full charge on boot by setting
       the charge to 0 if the system charge reports less than 0.
     - Catch scenarios where the battery voltage is below the design
       minimum voltage and set the system SOC to 0 at that time and update
       the columb counter with a charge level of 0.
     - Change the off time value from 5 hours to 30 minutes before we
       recalculate the current capacity based on the OCV tables.
    
    These changes allow the driver to operate better at low voltage/low
    capacity conditions.
    
    Fixes: 3268a4d9 ("power: supply: rk817: Fix unsigned comparison with less than zero")
    Fixes: 11cb8da0 ("power: supply: Add charger driver for Rockchip RK817")
    Signed-off-by: default avatarChris Morgan <macromorgan@hotmail.com>
    Signed-off-by: default avatarSebastian Reichel <sebastian.reichel@collabora.com>
    baba1315
rk817_charger.c 35.4 KB