From patchwork Tue Oct 6 22:53:49 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Rafael J. Wysocki" X-Patchwork-Id: 527036 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 87C66140DA2 for ; Wed, 7 Oct 2015 09:26:39 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753349AbbJFWZt (ORCPT ); Tue, 6 Oct 2015 18:25:49 -0400 Received: from v094114.home.net.pl ([79.96.170.134]:65323 "HELO v094114.home.net.pl" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with SMTP id S1753146AbbJFWZr (ORCPT ); Tue, 6 Oct 2015 18:25:47 -0400 Received: from afbh101.neoplus.adsl.tpnet.pl (95.49.33.101) (HELO vostro.rjw.lan) by serwer1319399.home.pl (79.96.170.134) with SMTP (IdeaSmtpServer v0.80) id 6b3a7d04aedd2b5a; Wed, 7 Oct 2015 00:25:27 +0200 From: "Rafael J. Wysocki" To: Linux PM list , Dmitry Torokhov Cc: Linux Kernel Mailing List , ACPI Devel Maling List , Alan Stern , Daniel Vetter , Bjorn Helgaas , Linux PCI Subject: [RFC][PATCH v3 3/3] input: i8042: Avoid resetting controller on system suspend/resume Date: Wed, 07 Oct 2015 00:53:49 +0200 Message-ID: <3385784.1Q539YNd1G@vostro.rjw.lan> User-Agent: KMail/4.11.5 (Linux/4.1.0-rc5+; KDE/4.11.5; x86_64; ; ) In-Reply-To: <2723857.EVg1dAvTli@vostro.rjw.lan> References: <10641052.oOBhM6BU9G@vostro.rjw.lan> <5472042.4c1h9diL7E@vostro.rjw.lan> <2723857.EVg1dAvTli@vostro.rjw.lan> MIME-Version: 1.0 Sender: linux-pci-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-pci@vger.kernel.org From: Rafael J. Wysocki If the upcoming system suspend is not going to be handled by the platform firmware, like in the suspend-to-idle case, it is not necessary to reset the controller in i8042_pm_suspend(), so avoid doing that. Moreover, if the system resume currently in progress has not been started by the platform firmware, like in the suspend-to-idle case, i8042_controller_resume() need not be called by i8042_pm_resume(), so avoid doing that too in that case. Additionally, try to catch the event that woke up the system by calling the interrupt handler early during system resume if it has not been started by the platform firmware. Signed-off-by: Rafael J. Wysocki --- drivers/input/serio/i8042.c | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) -- To unsubscribe from this list: send the line "unsubscribe linux-pci" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Index: linux-pm/drivers/input/serio/i8042.c =================================================================== --- linux-pm.orig/drivers/input/serio/i8042.c +++ linux-pm/drivers/input/serio/i8042.c @@ -24,6 +24,7 @@ #include #include #include +#include #include @@ -1170,7 +1171,8 @@ static int i8042_pm_suspend(struct devic { int i; - i8042_controller_reset(true); + if (pm_suspend_via_firmware()) + i8042_controller_reset(true); /* Set up serio interrupts for system wakeup. */ for (i = 0; i < I8042_NUM_PORTS; i++) { @@ -1183,6 +1185,14 @@ static int i8042_pm_suspend(struct devic return 0; } +static int i8042_pm_resume_noirq(struct device *dev) +{ + if (!pm_resume_via_firmware()) + i8042_interrupt(0, NULL); + + return 0; +} + static int i8042_pm_resume(struct device *dev) { int i; @@ -1199,7 +1209,7 @@ static int i8042_pm_resume(struct device * to bring it in a sane state. (In case of S2D we expect * BIOS to reset the controller for us.) */ - return i8042_controller_resume(true); + return pm_resume_via_firmware() ? i8042_controller_resume(true) : 0; } static int i8042_pm_thaw(struct device *dev) @@ -1223,6 +1233,7 @@ static int i8042_pm_restore(struct devic static const struct dev_pm_ops i8042_pm_ops = { .suspend = i8042_pm_suspend, + .resume_noirq = i8042_pm_resume_noirq, .resume = i8042_pm_resume, .thaw = i8042_pm_thaw, .poweroff = i8042_pm_reset,