All of lore.kernel.org
 help / color / mirror / Atom feed
From: Raul E Rangel <rrangel@chromium.org>
To: linux-acpi@vger.kernel.org, linux-input@vger.kernel.org
Cc: rafael@kernel.org, timvp@google.com,
	mika.westerberg@linux.intel.com,
	andriy.shevchenko@linux.intel.com, dmitry.torokhov@gmail.com,
	jingle.wu@emc.com.tw, hdegoede@redhat.com,
	mario.limonciello@amd.com, linus.walleij@linaro.org,
	Raul E Rangel <rrangel@chromium.org>,
	linux-kernel@vger.kernel.org
Subject: [PATCH v5 02/13] Input: elan_i2c - Use PM subsystem to manage wake irq
Date: Wed, 21 Sep 2022 09:51:54 -0600	[thread overview]
Message-ID: <20220921094736.v5.2.Id022caf53d01112188308520915798f08a33cd3e@changeid> (raw)
In-Reply-To: <20220921155205.1332614-1-rrangel@chromium.org>

The Elan I2C touchpad driver is currently manually managing the wake
IRQ. This change removes the explicit enable_irq_wake/disable_irq_wake
and instead relies on the PM subsystem. This is done by calling
dev_pm_set_wake_irq.

i2c_device_probe already calls dev_pm_set_wake_irq when using device
tree, and i2c_device_remove also already calls dev_pm_clear_wake_irq.
There could be some device tree systems that have incorrectly declared
`wake` capabilities, so this change will set the wake irq if one is
missing. This matches the previous behavior.

I tested this on an ACPI system where the touchpad doesn't have _PRW
defined. I verified I can still wake the system and that the wake source
was the touchpad IRQ GPIO.

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

(no changes since v2)

Changes in v2:
- Set the wake_irq when not configured by the i2c-core. This is
  different than v1, where the wake_irq was only set for non DT systems.

 drivers/input/mouse/elan_i2c_core.c | 17 ++++++++++-------
 1 file changed, 10 insertions(+), 7 deletions(-)

diff --git a/drivers/input/mouse/elan_i2c_core.c b/drivers/input/mouse/elan_i2c_core.c
index e1758d5ffe4218..3947474e93d16a 100644
--- a/drivers/input/mouse/elan_i2c_core.c
+++ b/drivers/input/mouse/elan_i2c_core.c
@@ -33,6 +33,7 @@
 #include <linux/jiffies.h>
 #include <linux/completion.h>
 #include <linux/of.h>
+#include <linux/pm_wakeirq.h>
 #include <linux/property.h>
 #include <linux/regulator/consumer.h>
 #include <asm/unaligned.h>
@@ -86,8 +87,6 @@ struct elan_tp_data {
 	u16			fw_page_size;
 	u32			fw_signature_address;
 
-	bool			irq_wake;
-
 	u8			min_baseline;
 	u8			max_baseline;
 	bool			baseline_ready;
@@ -1340,6 +1339,15 @@ static int elan_probe(struct i2c_client *client,
 	if (!dev->of_node)
 		device_init_wakeup(dev, true);
 
+	/*
+	 * The wake IRQ should be declared via device tree instead of assuming
+	 * the IRQ can wake the system. This is here for legacy reasons and
+	 * will be removed once the i2c-core supports querying ACPI for wake
+	 * capabilities.
+	 */
+	if (!dev->power.wakeirq)
+		dev_pm_set_wake_irq(dev, client->irq);
+
 	return 0;
 }
 
@@ -1362,8 +1370,6 @@ static int __maybe_unused elan_suspend(struct device *dev)
 
 	if (device_may_wakeup(dev)) {
 		ret = elan_sleep(data);
-		/* Enable wake from IRQ */
-		data->irq_wake = (enable_irq_wake(client->irq) == 0);
 	} else {
 		ret = elan_set_power(data, false);
 		if (ret)
@@ -1394,9 +1400,6 @@ static int __maybe_unused elan_resume(struct device *dev)
 			dev_err(dev, "error %d enabling regulator\n", error);
 			goto err;
 		}
-	} else if (data->irq_wake) {
-		disable_irq_wake(client->irq);
-		data->irq_wake = false;
 	}
 
 	error = elan_set_power(data, true);
-- 
2.37.3.968.ga6b4b080e4-goog


  parent reply	other threads:[~2022-09-21 16:18 UTC|newest]

Thread overview: 21+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-09-21 15:51 [PATCH v5 00/13] acpi: i2c: Use SharedAndWake and ExclusiveAndWake to enable wake irq Raul E Rangel
2022-09-21 15:51 ` [PATCH v5 01/13] HID: i2c-hid: Use PM subsystem to manage " Raul E Rangel
2022-09-21 15:51 ` Raul E Rangel [this message]
2022-09-21 15:51 ` [PATCH v5 03/13] Input: elants_i2c - " Raul E Rangel
2022-09-21 15:51 ` [PATCH v5 04/13] Input: raydium_ts_i2c " Raul E Rangel
2022-09-21 15:51 ` [PATCH v5 05/13] gpiolib: acpi: Add wake_capable variants of acpi_dev_gpio_irq_get Raul E Rangel
2022-09-21 15:51 ` [PATCH v5 06/13] ACPI: resources: Add wake_capable parameter to acpi_dev_irq_flags Raul E Rangel
2022-09-21 15:51 ` [PATCH v5 07/13] i2c: acpi: Use ACPI wake capability bit to set wake_irq Raul E Rangel
2022-09-21 20:10   ` Wolfram Sang
2022-09-21 15:52 ` [PATCH v5 08/13] ACPI: PM: Take wake IRQ into consideration when entering suspend-to-idle Raul E Rangel
2022-09-24 17:00   ` Rafael J. Wysocki
2022-09-28 21:10     ` Raul Rangel
2022-09-29 10:06       ` Rafael J. Wysocki
2022-09-21 15:52 ` [PATCH v5 09/13] HID: i2c-hid: acpi: Stop setting wakeup_capable Raul E Rangel
2022-09-21 15:52 ` [PATCH v5 10/13] HID: i2c-hid: Don't set wake_capable and wake_irq Raul E Rangel
2022-09-21 15:52 ` [PATCH v5 11/13] Input: elan_i2c - " Raul E Rangel
2022-09-21 15:52 ` [PATCH v5 12/13] Input: elants_i2c " Raul E Rangel
2022-09-21 15:52 ` [PATCH v5 13/13] Input: raydium_ts_i2c " Raul E Rangel
2022-09-21 22:54 ` [PATCH v5 00/13] acpi: i2c: Use SharedAndWake and ExclusiveAndWake to enable wake irq Dmitry Torokhov
2022-09-22 10:15 ` Andy Shevchenko
2022-09-23 15:37   ` 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=20220921094736.v5.2.Id022caf53d01112188308520915798f08a33cd3e@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=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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.