• Charles Keepax's avatar
    mfd: arizona: Fix initialisation of the PM runtime · 72e43164
    Charles Keepax authored
    The PM runtime core by default assumes a chip is suspended when runtime
    PM is enabled. Currently the arizona driver enables runtime PM when the
    chip is fully active and then disables the DCVDD regulator at the end of
    arizona_dev_init. This however has several problems, firstly the if we
    reach the end of arizona_dev_init, we did not properly follow all the
    proceedures for shutting down the chip, and most notably we never marked
    the chip as cache only so any writes occurring between then and the next
    PM runtime resume will be lost. Secondly, if we are already resumed when
    we reach the end of dev_init, then at best we get unbalanced regulator
    enable/disables at work we lose DCVDD whilst we need it.
    
    Additionally, since the commit 4f0216409f7c ("mfd: arizona: Add better
    support for system suspend"), the PM runtime operations may
    disable/enable the IRQ, so the IRQs must now be enabled before we call
    any PM operations.
    
    This patch adds a call to pm_runtime_set_active to inform the PM core
    that the device is starting up active and moves the PM enabling to
    around the IRQ initialisation to avoid any PM callbacks happening until
    the IRQs are initialised.
    
    Cc: stable@vger.kernel.org # v3.5+
    Signed-off-by: default avatarCharles Keepax <ckeepax@opensource.wolfsonmicro.com>
    Signed-off-by: default avatarLee Jones <lee.jones@linaro.org>
    72e43164
arizona-core.c 31.6 KB