• Kishon Vijay Abraham I's avatar
    gpio: pcf857x: restore the initial line state of all pcf lines · adc28475
    Kishon Vijay Abraham I authored
    The reset values for all the PCF lines are high and hence on
    shutdown we should drive all the lines high in order to
    bring it to the reset state.
    
    This is actually required since PCF doesn't have a reset
    line and even after warm reset (by invoking "reboot" in
    prompt) the PCF lines maintains it's previous programmed
    state. This becomes a problem if the boards are designed to
    work with the default initial state.
    
    DRA7XX_evm uses PCF8575 and one of the PCF output lines
    feeds to MMC/SD VDD and this line should be driven high in order
    for the MMC/SD to be detected.  This line is modelled as
    regulator and the hsmmc driver takes care of enabling and
    disabling it. In the case of 'reboot', during shutdown path
    as part of it's cleanup process the hsmmc driver disables
    this regulator. This makes MMC *boot* not functional.
    
    Fix it by driving all the pcf lines high.
    
    This patch was sent long back
    (https://patchwork.ozlabs.org/patch/420382/)
    But there was a concern that contention might occur if the
    PCF shutdown handler is invoked before the shutdown handler
    of the PCF's consumers. In that case PCF shutdown handler can't
    drive all the pcf lines high without knowing if the PCF
    consumers are still active.
    
    However commit 52cdbdd4 ("driver core: correct device's
    shutdown order") will make sure shutdown handler of PCF's
    consumers are invoked before invoking the shutdown
    handler of PCF. So it should be safe to merge this now.
    Signed-off-by: default avatarKishon Vijay Abraham I <kishon@ti.com>
    Signed-off-by: default avatarSekhar Nori <nsekhar@ti.com>
    Signed-off-by: default avatarLinus Walleij <linus.walleij@linaro.org>
    adc28475
gpio-pcf857x.c 12.4 KB