From: Alexander K. <a-...@a-...> - 2021-01-18 17:40:29
|
Hi all, and thanks for all your work on thinkpad_acpi. This is my very first attempt at submitting a kernel patch, so please bear with me if I didn't quite comply with the etiquette. Like sending the patch mail as straight from Git's patch file without introducing me first. ;-) This one is pretty much trivial and conservative, I assume. However, it's not 100% clear to me whether emitting a EV_SW event for SW_TABLET_MODE would be in order, as mentioned in the description. If so, I'd have a deeper look on how to do that, and perhaps require some hand-holding. Besides, the X1 Tablet has a few Fn+smth combos that are not working currently, and instead report (in evtest): Input driver version is 1.0.1 Input device ID: bus 0x3 vendor 0x17ef product 0x60a3 version 0x111 Input device name: "PRIMAX ThinkPad X1 Tablet Thin Keyboard Gen 2 Consumer Control" type 4 (EV_MSC), code 4 (MSC_SCAN), value c0001 type 1 (EV_KEY), code 240 (KEY_UNKNOWN), value 1 Keys affected are Fn+Esc (Fn lock) and Fn+F7 - Fn+F12 (various settings like radio/bluetooth on/off). Also, the mute and micmute leds are not working, and Fn lock led and function is unavailable. I'd love to give those minor issues a shot, too, but I'm not sure where to start. Would this go via thinkpad_acpi or hid_lenovo? Thanks and cheers, Alexander On 1/18/21 6:26 PM, Alexander Kobel wrote: > Those events occur when a keyboard cover is attached to a ThinkPad > Tablet device. Typically, they are used to switch from normal to tablet > mode in userspace; e.g., to offer touch keyboard choices when focus goes > to a text box and no keyboard is attached, or to enable autorotation of > the display according to the builtin orientation sensor. > > No attempt is taken to emit an EV_SW event for SW_TABLET_MODE; this is > left to userspace. So this patch is mainly to avoid warnings about > unknown and unhandled events, which are now reported as: > > * Event 0x4012: attached keyboard cover > * Event 0x4013: detached keyboard cover > > Tested as working on a ThinkPad X1 Tablet Gen 2, 20JCS00C00, and as > non-interfering with a ThinkPad X1 Carbon 7th, 20QESABM02 (normal > clamshell, so it does not have a keyboard cover). > > Signed-off-by: Alexander Kobel <a-...@a-...> > --- > drivers/platform/x86/thinkpad_acpi.c | 10 +++++++++- > 1 file changed, 9 insertions(+), 1 deletion(-) > > diff --git a/drivers/platform/x86/thinkpad_acpi.c > b/drivers/platform/x86/thinkpad_acpi.c > index c404706379d9..e3b5f02bafa6 100644 > --- a/drivers/platform/x86/thinkpad_acpi.c > +++ b/drivers/platform/x86/thinkpad_acpi.c > @@ -174,6 +174,8 @@ enum tpacpi_hkey_event_t { > or port replicator */ > TP_HKEY_EV_HOTPLUG_UNDOCK = 0x4011, /* undocked from hotplug > dock or port replicator */ > + TP_HKEY_EV_KBD_COVER_ATTACH = 0x4012, /* attached keyboard cover */ > + TP_HKEY_EV_KBD_COVER_DETACH = 0x4013, /* detached keyboard cover */ > > /* User-interface events */ > TP_HKEY_EV_LID_CLOSE = 0x5001, /* laptop lid closed */ > @@ -3976,7 +3978,7 @@ static bool hotkey_notify_dockevent(const u32 hkey, > *ignore_acpi_ev = false; > > switch (hkey) { > - case TP_HKEY_EV_UNDOCK_ACK: > + case TP_HKEY_EV_UNDOCK_ACK cover: > /* ACPI undock operation completed after wakeup */ > hotkey_autosleep_ack = 1; > pr_info("undocked\n"); > @@ -3989,6 +3991,12 @@ static bool hotkey_notify_dockevent(const u32 hkey, > case TP_HKEY_EV_HOTPLUG_UNDOCK: /* undocked from port replicator */ > pr_info("undocked from hotplug port replicator\n"); > return true; > + case TP_HKEY_EV_KBD_COVER_ATTACH: /* attached keyboard cover */ > + pr_info("attached keyboard cover\n"); > + return true; > + case TP_HKEY_EV_KBD_COVER_DETACH: /* detached keyboard cover */ > + pr_info("detached keyboard cover\n"); > + return true; > > default: > return false; |