Commit d59ced19 authored by Hans de Goede's avatar Hans de Goede Committed by Wen Zhiwei
Browse files

HID: lenovo: Add support for Thinkpad X1 Tablet Gen 3 keyboard

stable inclusion
from stable-v6.6.62
commit bff14c38ed514a2dc363b029b8a17de97dbae970
category: bugfix
bugzilla: https://gitee.com/openeuler/kernel/issues/IB5BUT

Reference: https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?id=bff14c38ed514a2dc363b029b8a17de97dbae970



--------------------------------

[ Upstream commit 51268879eb2bfc563a91cdce69362d9dbf707e7e ]

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: default avatarIzhar Firdaus <izhar@fedoraproject.org>
Closes https://bugzilla.redhat.com/show_bug.cgi?id=2315395


Signed-off-by: default avatarHans de Goede <hdegoede@redhat.com>
Signed-off-by: default avatarJiri Kosina <jkosina@suse.com>
Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
Signed-off-by: default avatarWen Zhiwei <wenzhiwei@kylinos.cn>
parent 44e94541
Loading
Loading
Loading
Loading
+8 −0
Original line number Diff line number Diff line
@@ -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;
@@ -777,6 +779,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;
@@ -1059,6 +1062,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;
	}
@@ -1289,6 +1293,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:
@@ -1375,6 +1380,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;
	}
@@ -1424,6 +1430,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) },
	{ }
};