Bug 216994

Summary: Goodix(27C6:0123)/i8042 keyboard not detected on Alder Lake Lenovo Yoga Slim 7 ProX 14IAH7
Product: Drivers Reporter: bernhard.kaindl (bernhard.kaindl)
Component: Input DevicesAssignee: drivers_input-devices
Status: NEW ---    
Severity: blocking CC: luis.pixeltux
Priority: P1    
Hardware: Intel   
OS: Linux   
URL: https://ask.fedoraproject.org/t/issue-with-the-keyboard-not-working-on-touch-screen-laptop/30944
Kernel Version: 6.1.6 Subsystem:
Regression: No Bisected commit-id:
Attachments: dmesg normal boot
dmesg boot pressing the CapsLk

Description bernhard.kaindl@cloud.com 2023-02-03 01:09:36 UTC
This issue was independently reported by pixel on https://ask.fedoraproject.org/t/issue-with-the-keyboard-not-working-on-touch-screen-laptop/30944

I have the identical model with the same issue.

Hardware is bleeding edge: Lenovo Yoga Slim 7 ProX 14IAH7 with i7-12700H/32GB.

My type is the "82TK" model, the model of pixel matches my specs exactly.

This Alder Lake laptop is so new, that so far, only Fedora 37 boots it at all.
All the others I tried crash in GRUB (Ubuntu, Mint) or the kernel(SUSE).

Please read pixel's problem description for the full description:
https://ask.fedoraproject.org/t/issue-with-the-keyboard-not-working-on-touch-screen-laptop/30944

Summary:

The i8042 driver fails to detect the keyboard unless pixel quickly presses CapsLk after GRUB (I didn't verify this on my HW yet).

When the keyboard is forced to be detected by pressing CapsLock, `dmesg` looks like this:

[    1.514859] i8042: PNP: PS/2 Controller [PNP0303:PS2K] at 0x60,0x64 irq 1
[    1.514861] i8042: PNP: PS/2 appears to have AUX port disabled, if this is incorrect please boot with i8042.nopnp
[    1.516849] serio: i8042 KBD port at 0x60,0x64 irq 1
[    1.525549] hid: raw HID events driver (C) Jiri Kosina
[    1.525566] usbcore: registered new interface driver usbhid
[    1.525566] usbhid: USB HID core driver
[    1.553107] input: AT Translated Set 2 keyboard as /devices/platform/i8042/serio0/input/input8
[    2.679978] input: PNP0C50:00 04F3:3202 Mouse as /devices/pci0000:00/0000:00:15.1/i2c_designware.1/i2c-1/i2c-PNP0C50:00/0018:04F3:3202.0001/input/input9
[    2.680081] input: PNP0C50:00 04F3:3202 Touchpad as /devices/pci0000:00/0000:00:15.1/i2c_designware.1/i2c-1/i2c-PNP0C50:00/0018:04F3:3202.0001/input/input11
[    2.680155] hid-generic 0018:04F3:3202.0001: input,hidraw0: I2C HID v1.00 Mouse [PNP0C50:00 04F3:3202] on i2c-PNP0C50:00
[    2.739820] input: PNP0C50:00 04F3:3202 Mouse as /devices/pci0000:00/0000:00:15.1/i2c_designware.1/i2c-1/i2c-PNP0C50:00/0018:04F3:3202.0001/input/input12
[    2.740016] input: PNP0C50:00 04F3:3202 Touchpad as /devices/pci0000:00/0000:00:15.1/i2c_designware.1/i2c-1/i2c-PNP0C50:00/0018:04F3:3202.0001/input/input14
[    2.740131] hid-multitouch 0018:04F3:3202.0001: input,hidraw0: I2C HID v1.00 Mouse [PNP0C50:00 04F3:3202] on i2c-PNP0C50:00
[    2.967542] input: CUST0000:00 27C6:0123 as /devices/pci0000:00/0000:00:15.0/i2c_designware.0/i2c-0/i2c-CUST0000:00/0018:27C6:0123.0002/input/input15
[    2.967714] input: CUST0000:00 27C6:0123 UNKNOWN as /devices/pci0000:00/0000:00:15.0/i2c_designware.0/i2c-0/i2c-CUST0000:00/0018:27C6:0123.0002/input/input16
[    2.967789] input: CUST0000:00 27C6:0123 Keyboard as /devices/pci0000:00/0000:00:15.0/i2c_designware.0/i2c-0/i2c-CUST0000:00/0018:27C6:0123.0002/input/input17
[    2.967925] hid-multitouch 0018:27C6:0123.0002: input,hidraw1: I2C HID v1.00 Keyboard [CUST0000:00 27C6:0123] on i2c-CUST0000:00
[    4.768002] ish-hid {33AECD58-B679-4E54-9BD9-A04D34F0C226}: [hid-ish]: enum_devices_done OK, num_hid_devices=2
[    4.780707] hid-generic 001F:8087:0AC2.0003: hidraw2: SENSOR HUB HID v2.00 Device [hid-ishtp 8087:0AC2] on 
[    4.785736] hid-generic 001F:8087:0AC2.0004: hidraw3: SENSOR HUB HID v2.00 Device [hid-ishtp 8087:0AC2] on 
[    7.427923] input: Intel HID events as /devices/platform/INTC1070:00/input/input20
[    7.428041] intel-hid INTC1070:00: platform supports 5 button array
[    7.428055] input: Intel HID 5 button array as /devices/platform/INTC1070:00/input/input21

The I2C HID keyboard is always detected, but does not send events for keys.

Only the i8042 driver is sending keys, but it is not detected by default,
the only difference I made out in pixel's log was the detection of the i8042:

[    1.553107] input: AT Translated Set 2 keyboard as /devices/platform/i8042/serio0/input/input8

The other way (besides pixel quickly pressing CapsLock) to get the i8042 driver to detect the keyboard is to boot with:

i8042.dumbkbd=1

Of course, this is not a solution, we should find a fix for a working keyboard.
We also tested many other i8042 boot flags, but this is the only one we found working.
Comment 1 bernhard.kaindl@cloud.com 2023-02-03 03:52:39 UTC
I could be similar to this and maybe fixed by the same patch:

https://bbs.archlinux.org/viewtopic.php?id=261108&p=2
https://patchwork.kernel.org/project/linux-input/patch/20210201160336.16008-1-anton@cpp.in/
https://wiki.archlinux.org/title/HP_Spectre_x360_(2020)#Keyboard

The patch got no reaction on the linux-input list and still applies clean on Linux 6.1.
Comment 2 Luis Pixeltux 2023-02-03 12:40:06 UTC
Created attachment 303682 [details]
dmesg normal boot

"dmesg | grep -i 'PS/2\|multitouch\|keyboard\|i8042\|i2c\|AT Translated'"after fresh boot with "i8042.debug i8042.unmask_kbd_data" enabled.
powered up the system >> wait for the Login screen
Comment 3 Luis Pixeltux 2023-02-03 12:44:30 UTC
Created attachment 303683 [details]
dmesg boot pressing the CapsLk

"dmesg | grep -i 'PS/2\|multitouch\|keyboard\|i8042\|i2c\|AT Translated'"after fresh boot with "i8042.debug i8042.unmask_kbd_data" enabled.

powered up the system >> pressing repetitively and quick the CapsLk until the LED representing the CapsLk start blinking as I press the CapsLk (this action work just after the GRUB as before booting the everything works as expected ) >> then wait for the Login screen. Sometime started working just shortly before the Login screen.
Comment 4 Luis Pixeltux 2023-02-03 12:45:42 UTC
I've attached 2 files "dmesg.txt" and "dmesg CapsLk.txt", log data by using the command "dmesg | grep -i 'PS/2\|multitouch\|keyboard\|i8042\|i2c\|AT Translated'"after fresh boot with "i8042.debug i8042.unmask_kbd_data" enabled.

I also tried installing different distros but had the same problem with the keyboard. The distros that have worked for me so far are Clear Linux (latest version 37xxx at that moment) and Fedora, the others crash in GRUB as mentioned by bernhard.

By boot with 'i8042.dumbkbd=1' the keyboard works, but since this pretends that the controller can only read data from the keyboard and cannot check its status, it prevents the LED indicator from working, like the LED that indicates whether CapsLk is on or off.

If you need further tests or data, I am willing to provide them, but just instruct me step by step because I am new and need guidelines.
Comment 5 bernhard.kaindl@cloud.com 2023-04-03 08:25:15 UTC
Update: https://discussion.fedoraproject.org/t/71036/28

I’ve created a minimal workaround, to be submitted as RFC to the atkbd maintainers for inclusion into the upstream Linux kernel:

* It adds a new atkbd kernel parameter: atkbd.getid (ATM untested if it can be manually set)
  It is a bool and by default, it getid is enabled, and if unset it disables the GETID command!
* When the DMI System Vendor is “LENOVO”, it disables the getit parameter:
* Not yet checked if this is just set to be default off or forcibly off)
  This skips the GETID command on my Lenovo Yoga and fixes my keyboard probing:
* My keyboard works without any hammering of keys during boot as otherwise required!

Patch: https://src.fedoraproject.org/fork/bkaindl/rpms/kernel/blob/f38/f/linux-kernel-test.patch
Build: https://copr.fedorainfracloud.org/coprs/bkaindl/kernel/build/5738122/

Hopefully the COPR build finishes successfully, then Luis and all interested Lenovo  users which run Fedoara 37 or 38 can try if it works and does not cause regressions!

Note: I plan to submit is as an RFC to to the kernel atkbd maintainers for inclusion in to the upstream Linux kernel, likeyly with the DMI match extended to be fine-grained for the notebooks which need it.

For this fine-grained DMI matching, we need the output of dmesg|grep DMI after boot of all affected notebooks/systems!

Any help to get this information would be very appreciated, please help to get this DMI info, thanks!
Comment 6 Luis Pixeltux 2024-03-24 15:22:12 UTC
It looks like the problem has been resolved in Linux version 6.7.9-200.fc39.x86_64 (I'm on Fedora). It's likely that the issue was fixed in a few versions prior to this one. I've been using the keyboard without any issues for about 2 months now.