hello i just installed ubuntu 24.04 on RW_LEGACY, and i want to have the touchscreen is there a way/driver to install? thanks
im not sure about RW_LEGACY installs but on arch on full uefi my touchscreen worked out of the box maybe try updating your kernel version as i assume the touchscreen drivers are included in the kernel. (im not sure how to update the kernel on ubuntu im sure theres a way on google)
Touchscreens almost never work properly on RWL due to stock firmware using custom acpi probing that was rejected from upstream linux. Full rom does not have this issue because coreboot will probe for touchscreens and only include the one present in the SSDT.
On x360 14c tgl eldrid and ubuntu 25.04 I can see the init attempts for the goodix touchscreen. The i2c bus does show both Elan touch screen and the goodix. The goodix init fails.
[ 0.721734] i2c_hid_acpi i2c-GDIX0000:00: failed to reset device: -121
[ 0.722191] i2c_hid_acpi i2c-GDIX0000:00: failed to change power setting.
[ 1.737348] i2c_hid_acpi i2c-GDIX0000:00: failed to change power setting.
[ 2.761548] i2c_hid_acpi i2c-GDIX0000:00: failed to change power setting.
[ 3.785457] i2c_hid_acpi i2c-GDIX0000:00: failed to change power setting.
[ 4.813762] i2c_hid_acpi i2c-GDIX0000:00: probe with driver i2c_hid_acpi failed with error -121
Is there a place I can start to look for the support added to cromeos to solve this and merge it to 6.14 as an available patch at least for others who have this issue ? Thanks
As I said, upstream linux rejected google’s patch.
After some debug turns out the BIOS is loading two touchscreen devices, GOODIX and ELAN with the same power methods. The ELAN does not exist. When it fails to probe the power is turned off which also turns off the GOODIX touchscreen. Hacking the i2c acpi code (i2c_acpi_register_device)to ignore the ELAN device solves the problem and allows the touchscreen to work. Not sure what kind of proper fix can be made. I see something in chromeos about scl gpio devices which may be how they detect the bogus BIOS entries but I don’t see them in either the chromeos boot ACPI tables or the linux tables. On chromeos the ELAN device is rejected on boot. I’ll keep poking at it but at least it works for now…
as we said, ChromeOS adds an ACPI flag probed
to tell the kernel drivers to check the presences of a given I2C touchpad/touchscreen device. Upstream Linux told them it was an awful violation of the ACPI spec (to set the status to present when it’s not, and have the kernel figure it out) and to do better. So I added a runtime detection feature to coreboot which is now standard for newer devices (and all devices running my MrChromebox coreboot/UEFI firmware), but older devices running stock firmware are stuck with Google’s rejected hackery. The only WA is to use opencore or some other UEFI shim to modify the ACPI tables at boot to remove the i2c devices which are not actually present.
I was hoping there was a blacklist mechanism to ignore ACPI entries but I can’t find anything like that. A boot flag containing a list of devices to ignore might be handy. No way any of it will make it upstream. so maybe I live with a hacked driver. (I never actually heard what the issue was but you did make it clear that with stock firmware there was junk in the ACPI tables, now I know what it is and that the touchscreen does actually work). As always, thanks!
you could blacklist the Elan touchscreen driver, assuming it’s not the same as the touchpad or you don’t have an Elan touchpad
I think both touchscreens use the stock i2c hid driver.
sadly I just checked and you are correct, so dropping the non-present device from the ACPI tables at boot is probably the best option
Either that or patch your kernel to add google’s probed flag. Or use full rom.
It looks like the probed check looks for “linux,probed” marked devices and does an i2c op on them to see if they are there. If it fails skip the device. Since we know this will never make it anywhere I may as well live with a fixed hack to skip the ELAN device (much more simple). I will eventually make it to full rom but I am afraid of terminating the ability to run chrome, not that I ever use it. I know I can backup roms and go back but I generally dont flash full rom until EOL. The issues I have left to resolve are the MIC we have spoken about and the tablet switch. Does full rom address either of those ? Thanks for all your help!
All you need is this commit f718e2d9e737f8d9f64abcd96ddf6e5db35f6aa2 - chromiumos/third_party/kernel - Git at Google
Even better. Thanks!