diff options
author | Len Brown <len.brown@intel.com> | 2009-04-05 01:39:20 -0400 |
---|---|---|
committer | Len Brown <len.brown@intel.com> | 2009-04-05 01:39:20 -0400 |
commit | 4926a236396ffc82be004cc89223a7f2747a44dc (patch) | |
tree | 6b258cd5359e030a1623a936dc710ac462f7379f | |
parent | 4f3bff70a64b105921dac8630bc4381567b21ebd (diff) | |
parent | 4c395bdd3f2ca8f7e8efad881e16071182c3b8ca (diff) |
Merge branch 'hp-wmi' into release
-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 f41135f2fb2..50d9019de2b 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"); static int __init hp_wmi_bios_setup(struct platform_device *device); static int __exit hp_wmi_bios_remove(struct platform_device *device); +static int hp_wmi_resume_handler(struct platform_device *device); struct bios_args { u32 signature; @@ -101,6 +102,7 @@ static struct platform_driver hp_wmi_driver = { }, .probe = hp_wmi_bios_setup, .remove = hp_wmi_bios_remove, + .resume = hp_wmi_resume_handler, }; 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) return 0; } +static int hp_wmi_resume_handler(struct platform_device *device) +{ + struct key_entry *key; + + /* + * Docking state may have changed while suspended, so trigger + * an input event for the current state. As this is a switch, + * the input layer will only actually pass it on if the state + * changed. + */ + for (key = hp_wmi_keymap; key->type != KE_END; key++) { + switch (key->type) { + case KE_SW: + input_report_switch(hp_wmi_input_dev, key->keycode, + hp_wmi_dock_state()); + input_sync(hp_wmi_input_dev); + break; + } + } + + return 0; +} + static int __init hp_wmi_init(void) { int err; |