• C
    mfd: arizona: Disable IRQs during driver remove · fb36f77e
    Charles Keepax 提交于
    As DCVDD will often be supplied by a child node of the MFD, we
    can't call mfd_remove_devices as the first step in arizona_dev_exit
    as might be expected (tidy up the children before we tidy up the
    MFD). We need to disable and put the DCVDD regulator before we call
    mfd_remove_devices, to prevent PM runtime from turning this back on we
    also need to disable the PM runtime before we do this. Finally we can
    not clean up the IRQs until all the MFD children have been removed, as
    they may have registered IRQs themselves.
    
    This creates a window of time where the interrupts are enabled but
    the PM runtime, on which the IRQ handler depends, is not available,
    any interrupts in this window will go unhandled and fill the log with
    failed to resume device messages. To avoid this we simply disable the
    main IRQ at the start of arizona_dev_exit, we don't need to actually
    handle any IRQs in this window as we are removing the driver.
    Signed-off-by: NCharles Keepax <ckeepax@opensource.wolfsonmicro.com>
    Signed-off-by: NLee Jones <lee.jones@linaro.org>
    fb36f77e
arizona-core.c 37.2 KB