Support i2c for ili2510

Hello Support,
I am experiencing an issue with the driver of an ILI2510 capacitive touchscreen.

My system is composed of:

  • Toradex Verdin iMX8MP 2GB
  • Mallow carrier board
  • Torizon OS 7.5.0

I created my custom image using Torizon Core Builder. This is the information about my system:

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/d9bdcf90247716f28a3faff414dffc034d8acc0b71267451550da27e2cb52374/0
Distro name:              NAME="Torizon OS"
Distro version:           VERSION_ID=7.5.0-build.30
Distro variant:           VARIANT="Docker"
Hostname:                 verdin-imx8mp-15603402
------------------------------------------------------------

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

This is the Device Tree Overlay (DTS) that I used to enable the ILI2510 touchscreen driver:

/* 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>;
    };
};

&iomuxc {
		/* Reset pin */
        pinctrl_i2s_2_d_in_gpio: gpio4io30grp {
                fsl,pins =
                        <MX8MP_IOMUXC_SAI3_RXD__GPIO4_IO30 0x184>; /* SODIMM 48 */
        };

		/* Interrupt pin */
        pinctrl_i2s_2_sync_gpio: gpio4io31grp {
                fsl,pins =
                        <MX8MP_IOMUXC_SAI3_TXFS__GPIO4_IO31 0x1c4>; /* SODIMM 44 */
        };

		pinctrl_i2s_2_d_out_dsi_1_bkl_en: i2s2doutdsi1bklengrp {
				fsl,pins =
					<MX8MP_IOMUXC_SAI3_TXD__GPIO5_IO01 0x184>; /* SODIMM 46 */
		};
};

The touchscreen is detected correctly. In fact, when I run i2cdetect -y 1 i get the following result:

torizon@verdin-imx8mp-15603402:~$ 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: -- -- -- -- -- -- -- --

However, when I perform a test (evtest) of the capacitive touchscreen of the LVDS display, I get the following result:

torizon@verdin-imx8mp-15603402:~$ evtest
No device specified, trying to scan all of /dev/input/event*
Not running as root, no devices may be available.
Available devices:
/dev/input/event0:      30370000.snvs:snvs-powerkey
/dev/input/event1:      gpio-keys
/dev/input/event2:      ILI210x Touchscreen

i select 2 and then i have this result:

Event: time 1775814097.970408, type 3 (EV_ABS), code 54 (ABS_MT_POSITION_Y), value 472 Event: time 1775814097.970408, type 3 (EV_ABS), code 0 (ABS_X), value 514 Event: time 1775814097.970408, type 3 (EV_ABS), code 1 (ABS_Y), value 472 Event: time 1775814097.970408, -------------- SYN_REPORT ------------ Event: time 1775814097.986023, type 3 (EV_ABS), code 53 (ABS_MT_POSITION_X), value 483 Event: time 1775814097.986023, type 3 (EV_ABS), code 54 (ABS_MT_POSITION_Y), value 464 Event: time 1775814097.986023, type 3 (EV_ABS), code 0 (ABS_X), value 483 Event: time 1775814097.986023, type 3 (EV_ABS), code 1 (ABS_Y), value 464 Event: time 1775814097.986023, -------------- SYN_REPORT ------------ Event: time 1775814098.002340, type 3 (EV_ABS), code 53 (ABS_MT_POSITION_X), value 466 Event: time 1775814098.002340, type 3 (EV_ABS), code 54 (ABS_MT_POSITION_Y), value 462 Event: time 1775814098.002340, type 3 (EV_ABS), code 0 (ABS_X), value 466 Event: time 1775814098.002340, type 3 (EV_ABS), code 1 (ABS_Y), value 462 Event: time 1775814098.002340, -------------- SYN_REPORT ------------ Event: time 1775814098.019591, type 3 (EV_ABS), code 53 (ABS_MT_POSITION_X), value 431 Event: time 1775814098.019591, type 3 (EV_ABS), code 54 (ABS_MT_POSITION_Y), value 461 Event: time 1775814098.019591, type 3 (EV_ABS), code 0 (ABS_X), value 431 Event: time 1775814098.019591, type 3 (EV_ABS), code 1 (ABS_Y), value 461 Event: time 1775814098.019591, -------------- SYN_REPORT ------------ [ 1028.774720] i2c i2c-1: <i2c_imx_read> read timedout [ 1028.779625] ili210x_i2c 1-0041: ili251x_read_reg_common failed: -110 [ 1028.786003] ili210x_i2c 1-0041: Unable to get touch data: -110 [ 1028.792330] ili210x_i2c 1-0041: ili251x_read_reg_common failed: -6 [ 1028.798536] ili210x_i2c 1-0041: Unable to get touch data: -6 [ 1028.830983] ili210x_i2c 1-0041: ili251x_read_reg_common failed: -6 [ 1028.837193] ili210x_i2c 1-0041: Unable to get touch data: -6 [ 1028.908087] ili210x_i2c 1-0041: ili251x_read_reg_common failed: -6 [ 1028.914300] ili210x_i2c 1-0041: Unable to get touch data: -6 [ 1028.984325] ili210x_i2c 1-0041: ili251x_read_reg_common failed: -6 [ 1028.990520] ili210x_i2c 1-0041: Unable to get touch data: -6 [ 1029.060530] ili210x_i2c 1-0041: ili251x_read_reg_common failed: -6 [ 1029.066737] ili210x_i2c 1-0041: Unable to get touch data: -6 [ 1029.138445] ili210x_i2c 1-0041: ili251x_read_reg_common failed: -6 [ 1029.144655] ili210x_i2c 1-0041: Unable to get touch data: -6 [ 1029.210043] ili210x_i2c 1-0041: ili251x_read_reg_common failed: -6 [ 1029.216255] ili210x_i2c 1-0041: Unable to get touch data: -6 [ 1029.286706] ili210x_i2c 1-0041: ili251x_read_reg_common failed: -6 [ 1029.292903] ili210x_i2c 1-0041: Unable to get touch data: -6 [ 1029.362638] ili210x_i2c 1-0041: ili251x_read_reg_common failed: -6 [ 1029.368856] ili210x_i2c 1-0041: Unable to get touch data: -6 [ 1029.439148] ili210x_i2c 1-0041: ili251x_read_reg_common failed: -6 [ 1029.445358] ili210x_i2c 1-0041: Unable to get touch data: -6 [ 1029.515384] ili210x_i2c 1-0041: ili251x_read_reg_common failed: -6 [ 1029.521580] ili210x_i2c 1-0041: Unable to get touch data: -6 [ 1029.591590] ili210x_i2c 1-0041: ili251x_read_reg_common failed: -6 [ 1029.597800] ili210x_i2c 1-0041: Unable to get touch data: -6 [ 1029.667798] ili210x_i2c 1-0041: ili251x_read_reg_common failed: -6 [ 1029.673993] ili210x_i2c 1-0041: Unable to get touch data: -6 [ 1029.744031] ili210x_i2c 1-0041: ili251x_read_reg_common failed: -6 [ 1029.750242] ili210x_i2c 1-0041: Unable to get touch data: -6 [ 1029.819661] ili210x_i2c 1-0041: ili251x_read_reg_common failed: -6 [ 1029.825877] ili210x_i2c 1-0041: Unable to get touch data: -6 [ 1029.896506] ili210x_i2c 1-0041: ili251x_read_reg_common failed: -6 [ 1029.902704] ili210x_i2c 1-0041: Unable to get touch data: -6 [ 1029.972712] ili210x_i2c 1-0041: ili251x_read_reg_common failed: -6 [ 1029.978925] ili210x_i2c 1-0041: Unable to get touch data: -6 [ 1030.048947] ili210x_i2c 1-0041: ili251x_read_reg_common failed: -6 [ 1030.055172] ili210x_i2c 1-0041: Unable to get touch data: -6 [ 1030.125155] ili210x_i2c 1-0041: ili251x_read_reg_common failed: -6
How can i resolve this usuee?

Hi, I’m the Toradex AI Assistant.

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


The I2C timeout errors you’re experiencing with the ILI2510 touchscreen driver indicate communication issues between the driver and the touchscreen hardware. Let me help you troubleshoot this step by step.

Analysis of the Issue

The error messages show I2C communication failures:

  • i2c_imx_read read timedout
  • ili251x_read_reg_common failed: -110 (timeout error)
  • ili251x_read_reg_common failed: -6 (device not responding)

These suggest either incorrect pin configuration or timing issues with your device tree overlay.

Troubleshooting Steps

1. Verify I2C Bus Configuration

First, confirm you’re using the correct I2C bus. For Verdin iMX8M Plus, the I2C buses are mapped as follows (1):

lrwxrwxrwx 1 root root           5 Apr 28  2022 verdin-i2c1 -> i2c-3  
lrwxrwxrwx 1 root root           5 Apr 28  2022 verdin-i2c2 -> i2c-1  
lrwxrwxrwx 1 root root           5 Apr 28  2022 verdin-i2c4 -> i2c-2  

(1)

Since you’re using &i2c2 in your overlay and i2cdetect -y 1 shows the device, this appears correct.

2. Check Pin Configuration

Review your pin assignments for the Verdin iMX8M Plus. According to the I2C documentation (1), you should verify the pin functions match your hardware connections:

  • I2C_1_SDA and I2C_1_SCL signals correspond to I2C4 bus
  • Make sure your interrupt and reset pins are correctly mapped

3. Device Tree Overlay Improvements

Consider these modifications to your overlay:

  1. Add clock frequency specification (1):
&i2c2 {
    status = "okay";
    clock-frequency = <400000>;
    
    ilitek@41 {
        compatible = "ilitek,ili251x";
        reg = <0x41>;
        // ... rest of your configuration
    };
};

(1)

  1. Verify interrupt configuration: Ensure the interrupt pin configuration matches your hardware setup.

  2. Check reset timing: The reset GPIO configuration might need adjustment for proper initialization timing.

4. Test I2C Communication

Use I2C tools to verify basic communication (1):

# docker run -it --rm -v /dev:/dev --device-cgroup-rule='c 89:* rmw' torizon/debian:${CT_TAG_DEBIAN}

(1)

Then test with i2c-tools to ensure the device responds correctly before the driver takes control.

5. Verify Overlay Application

Confirm your device tree overlay is properly applied. You can check applied overlays and ensure there are no conflicts with other peripherals (2).

Additional Considerations

  • Hardware connections: Double-check that your interrupt and reset pin connections match the SODIMM pin assignments in your overlay
  • Power supply: Ensure the touchscreen has proper power and ground connections
  • Driver compatibility: Verify that the ili251x driver is fully compatible with your specific ILI2510 variant

The fact that the device is detected on I2C but communication fails during operation suggests the overlay loads correctly but there may be timing or electrical issues with the interrupt/reset configuration.

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 used the same dts configuration and target (verdin imx8mp and carrier mallow) with driver touch ili2511 and works correctly. Now i am using this display RK156IFHD06ENP that has touch ili2510 and i have this issue.

The issue you’re experiencing suggests that the ILI2510 touchscreen controller has different communication requirements compared to the ILI2511 that was working correctly. Since you mentioned the same device tree configuration worked with ILI2511 but fails with ILI2510, this indicates the controllers have different register layouts or communication protocols.

Key Differences Between ILI2510 and ILI2511

The ILI2510 and ILI2511 are different touchscreen controllers from Ilitek, and while they may use the same Linux driver (ili251x), they can have different:

  • Register addresses and layouts
  • Initialization sequences
  • Communication timing requirements
  • Interrupt handling behavior

Troubleshooting Steps

1. Verify Driver Compatibility

First, check if the ili251x driver in your Torizon OS kernel supports the ILI2510 variant (1). You can verify this by checking the driver’s compatible strings:

# Check if the driver is loaded
lsmod | grep ili210x

2. Test Basic I2C Communication

Before the driver takes control, test raw I2C communication to verify the device responds correctly (1):

# Run a Debian container with I2C access
docker run -it --rm -v /dev:/dev --device-cgroup-rule='c 89:* rmw' torizon/debian:${CT_TAG_DEBIAN}

# Install i2c-tools and test
apt update && apt install -y i2c-tools
i2cdetect -y 1

3. Device Tree Modifications

Try these specific modifications to your device tree overlay (2):

/* Verdin I2C channel 1 */
&i2c2 {
    status = "okay";
    clock-frequency = <100000>;  /* Try slower clock first */
    
    ilitek@41 {
        compatible = "ilitek,ili251x";
        reg = <0x41>;

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

        reset-gpios = <&gpio4 30 GPIO_ACTIVE_LOW>;
        
        /* Add these properties for ILI2510 */
        touchscreen-size-x = <1920>;
        touchscreen-size-y = <1200>;
        
        pinctrl-names = "default";
        pinctrl-0 = <&pinctrl_i2s_2_d_in_gpio>,
                   <&pinctrl_i2s_2_sync_gpio>;
    };
};

4. Check Reset Timing

The ILI2510 might require different reset timing. Try adding a longer reset duration or different reset sequence in your overlay (2).

5. Alternative Compatible String

You might need to try a more specific compatible string. Check if your kernel supports:

  • "ilitek,ili2510"
  • "ilitek,ili251x"

6. Debug I2C Communication

Monitor the I2C communication to understand what’s failing:

# Enable I2C debugging
echo 1 > /sys/kernel/debug/dynamic_debug/control
echo 'module i2c_core +p' > /sys/kernel/debug/dynamic_debug/control

Display-Specific Considerations

Since you’re using the RK156IFHD06ENP display, verify that:

  1. The display’s touch controller specifications match your device tree configuration
  2. The I2C address (0x41) is correct for this specific display model
  3. The interrupt and reset pin requirements are properly configured

The timeout errors suggest the driver is trying to communicate with registers that don’t exist or respond differently on the ILI2510 compared to the ILI2511.

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 the command above and this is the result (inside docker container):

root@a620ba9dcf65:/# 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: -- -- -- -- -- -- -- --
root@a620ba9dcf65:/#

and

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

I tried new dts suggest, but doesn’t fix the issue.

Hi support,

an little update regarding this issue. This is my dts, i2c field:

&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-0 = <&pinctrl_i2s_2_d_in_gpio>, <&pinctrl_i2s_2_sync_gpio>;
    };
};

when the ili2510 driver enters an error, it continues to print the following messages to the kernel:

[ 1316.875939] ili210x_i2c 1-0041: ili251x_read_reg_common failed: -110
[ 1316.882333] ili210x_i2c 1-0041: Unable to get touch data: -110
[ 1317.090852] i2c i2c-1: <i2c_imx_write> write timedout
[ 1317.095930] ili210x_i2c 1-0041: ili251x_read_reg_common failed: -110
[ 1317.102321] ili210x_i2c 1-0041: Unable to get touch data: -110
[ 1317.310822] i2c i2c-1: <i2c_imx_write> write timedout
[ 1317.315910] ili210x_i2c 1-0041: ili251x_read_reg_common failed: -110
[ 1317.322306] ili210x_i2c 1-0041: Unable to get touch data: -110
[ 1317.530814] i2c i2c-1: <i2c_imx_write> write timedout
[ 1317.535892] ili210x_i2c 1-0041: ili251x_read_reg_common failed: -110
[ 1317.542280] ili210x_i2c 1-0041: Unable to get touch data: -110
[ 1317.750819] i2c i2c-1: <i2c_imx_write> write timedout
[ 1317.755900] ili210x_i2c 1-0041: ili251x_read_reg_common failed: -110
[ 1317.762290] ili210x_i2c 1-0041: Unable to get touch data: -110
[ 1317.970832] i2c i2c-1: <i2c_imx_write> write timedout
[ 1317.975923] ili210x_i2c 1-0041: ili251x_read_reg_common failed: -110
[ 1317.982315] ili210x_i2c 1-0041: Unable to get touch data: -110
[ 1318.190852] i2c i2c-1: <i2c_imx_write> write timedout
[ 1318.195940] ili210x_i2c 1-0041: ili251x_read_reg_common failed: -110

but if i open another shell and run i2cdetect -y 1, thetouch resposnse correctly:

root@verdin-imx8mp-15603402:/var/rootdirs/home/torizon# 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: -- -- -- -- -- -- -- --            

and

root@verdin-imx8mp-15603402:/var/rootdirs/home/torizon# cat /proc/interrupts | grep ili
166:       7673          0          0          0  gpio-mxc  31 Edge      ili251x

Dear @fmolon,

Thank you for sharing your update.
May I ask what driver/display you intend to use in your product, since debugging on an alternative display may not be as viable as trying it on the one used in the final product.

Best regards,
Collin

Hi @collin.tx,

Thanks for your reply. For my project, I am using a Verdin iMX8MP SoM (2 GB RAM) with a Mallow carrier board (hardware version 1.1v). I need to connect a 15-inch 1920×1080 display (RK156IFHD06ENP‑CT393) to my target. The display uses an ILI2510 capacitive touch controller.

Dear @fmolon,

Thank you for the information.
It might be worth a try to reduce the clock frequency:

&i2c2 {
    clock-frequency = <10000>;
    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-0 = <&pinctrl_i2s_2_d_in_gpio>, <&pinctrl_i2s_2_sync_gpio>;
    };
};

Suggestion for software change:
Maybe you could check out the DRIVE_STRENGTH and PULL_UP values in the pinmuxing of the I2C controller. This could potentially also be verified via hardware measurements.

hardware verification:
You could measure the signals. It might show any faulty signaling (eg. SDA does not reach 0V or 1.8V)
Is the VDDIO of the ILI2510 3.3V or 1.8V? It could be that the logic level is not correct. the iMX8MP requires 1.8V, whilst the ILI2510 can deal with both: https://www.szzxv.com/static/upload/file/20220330/1648627858438358.pdf

Best regards,
Collin

Hi @collin.tx,

Thank you for your reply. I will get back to you as soon as possible.

Thanks

Fabio

Hi @collin.tx,

I tried the configuration you listed, but it did not solve the problem.
My dts:

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

&iomuxc {
		/* Reset pin */
        pinctrl_i2s_2_d_in_gpio: gpio4io30grp {
                fsl,pins =
                        <MX8MP_IOMUXC_SAI3_RXD__GPIO4_IO30 0x184>; /* SODIMM 48 */
        };

		/* Interrupt pin */
        pinctrl_i2s_2_sync_gpio: gpio4io31grp {
                fsl,pins =
                        <MX8MP_IOMUXC_SAI3_TXFS__GPIO4_IO31 0x1c4>; /* SODIMM 44 */
        };

		pinctrl_i2s_2_d_out_dsi_1_bkl_en: i2s2doutdsi1bklengrp {
				fsl,pins =
					<MX8MP_IOMUXC_SAI3_TXD__GPIO5_IO01 0x184>; /* SODIMM 46 */
		};
};

Below you can find the error logs (evtest):

: time 1776263408.261340, type 1 (EV_KEY), code 330 (BTN_TOUCH), value 0
Event: time 1776263408.261340, type 3 (EV_ABS), code 24 (ABS_PRESSURE), value 0
Event: time 1776263408.261340, -------------- SYN_REPORT ------------
Event: time 1776263408.834385, type 3 (EV_ABS), code 57 (ABS_MT_TRACKING_ID), value 147
Event: time 1776263408.834385, type 3 (EV_ABS), code 53 (ABS_MT_POSITION_X), value 588
Event: time 1776263408.834385, type 3 (EV_ABS), code 54 (ABS_MT_POSITION_Y), value 11
Event: time 1776263408.834385, type 1 (EV_KEY), code 330 (BTN_TOUCH), value 1
Event: time 1776263408.834385, type 3 (EV_ABS), code 0 (ABS_X), value 588
Event: time 1776263408.834385, type 3 (EV_ABS), code 1 (ABS_Y), value 11
Event: time 1776263408.834385, type 3 (EV_ABS), code 24 (ABS_PRESSURE), value 10
Event: time 1776263408.834385, -------------- SYN_REPORT ------------
[  115.292596] i2c i2c-1: <i2c_imx_read> read timedout
[  115.297518] ili210x_i2c 1-0041: ili251x_read_reg_common failed: -110
[  115.303915] ili210x_i2c 1-0041: Unable to get touch data: -110
[  115.512565] i2c i2c-1: <i2c_imx_write> write timedout
[  115.517637] ili210x_i2c 1-0041: ili251x_read_reg_common failed: -110
[  115.524015] ili210x_i2c 1-0041: Unable to get touch data: -110
[  207.012369] i2c i2c-1: <i2c_imx_write> write timedout
[  207.017457] ili210x_i2c 1-0041: ili251x_read_reg_common failed: -110
[  207.023845] ili210x_i2c 1-0041: Unable to get touch data: -110
[  207.232381] i2c i2c-1: <i2c_imx_write> write timedout
[  207.237466] ili210x_i2c 1-0041: ili251x_read_reg_common failed: -110
[  207.243859] ili210x_i2c 1-0041: Unable to get touch data: -110
[  207.452380] i2c i2c-1: <i2c_imx_write> write timedout
[  207.457472] ili210x_i2c 1-0041: ili251x_read_reg_common failed: -110
[  207.463890] ili210x_i2c 1-0041: Unable to get touch data: -110
[  207.672383] i2c i2c-1: <i2c_imx_write> write timedout
[  207.677473] ili210x_i2c 1-0041: ili251x_read_reg_common failed: -110
[  207.683865] ili210x_i2c 1-0041: Unable to get touch data: -110
[  207.892371] i2c i2c-1: <i2c_imx_write> write timedout
[  207.897447] ili210x_i2c 1-0041: ili251x_read_reg_common failed: -110
[  207.903834] ili210x_i2c 1-0041: Unable to get touch data: -110

And when the test was executed again under the same conditions, a kernel panic occurred

: time 1776262670.618865, -------------- SYN_REPORT ------------
Event: time 1776262670.712717, type 3 (EV_ABS), code 57 (ABS_MT_TRACKING_ID), value 306
Event: time 1776262670.712717, type 3 (EV_ABS), code 53 (ABS_MT_POSITION_X), value 838
Event: time 1776262670.712717, type 3 (EV_ABS), code 54 (ABS_MT_POSITION_Y), value 71
Event: time 1776262670.712717, type 1 (EV_KEY), code 330 (BTN_TOUCH), value 1
Event: time 1776262670.712717, type 3 (EV_ABS), code 0 (ABS_X), value 838
Event: time 1776262670.712717, type 3 (EV_ABS), code 1 (ABS_Y), value 71
Event: time 1776262670.712717, type 3 (EV_ABS), code 24 (ABS_PRESSURE), value 10
Event: time 1776262670.712717, -------------- SYN_REPORT ------------
[  142.330329] i2c i2c-1: <i2c_imx_read> read timedout
[  142.335241] ili210x_i2c 1-0041: ili251x_read_reg_common failed: -110
[  142.341633] ili210x_i2c 1-0041: Unable to get touch data: -110
[  142.550032] i2c i2c-1: <i2c_imx_write> write timedout
[  142.555113] ili210x_i2c 1-0041: ili251x_read_reg_common failed: -110
[  142.561506] Unable to handle kernel paging request at virtual address 0000ffe2f5fca950
[  142.569424] Mem abort info:
[  142.572239]   ESR = 0x0000000086000004
[  142.575989]   EC = 0x21: IABT (current EL), IL = 32 bits
[  142.581309]   SET = 0, FnV = 0
[  142.584363]   EA = 0, S1PTW = 0
[  142.587502]   FSC = 0x04: level 0 translation fault
[  142.592387] [0000ffe2f5fca950] address between user and kernel address ranges
[  142.599522] Internal error: Oops: 0000000086000004 [#1] PREEMPT SMP
[  142.605790] Modules linked in: xt_conntrack xt_MASQUERADE nf_conntrack_netlink xfrm_user iptable_nat xt_addrtype iptable_filter ip_tables x_tables br_netfilter bridge stp llc onboard_usb_hub usb_conn_gpio joydev bnep dwc3 roles tpm_tis_spi tpm_tis_core tpm aes_ce_cipher ghash_ce sha2_ce sha256_arm64 sha1_ce fsl_imx8_ddr_perf phy_fsl_imx8mq_usb typec snd_soc_imx_hdmi mwifiex_sdio dwc3_imx8mp imx_sdma snd_soc_fsl_aud2htx imx_bus phy_fsl_imx8m_pcie mwifiex hci_uart btqca btbcm btintel ti_ads1015 industrialio_triggered_buffer kfifo_buf industrialio cfg80211 lm75 ili210x crc_ccitt fsl_jr_uio flexcan spi_imx can_dev imx8mm_thermal nvmem_snvs_lpgpr uio_pdrv_genirq uio openvswitch nsh nf_conncount nf_nat libcomposite galcore(O) fuse nfnetlink lontium_lt8912b ti_sn65dsi83 sec_mipi_dsim_imx display_connector sec_dsim irq_imx_irqsteer phy_fsl_imx8mp_lvds imx8mp_ldb fsl_imx_ldb
[  142.682651] CPU: 0 PID: 619 Comm: irq/166-ili251x Tainted: G           O       6.6.119-7.5.0-ge5c5595adb06 #1-Torizon
[  142.693260] Hardware name: Toradex Verdin iMX8M Plus WB on Mallow Board (DT)
[  142.700307] pstate: 60000005 (nZCv daif -PAN -UAO -TCO -DIT -SSBS BTYPE=--)
[  142.707270] pc : 0xffe2f5fca950
[  142.710416] lr : 0xff00ffe2f5fca950
[  142.713904] sp : ffffffc09280bd00
[  142.717218] x29: ffffffc09280bd60 x28: 0000000000e4e1c0 x27: ffffff8001b1dc00
[  142.724359] x26: ffffffe2f5ff19f8 x25: ffffff80014f7298 x24: 0000002123fe7b9f
[  142.731499] x23: ffffff8000afec00 x22: ffffff80014f7280 x21: ffffff8004f5ae80
[  142.738640] x20: ffffff8000afec00 x19: ffffff8001c1b080 x18: 0000000000000006
[  142.745780] x17: 000000040044ffff x16: ffffffe3422737c8 x15: ffffffc09280b630
[  142.752921] x14: 0000000000000000 x13: ffffffe343422bb0 x12: 0000000000000636
[  142.760061] x11: 0000000000000212 x10: ffffffe3434d2bb0 x9 : ffffffe343422bb0
[  142.767202] x8 : 00000000ffffdfff x7 : ffffffe3434d2bb0 x6 : 80000000ffffe000
[  142.774343] x5 : 0000000000000000 x4 : 0000000000000000 x3 : 0000000000000000
[  142.781482] x2 : 0000000000000000 x1 : 0000000000000000 x0 : 00000000ffffff92
[  142.788623] Call trace:
[  142.791071]  0xffe2f5fca950
[  142.793866]  irq_thread_fn+0x2c/0xa8
[  142.797450]  irq_thread+0x160/0x248
[  142.800939]  kthread+0x110/0x114
[  142.804170]  ret_from_fork+0x10/0x20
[  142.807755] Code: ???????? ???????? ???????? ???????? (????????)
[  142.813851] ---[ end trace 0000000000000000 ]---
[  142.818467] Kernel panic - not syncing: Oops: Fatal exception
[  142.824212] SMP: stopping secondary CPUs
[  142.828442] Kernel Offset: 0x22c1a00000 from 0xffffffc080000000
[  142.834360] PHYS_OFFSET: 0x40000000
[  142.837849] CPU features: 0x0,00000001,00020000,1000420b
[  142.843161] Memory Limit: none
[  142.846216] Rebooting in 5 seconds..

I measured the voltages on the SDA and SCL pins at idle and measured 3.24 V. At the moment when the error occurs, the SDA pin measures 0 V. If i disconnect the touch controller from connector X13, the SDA pin returns to 3.3 V.

Thanks for the support

Fabio

Dear @collin.tx,

a little update. This is my env:

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/4a69eee52f1b31cbdf3405b6a12eb9fc19447f645a49c4c46dac6edd6160606e/0
Distro name:              NAME="Torizon OS"
Distro version:           VERSION_ID=7.5.0-build.30
Distro variant:           VARIANT="Docker"
Hostname:                 verdin-imx8mp-15603402
------------------------------------------------------------

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

When the issue occurred, I tried to perform the following test. I ran the evtest command and continuously pressed the touchscreen. When the issue occurred:

Event: time 1776334628.986696, type 3 (EV_ABS), code 24 (ABS_PRESSURE), value 10
Event: time 1776334628.986696, -------------- SYN_REPORT ------------
Event: time 1776334629.053516, type 3 (EV_ABS), code 57 (ABS_MT_TRACKING_ID), value -1
Event: time 1776334629.053516, type 1 (EV_KEY), code 330 (BTN_TOUCH), value 0
Event: time 1776334629.053516, type 3 (EV_ABS), code 24 (ABS_PRESSURE), value 0
Event: time 1776334629.053516, -------------- SYN_REPORT ------------
[  846.345856] i2c i2c-1: <i2c_imx_read> read timedout
[  846.350761] ili210x_i2c 1-0041: ili251x_read_reg_common failed: -110
[  846.357141] ili210x_i2c 1-0041: Unable to get touch data: -110
[  846.363200] ili210x_i2c 1-0041: ili251x_read_reg_common failed: -6
[  846.369406] ili210x_i2c 1-0041: Unable to get touch data: -6
[  846.428911] ili210x_i2c 1-0041: ili251x_read_reg_common failed: -6
[  846.435105] ili210x_i2c 1-0041: Unable to get touch data: -6
[  846.505102] ili210x_i2c 1-0041: ili251x_read_reg_common failed: -6
[  846.511310] ili210x_i2c 1-0041: Unable to get touch data: -6
[  846.581319] ili210x_i2c 1-0041: ili251x_read_reg_common failed: -6
[  846.587525] ili210x_i2c 1-0041: Unable to get touch data: -6
[  846.657539] ili210x_i2c 1-0041: ili251x_read_reg_common failed: -6
[  846.663741] ili210x_i2c 1-0041: Unable to get touch data: -6
[  846.733786] ili210x_i2c 1-0041: ili251x_read_reg_common failed: -6
[  846.740019] ili210x_i2c 1-0041: Unable to get touch data: -6
[  846.809991] ili210x_i2c 1-0041: ili251x_read_reg_common failed: -6
[  846.816209] ili210x_i2c 1-0041: Unable to get touch data: -6

I performed a manual reset using the following commands

echo 126 > /sys/class/gpio/export
root@verdin-imx8mp-15603402:/var/rootdirs/home/torizon# echo out > /sys/class/gpio/gpio126/direction
root@verdin-imx8mp-15603402:/var/rootdirs/home/torizon# echo 1 > /sys/class/gpio/gpio126/value
root@verdin-imx8mp-15603402:/var/rootdirs/home/torizon# echo 0 > /sys/class/gpio/gpio126/value
root@verdin-imx8mp-15603402:/var/rootdirs/home/torizon# echo 1 > /sys/class/gpio/gpio126/value

After this manual reset, the ili2510 chip return up and running.

Thanks

Fabio

Hi support,

any suggestion or fix for resolve this issue?

Thanks

Fabio

Dear @fmolon,

Just to be certain, you are using LVDS I2C ( I2C_LVDS_CTI_SDA, I2C_LVDS_CTI_SCL), correct? In that case there is a level- shifter for 3.3V. Should you use another I2C, the 3.3V would be disruptive.
VDDIO at the display should be 3.3V. (https://www.szzxv.com/static/upload/file/20220330/1648627858438358.pdf)
Would you be able to measure that?

It appears, as if the touch controller is blocking the bus, which leads to SDA at 0V. This might happen, when the controller hangs itself or shuts down. Potentially the display manufaturer might have some further information on this or they might be able to hand you a newer firmware.

Best regards,
Collin