• Liam Breck's avatar
    power: supply: bq24190_charger: Don't read fault register outside irq_handle_thread() · 68abfb80
    Liam Breck authored
    Caching the fault register after a single I2C read may not keep an accurate
    value.
    
    Fix by doing two reads in irq_handle_thread() and using the cached value
    elsewhere. If a safety timer fault later clears itself, we apparently don't get
    an interrupt (INT), however other interrupts would refresh the register cache.
    
    From the data sheet: "When a fault occurs, the charger device sends out INT
     and keeps the fault state in REG09 until the host reads the fault register.
     Before the host reads REG09 and all the faults are cleared, the charger
     device would not send any INT upon new faults. In order to read the
     current fault status, the host has to read REG09 two times consecutively.
     The 1st reads fault register status from the last read [1] and the 2nd reads
     the current fault register status."
    
    [1] presumably a typo; should be "last fault"
    
    Fixes: d7bf353f ("bq24190_charger: Add support for TI BQ24190 Battery Charger")
    Signed-off-by: default avatarLiam Breck <kernel@networkimprov.net>
    Acked-by: default avatarMark Greer <mgreer@animalcreek.com>
    Acked-by: default avatarTony Lindgren <tony@atomide.com>
    Signed-off-by: default avatarSebastian Reichel <sre@kernel.org>
    68abfb80
bq24190_charger.c 39.8 KB