diff options
Diffstat (limited to 'drivers/platform')
-rw-r--r-- | drivers/platform/x86/hp-wmi.c | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/drivers/platform/x86/hp-wmi.c b/drivers/platform/x86/hp-wmi.c index f41135f2fb29..50d9019de2be 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 | 53 | ||
54 | static int __init hp_wmi_bios_setup(struct platform_device *device); | 54 | static int __init hp_wmi_bios_setup(struct platform_device *device); |
55 | static int __exit hp_wmi_bios_remove(struct platform_device *device); | 55 | static int __exit hp_wmi_bios_remove(struct platform_device *device); |
56 | static int hp_wmi_resume_handler(struct platform_device *device); | ||
56 | 57 | ||
57 | struct bios_args { | 58 | struct bios_args { |
58 | u32 signature; | 59 | u32 signature; |
@@ -101,6 +102,7 @@ static struct platform_driver hp_wmi_driver = { | |||
101 | }, | 102 | }, |
102 | .probe = hp_wmi_bios_setup, | 103 | .probe = hp_wmi_bios_setup, |
103 | .remove = hp_wmi_bios_remove, | 104 | .remove = hp_wmi_bios_remove, |
105 | .resume = hp_wmi_resume_handler, | ||
104 | }; | 106 | }; |
105 | 107 | ||
106 | static int hp_wmi_perform_query(int query, int write, int value) | 108 | static int hp_wmi_perform_query(int query, int write, int value) |
@@ -487,6 +489,29 @@ static int __exit hp_wmi_bios_remove(struct platform_device *device) | |||
487 | return 0; | 489 | return 0; |
488 | } | 490 | } |
489 | 491 | ||
492 | static int hp_wmi_resume_handler(struct platform_device *device) | ||
493 | { | ||
494 | struct key_entry *key; | ||
495 | |||
496 | /* | ||
497 | * Docking state may have changed while suspended, so trigger | ||
498 | * an input event for the current state. As this is a switch, | ||
499 | * the input layer will only actually pass it on if the state | ||
500 | * changed. | ||
501 | */ | ||
502 | for (key = hp_wmi_keymap; key->type != KE_END; key++) { | ||
503 | switch (key->type) { | ||
504 | case KE_SW: | ||
505 | input_report_switch(hp_wmi_input_dev, key->keycode, | ||
506 | hp_wmi_dock_state()); | ||
507 | input_sync(hp_wmi_input_dev); | ||
508 | break; | ||
509 | } | ||
510 | } | ||
511 | |||
512 | return 0; | ||
513 | } | ||
514 | |||
490 | static int __init hp_wmi_init(void) | 515 | static int __init hp_wmi_init(void) |
491 | { | 516 | { |
492 | int err; | 517 | int err; |