• Samuel Holland's avatar
    power: supply: axp20x_ac_power: Add wakeup control · ca4c77bb
    Samuel Holland authored
    The AC power supply input can be used as a wakeup source. Hook up the
    ACIN_PLUGIN IRQ to trigger wakeup based on userspace configuration.
    
    To do this, we must remember the list of IRQs for the life of the
    device. To know how much space to allocate for the flexible array
    member, we switch from using a NULL sentinel to using an array length.
    
    Because we now depend on the specific order of the IRQs (we assume
    ACIN_PLUGIN is first and always present), failing to acquire an IRQ
    during probe must be a fatal error.
    
    To avoid spuriously waking up the system when the AC power supply is
    not configured as a wakeup source, we must explicitly disable all non-
    wake IRQs during system suspend. This is because the SoC's NMI input is
    shared among all IRQs on the AXP PMIC. Due to the use of regmap-irq, the
    individual IRQs within the PMIC are nested threaded interrupts, and are
    therefore not automatically disabled during system suspend.
    
    The upshot is that if any other device within the MFD (such as the power
    key) is an enabled wakeup source, all enabled IRQs within the PMIC will
    cause wakeup. We still need to call enable_irq_wake() when we *do* want
    wakeup, in case those other wakeup sources on the PMIC are all disabled.
    Reviewed-by: default avatarChen-Yu Tsai <wens@csie.org>
    Signed-off-by: default avatarSamuel Holland <samuel@sholland.org>
    Signed-off-by: default avatarSebastian Reichel <sebastian.reichel@collabora.com>
    ca4c77bb
axp20x_ac_power.c 10.9 KB