From: Lv Zheng <lv.zheng@intel.com>
To: "Rafael J. Wysocki" <rafael.j.wysocki@intel.com>,
"Rafael J. Wysocki" <rjw@rjwysocki.net>,
Len Brown <len.brown@intel.com>
Cc: Lv Zheng <lv.zheng@intel.com>, Lv Zheng <zetalog@gmail.com>,
<linux-kernel@vger.kernel.org>,
linux-acpi@vger.kernel.org,
Dmitry Torokhov <dmitry.torokhov@gmail.com>,
Benjamin Tissoires <benjamin.tissoires@gmail.com>,
"Bastien Nocera:" <hadess@hadess.net>,
linux-input@vger.kernel.org
Subject: [PATCH v5 1/3] ACPI / button: Add missing event to keep SW_LID running without additional event loss
Date: Fri, 22 Jul 2016 14:24:42 +0800 [thread overview]
Message-ID: <0d28076e25047db356eeedbb2d8ae204f0ec893d.1469168549.git.lv.zheng@intel.com> (raw)
In-Reply-To: <cbdaec17aba78c61f466efff8883d49067f2dad5.1463472125.git.lv.zheng@intel.com>
There are several possibilities that a lid event can be lost. For example,
EC event queue full, or the resume order of the underlying drivers.
When the event loss happens, new event may also be lost due to the type of
the SW_LID (switch event). The 2nd loss is what we want to avoid.
This patch adds a mechanism to insert lid events as a compensation for the
switch event nature of the lid events in order to avoid the 2nd loss.
Signed-off-by: Lv Zheng <lv.zheng@intel.com>
Cc: Dmitry Torokhov <dmitry.torokhov@gmail.com>
Cc: Benjamin Tissoires <benjamin.tissoires@gmail.com>
Cc: Bastien Nocera: <hadess@hadess.net>
Cc: linux-input@vger.kernel.org
---
drivers/acpi/button.c | 21 ++++++++++++++++++++-
1 file changed, 20 insertions(+), 1 deletion(-)
diff --git a/drivers/acpi/button.c b/drivers/acpi/button.c
index 148f4e5..41fd21d 100644
--- a/drivers/acpi/button.c
+++ b/drivers/acpi/button.c
@@ -104,6 +104,8 @@ struct acpi_button {
struct input_dev *input;
char phys[32]; /* for input device */
unsigned long pushed;
+ int sw_last_state;
+ unsigned long sw_last_time;
bool suspended;
};
@@ -111,6 +113,10 @@ static BLOCKING_NOTIFIER_HEAD(acpi_lid_notifier);
static struct acpi_device *lid_device;
static u8 lid_init_state = ACPI_BUTTON_LID_INIT_METHOD;
+static unsigned long lid_report_interval __read_mostly = 500;
+module_param(lid_report_interval, ulong, 0644);
+MODULE_PARM_DESC(lid_report_interval, "Interval (ms) between lid key events");
+
/* --------------------------------------------------------------------------
FS Interface (/proc)
-------------------------------------------------------------------------- */
@@ -133,11 +139,22 @@ static int acpi_lid_evaluate_state(struct acpi_device *device)
static int acpi_lid_notify_state(struct acpi_device *device, int state)
{
struct acpi_button *button = acpi_driver_data(device);
+ unsigned long sw_tout;
int ret;
- /* input layer checks if event is redundant */
+ /* Send the switch event */
+ sw_tout = button->sw_last_time +
+ msecs_to_jiffies(lid_report_interval);
+ if (time_after(jiffies, sw_tout) &&
+ (button->sw_last_state == !!state)) {
+ /* Send the complement switch event */
+ input_report_switch(button->input, SW_LID, state);
+ input_sync(button->input);
+ }
input_report_switch(button->input, SW_LID, !state);
input_sync(button->input);
+ button->sw_last_state = !!state;
+ button->sw_last_time = jiffies;
if (state)
pm_wakeup_event(&device->dev, 0);
@@ -407,6 +424,8 @@ static int acpi_button_add(struct acpi_device *device)
strcpy(name, ACPI_BUTTON_DEVICE_NAME_LID);
sprintf(class, "%s/%s",
ACPI_BUTTON_CLASS, ACPI_BUTTON_SUBCLASS_LID);
+ button->sw_last_state = !!acpi_lid_evaluate_state(device);
+ button->sw_last_time = jiffies;
} else {
printk(KERN_ERR PREFIX "Unsupported hid [%s]\n", hid);
error = -ENODEV;
--
1.7.10
next prev parent reply other threads:[~2016-07-22 6:24 UTC|newest]
Thread overview: 66+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-05-17 8:27 [RFC PATCH 1/2] ACPI / button: Send "open" state after boot/resume Lv Zheng
2016-05-17 23:36 ` Rafael J. Wysocki
2016-05-18 1:25 ` Zheng, Lv
2016-05-18 22:56 ` Rafael J. Wysocki
2016-05-19 1:50 ` Zheng, Lv
2016-05-19 13:21 ` Rafael J. Wysocki
2016-05-26 13:31 ` Benjamin Tissoires
2016-05-30 1:39 ` Zheng, Lv
2016-05-18 12:57 ` Bastien Nocera
2016-05-18 21:41 ` Rafael J. Wysocki
2016-05-19 1:59 ` Zheng, Lv
2016-05-27 7:15 ` [PATCH v2 0/3] ACPI / button: Clarify initial lid state Lv Zheng
2016-05-27 7:15 ` [PATCH v2 1/3] ACPI / button: Remove initial lid state notification Lv Zheng
2016-05-27 7:15 ` [PATCH v2 2/3] ACPI / button: Refactor functions to eliminate redundant code Lv Zheng
2016-05-27 7:16 ` [PATCH v2 3/3] ACPI / button: Send "open" state after boot/resume Lv Zheng
2016-05-30 8:10 ` Benjamin Tissoires
2016-05-31 2:55 ` Zheng, Lv
2016-05-31 14:47 ` Benjamin Tissoires
2016-06-01 1:17 ` Zheng, Lv
2016-06-01 7:51 ` Zheng, Lv
2016-06-01 8:07 ` Benjamin Tissoires
2016-05-27 22:10 ` [PATCH v2 0/3] ACPI / button: Clarify initial lid state Valdis.Kletnieks
2016-06-01 10:10 ` [PATCH v3 1/3] ACPI / button: Remove initial lid state notification Lv Zheng
2016-06-23 0:36 ` Rafael J. Wysocki
2016-06-23 0:57 ` Zheng, Lv
2016-06-01 10:10 ` [PATCH v3 2/3] ACPI / button: Refactor functions to eliminate redundant code Lv Zheng
2016-06-01 10:10 ` [PATCH v3 3/3] ACPI / button: Add quirks for initial lid state notification Lv Zheng
2016-06-01 11:01 ` Bastien Nocera
2016-06-02 1:08 ` Zheng, Lv
2016-06-02 14:01 ` Bastien Nocera
2016-06-02 15:25 ` Benjamin Tissoires
2016-06-03 0:41 ` Zheng, Lv
2016-07-19 8:11 ` [PATCH v4 1/2] ACPI / button: Add KEY_LID_OPEN/KEY_LID_CLOSE for new usage model Lv Zheng
2016-07-19 8:46 ` Benjamin Tissoires
2016-07-21 13:35 ` Rafael J. Wysocki
2016-07-21 20:33 ` Dmitry Torokhov
2016-07-19 8:11 ` [PATCH v4 2/2] ACPI / button: Add document for ACPI control method lid device restrictions Lv Zheng
2016-07-19 8:44 ` Benjamin Tissoires
2016-07-21 20:32 ` Dmitry Torokhov
2016-07-22 0:24 ` Zheng, Lv
2016-07-22 4:37 ` Dmitry Torokhov
2016-07-22 6:55 ` Benjamin Tissoires
2016-07-22 8:47 ` Zheng, Lv
2016-07-22 9:08 ` Benjamin Tissoires
2016-07-22 9:38 ` Zheng, Lv
2016-07-24 11:28 ` Bastien Nocera
2016-07-25 0:38 ` Zheng, Lv
2016-07-22 17:02 ` Dmitry Torokhov
2016-07-23 12:17 ` Zheng, Lv
2016-07-22 8:37 ` Zheng, Lv
2016-07-22 17:22 ` Dmitry Torokhov
2016-07-23 11:57 ` Zheng, Lv
2016-07-22 6:24 ` Lv Zheng [this message]
2016-07-22 10:26 ` [PATCH v5 1/3] ACPI / button: Add missing event to keep SW_LID running without additional event loss Zheng, Lv
2016-07-23 12:37 ` Rafael J. Wysocki
2016-07-25 0:24 ` Zheng, Lv
2016-07-22 6:24 ` [PATCH v5 2/3] ACPI / button: Add KEY_LID_OPEN/KEY_LID_CLOSE for new usage model Lv Zheng
2016-07-22 6:24 ` [PATCH v5 3/3] ACPI / button: Add document for ACPI control method lid device restrictions Lv Zheng
2016-07-25 1:14 ` [PATCH v6] ACPI / button: Fix an issue that the platform triggered "close" event may not be delivered to the userspace Lv Zheng
2016-07-26 9:52 ` [PATCH v7 1/2] ACPI / button: Fix an issue that the platform triggered reliable events " Lv Zheng
2016-08-17 0:19 ` Rafael J. Wysocki
2016-08-17 4:45 ` Zheng, Lv
2016-07-26 9:52 ` [PATCH v7 2/2] ACPI / button: Add document for ACPI control method lid device restrictions Lv Zheng
2016-08-17 8:22 ` [PATCH v8 1/2] ACPI / button: Fix an issue in button.lid_init_state=ignore mode Lv Zheng
2016-09-12 22:10 ` Rafael J. Wysocki
2016-08-17 8:23 ` [PATCH v8 2/2] ACPI / button: Add document for ACPI control method lid device restrictions Lv Zheng
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=0d28076e25047db356eeedbb2d8ae204f0ec893d.1469168549.git.lv.zheng@intel.com \
--to=lv.zheng@intel.com \
--cc=benjamin.tissoires@gmail.com \
--cc=dmitry.torokhov@gmail.com \
--cc=hadess@hadess.net \
--cc=len.brown@intel.com \
--cc=linux-acpi@vger.kernel.org \
--cc=linux-input@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=rafael.j.wysocki@intel.com \
--cc=rjw@rjwysocki.net \
--cc=zetalog@gmail.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
all inboxes | Powered by JetHome®