aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/platform/x86/hp-wmi.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/platform/x86/hp-wmi.c')
-rw-r--r--drivers/platform/x86/hp-wmi.c31
1 files changed, 20 insertions, 11 deletions
diff --git a/drivers/platform/x86/hp-wmi.c b/drivers/platform/x86/hp-wmi.c
index 06697315a088..fb4dd7b3ee71 100644
--- a/drivers/platform/x86/hp-wmi.c
+++ b/drivers/platform/x86/hp-wmi.c
@@ -54,8 +54,9 @@ MODULE_ALIAS("wmi:5FB7F034-2C63-45e9-BE91-3D44E2C707E4");
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_BIOS_QUERY 0x9
57#define HPWMI_FEATURE_QUERY 0xb
57#define HPWMI_HOTKEY_QUERY 0xc 58#define HPWMI_HOTKEY_QUERY 0xc
58#define HPWMI_FEATURE_QUERY 0xd 59#define HPWMI_FEATURE2_QUERY 0xd
59#define HPWMI_WIRELESS2_QUERY 0x1b 60#define HPWMI_WIRELESS2_QUERY 0x1b
60#define HPWMI_POSTCODEERROR_QUERY 0x2a 61#define HPWMI_POSTCODEERROR_QUERY 0x2a
61 62
@@ -295,25 +296,33 @@ static int hp_wmi_tablet_state(void)
295 return (state & 0x4) ? 1 : 0; 296 return (state & 0x4) ? 1 : 0;
296} 297}
297 298
298static int __init hp_wmi_bios_2009_later(void) 299static int __init hp_wmi_bios_2008_later(void)
299{ 300{
300 int state = 0; 301 int state = 0;
301 int ret = hp_wmi_perform_query(HPWMI_FEATURE_QUERY, 0, &state, 302 int ret = hp_wmi_perform_query(HPWMI_FEATURE_QUERY, 0, &state,
302 sizeof(state), sizeof(state)); 303 sizeof(state), sizeof(state));
303 if (ret) 304 if (!ret)
304 return ret; 305 return 1;
305 306
306 return (state & 0x10) ? 1 : 0; 307 return (ret == HPWMI_RET_UNKNOWN_CMDTYPE) ? 0 : -ENXIO;
307} 308}
308 309
309static int hp_wmi_enable_hotkeys(void) 310static int __init hp_wmi_bios_2009_later(void)
310{ 311{
311 int ret; 312 int state = 0;
312 int query = 0x6e; 313 int ret = hp_wmi_perform_query(HPWMI_FEATURE2_QUERY, 0, &state,
314 sizeof(state), sizeof(state));
315 if (!ret)
316 return 1;
313 317
314 ret = hp_wmi_perform_query(HPWMI_BIOS_QUERY, 1, &query, sizeof(query), 318 return (ret == HPWMI_RET_UNKNOWN_CMDTYPE) ? 0 : -ENXIO;
315 0); 319}
316 320
321static int __init hp_wmi_enable_hotkeys(void)
322{
323 int value = 0x6e;
324 int ret = hp_wmi_perform_query(HPWMI_BIOS_QUERY, 1, &value,
325 sizeof(value), 0);
317 if (ret) 326 if (ret)
318 return -EINVAL; 327 return -EINVAL;
319 return 0; 328 return 0;
@@ -663,7 +672,7 @@ static int __init hp_wmi_input_setup(void)
663 hp_wmi_tablet_state()); 672 hp_wmi_tablet_state());
664 input_sync(hp_wmi_input_dev); 673 input_sync(hp_wmi_input_dev);
665 674
666 if (hp_wmi_bios_2009_later() == 4) 675 if (!hp_wmi_bios_2009_later() && hp_wmi_bios_2008_later())
667 hp_wmi_enable_hotkeys(); 676 hp_wmi_enable_hotkeys();
668 677
669 status = wmi_install_notify_handler(HPWMI_EVENT_GUID, hp_wmi_notify, NULL); 678 status = wmi_install_notify_handler(HPWMI_EVENT_GUID, hp_wmi_notify, NULL);