diff options
Diffstat (limited to 'drivers/input/serio/hyperv-keyboard.c')
-rw-r--r-- | drivers/input/serio/hyperv-keyboard.c | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/drivers/input/serio/hyperv-keyboard.c b/drivers/input/serio/hyperv-keyboard.c index 613261994621..e74e5d6e5f9f 100644 --- a/drivers/input/serio/hyperv-keyboard.c +++ b/drivers/input/serio/hyperv-keyboard.c | |||
@@ -170,6 +170,15 @@ static void hv_kbd_on_receive(struct hv_device *hv_dev, | |||
170 | serio_interrupt(kbd_dev->hv_serio, scan_code, 0); | 170 | serio_interrupt(kbd_dev->hv_serio, scan_code, 0); |
171 | } | 171 | } |
172 | spin_unlock_irqrestore(&kbd_dev->lock, flags); | 172 | spin_unlock_irqrestore(&kbd_dev->lock, flags); |
173 | |||
174 | /* | ||
175 | * Only trigger a wakeup on key down, otherwise | ||
176 | * "echo freeze > /sys/power/state" can't really enter the | ||
177 | * state because the Enter-UP can trigger a wakeup at once. | ||
178 | */ | ||
179 | if (!(info & IS_BREAK)) | ||
180 | pm_wakeup_event(&hv_dev->device, 0); | ||
181 | |||
173 | break; | 182 | break; |
174 | 183 | ||
175 | default: | 184 | default: |
@@ -376,6 +385,9 @@ static int hv_kbd_probe(struct hv_device *hv_dev, | |||
376 | goto err_close_vmbus; | 385 | goto err_close_vmbus; |
377 | 386 | ||
378 | serio_register_port(kbd_dev->hv_serio); | 387 | serio_register_port(kbd_dev->hv_serio); |
388 | |||
389 | device_init_wakeup(&hv_dev->device, true); | ||
390 | |||
379 | return 0; | 391 | return 0; |
380 | 392 | ||
381 | err_close_vmbus: | 393 | err_close_vmbus: |
@@ -390,6 +402,7 @@ static int hv_kbd_remove(struct hv_device *hv_dev) | |||
390 | { | 402 | { |
391 | struct hv_kbd_dev *kbd_dev = hv_get_drvdata(hv_dev); | 403 | struct hv_kbd_dev *kbd_dev = hv_get_drvdata(hv_dev); |
392 | 404 | ||
405 | device_init_wakeup(&hv_dev->device, false); | ||
393 | serio_unregister_port(kbd_dev->hv_serio); | 406 | serio_unregister_port(kbd_dev->hv_serio); |
394 | vmbus_close(hv_dev->channel); | 407 | vmbus_close(hv_dev->channel); |
395 | kfree(kbd_dev); | 408 | kfree(kbd_dev); |