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