diff options
author | Frans Pop <elendil@planet.nl> | 2010-03-01 09:50:46 -0500 |
---|---|---|
committer | Matthew Garrett <mjg@redhat.com> | 2010-03-01 09:50:46 -0500 |
commit | b466301b842f3a54e219b5cc587f22233ecb1345 (patch) | |
tree | 757842744b05def32ca3d5dfd45950ffa8a6d438 | |
parent | 92e00e47b61f558009ff81be42b412a76fd89d84 (diff) |
toshiba-acpi: fix multimedia keys on some machines
Some Toshibas only send ACPI events on key down, not key release. Ignore
any release events and send key down and key up events on every ACPI key
down event.
Signed-off-by: Frans Pop <elendil@planet.nl>
-rw-r--r-- | drivers/platform/x86/toshiba_acpi.c | 30 |
1 files changed, 16 insertions, 14 deletions
diff --git a/drivers/platform/x86/toshiba_acpi.c b/drivers/platform/x86/toshiba_acpi.c index 26c211724acf..405b969734d6 100644 --- a/drivers/platform/x86/toshiba_acpi.c +++ b/drivers/platform/x86/toshiba_acpi.c | |||
@@ -814,21 +814,23 @@ static void toshiba_acpi_notify(acpi_handle handle, u32 event, void *context) | |||
814 | if (hci_result == HCI_SUCCESS) { | 814 | if (hci_result == HCI_SUCCESS) { |
815 | if (value == 0x100) | 815 | if (value == 0x100) |
816 | continue; | 816 | continue; |
817 | else if (value & 0x80) { | 817 | /* act on key press; ignore key release */ |
818 | key = toshiba_acpi_get_entry_by_scancode | 818 | if (value & 0x80) |
819 | (value & ~0x80); | 819 | continue; |
820 | if (!key) { | 820 | |
821 | printk(MY_INFO "Unknown key %x\n", | 821 | key = toshiba_acpi_get_entry_by_scancode |
822 | value & ~0x80); | 822 | (value); |
823 | continue; | 823 | if (!key) { |
824 | } | 824 | printk(MY_INFO "Unknown key %x\n", |
825 | input_report_key(toshiba_acpi.hotkey_dev, | 825 | value); |
826 | key->keycode, 1); | 826 | continue; |
827 | input_sync(toshiba_acpi.hotkey_dev); | ||
828 | input_report_key(toshiba_acpi.hotkey_dev, | ||
829 | key->keycode, 0); | ||
830 | input_sync(toshiba_acpi.hotkey_dev); | ||
831 | } | 827 | } |
828 | input_report_key(toshiba_acpi.hotkey_dev, | ||
829 | key->keycode, 1); | ||
830 | input_sync(toshiba_acpi.hotkey_dev); | ||
831 | input_report_key(toshiba_acpi.hotkey_dev, | ||
832 | key->keycode, 0); | ||
833 | input_sync(toshiba_acpi.hotkey_dev); | ||
832 | } else if (hci_result == HCI_NOT_SUPPORTED) { | 834 | } else if (hci_result == HCI_NOT_SUPPORTED) { |
833 | /* This is a workaround for an unresolved issue on | 835 | /* This is a workaround for an unresolved issue on |
834 | * some machines where system events sporadically | 836 | * some machines where system events sporadically |