All of lore.kernel.org
 help / color / mirror / Atom feed
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 v3 3/5] dell-wmi: enable receiving WMI events on Dell Vostro V131
Date: Tue, 16 Feb 2016 15:50:28 +0100	[thread overview]
Message-ID: <1455634230-1487-4-git-send-email-kernel@kempniu.pl> (raw)
In-Reply-To: <1455634230-1487-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>
---
 drivers/platform/x86/Kconfig    |    1 +
 drivers/platform/x86/dell-wmi.c |   49 +++++++++++++++++++++++++++++++++++++++
 2 files changed, 50 insertions(+)

diff --git a/drivers/platform/x86/Kconfig b/drivers/platform/x86/Kconfig
index 3e4d9c3..5ceb53a 100644
--- a/drivers/platform/x86/Kconfig
+++ b/drivers/platform/x86/Kconfig
@@ -122,6 +122,7 @@ config DELL_WMI
 	depends on ACPI_WMI
 	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 368e193..ca8233a 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
@@ -513,6 +533,7 @@ static int __init dell_wmi_init(void)
 {
 	int err;
 	acpi_status status;
+	struct calling_interface_buffer *buffer;
 
 	if (!wmi_has_guid(DELL_EVENT_GUID) ||
 	    !wmi_has_guid(DELL_DESCRIPTOR_GUID)) {
@@ -538,12 +559,40 @@ static int __init dell_wmi_init(void)
 		return -ENODEV;
 	}
 
+	dmi_check_system(dell_wmi_smbios_list);
+
+	if (wmi_requires_smbios_request) {
+		buffer = dell_smbios_get_buffer();
+		buffer->input[0] = 0x10000;
+		buffer->input[1] = 0x51534554;
+		buffer->input[3] = 0x1;
+		dell_smbios_send_request(17, 3);
+		err = buffer->output[0];
+		dell_smbios_release_buffer();
+		if (err) {
+			pr_err("Failed to enable WMI (error %d)\n", err);
+			wmi_remove_notify_handler(DELL_EVENT_GUID);
+			dell_wmi_input_destroy();
+			return dell_smbios_error(err);
+		}
+	}
+
 	return 0;
 }
 module_init(dell_wmi_init);
 
 static void __exit dell_wmi_exit(void)
 {
+	struct calling_interface_buffer *buffer;
+
+	if (wmi_requires_smbios_request) {
+		buffer = dell_smbios_get_buffer();
+		buffer->input[0] = 0x10000;
+		buffer->input[1] = 0x51534554;
+		dell_smbios_send_request(17, 3);
+		dell_smbios_release_buffer();
+	}
+
 	wmi_remove_notify_handler(DELL_EVENT_GUID);
 	dell_wmi_input_destroy();
 }
-- 
1.7.10.4

  parent reply	other threads:[~2016-02-16 14:51 UTC|newest]

Thread overview: 82+ 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 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                   ` Michał Kępień [this message]
2016-02-16 15:17                     ` [PATCH v3 3/5] dell-wmi: enable receiving WMI events on Dell Vostro V131 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-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                       ` [PATCH v5 3/5] dell-wmi: enable receiving WMI events on Dell Vostro V131 Michał Kępień
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=1455634230-1487-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 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.