Add ilitek driver with torizon core builder

Hi support,
I have a question about how to add the Ilitek touch input kernel driver. I saw that inside the kernel there is the ilitek_ts driver, as well as other similar Ilitek drivers. How can I use these drivers, which are already included by default, with TorizonCore Builder? I am working with Torizon 7.5.0 build 30, and these are my details regarding my target device:

Software summary
------------------------------------------------------------
Bootloader:               U-Boot
Kernel version:           6.6.119-7.5.0-ge5c5595adb06 #1-Torizon SMP PREEMPT Mon Jan  5 09:23:13 UTC 2026
Kernel command line:      root=LABEL=otaroot rootfstype=ext4 quiet logo.nologo vt.global_cursor_default=0 plymouth.ignore-serial-consoles splash fbcon=map:3 ostree=/ostree/boot.1/torizon/dedc4ecb7b359c6071ea85e88671bf232fece660ca021c1f319506232a75474f/0
Distro name:              NAME="Torizon OS"
Distro version:           VERSION_ID=7.5.0-build.30
Distro variant:           VARIANT="Docker"
Hostname:                 verdin-imx8mp-15603379
------------------------------------------------------------

Hardware info
------------------------------------------------------------
HW model:                 Toradex Verdin iMX8M Plus WB on Mallow Board
Toradex version:          0064 V1.1A
Serial number:            15603379
Processor arch:           aarch64
------------------------------------------------------------

and this is my tcbuild.yaml

---
input:
  easy-installer:
    remote: https://tezi.toradex.com/artifactory/torizoncore-oe-prod-frankfurt/scarthgap-7.x.y/release/30/verdin-imx8mp/torizon/torizon-docker/oedeploy/torizon-docker-verdin-imx8mp-Tezi_7.5.0+build.30.tar
customization:
  device-tree:
    include-dirs:
      - linux-toradex/include
      - device-trees/overlays
    custom: linux-toradex/arch/arm64/boot/dts/freescale/imx8mp-verdin-wifi-mallow.dts
    overlays:
      add:
        - device-trees/overlays/verdin-imx8mp_panel-touch-10inch-lvds_overlay.dts
output:
  easy-installer:
    name: demo_0.1.0
    local: torizon-image
    accept-licence: true
    autoinstall: true
    bundle:
      compose-file: containers/docker-compose.yml

and this is my dts overlay file

/* Verdin I2C channel 1 */
&i2c2 {
	// Pin 44 (SAI3_TXFS, GPIO4_IO31) > INT_TOUCH#
        // Pin 48 (SAI3_RXD, GPIO4_IO30) > RST_TOUCH#

	status = "okay";
	ilitek@41 {
		compatible = "tchip,ilitek_ts";
		reg = <0x41>;

		interrupt-parent = <&gpio4>;
		interrupts = <31 IRQ_TYPE_EDGE_FALLING>;

		ilitek,irq-gpio = <&gpio4 31 IRQ_TYPE_EDGE_FALLING>;
		ilitek,reset-gpio = <&gpio4 30 GPIO_ACTIVE_LOW>;
		ilitek,vbus = "vcc_i2c";
		ilitek,vdd = "vdd";
		ilitek,name = "ilitek_i2c";

		pinctrl-names = "default";
		pinctrl-0 = <&pinctrl_i2s_2_d_in_gpio>,
			<&pinctrl_i2s_2_sync_gpio>; 
	};
};

In this configuration of mine, the Ilitek touch does not work. Where i wrong?

Thanks for the support

Fabio

Hi, I’m the Toradex AI Assistant.

I might make mistakes or occasionally get you wrong. Our support team will step in if needed.


Hello Fabio,

Thank you for providing detailed information about your setup. I can see you’re working with Torizon OS 7.5.0 on a Verdin iMX8M Plus with a custom device tree overlay for an Ilitek touch controller.

Potential Issues in Your Configuration

Looking at your device tree overlay, there are several areas that might need adjustment:

1. Compatible String

Your overlay uses compatible = "tchip,ilitek_ts"; but the actual kernel driver might expect a different compatible string. You’ll need to check what compatible strings the ilitek_ts driver supports in the kernel source.

2. Property Names

The property names in your overlay may not match what the driver expects. Different Ilitek drivers use different property naming conventions.

3. Kernel Module Availability

Even though the ilitek_ts driver exists in the kernel source, it might not be compiled as a module or built into the kernel in your Torizon OS image.

Using TorizonCore Builder for Kernel Modules

TorizonCore Builder supports building external kernel modules(1). If the ilitek_ts driver isn’t available in your current kernel configuration, you can build it as an external module using TorizonCore Builder’s kernel module support(1).

Your tcbuild.yaml configuration file structure looks correct for device tree customization(2). You can extend it to include kernel modules if needed:

customization:
  kernel:
    modules:
      - source-dir: "path-to-ilitek-module-source"
  device-tree:
    # your existing device tree configuration

(1)

Debugging Steps

  1. Check if the driver is loaded: After booting your custom image, verify if the ilitek_ts module is available:

    lsmod | grep ilitek
    
  2. Check device tree compilation: Ensure your overlay compiles without errors during the TorizonCore Builder build process(3).

  3. Verify GPIO configuration: Confirm that GPIO4_30 and GPIO4_31 are correctly configured and available for your touch controller.

  4. Check I2C communication: Verify that the device appears on the I2C bus:

    i2cdetect -y 1
    

Alternative Approach

You might want to examine existing touch controller overlays in the Toradex device tree repository for reference(4). Toradex provides device tree overlays for various touch displays that could serve as templates for your Ilitek implementation(4).

To get the correct device tree source files and overlays, you should clone the appropriate repositories for your Torizon OS version(3).

I recommend checking the kernel configuration and driver documentation to ensure you’re using the correct compatible string and properties for the ilitek_ts driver.

Best regards,
Toradex AI Assistant.


Did you like my answer? :+1: :-1:

If I answered your question, please tick the “Solution” checkbox.

For follow-up questions to me, please use @ToradexAI in your post.

Hi support,

i run i2cdetect -y 1 and this the result:

torizon@verdin-imx8mp-15603379:~$ i2cdetect -y 1
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: – – – – – – – –
10: – – – – – – – – – – – – – – – –
20: – – – – – – – – – – – – – – – –
30: – – – – – – – – – – – – – – – –
40: – UU – – – – – – – – – – – – – –
50: – – – – – – – – – – – – – – – –
60: – – – – – – – – – – – – – – – –
70: – – – – – – – –
My goal is to load ili251x driver that i found in kernel source driver → input → touchscreen → ili210x.c

toradex@toradex-VirtualBox:~/projects/linux-toradex/drivers/input/touchscreen$ cat ili210x.c | grep compatible
	{ .compatible = "ilitek,ili210x", .data = &ili210x_chip },
	{ .compatible = "ilitek,ili2117", .data = &ili211x_chip },
	{ .compatible = "ilitek,ili2120", .data = &ili212x_chip },
	{ .compatible = "ilitek,ili251x", .data = &ili251x_chip },

In my dts file i wrote this configuration:

/* Verdin I2C channel 1 */
&i2c2 {
        // Pin 44 (SAI3_TXFS, GPIO4_IO31) > INT_TOUCH#
        // Pin 48 (SAI3_RXD, GPIO4_IO30) > RST_TOUCH#

        status = "okay";
        ilitek@41 {
                compatible = "ilitek,ili251x";
                reg = <0x41>;

                interrupt-parent = <&gpio4>;
                interrupts = <31 IRQ_TYPE_EDGE_FALLING>;

                ilitek,irq-gpio = <&gpio4 31 IRQ_TYPE_EDGE_FALLING>;
                ilitek,reset-gpio = <&gpio4 30 GPIO_ACTIVE_LOW>;
                ilitek,vbus = "vcc_i2c";
                ilitek,vdd = "vdd";
                ilitek,name = "ilitek_i2c";

                pinctrl-names = "default";
                pinctrl-0 = <&pinctrl_i2s_2_d_in_gpio>,
                        <&pinctrl_i2s_2_sync_gpio>;
        };
};

but when i run lsmod | grep ili i have this result:

torizon@verdin-imx8mp-15603379:~$ lsmod | grep ili
ili210x                24576  0
crc_ccitt              12288  1 ili210x

Thanks for the help

Fabio

Hello Fabio,

Great progress! I can see that the ili210x driver is successfully loaded, and your I2C device is being detected at address 0x41 (showing as “UU” in the i2cdetect output, which indicates the address is in use by a kernel driver).

Analysis of Your Current Setup

Your device tree configuration looks much better now with the correct compatible string "ilitek,ili251x". The fact that the ili210x module is loaded and your device shows as “UU” at address 0x41 indicates that the driver is attempting to bind to your device.

Potential Issues to Check

1. Device Tree Property Names

The ili210x.c driver may not recognize all the custom properties you’re using. Looking at typical I2C touch controller configurations, you should focus on the standard properties that the driver expects(1).

2. GPIO Configuration

Verify that your GPIO pins are correctly configured. The pinctrl references in your overlay should match the actual pin functions you need(2).

3. Power Supply Configuration

The properties ilitek,vbus = "vcc_i2c" and ilitek,vdd = "vdd" may not be recognized by the driver. Check if these power supplies exist in your system.

Debugging Steps

1. Check Driver Binding

Verify if the driver successfully bound to your device:

dmesg | grep ili

2. Check Input Devices

Look for input devices created by the touch controller:

ls /dev/input/
cat /proc/bus/input/devices

3. Verify Device Tree Application

Ensure your overlay was properly applied during the TorizonCore Builder process(2).

Simplified Device Tree Configuration

Try simplifying your device tree overlay to use only the essential properties that the ili210x driver expects:

/* Verdin I2C channel 1 */
&i2c2 {
    status = "okay";
    ilitek@41 {
        compatible = "ilitek,ili251x";
        reg = <0x41>;
        
        interrupt-parent = <&gpio4>;
        interrupts = <31 IRQ_TYPE_EDGE_FALLING>;
        
        reset-gpios = <&gpio4 30 GPIO_ACTIVE_LOW>;
        
        pinctrl-names = "default";
        pinctrl-0 = <&pinctrl_i2s_2_d_in_gpio>,
                   <&pinctrl_i2s_2_sync_gpio>;
    };
};

The key changes:

  • Removed custom ilitek,* properties that may not be supported
  • Used standard reset-gpios instead of ilitek,reset-gpio
  • Simplified the interrupt configuration

Using TorizonCore Builder for Kernel Drivers

Since you’re working with an existing kernel driver, TorizonCore Builder should handle the module loading automatically when the device tree overlay is applied(3). The fact that the module is loaded suggests this is working correctly.

If you continue to have issues, you might need to check the kernel configuration to ensure the ili210x driver is compiled with support for the ili251x variant, or consider building it as an external module if modifications are needed(3).

Best regards,
Toradex AI Assistant.


Did you like my answer? :+1: :-1:

If I answered your question, please tick the “Solution” checkbox.

For follow-up questions to me, please use @ToradexAI in your post.

Hi support,

i’am using verdin imx8mp with carrier board mallow and display 10’’ with touch display ilitek2511. This is the command result:

torizon@verdin-imx8mp-15603379:~$ ls /dev/input/
by-path  event0  event1  event2  touchscreen0
torizon@verdin-imx8mp-15603379:~$ cat /proc/bus/input/devices
I: Bus=0019 Vendor=0000 Product=0000 Version=0000
N: Name="30370000.snvs:snvs-powerkey"
P: Phys=snvs-pwrkey/input0
S: Sysfs=/devices/platform/soc@0/30000000.bus/30370000.snvs/30370000.snvs:snvs-powerkey/input/input0
U: Uniq=
H: Handlers=kbd event0
B: PROP=0
B: EV=3
B: KEY=10000000000000 0

I: Bus=0019 Vendor=0001 Product=0001 Version=0100
N: Name="gpio-keys"
P: Phys=gpio-keys/input0
S: Sysfs=/devices/platform/gpio-keys/input/input1
U: Uniq=
H: Handlers=kbd event1
B: PROP=0
B: EV=3
B: KEY=8000 0 0

I: Bus=0018 Vendor=0000 Product=0000 Version=0000
N: Name="ILI210x Touchscreen"
P: Phys=
S: Sysfs=/devices/platform/soc@0/30800000.bus/30a30000.i2c/i2c-1/1-0041/input/input2
U: Uniq=
H: Handlers=event2
B: PROP=2
B: EV=b
B: KEY=400 0 0 0 0 0
B: ABS=660800001000003

Dear @fmolon,

Thank you for bringing up the hurdle you faced.
I saw that the last reply from the AI was marked as the solution. Were you able to make it work?

Best regards,
Collin