HID: lenovo: Sync Fn-lock state on button press for Compact and TrackPoint II keyboards
authorValdikSS <iam@valdikss.org.ru>
Sun, 13 Feb 2022 21:49:23 +0000 (22:49 +0100)
committerJiri Kosina <jkosina@suse.cz>
Mon, 2 May 2022 15:49:44 +0000 (17:49 +0200)
When Fn-Esc is pressed on the keyboard, it emits the scancode which could
be used to sync the fn_lock sysfs state.

Previously fn_lock only allowed to set new Fn-lock state and did not
keep the value in sync upon Fn-Esc press, which is now fixed.

Signed-off-by: Florian Klink <flokli@flokli.de>
Reviewed-by: Benjamin Tissoires <benjamin.tissoires@redhat.com>
Signed-off-by: Jiri Kosina <jkosina@suse.cz>
drivers/hid/hid-lenovo.c

index a612ae7dfbfc236968d011cbeec06320529aa8a4..e9466ae8a9cb8ee460bd81c69edadbe7b8481af0 100644 (file)
@@ -690,6 +690,15 @@ static int lenovo_event_cptkbd(struct hid_device *hdev,
                return 1;
        }
 
+       if (usage->type == EV_KEY && usage->code == KEY_FN_ESC && value == 1) {
+               /*
+                * The user has toggled the Fn-lock state. Toggle our own
+                * cached value of it and sync our value to the keyboard to
+                * ensure things are in sync (the syncing should be a no-op).
+                */
+               cptkbd_data->fn_lock = !cptkbd_data->fn_lock;
+       }
+
        return 0;
 }