]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
HID: asus: Add WMI communication infrastructure
authorIonut Nechita <ionut_n2001@yahoo.com>
Wed, 7 Jan 2026 15:42:22 +0000 (17:42 +0200)
committerJiri Kosina <jkosina@suse.com>
Thu, 8 Jan 2026 11:17:16 +0000 (12:17 +0100)
Add infrastructure for the HID driver to communicate with the asus-wmi
driver for handling special keys that require WMI communication.

This includes:
- Define ASUS_WMI_METHODID_NOTIF method ID in asus-wmi.h
- Implement asus_wmi_send_event() function to send events to asus-wmi

Reviewed-by: Denis Benato <benato.denis96@gmail.com>
Reviewed-by: Mario Limonciello (AMD) <superm1@kernel.org>
Signed-off-by: Ionut Nechita <ionut_n2001@yahoo.com>
Signed-off-by: Jiri Kosina <jkosina@suse.com>
drivers/hid/hid-asus.c
include/linux/platform_data/x86/asus-wmi.h

index 49ffed0f6e9eadfde5be2632ef13df41938f962c..f778387c3c5577c161026abfb059770f519e8c0b 100644 (file)
@@ -23,6 +23,7 @@
 /*
  */
 
+#include <linux/acpi.h>
 #include <linux/dmi.h>
 #include <linux/hid.h>
 #include <linux/module.h>
@@ -320,6 +321,29 @@ static int asus_e1239t_event(struct asus_drvdata *drvdat, u8 *data, int size)
        return 0;
 }
 
+/*
+ * Send events to asus-wmi driver for handling special keys
+ */
+static int asus_wmi_send_event(struct asus_drvdata *drvdata, u8 code)
+{
+       int err;
+       u32 retval;
+
+       err = asus_wmi_evaluate_method(ASUS_WMI_METHODID_DEVS,
+                                      ASUS_WMI_METHODID_NOTIF, code, &retval);
+       if (err) {
+               pr_warn("Failed to notify asus-wmi: %d\n", err);
+               return err;
+       }
+
+       if (retval != 0) {
+               pr_warn("Failed to notify asus-wmi (retval): 0x%x\n", retval);
+               return -EIO;
+       }
+
+       return 0;
+}
+
 static int asus_event(struct hid_device *hdev, struct hid_field *field,
                      struct hid_usage *usage, __s32 value)
 {
index 8a515179113dad9900474d543d089ef3bcf68602..e23b481ab1183cc2212d12bd65860e7dd6906c3b 100644 (file)
@@ -27,6 +27,7 @@
 #define ASUS_WMI_METHODID_KBFT         0x5446424B /* KeyBoard FilTer */
 #define ASUS_WMI_METHODID_INIT         0x54494E49 /* INITialize */
 #define ASUS_WMI_METHODID_HKEY         0x59454B48 /* Hot KEY ?? */
+#define ASUS_WMI_METHODID_NOTIF                0x00100021 /* Notify method */
 
 #define ASUS_WMI_UNSUPPORTED_METHOD    0xFFFFFFFE