From: "Michał Kępień" <kernel@kempniu.pl>
To: "Matthew Garrett" <mjg59@srcf.ucam.org>,
"Pali Rohár" <pali.rohar@gmail.com>,
"Darren Hart" <dvhart@infradead.org>
Cc: Darek Stojaczyk <darek.stojaczyk@gmail.com>,
platform-driver-x86@vger.kernel.org,
linux-kernel@vger.kernel.org
Subject: [PATCH v5 3/5] dell-wmi: enable receiving WMI events on Dell Vostro V131
Date: Fri, 4 Mar 2016 14:09:08 +0100 [thread overview]
Message-ID: <1457096950-29838-4-git-send-email-kernel@kempniu.pl> (raw)
In-Reply-To: <1457096950-29838-1-git-send-email-kernel@kempniu.pl>
On some laptop models (e.g. Dell Vostro V131), WMI events are not
generated until a specific SMBIOS request is issued to register an event
listener [1]. As there seems to be no ACPI method or SMBIOS request to
determine without possible side effects whether a given machine needs to
issue this SMBIOS request in order to receive WMI events, DMI matching
is used to whitelist the models which need it.
[1] https://lists.us.dell.com/pipermail/libsmbios-devel/2015-July/000612.html
Signed-off-by: Michał Kępień <kernel@kempniu.pl>
Reviewed-by: Pali Rohár <pali.rohar@gmail.com>
---
drivers/platform/x86/Kconfig | 1 +
drivers/platform/x86/dell-wmi.c | 66 +++++++++++++++++++++++++++++++++++++++
2 files changed, 67 insertions(+)
diff --git a/drivers/platform/x86/Kconfig b/drivers/platform/x86/Kconfig
index a65d974..ed2004b 100644
--- a/drivers/platform/x86/Kconfig
+++ b/drivers/platform/x86/Kconfig
@@ -124,6 +124,7 @@ config DELL_WMI
depends on DMI
depends on INPUT
depends on ACPI_VIDEO || ACPI_VIDEO = n
+ depends on DELL_SMBIOS
select INPUT_SPARSEKMAP
---help---
Say Y here if you want to support WMI-based hotkeys on Dell laptops.
diff --git a/drivers/platform/x86/dell-wmi.c b/drivers/platform/x86/dell-wmi.c
index e38258a..65edd93 100644
--- a/drivers/platform/x86/dell-wmi.c
+++ b/drivers/platform/x86/dell-wmi.c
@@ -37,6 +37,7 @@
#include <linux/string.h>
#include <linux/dmi.h>
#include <acpi/video.h>
+#include "dell-smbios.h"
MODULE_AUTHOR("Matthew Garrett <mjg@redhat.com>");
MODULE_AUTHOR("Pali Rohár <pali.rohar@gmail.com>");
@@ -47,10 +48,29 @@ MODULE_LICENSE("GPL");
#define DELL_DESCRIPTOR_GUID "8D9DDCBC-A997-11DA-B012-B622A1EF5492"
static u32 dell_wmi_interface_version;
+static bool wmi_requires_smbios_request;
MODULE_ALIAS("wmi:"DELL_EVENT_GUID);
MODULE_ALIAS("wmi:"DELL_DESCRIPTOR_GUID);
+static int __init dmi_matched(const struct dmi_system_id *dmi)
+{
+ wmi_requires_smbios_request = 1;
+ return 1;
+}
+
+static const struct dmi_system_id dell_wmi_smbios_list[] __initconst = {
+ {
+ .callback = dmi_matched,
+ .ident = "Dell Vostro V131",
+ .matches = {
+ DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
+ DMI_MATCH(DMI_PRODUCT_NAME, "Vostro V131"),
+ },
+ },
+ { }
+};
+
/*
* Certain keys are flagged as KE_IGNORE. All of these are either
* notifications (rather than requests for change) or are also sent
@@ -597,6 +617,38 @@ static int __init dell_wmi_check_descriptor_buffer(void)
return 0;
}
+/*
+ * According to Dell SMBIOS documentation:
+ *
+ * 17 3 Application Program Registration
+ *
+ * cbArg1 Application ID 1 = 0x00010000
+ * cbArg2 Application ID 2
+ * QUICKSET/DCP = 0x51534554 "QSET"
+ * ALS Driver = 0x416c7353 "AlsS"
+ * Latitude ON = 0x4c6f6e52 "LonR"
+ * cbArg3 Application version or revision number
+ * cbArg4 0 = Unregister application
+ * 1 = Register application
+ * cbRes1 Standard return codes (0, -1, -2)
+ */
+
+static int dell_wmi_events_set_enabled(bool enable)
+{
+ struct calling_interface_buffer *buffer;
+ int ret;
+
+ buffer = dell_smbios_get_buffer();
+ buffer->input[0] = 0x10000;
+ buffer->input[1] = 0x51534554;
+ buffer->input[3] = enable;
+ dell_smbios_send_request(17, 3);
+ ret = buffer->output[0];
+ dell_smbios_release_buffer();
+
+ return dell_smbios_error(ret);
+}
+
static int __init dell_wmi_init(void)
{
int err;
@@ -624,12 +676,26 @@ static int __init dell_wmi_init(void)
return -ENODEV;
}
+ dmi_check_system(dell_wmi_smbios_list);
+
+ if (wmi_requires_smbios_request) {
+ err = dell_wmi_events_set_enabled(true);
+ if (err) {
+ pr_err("Failed to enable WMI events\n");
+ wmi_remove_notify_handler(DELL_EVENT_GUID);
+ dell_wmi_input_destroy();
+ return err;
+ }
+ }
+
return 0;
}
module_init(dell_wmi_init);
static void __exit dell_wmi_exit(void)
{
+ if (wmi_requires_smbios_request)
+ dell_wmi_events_set_enabled(false);
wmi_remove_notify_handler(DELL_EVENT_GUID);
dell_wmi_input_destroy();
}
--
1.7.10.4
next prev parent reply other threads:[~2016-03-04 13:08 UTC|newest]
Thread overview: 80+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-11-26 14:18 [PATCH] dell-wmi: add module param to control Dell Instant Launch hotkey processing Michał Kępień
2015-11-26 14:41 ` Pali Rohár
2015-11-26 14:55 ` Michał Kępień
2015-11-29 19:50 ` Pali Rohár
2015-11-30 14:14 ` Michał Kępień
2015-11-30 14:37 ` Pali Rohár
2015-11-30 14:54 ` Michał Kępień
2015-11-30 20:55 ` Darren Hart
2015-11-30 21:15 ` Darren Hart
2015-12-01 8:47 ` Michał Kępień
2015-12-01 19:51 ` [PATCH v2] dell-wmi: process Dell Instant Launch hotkey on Dell Vostro V131 Michał Kępień
2015-12-04 1:16 ` Darren Hart
2015-12-04 8:56 ` Pali Rohár
2015-12-04 13:27 ` Michał Kępień
2016-01-11 19:12 ` Darren Hart
2016-01-11 20:07 ` Pali Rohár
2016-01-21 9:04 ` Pali Rohár
2016-01-21 10:52 ` Michał Kępień
2016-01-21 13:44 ` Pali Rohár
2016-01-21 14:56 ` Michał Kępień
2016-01-21 15:42 ` Pali Rohár
2016-01-22 11:08 ` Michał Kępień
2016-02-16 14:50 ` [PATCH v3 0/5] Process Dell Instant Launch hotkey on Vostro V131 and Inspiron M5110 Michał Kępień
2016-02-16 14:50 ` [PATCH v3 1/5] dell-laptop: move dell_smi_error() to dell-smbios Michał Kępień
2016-02-16 14:50 ` [PATCH v3 2/5] dell-smbios: rename dell_smi_error() to dell_smbios_error() Michał Kępień
2016-02-16 14:50 ` [PATCH v3 3/5] dell-wmi: enable receiving WMI events on Dell Vostro V131 Michał Kępień
2016-02-16 15:17 ` Pali Rohár
2016-02-16 21:53 ` Michał Kępień
2016-02-20 1:24 ` Darren Hart
2016-02-22 8:56 ` Michał Kępień
2016-02-22 9:03 ` Pali Rohár
2016-02-22 9:13 ` Michał Kępień
2016-02-22 21:17 ` Darren Hart
2016-02-16 14:50 ` [PATCH v3 4/5] dell-wmi: properly process Dell Instant Launch hotkey Michał Kępień
2016-02-16 14:50 ` [PATCH v3 5/5] dell-wmi: support Dell Inspiron M5110 Michał Kępień
2016-02-16 15:22 ` Pali Rohár
2016-02-16 22:03 ` Michał Kępień
2016-02-17 11:42 ` Pali Rohár
2016-02-17 12:01 ` Michał Kępień
2016-02-17 12:08 ` Pali Rohár
2016-02-18 8:25 ` Michał Kępień
2016-02-24 7:20 ` [PATCH v4 0/5] Process Dell Instant Launch hotkey on Vostro V131 and " Michał Kępień
2016-02-24 7:20 ` [PATCH v4 1/5] dell-laptop: move dell_smi_error() to dell-smbios Michał Kępień
2016-02-29 12:52 ` Pali Rohár
2016-02-29 20:22 ` Michał Kępień
2016-02-29 20:24 ` Pali Rohár
2016-02-29 20:41 ` Michał Kępień
2016-02-29 22:50 ` Darren Hart
2016-03-02 11:49 ` Michał Kępień
2016-03-03 11:38 ` Pali Rohár
2016-02-24 7:20 ` [PATCH v4 2/5] dell-smbios: rename dell_smi_error() to dell_smbios_error() Michał Kępień
2016-02-29 12:53 ` Pali Rohár
2016-02-24 7:20 ` [PATCH v4 3/5] dell-wmi: enable receiving WMI events on Dell Vostro V131 Michał Kępień
2016-02-29 12:57 ` Pali Rohár
2016-02-24 7:20 ` [PATCH v4 4/5] dell-wmi: properly process Dell Instant Launch hotkey Michał Kępień
2016-02-29 12:59 ` Pali Rohár
2016-02-29 20:31 ` Michał Kępień
2016-02-29 20:39 ` Pali Rohár
2016-02-29 20:49 ` Michał Kępień
2016-02-29 20:56 ` Pali Rohár
2016-02-29 23:00 ` Darren Hart
2016-03-02 12:35 ` Michał Kępień
2016-03-03 17:16 ` Darren Hart
2016-03-03 18:46 ` Michał Kępień
2016-03-03 20:47 ` Darren Hart
2016-02-29 23:00 ` Darren Hart
2016-02-24 7:20 ` [PATCH v4 5/5] dell-wmi: support Dell Inspiron M5110 Michał Kępień
2016-02-29 13:00 ` Pali Rohár
2016-03-04 13:09 ` [PATCH v5 0/5] Process Dell Instant Launch hotkey on Vostro V131 and " Michał Kępień
2016-03-04 13:09 ` [PATCH v5 1/5] dell-laptop: move dell_smi_error() to dell-smbios Michał Kępień
2016-03-04 13:09 ` [PATCH v5 2/5] dell-smbios: rename dell_smi_error() to dell_smbios_error() Michał Kępień
2016-03-04 13:09 ` Michał Kępień [this message]
2016-03-04 13:09 ` [PATCH v5 4/5] dell-wmi: properly process Dell Instant Launch hotkey Michał Kępień
2016-03-04 13:09 ` [PATCH v5 5/5] dell-wmi: support Dell Inspiron M5110 Michał Kępień
2016-03-07 8:27 ` [PATCH v5 0/5] Process Dell Instant Launch hotkey on Vostro V131 and " Pali Rohár
2016-03-08 11:20 ` Darren Hart
2015-12-04 12:55 ` [PATCH v2] dell-wmi: process Dell Instant Launch hotkey on Dell Vostro V131 Michał Kępień
2015-12-04 16:04 ` Andy Lutomirski
2015-12-04 8:48 ` Pali Rohár
2015-12-04 12:36 ` Michał Kępień
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=1457096950-29838-4-git-send-email-kernel@kempniu.pl \
--to=kernel@kempniu.pl \
--cc=darek.stojaczyk@gmail.com \
--cc=dvhart@infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mjg59@srcf.ucam.org \
--cc=pali.rohar@gmail.com \
--cc=platform-driver-x86@vger.kernel.org \
/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
Powered by JetHome