diff options
| -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; |
