]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
HID: lenovo: Restrict F7/9/11 mode to compact keyboards only
authorIusico Maxim <iusico.maxim@libero.it>
Thu, 5 Jun 2025 17:55:50 +0000 (19:55 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sun, 6 Jul 2025 09:00:14 +0000 (11:00 +0200)
commit 9327e3ee5b077c4ab4495a09b67624f670ed88b6 upstream.

Commit 2f2bd7cbd1d1 ("hid: lenovo: Resend all settings on reset_resume
for compact keyboards") introduced a regression for ThinkPad TrackPoint
Keyboard II by removing the conditional check for enabling F7/9/11 mode
needed for compact keyboards only. As a result, the non-compact
keyboards can no longer toggle Fn-lock via Fn+Esc, although it can be
controlled via sysfs knob that directly sends raw commands.

This patch restores the previous conditional check without any
additions.

Cc: stable@vger.kernel.org
Fixes: 2f2bd7cbd1d1 ("hid: lenovo: Resend all settings on reset_resume for compact keyboards")
Signed-off-by: Iusico Maxim <iusico.maxim@libero.it>
Signed-off-by: Jiri Kosina <jkosina@suse.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/hid/hid-lenovo.c

index a4062f617ba202e5e908fd455d9ac7ff81cf96c3..ee65da98c7d5b59730c1834dcaebb5e89732d4f5 100644 (file)
@@ -529,11 +529,14 @@ static void lenovo_features_set_cptkbd(struct hid_device *hdev)
 
        /*
         * Tell the keyboard a driver understands it, and turn F7, F9, F11 into
-        * regular keys
+        * regular keys (Compact only)
         */
-       ret = lenovo_send_cmd_cptkbd(hdev, 0x01, 0x03);
-       if (ret)
-               hid_warn(hdev, "Failed to switch F7/9/11 mode: %d\n", ret);
+       if (hdev->product == USB_DEVICE_ID_LENOVO_CUSBKBD ||
+           hdev->product == USB_DEVICE_ID_LENOVO_CBTKBD) {
+               ret = lenovo_send_cmd_cptkbd(hdev, 0x01, 0x03);
+               if (ret)
+                       hid_warn(hdev, "Failed to switch F7/9/11 mode: %d\n", ret);
+       }
 
        /* Switch middle button to native mode */
        ret = lenovo_send_cmd_cptkbd(hdev, 0x09, 0x01);