]> Git Repo - J-linux.git/commitdiff
HID: lenovo: Add support for Thinkpad X1 Tablet Gen 3 keyboard
authorHans de Goede <[email protected]>
Thu, 10 Oct 2024 09:45:12 +0000 (11:45 +0200)
committerJiri Kosina <[email protected]>
Fri, 18 Oct 2024 10:36:11 +0000 (12:36 +0200)
The Thinkpad X1 Tablet Gen 3 keyboard has the same Lenovo specific quirks
as the original  Thinkpad X1 Tablet keyboard.

Add the PID for the "Thinkpad X1 Tablet Gen 3 keyboard" to the hid-lenovo
driver to fix the FnLock, Mute and media buttons not working.

Suggested-by: Izhar Firdaus <[email protected]>
Closes https://bugzilla.redhat.com/show_bug.cgi?id=2315395
Signed-off-by: Hans de Goede <[email protected]>
Signed-off-by: Jiri Kosina <[email protected]>
drivers/hid/hid-lenovo.c

index 3b0c779ce8f712c85177b9c85e37e9c16b064a18..f66194fde8912ac1b223e0092d5589e2a351269b 100644 (file)
@@ -473,6 +473,7 @@ static int lenovo_input_mapping(struct hid_device *hdev,
                return lenovo_input_mapping_tp10_ultrabook_kbd(hdev, hi, field,
                                                               usage, bit, max);
        case USB_DEVICE_ID_LENOVO_X1_TAB:
+       case USB_DEVICE_ID_LENOVO_X1_TAB3:
                return lenovo_input_mapping_x1_tab_kbd(hdev, hi, field, usage, bit, max);
        default:
                return 0;
@@ -583,6 +584,7 @@ static ssize_t attr_fn_lock_store(struct device *dev,
                break;
        case USB_DEVICE_ID_LENOVO_TP10UBKBD:
        case USB_DEVICE_ID_LENOVO_X1_TAB:
+       case USB_DEVICE_ID_LENOVO_X1_TAB3:
                ret = lenovo_led_set_tp10ubkbd(hdev, TP10UBKBD_FN_LOCK_LED, value);
                if (ret)
                        return ret;
@@ -776,6 +778,7 @@ static int lenovo_event(struct hid_device *hdev, struct hid_field *field,
                return lenovo_event_cptkbd(hdev, field, usage, value);
        case USB_DEVICE_ID_LENOVO_TP10UBKBD:
        case USB_DEVICE_ID_LENOVO_X1_TAB:
+       case USB_DEVICE_ID_LENOVO_X1_TAB3:
                return lenovo_event_tp10ubkbd(hdev, field, usage, value);
        default:
                return 0;
@@ -1056,6 +1059,7 @@ static int lenovo_led_brightness_set(struct led_classdev *led_cdev,
                break;
        case USB_DEVICE_ID_LENOVO_TP10UBKBD:
        case USB_DEVICE_ID_LENOVO_X1_TAB:
+       case USB_DEVICE_ID_LENOVO_X1_TAB3:
                ret = lenovo_led_set_tp10ubkbd(hdev, tp10ubkbd_led[led_nr], value);
                break;
        }
@@ -1286,6 +1290,7 @@ static int lenovo_probe(struct hid_device *hdev,
                break;
        case USB_DEVICE_ID_LENOVO_TP10UBKBD:
        case USB_DEVICE_ID_LENOVO_X1_TAB:
+       case USB_DEVICE_ID_LENOVO_X1_TAB3:
                ret = lenovo_probe_tp10ubkbd(hdev);
                break;
        default:
@@ -1372,6 +1377,7 @@ static void lenovo_remove(struct hid_device *hdev)
                break;
        case USB_DEVICE_ID_LENOVO_TP10UBKBD:
        case USB_DEVICE_ID_LENOVO_X1_TAB:
+       case USB_DEVICE_ID_LENOVO_X1_TAB3:
                lenovo_remove_tp10ubkbd(hdev);
                break;
        }
@@ -1421,6 +1427,8 @@ static const struct hid_device_id lenovo_devices[] = {
         */
        { HID_DEVICE(BUS_USB, HID_GROUP_GENERIC,
                     USB_VENDOR_ID_LENOVO, USB_DEVICE_ID_LENOVO_X1_TAB) },
+       { HID_DEVICE(BUS_USB, HID_GROUP_GENERIC,
+                    USB_VENDOR_ID_LENOVO, USB_DEVICE_ID_LENOVO_X1_TAB3) },
        { }
 };
 
This page took 0.052306 seconds and 4 git commands to generate.