pinctrl: pinctrl-intel: move gpio suspend/resume to noirq phase
authorBinbin Wu <binbin.wu@intel.com>
Mon, 8 Apr 2019 10:49:26 +0000 (18:49 +0800)
committerAndy Shevchenko <andriy.shevchenko@linux.intel.com>
Tue, 9 Apr 2019 15:26:44 +0000 (18:26 +0300)
commit2fef32766861c6e171f436ab99c89198cf0ca6e1
tree969fb46178241a96e59625f5fce31b9e07de86f3
parent10d64c871c309afb2403a3fadf5ff3ab7d96d8ed
pinctrl: pinctrl-intel: move gpio suspend/resume to noirq phase

In current driver, SET_LATE_SYSTEM_SLEEP_PM_OPS is used to install the
callbacks for suspend/resume.
GPIO pin may be used as the interrupt pin by some device. However, using
SET_LATE_SYSTEM_SLEEP_PM_OPS() to install the callbacks, the resume
callback is called after resume_device_irqs(). Unintended interrupts may
arrive due to resuming device irqs first, but the GPIO controller is not
properly restored.

Normally, for a SMP system, there are multiple cores, so even when there are
unintended interrupts, BSP gets the chance to initialize the GPIO chip soon.
But when there is only 1 core is active (other cores are offlined or
single core) during resume, it is more easily to observe the unintended
interrupts.

This patch renames the suspend/resume function by adding suffix "_noirq",
and installs the callbacks using SET_NOIRQ_SYSTEM_SLEEP_PM_OPS().

Signed-off-by: Binbin Wu <binbin.wu@intel.com>
Acked-by: Mika Westerberg <mika.westerberg@linux.intel.com>
Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
drivers/pinctrl/intel/pinctrl-intel.c
drivers/pinctrl/intel/pinctrl-intel.h