diff options
-rw-r--r-- | drivers/platform/x86/hp-wmi.c | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/drivers/platform/x86/hp-wmi.c b/drivers/platform/x86/hp-wmi.c index 8ba8956b5a48..484a8673b835 100644 --- a/drivers/platform/x86/hp-wmi.c +++ b/drivers/platform/x86/hp-wmi.c | |||
@@ -53,6 +53,7 @@ MODULE_ALIAS("wmi:5FB7F034-2C63-45e9-BE91-3D44E2C707E4"); | |||
53 | #define HPWMI_ALS_QUERY 0x3 | 53 | #define HPWMI_ALS_QUERY 0x3 |
54 | #define HPWMI_HARDWARE_QUERY 0x4 | 54 | #define HPWMI_HARDWARE_QUERY 0x4 |
55 | #define HPWMI_WIRELESS_QUERY 0x5 | 55 | #define HPWMI_WIRELESS_QUERY 0x5 |
56 | #define HPWMI_BIOS_QUERY 0x9 | ||
56 | #define HPWMI_HOTKEY_QUERY 0xc | 57 | #define HPWMI_HOTKEY_QUERY 0xc |
57 | #define HPWMI_FEATURE_QUERY 0xd | 58 | #define HPWMI_FEATURE_QUERY 0xd |
58 | #define HPWMI_WIRELESS2_QUERY 0x1b | 59 | #define HPWMI_WIRELESS2_QUERY 0x1b |
@@ -144,6 +145,7 @@ static const struct key_entry hp_wmi_keymap[] = { | |||
144 | { KE_KEY, 0x2142, { KEY_MEDIA } }, | 145 | { KE_KEY, 0x2142, { KEY_MEDIA } }, |
145 | { KE_KEY, 0x213b, { KEY_INFO } }, | 146 | { KE_KEY, 0x213b, { KEY_INFO } }, |
146 | { KE_KEY, 0x2169, { KEY_DIRECTION } }, | 147 | { KE_KEY, 0x2169, { KEY_DIRECTION } }, |
148 | { KE_KEY, 0x216a, { KEY_SETUP } }, | ||
147 | { KE_KEY, 0x231b, { KEY_HELP } }, | 149 | { KE_KEY, 0x231b, { KEY_HELP } }, |
148 | { KE_END, 0 } | 150 | { KE_END, 0 } |
149 | }; | 151 | }; |
@@ -304,6 +306,19 @@ static int hp_wmi_bios_2009_later(void) | |||
304 | return (state & 0x10) ? 1 : 0; | 306 | return (state & 0x10) ? 1 : 0; |
305 | } | 307 | } |
306 | 308 | ||
309 | static int hp_wmi_enable_hotkeys(void) | ||
310 | { | ||
311 | int ret; | ||
312 | int query = 0x6e; | ||
313 | |||
314 | ret = hp_wmi_perform_query(HPWMI_BIOS_QUERY, 1, &query, sizeof(query), | ||
315 | 0); | ||
316 | |||
317 | if (ret) | ||
318 | return -EINVAL; | ||
319 | return 0; | ||
320 | } | ||
321 | |||
307 | static int hp_wmi_set_block(void *data, bool blocked) | 322 | static int hp_wmi_set_block(void *data, bool blocked) |
308 | { | 323 | { |
309 | enum hp_wmi_radio r = (enum hp_wmi_radio) data; | 324 | enum hp_wmi_radio r = (enum hp_wmi_radio) data; |
@@ -648,6 +663,9 @@ static int __init hp_wmi_input_setup(void) | |||
648 | hp_wmi_tablet_state()); | 663 | hp_wmi_tablet_state()); |
649 | input_sync(hp_wmi_input_dev); | 664 | input_sync(hp_wmi_input_dev); |
650 | 665 | ||
666 | if (hp_wmi_bios_2009_later() == 4) | ||
667 | hp_wmi_enable_hotkeys(); | ||
668 | |||
651 | status = wmi_install_notify_handler(HPWMI_EVENT_GUID, hp_wmi_notify, NULL); | 669 | status = wmi_install_notify_handler(HPWMI_EVENT_GUID, hp_wmi_notify, NULL); |
652 | if (ACPI_FAILURE(status)) { | 670 | if (ACPI_FAILURE(status)) { |
653 | err = -EIO; | 671 | err = -EIO; |