Message ID | 20220624112340.10130-3-hdegoede@redhat.com |
---|---|
State | Accepted |
Commit | 65a3e6c8d3f7c346813a05f3d76fc46b640d76d6 |
Headers | show |
Series | ACPI: video / platform/x86: Fix Panasonic laptop missing keypresses | expand |
On Fri, Jun 24, 2022 at 01:23:35PM +0200, Hans de Goede wrote: > From: Stefan Seyfried <seife+kernel@b1-systems.com> > > 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. (Note, all comments are up to you, I understand that this is a fix and maybe better to make code neat in a separate change) ... > struct input_dev *hotk_input_dev = pcc->input_dev; > int rc; > unsigned long long result; > + unsigned int key; > + unsigned int updown; Perhaps make them more like reversed xmas tree order? ... > sparse_keymap_report_event(hotk_input_dev, > - result & 0xf, 0x80, false); > + key, 0x80, false); Maybe move one or more parameters to the previous line? ... > 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); Ditto. Although I would even go for rc = sparse_...; if (!rc) pr_err(...); pattern.
diff --git a/drivers/platform/x86/panasonic-laptop.c b/drivers/platform/x86/panasonic-laptop.c index 37850d07987d..ca6137f4000f 100644 --- a/drivers/platform/x86/panasonic-laptop.c +++ b/drivers/platform/x86/panasonic-laptop.c @@ -762,6 +762,8 @@ static void acpi_pcc_generate_keyinput(struct pcc_acpi *pcc) struct input_dev *hotk_input_dev = pcc->input_dev; int rc; unsigned long long result; + unsigned int key; + unsigned int updown; rc = acpi_evaluate_integer(pcc->handle, METHOD_HKEY_QUERY, NULL, &result); @@ -770,18 +772,22 @@ static void acpi_pcc_generate_keyinput(struct pcc_acpi *pcc) return; } + key = result & 0xf; + updown = result & 0x80; /* 0x80 == key down; 0x00 = key up */ + /* hack: some firmware sends no key down for sleep / hibernate */ - if ((result & 0xf) == 0x7 || (result & 0xf) == 0xa) { - if (result & 0x80) + if (key == 7 || key == 10) { + if (updown) sleep_keydown_seen = 1; if (!sleep_keydown_seen) 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, - result & 0xf, result & 0x80, false)) + key, updown, false)) pr_err("Unknown hotkey event: 0x%04llx\n", result); } }