On Tue, 22 Nov 2016, Charles Keepax wrote:

> 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: Charles Keepax <ckee...@opensource.wolfsonmicro.com>
> ---
> 
> Changes since v1:
>  - Just a rebase
> 
> Thanks,
> Charles
> 
>  drivers/mfd/arizona-core.c | 1 +
>  1 file changed, 1 insertion(+)

Applied for v4.11, thanks.

> diff --git a/drivers/mfd/arizona-core.c b/drivers/mfd/arizona-core.c
> index 41767f7..b6d4bc6 100644
> --- a/drivers/mfd/arizona-core.c
> +++ b/drivers/mfd/arizona-core.c
> @@ -1553,6 +1553,7 @@ EXPORT_SYMBOL_GPL(arizona_dev_init);
>  
>  int arizona_dev_exit(struct arizona *arizona)
>  {
> +     disable_irq(arizona->irq);
>       pm_runtime_disable(arizona->dev);
>  
>       regulator_disable(arizona->dcvdd);

-- 
Lee Jones
Linaro STMicroelectronics Landing Team Lead
Linaro.org │ Open source software for ARM SoCs
Follow Linaro: Facebook | Twitter | Blog

Reply via email to