• Chen-Yu Tsai's avatar
    mfd: axp20x: Fix AXP806 access errors on cold boot · 696f0b3f
    Chen-Yu Tsai authored
    The AXP806 supports either master/standalone or slave mode.
    Slave mode allows sharing the serial bus, even with multiple
    AXP806 which all have the same hardware address.
    
    This is done with extra "serial interface address extension",
    or AXP806_BUS_ADDR_EXT, and "register address extension", or
    AXP806_REG_ADDR_EXT, registers. The former is read-only, with
    1 bit customizable at the factory, and 1 bit depending on the
    state of an external pin. The latter is writable. Only when
    the these device addressing bits (in the upper 4 bits of the
    registers) match, will the device respond to operations on
    its other registers.
    
    The AXP806_REG_ADDR_EXT was previously configured by Allwinner's
    bootloader. Work on U-boot SPL support now allows us to switch
    to mainline U-boot, which doesn't do this for us. There might
    be other bare minimum bootloaders out there which don't to this
    either. It's best to handle this in the kernel.
    
    This patch sets AXP806_REG_ADDR_EXT to 0x10, which is what we
    know to be the proper value for a standard AXP806 in slave mode.
    Afterwards it will reinitialize the regmap cache, to purge any
    invalid stale values.
    Signed-off-by: default avatarChen-Yu Tsai <wens@csie.org>
    Signed-off-by: default avatarLee Jones <lee.jones@linaro.org>
    696f0b3f
axp20x.c 28.8 KB