Enabling GT911 Touchscreen on Raspberry Pi Zero 2W with Yocto

A step-by-step guide to configuring Yocto recipes and hardware setup for the GT911 touch controller
February 4, 2026

Enabling GT911 Touchscreen on Raspberry Pi Zero 2W with Yocto

I purchased a 7.5-inch E-Ink display and a touchscreen to create my own E-paper device based on the Raspberry Pi Zero 2W.
It's a Goodix product that combines an E-Ink display with a GT911 touchscreen. I bought it without hesitation as it was on sale at a low price on Amazon.
I'm going to modify the meta-jooojub-rpi layer created in a previous post to enable the touchscreen and E-Ink display.
In this post, I'll focus on enabling the GT911 touchscreen first.

1. Hardware Setup

The Goodix product I purchased is as follows:
According to the specification drawing, the touchscreen uses the GT911 IC and communicates via I2C.
The E-Ink display uses SPI and appears to require a separate controller.
GDEY075T7-T01 Specification Drawing
Fortunately, I was able to use an E-Ink display controller I already had.
The issue was the touchscreen; I didn't have a spare connector for the FPC connection, so I had to order one separately online.
I connected the GPIOs by referring to the pin map, and the final hardware configuration is as follows.
HW Configuration
I wanted to test it with sample code immediately, but I decided to configure the image with Yocto first.

2. Modifying Yocto Recipes - DT overlay

I discovered an overlay DT in the latest Raspberry Pi kernel source. It seems this can be used to easily enable the touchscreen.
To apply the desired modifications, copy the goodix-overlay.dts file to an appropriate location within meta-jooojub-rpi and configure it to be copied during the Yocto build.
You can create a .bbappend file to add or remove specific behaviors while keeping the original kernel build intact.
Add the following file to meta-jooojub-rpi to use the goodix overlay.
recipes-kernel/linux/linux-raspberrypi_%.bbappend
bitbake
Now, create a files directory, copy goodix-overlay.dts, and modify the values as needed.
I added size-x, size-y, and the actual physical sizes according to my hardware configuration.
Additionally, since I plan to use the touchscreen vertically, I added inverted-x and swapped-x-y.
recipes-kernel/linux/files/goodix-overlay.dts
Device Tree
Now, I need to add dtoverlay=goodix to the Raspberry Pi config. Looking at meta-raspberrypi, it seems this can be configured via RPI_EXTRA_CONFIG.
These settings can be added to the previously created distro.
While I'm at it, I'll also add settings for I2C and switch the init manager from the default sysvinit to systemd.
conf/distro/rpi0-2w.conf
diff

3. Modifying Yocto Recipes - GT911 firmware

After building and booting, I saw that goodix was probed correctly, but a message appeared stating that the firmware was missing.
Attempting to load firmware
shell
Looking into the goodix driver code, I found that the 'firmware' refers to the configuration values used by the GT911.
drivers/input/touchscreen/goodix.c - goodix_config_cb
c
drivers/input/touchscreen/goodix.c - goodix_config_cb, goodix_send_cfg
c
Referring to the GT911's rather unhelpful manual, I confirmed that 0x8047 corresponds to Configuration Information (R/W).
GT911 User Manual - Configuration Information
I had to set up the firmware according to my hardware configuration, but Goodix did not provide any specific firmware.
With only the insufficient GT911 developer manual and using RAG with an LLM, I had no choice but to create the firmware through meticulous trial and error.
I then packaged the resulting goodix_911_cfg.bin file so that Yocto copies it to the desired location during the build.
Creating a package in Yocto is straightforward.
Just create a .bb file with the desired package name and add it to IMAGE_INSTALL.
recipes-bsp/goodix-firmware/goodix-firmware.bb
bitbake

4. Modifying Yocto Recipes - INSTALL packages

Finally, modify the image recipe to install the necessary packages.
I've also added several packages that I expect to need later.
recipes-core/images/jooojub-rpi0-2w.bb
diff

5. Build and test

Now, let's build the image and test if the touchscreen works correctly.
Build and flashing to SD Card
shell
After flashing the built image and booting, the previous firmware load failure logs have disappeared.
Attempting to load firmware
shell
Checking with i2c-detect, it seems to have been probed without any issues.
i2cdetect
shell
Performing a touch test with evtest, the desired events are being reported correctly.
evtest
shell

6. Next Steps

I've added the firmware and DT files for probing the GT911 touchscreen to Yocto, allowing them to be used immediately in the built image.
Next, I'll apply the modifications to enable the E-Ink display in meta-jooojub-rpi.

7. On a side note

On a side note, I had set this aside for several months because the I2C probe kept failing.
Just in case, I measured the 3V GPIO with a power meter and discovered that no voltage was being applied.
I was struggling so hard to enable a controller that didn't even have current flowing to it. T-T
In the end, it turned out to be a soldering issue with the GPIO pin header.
Jooojub
System S/W engineer
Explore Tags
Series
    Recent Post
    © 2026. jooojub. All right reserved.