Commit 2d98e0b9 authored by Arnd Bergmann's avatar Arnd Bergmann Committed by Darren Hart

ideapad-laptop: add a new WMI string for ESC key

My patch to the ideapad-laptop driver to get the ESC key working on the
Yoga 1170 (Yoga 3) failed to do the same for the following model, the
Lenovo Yoga 700.

Denis Gordienko managed to get it working by adding another GUID for the
new WMI interface. I have adapted his patch to normal coding style
and simplified it a bit for inclusion, but this patch is currently
untested.

Link: https://forums.lenovo.com/t5/Lenovo-Yoga-Series-Notebooks/YOGA-3-14-How-to-reclaim-my-Esc-key-and-permanently-disable/m-p/3317499Signed-off-by: default avatarArnd Bergmann <arnd@arndb.de>
Tested-by: default avatarDenis Gordienko <denis.gordienko.mail@gmail.com>
[dvhart: Whitespace cleanup, static const char *const array declaration]
Signed-off-by: default avatarDarren Hart <dvhart@linux.intel.com>
parent e27ffe7e
...@@ -48,7 +48,10 @@ ...@@ -48,7 +48,10 @@
#define CFG_CAMERA_BIT (19) #define CFG_CAMERA_BIT (19)
#if IS_ENABLED(CONFIG_ACPI_WMI) #if IS_ENABLED(CONFIG_ACPI_WMI)
static const char ideapad_wmi_fnesc_event[] = "26CAB2E5-5CF1-46AE-AAC3-4A12B6BA50E6"; static const char *const ideapad_wmi_fnesc_events[] = {
"26CAB2E5-5CF1-46AE-AAC3-4A12B6BA50E6", /* Yoga 3 */
"56322276-8493-4CE8-A783-98C991274F5E", /* Yoga 700 */
};
#endif #endif
enum { enum {
...@@ -93,6 +96,7 @@ struct ideapad_private { ...@@ -93,6 +96,7 @@ struct ideapad_private {
struct dentry *debug; struct dentry *debug;
unsigned long cfg; unsigned long cfg;
bool has_hw_rfkill_switch; bool has_hw_rfkill_switch;
const char *fnesc_guid;
}; };
static bool no_bt_rfkill; static bool no_bt_rfkill;
...@@ -989,8 +993,16 @@ static int ideapad_acpi_add(struct platform_device *pdev) ...@@ -989,8 +993,16 @@ static int ideapad_acpi_add(struct platform_device *pdev)
ACPI_DEVICE_NOTIFY, ideapad_acpi_notify, priv); ACPI_DEVICE_NOTIFY, ideapad_acpi_notify, priv);
if (ret) if (ret)
goto notification_failed; goto notification_failed;
#if IS_ENABLED(CONFIG_ACPI_WMI) #if IS_ENABLED(CONFIG_ACPI_WMI)
ret = wmi_install_notify_handler(ideapad_wmi_fnesc_event, ideapad_wmi_notify, priv); for (i = 0; i < ARRAY_SIZE(ideapad_wmi_fnesc_events); i++) {
ret = wmi_install_notify_handler(ideapad_wmi_fnesc_events[i],
ideapad_wmi_notify, priv);
if (ret == AE_OK) {
priv->fnesc_guid = ideapad_wmi_fnesc_events[i];
break;
}
}
if (ret != AE_OK && ret != AE_NOT_EXIST) if (ret != AE_OK && ret != AE_NOT_EXIST)
goto notification_failed_wmi; goto notification_failed_wmi;
#endif #endif
...@@ -1020,7 +1032,8 @@ static int ideapad_acpi_remove(struct platform_device *pdev) ...@@ -1020,7 +1032,8 @@ static int ideapad_acpi_remove(struct platform_device *pdev)
int i; int i;
#if IS_ENABLED(CONFIG_ACPI_WMI) #if IS_ENABLED(CONFIG_ACPI_WMI)
wmi_remove_notify_handler(ideapad_wmi_fnesc_event); if (priv->fnesc_guid)
wmi_remove_notify_handler(priv->fnesc_guid);
#endif #endif
acpi_remove_notify_handler(priv->adev->handle, acpi_remove_notify_handler(priv->adev->handle,
ACPI_DEVICE_NOTIFY, ideapad_acpi_notify); ACPI_DEVICE_NOTIFY, ideapad_acpi_notify);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment