From: Caicai <caizhaopeng@xxxxxxxxxxxxx> I had tested two Notebook machines, the Intel i5(or amd ryzen) with elan touchpad, and there's a probability that the touchpad won't work after going to the S3/S4 to wake up, that it would appear no more than 15 times. I found that there's no interrupt to check for /proc/interrupt. It was found that the gpio interrupt of i2c was also not on top. By adding the gpio interrupt flags with IRQF_EARLY_RESUME, now the touchpad tested 200 + times works well. Signed-off-by: Caicai <caizhaopeng@xxxxxxxxxxxxx> --- drivers/pinctrl/intel/pinctrl-intel.c | 2 +- drivers/pinctrl/pinctrl-amd.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/drivers/pinctrl/intel/pinctrl-intel.c b/drivers/pinctrl/intel/pinctrl-intel.c index 8fb6c9668c37..a350dade6aa0 100644 --- a/drivers/pinctrl/intel/pinctrl-intel.c +++ b/drivers/pinctrl/intel/pinctrl-intel.c @@ -1189,7 +1189,7 @@ static int intel_gpio_probe(struct intel_pinctrl *pctrl, int irq) * controllers share the same interrupt line. */ ret = devm_request_irq(pctrl->dev, irq, intel_gpio_irq, - IRQF_SHARED | IRQF_NO_THREAD, + IRQF_SHARED | IRQF_NO_THREAD | IRQF_EARLY_RESUME, dev_name(pctrl->dev), pctrl); if (ret) { dev_err(pctrl->dev, "failed to request interrupt\n"); diff --git a/drivers/pinctrl/pinctrl-amd.c b/drivers/pinctrl/pinctrl-amd.c index 977792654e01..70c37f4da2b1 100644 --- a/drivers/pinctrl/pinctrl-amd.c +++ b/drivers/pinctrl/pinctrl-amd.c @@ -937,7 +937,7 @@ static int amd_gpio_probe(struct platform_device *pdev) } ret = devm_request_irq(&pdev->dev, irq_base, amd_gpio_irq_handler, - IRQF_SHARED, KBUILD_MODNAME, gpio_dev); + IRQF_SHARED | IRQF_EARLY_RESUME | IRQF_NO_THREAD, KBUILD_MODNAME, gpio_dev); if (ret) goto out2; -- 2.20.1