HID: asus: Add WMI communication infrastructure

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>
This commit is contained in:
Ionut Nechita 2026-01-07 17:42:22 +02:00 committed by Jiri Kosina
parent 7fe565fb83
commit c888d0bd05
2 changed files with 25 additions and 0 deletions

View 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)
{

View 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