linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Raul E Rangel <rrangel@chromium.org>
To: linux-acpi@vger.kernel.org, linux-input@vger.kernel.org
Cc: timvp@google.com, hdegoede@redhat.com,
	andriy.shevchenko@linux.intel.com, rafael@kernel.org,
	mario.limonciello@amd.com, jingle.wu@emc.com.tw,
	mika.westerberg@linux.intel.com, dmitry.torokhov@gmail.com,
	linus.walleij@linaro.org, Raul E Rangel <rrangel@chromium.org>,
	Len Brown <lenb@kernel.org>,
	linux-kernel@vger.kernel.org
Subject: [PATCH v4 08/13] ACPI: PM: Take wake IRQ into consideration when entering suspend-to-idle
Date: Mon, 19 Sep 2022 09:59:10 -0600	[thread overview]
Message-ID: <20220919095504.v4.8.I7d9202463f08373feccd6e8fd87482c4f40ece5d@changeid> (raw)
In-Reply-To: <20220919155916.1044219-1-rrangel@chromium.org>

This change adds support for ACPI devices that use ExclusiveAndWake or
SharedAndWake in their _CRS GpioInt definition (instead of using _PRW),
and also provide power resources. Previously the ACPI subsystem had no
idea if the device had a wake capable interrupt armed. This resulted
in the ACPI device PM system placing the device into D3Cold, and thus
cutting power to the device. With this change we will now query the
_S0W method to figure out the appropriate wake capable D-state.

Signed-off-by: Raul E Rangel <rrangel@chromium.org>
---

(no changes since v1)

 drivers/acpi/device_pm.c | 19 +++++++++++++++++--
 1 file changed, 17 insertions(+), 2 deletions(-)

diff --git a/drivers/acpi/device_pm.c b/drivers/acpi/device_pm.c
index 9dce1245689ca2..6bc81f525d5160 100644
--- a/drivers/acpi/device_pm.c
+++ b/drivers/acpi/device_pm.c
@@ -681,8 +681,23 @@ static int acpi_dev_pm_get_state(struct device *dev, struct acpi_device *adev,
 		d_min = ret;
 		wakeup = device_may_wakeup(dev) && adev->wakeup.flags.valid
 			&& adev->wakeup.sleep_state >= target_state;
-	} else {
-		wakeup = adev->wakeup.flags.valid;
+	} else if (acpi_device_can_wakeup(adev)) {
+		/* ACPI GPE from specified by _PRW. */
+		wakeup = true;
+	} else if (device_may_wakeup(dev) && dev->power.wakeirq) {
+		/*
+		 * The ACPI subsystem doesn't manage the wake bit for IRQs
+		 * defined with ExclusiveAndWake and SharedAndWake. Instead we
+		 * expect them to be managed via the PM subsystem. Drivers
+		 * should call dev_pm_set_wake_irq to register an IRQ as a wake
+		 * source.
+		 *
+		 * If a device has a wake IRQ attached we need to check the
+		 * _S0W method to get the correct wake D-state. Otherwise we
+		 * end up putting the device into D3Cold which will more than
+		 * likely disable wake functionality.
+		 */
+		wakeup = true;
 	}
 
 	/*
-- 
2.37.3.968.ga6b4b080e4-goog


  parent reply	other threads:[~2022-09-19 16:00 UTC|newest]

Thread overview: 20+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-09-19 15:59 [PATCH v4 00/13] acpi: i2c: Use SharedAndWake and ExclusiveAndWake to enable wake irq Raul E Rangel
2022-09-19 15:59 ` [PATCH v4 01/13] HID: i2c-hid: Use PM subsystem to manage " Raul E Rangel
2022-09-19 15:59 ` [PATCH v4 02/13] Input: elan_i2c - " Raul E Rangel
2022-09-19 15:59 ` [PATCH v4 03/13] Input: elants_i2c " Raul E Rangel
2022-09-19 15:59 ` [PATCH v4 04/13] Input: raydium_ts_i2c " Raul E Rangel
2022-09-19 15:59 ` [PATCH v4 05/13] gpiolib: acpi: Add wake_capable variants of acpi_dev_gpio_irq_get Raul E Rangel
2022-09-19 15:59 ` [PATCH v4 06/13] ACPI: resources: Add wake_capable parameter to acpi_dev_irq_flags Raul E Rangel
2022-09-20 12:35   ` Andy Shevchenko
2022-09-19 15:59 ` [PATCH v4 07/13] i2c: acpi: Use ACPI wake capability bit to set wake_irq Raul E Rangel
2022-09-20 12:32   ` Andy Shevchenko
2022-09-21 15:18     ` Raul Rangel
2022-09-22  9:44       ` Andy Shevchenko
2022-09-19 15:59 ` Raul E Rangel [this message]
2022-09-19 15:59 ` [PATCH v4 09/13] HID: i2c-hid: acpi: Stop setting wakeup_capable Raul E Rangel
2022-09-19 15:59 ` [PATCH v4 10/13] HID: i2c-hid: Don't set wake_capable and wake_irq Raul E Rangel
2022-09-19 15:59 ` [PATCH v4 11/13] Input: elan_i2c - " Raul E Rangel
2022-09-19 15:59 ` [PATCH v4 12/13] Input: elants_i2c " Raul E Rangel
2022-09-19 15:59 ` [PATCH v4 13/13] Input: raydium_ts_i2c " Raul E Rangel
2022-09-20 10:42 ` [PATCH v4 00/13] acpi: i2c: Use SharedAndWake and ExclusiveAndWake to enable wake irq Benjamin Tissoires
2022-09-21 15:33   ` Raul Rangel

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20220919095504.v4.8.I7d9202463f08373feccd6e8fd87482c4f40ece5d@changeid \
    --to=rrangel@chromium.org \
    --cc=andriy.shevchenko@linux.intel.com \
    --cc=dmitry.torokhov@gmail.com \
    --cc=hdegoede@redhat.com \
    --cc=jingle.wu@emc.com.tw \
    --cc=lenb@kernel.org \
    --cc=linus.walleij@linaro.org \
    --cc=linux-acpi@vger.kernel.org \
    --cc=linux-input@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mario.limonciello@amd.com \
    --cc=mika.westerberg@linux.intel.com \
    --cc=rafael@kernel.org \
    --cc=timvp@google.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).