HID: lenovo: Add support for ThinkPad X1 Tablet Thin Keyboard Gen2
authorAkira Inoue <niyarium@gmail.com>
Thu, 12 Jun 2025 04:34:38 +0000 (13:34 +0900)
committerJiri Kosina <jkosina@suse.com>
Fri, 20 Jun 2025 07:10:14 +0000 (09:10 +0200)
Add "Thinkpad X1 Tablet Gen 2 Keyboard" PID to hid-lenovo driver to fix trackpoint not working issue.

Signed-off-by: Akira Inoue <niyarium@gmail.com>
Signed-off-by: Jiri Kosina <jkosina@suse.com>
drivers/hid/hid-ids.h
drivers/hid/hid-lenovo.c
drivers/hid/hid-multitouch.c

index 2d3769405ec3b0c40a8e280388d75f94fec57259..c6468568aea1cf55f496b58b4f14e8670cca9a51 100644 (file)
 #define USB_DEVICE_ID_LENOVO_TPPRODOCK 0x6067
 #define USB_DEVICE_ID_LENOVO_X1_COVER  0x6085
 #define USB_DEVICE_ID_LENOVO_X1_TAB    0x60a3
+#define USB_DEVICE_ID_LENOVO_X1_TAB2   0x60a4
 #define USB_DEVICE_ID_LENOVO_X1_TAB3   0x60b5
 #define USB_DEVICE_ID_LENOVO_X12_TAB   0x60fe
 #define USB_DEVICE_ID_LENOVO_X12_TAB2  0x61ae
index a3c23a72316ac21d4e4844cfb2c79300b694253a..b3121fa7a72d73f2b9ac12f36bc3d87c2649c69b 100644 (file)
@@ -492,6 +492,7 @@ static int lenovo_input_mapping(struct hid_device *hdev,
        case USB_DEVICE_ID_LENOVO_X12_TAB:
        case USB_DEVICE_ID_LENOVO_X12_TAB2:
        case USB_DEVICE_ID_LENOVO_X1_TAB:
+       case USB_DEVICE_ID_LENOVO_X1_TAB2:
        case USB_DEVICE_ID_LENOVO_X1_TAB3:
                return lenovo_input_mapping_x1_tab_kbd(hdev, hi, field, usage, bit, max);
        default:
@@ -608,6 +609,7 @@ static ssize_t attr_fn_lock_store(struct device *dev,
        case USB_DEVICE_ID_LENOVO_X12_TAB2:
        case USB_DEVICE_ID_LENOVO_TP10UBKBD:
        case USB_DEVICE_ID_LENOVO_X1_TAB:
+       case USB_DEVICE_ID_LENOVO_X1_TAB2:
        case USB_DEVICE_ID_LENOVO_X1_TAB3:
                ret = lenovo_led_set_tp10ubkbd(hdev, TP10UBKBD_FN_LOCK_LED, value);
                if (ret)
@@ -864,6 +866,7 @@ static int lenovo_event(struct hid_device *hdev, struct hid_field *field,
        case USB_DEVICE_ID_LENOVO_X12_TAB2:
        case USB_DEVICE_ID_LENOVO_TP10UBKBD:
        case USB_DEVICE_ID_LENOVO_X1_TAB:
+       case USB_DEVICE_ID_LENOVO_X1_TAB2:
        case USB_DEVICE_ID_LENOVO_X1_TAB3:
                return lenovo_event_tp10ubkbd(hdev, field, usage, value);
        default:
@@ -1147,6 +1150,7 @@ static int lenovo_led_brightness_set(struct led_classdev *led_cdev,
        case USB_DEVICE_ID_LENOVO_X12_TAB2:
        case USB_DEVICE_ID_LENOVO_TP10UBKBD:
        case USB_DEVICE_ID_LENOVO_X1_TAB:
+       case USB_DEVICE_ID_LENOVO_X1_TAB2:
        case USB_DEVICE_ID_LENOVO_X1_TAB3:
                ret = lenovo_led_set_tp10ubkbd(hdev, tp10ubkbd_led[led_nr], value);
                break;
@@ -1387,6 +1391,7 @@ static int lenovo_probe(struct hid_device *hdev,
        case USB_DEVICE_ID_LENOVO_X12_TAB2:
        case USB_DEVICE_ID_LENOVO_TP10UBKBD:
        case USB_DEVICE_ID_LENOVO_X1_TAB:
+       case USB_DEVICE_ID_LENOVO_X1_TAB2:
        case USB_DEVICE_ID_LENOVO_X1_TAB3:
                ret = lenovo_probe_tp10ubkbd(hdev);
                break;
@@ -1476,6 +1481,7 @@ static void lenovo_remove(struct hid_device *hdev)
        case USB_DEVICE_ID_LENOVO_X12_TAB2:
        case USB_DEVICE_ID_LENOVO_TP10UBKBD:
        case USB_DEVICE_ID_LENOVO_X1_TAB:
+       case USB_DEVICE_ID_LENOVO_X1_TAB2:
        case USB_DEVICE_ID_LENOVO_X1_TAB3:
                lenovo_remove_tp10ubkbd(hdev);
                break;
@@ -1526,6 +1532,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_TAB2) },
        { HID_DEVICE(BUS_USB, HID_GROUP_GENERIC,
                     USB_VENDOR_ID_LENOVO, USB_DEVICE_ID_LENOVO_X1_TAB3) },
        { HID_DEVICE(BUS_USB, HID_GROUP_GENERIC,
index ded0fef7d8c7be85c0711102b8e6e390182c7d0c..24aa6e7e6fdd501c7dbadcc81c5ee1946965ee12 100644 (file)
@@ -2132,12 +2132,18 @@ static const struct hid_device_id mt_devices[] = {
                HID_DEVICE(BUS_I2C, HID_GROUP_GENERIC,
                        USB_VENDOR_ID_LG, I2C_DEVICE_ID_LG_7010) },
 
-       /* Lenovo X1 TAB Gen 2 */
+       /* Lenovo X1 TAB Gen 1 */
        { .driver_data = MT_CLS_WIN_8_FORCE_MULTI_INPUT,
                HID_DEVICE(BUS_USB, HID_GROUP_MULTITOUCH_WIN_8,
                           USB_VENDOR_ID_LENOVO,
                           USB_DEVICE_ID_LENOVO_X1_TAB) },
 
+       /* Lenovo X1 TAB Gen 2 */
+       { .driver_data = MT_CLS_WIN_8_FORCE_MULTI_INPUT,
+               HID_DEVICE(BUS_USB, HID_GROUP_MULTITOUCH_WIN_8,
+                          USB_VENDOR_ID_LENOVO,
+                          USB_DEVICE_ID_LENOVO_X1_TAB2) },
+
        /* Lenovo X1 TAB Gen 3 */
        { .driver_data = MT_CLS_WIN_8_FORCE_MULTI_INPUT,
                HID_DEVICE(BUS_USB, HID_GROUP_MULTITOUCH_WIN_8,