Riverdi ILI2132A Touch Screen Driver on Colibri-IMX8QXP & Iris 2.0

Hi,

We have an Custom 7 Inch LVDS Display from Riverdi, The Touch Screen use ilitek ILI2132A controller. We are using Colibri-IMX8QXP with Iris 2.0 Carrier board.

Toradex BSP 6
Linux kernel 5.15
Colibri-IMX8QXP
Iris 2.0 Carrier board

The Capacitive Touch is connected to the X5 of Iris 2.0 (Same as Toradex 10.1 Capacitive to Iris 2.0 touch connection)

As I can see from Iris 2.0 DataSheet. Capacitive Connector X5 is Wired to:

Pin          SignalName              SODIMM Pin
1               I2C_SDA                           194                 
2               I2C_SCL                           196                  
3               GND PWR
4               TOUCH_INT#             SODIMM_107
5               TOUCH_RESET#       SODIMM_106

I found the device tree (“imx8x-colibri.dtsi”) set up the Toradex 10.1 Capactive Screen

/* Colibri I2C */
&i2c1 {
	#address-cells = <1>;
	#size-cells = <0>;
	clock-frequency = <100000>;
	pinctrl-names = "default";
	pinctrl-0 = <&pinctrl_i2c1>;

	/* Atmel maxtouch controller */
	atmel_mxt_ts: touchscreen@4a {
		compatible = "atmel,maxtouch";
		reg = <0x4a>;
		pinctrl-names = "default";
		pinctrl-0 = <&pinctrl_atmel_conn>;
		interrupt-parent = <&lsio_gpio3>;
		interrupts = <20 IRQ_TYPE_EDGE_FALLING>;		/* SODIMM 107 */
		reset-gpios = <&lsio_gpio3 24 GPIO_ACTIVE_LOW>;		/* SODIMM 106 */
		status = "disabled";
	};
};

So I have added the device_tree_overlay to for my Riverdi Screen ILI2132A Touch controller like this

&i2c1 {

    status = "okay";
    
    //ilitek touch controller//
    touchscreen@41 {
        compatible = "ilitek,ili213x";
        reg = <0x41>;
	pinctrl-names = "default";
	pinctrl-0 = <&pinctrl_atmel_conn>;   
	interrupt-parent = <&lsio_gpio3>;
	interrupts = <20 IRQ_TYPE_EDGE_FALLING>;		/* SODIMM 107 */
	reset-gpios = <&lsio_gpio3 24 GPIO_ACTIVE_LOW>;		/* SODIMM 106 */
        status = "okay";
    };
    
};

I can see there’s an driver using menuconfig

       <M>   Ilitek I2C 213X/23XX/25XX/Lego Series Touch ICs 

However after building the image(tdx-reference-multimedia-image), The Touch doesnt work.
When i type in i2cdetect -y 1, I can i see 41,

Using lsmod does not show the driver (ilitek_ts_i2c), I can however manual enable ilitek_ts_i2c using 'modprobe ilitek_ts_i2c' but no touch is working.

dmesg | grep i2c doesn’s show any sign of driver load during boot.

evtest does not list any touchscreen.

Can i get some guide and help here?

Thanks,
Fan

Hey @Fan,

The Colibri IMX8X doesn’t have a native LVDS interface. The LVDS signal on the Iris is via RGB to LVDS transmitter. So you’ll need to enable the parallel RGB interface on the Colibri and the LVDS transceiver on the Iris V2.0. There is also the relevant panel dpi information.

Here is the device tree overlay for our 10.1 LVDSand the Colibri Imx8X.

The three #includes have the relevant information.

#include "colibri-imx8x_atmel-mxt-connector_overlay.dtsi"
#include "colibri-imx8x_parallel-rgb-lvds_overlay.dtsi"
#include "display-dpi-lt170410_overlay.dtsi"

-Eric

Hi @eric.tx

The LVDS Display works fine after applying my device tree overlay , however i can not get the touch to work at all.

#include <dt-bindings/gpio/gpio.h>
#include <dt-bindings/interrupt-controller/irq.h>

#include "colibri-imx8x_parallel-rgb-lvds_overlay.dtsi"
#include "riverdi-7inch_overlay.dtsi"

/dts-v1/;
/plugin/;

/ {
	model = "Toradex Colibri iMX8QXP on Colibri Iris V2 Board";
	compatible = "toradex,colibri-imx8x-iris-v2",
		     "toradex,colibri-imx8x",
		     "fsl,imx8qxp";
};

&i2c1 {

    status = "okay";
    
    //ilitek touch controller//
    touchscreen@41 {
        compatible = "ilitek,ili213x";
        reg = <0x41>;
	pinctrl-names = "default";
	pinctrl-0 = <&pinctrl_atmel_conn>;
	interrupt-parent = <&lsio_gpio3>;
	interrupts = <20 IRQ_TYPE_EDGE_FALLING>;		/* SODIMM 107 */
	reset-gpios = <&lsio_gpio3 24 GPIO_ACTIVE_LOW>;		/* SODIMM 106 */
        status = "okay";
    };
    
};

Thanks,
Fan

Hey @Fan,

For clarity. The display is working as a display. But there is no registered input device via evtest. And this is true even after you modprobe the driver? Even with a plug disconnect/reconnect?

Also your tab/spacing on the device tree overlay may be effecting the lack of driver input. Can you adjust this and see if the driver becomes available?

-Eric

Update

I changed the device tree overlay to the following and I have a working touchscreen! :grinning::

&i2c1 {

    status = "okay";
    
    /*ilitek touch controller*/
    ilitek_ts_i2c: touchscreen@41 {
        compatible = "ilitek,ili2132";
        reg = <0x41>;
		pinctrl-names = "default";
		pinctrl-0 = <&pinctrl_atmel_conn>;
		interrupt-parent = <&lsio_gpio3>;
		interrupts = <20 IRQ_TYPE_EDGE_FALLING>;		/* SODIMM 107 */
		reset-gpios = <&lsio_gpio3 24 GPIO_ACTIVE_LOW>;		/* SODIMM 106 */
        status = "okay";
    };
    
};