Commit 758babb5 authored by Stefan Seyfried's avatar Stefan Seyfried Committed by Hans de Goede

platform/x86: panasonic-laptop: de-obfuscate button codes

In the definition of panasonic_keymap[] the key codes are given in
decimal, later checks are done with hexadecimal values, which does
not help in understanding the code.
Additionally use two helper variables to shorten the code and make
the logic more obvious.

Fixes: ed83c917 ("platform/x86: panasonic-laptop: Resolve hotkey double trigger bug")
Signed-off-by: default avatarStefan Seyfried <seife+kernel@b1-systems.com>
Reviewed-by: default avatarHans de Goede <hdegoede@redhat.com>
Signed-off-by: default avatarHans de Goede <hdegoede@redhat.com>
Reviewed-by: default avatarAndy Shevchenko <andriy.shevchenko@linux.intel.com>
Link: https://lore.kernel.org/r/20220624112340.10130-3-hdegoede@redhat.com
parent 3888bb74
...@@ -762,6 +762,8 @@ static void acpi_pcc_generate_keyinput(struct pcc_acpi *pcc) ...@@ -762,6 +762,8 @@ static void acpi_pcc_generate_keyinput(struct pcc_acpi *pcc)
struct input_dev *hotk_input_dev = pcc->input_dev; struct input_dev *hotk_input_dev = pcc->input_dev;
int rc; int rc;
unsigned long long result; unsigned long long result;
unsigned int key;
unsigned int updown;
rc = acpi_evaluate_integer(pcc->handle, METHOD_HKEY_QUERY, rc = acpi_evaluate_integer(pcc->handle, METHOD_HKEY_QUERY,
NULL, &result); NULL, &result);
...@@ -770,18 +772,22 @@ static void acpi_pcc_generate_keyinput(struct pcc_acpi *pcc) ...@@ -770,18 +772,22 @@ static void acpi_pcc_generate_keyinput(struct pcc_acpi *pcc)
return; return;
} }
key = result & 0xf;
updown = result & 0x80; /* 0x80 == key down; 0x00 = key up */
/* hack: some firmware sends no key down for sleep / hibernate */ /* hack: some firmware sends no key down for sleep / hibernate */
if ((result & 0xf) == 0x7 || (result & 0xf) == 0xa) { if (key == 7 || key == 10) {
if (result & 0x80) if (updown)
sleep_keydown_seen = 1; sleep_keydown_seen = 1;
if (!sleep_keydown_seen) if (!sleep_keydown_seen)
sparse_keymap_report_event(hotk_input_dev, sparse_keymap_report_event(hotk_input_dev,
result & 0xf, 0x80, false); key, 0x80, false);
} }
if ((result & 0xf) == 0x7 || (result & 0xf) == 0x9 || (result & 0xf) == 0xa) { /* for the magic values, see panasonic_keymap[] above */
if (key == 7 || key == 9 || key == 10) {
if (!sparse_keymap_report_event(hotk_input_dev, if (!sparse_keymap_report_event(hotk_input_dev,
result & 0xf, result & 0x80, false)) key, updown, false))
pr_err("Unknown hotkey event: 0x%04llx\n", result); pr_err("Unknown hotkey event: 0x%04llx\n", result);
} }
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment