Skip to content

Commit

Permalink
toshiba-acpi: fix multimedia keys on some machines
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Frans Pop authored and Matthew Garrett committed Mar 1, 2010
1 parent 92e00e4 commit b466301
Showing 1 changed file with 16 additions and 14 deletions.
30 changes: 16 additions & 14 deletions drivers/platform/x86/toshiba_acpi.c
Original file line number Diff line number Diff line change
Expand Up @@ -814,21 +814,23 @@ static void toshiba_acpi_notify(acpi_handle handle, u32 event, void *context)
if (hci_result == HCI_SUCCESS) {
if (value == 0x100)
continue;
else if (value & 0x80) {
key = toshiba_acpi_get_entry_by_scancode
(value & ~0x80);
if (!key) {
printk(MY_INFO "Unknown key %x\n",
value & ~0x80);
continue;
}
input_report_key(toshiba_acpi.hotkey_dev,
key->keycode, 1);
input_sync(toshiba_acpi.hotkey_dev);
input_report_key(toshiba_acpi.hotkey_dev,
key->keycode, 0);
input_sync(toshiba_acpi.hotkey_dev);
/* act on key press; ignore key release */
if (value & 0x80)
continue;

key = toshiba_acpi_get_entry_by_scancode
(value);
if (!key) {
printk(MY_INFO "Unknown key %x\n",
value);
continue;
}
input_report_key(toshiba_acpi.hotkey_dev,
key->keycode, 1);
input_sync(toshiba_acpi.hotkey_dev);
input_report_key(toshiba_acpi.hotkey_dev,
key->keycode, 0);
input_sync(toshiba_acpi.hotkey_dev);
} else if (hci_result == HCI_NOT_SUPPORTED) {
/* This is a workaround for an unresolved issue on
* some machines where system events sporadically
Expand Down

0 comments on commit b466301

Please sign in to comment.