Riverdi Touch USB

Hello,

I recently picked up a Riverdi RGB display similar to the Toradex 7” capacitive touch hardware. I am in the midst of creating interface hardware and device tree overlays for this screen, but I came across an issue with the touch driver.

The ILI2132 is used on this device to interface the touchscreen to the module. It appears there are two interfaces available–I2C and USB.

The I2C driver is available from the linux-toradex repo and would be preferable in my application. That being said, I’m using a Colibri iMX8QXP, which only has one I2C port on the SODIMM connection. There is another I2C line which interfaces with the onboard touch controller, but I am unsure if I can use those for this application as there are other devices on the same line. I suppose as long as there is no interference in the addresses, I should be able to just disable the other devices on the same line within the device tree and add my own. There are two onboard I2C lines which go to MIPI DSI/CSI (See page 24) that are available on the SODIMM connector.

In addition to I2C, the screen has a USB interface. Riverdi claims this should be universally workable, but I plugged it in and got the following message:

[ 1411.503382] usb 2-1.2: new low-speed USB device number 4 using xhci-hcd     
[ 1411.591407] usb 2-1.2: device no response, device descriptor read/64, error -32            
[ 1411.783426] usb 2-1.2: device no response, device descriptor read/64, error -32         
[ 1411.975373] usb 2-1.2: new low-speed USB device number 5 using xhci-hcd                           
[ 1412.063395] usb 2-1.2: device no response, device descriptor read/64, error -32                  
[ 1412.255389] usb 2-1.2: device no response, device descriptor read/64, error -32      
[ 1412.367610] usb 2-1-port2: attempt power cycle                                                    
[ 1412.975372] usb 2-1.2: new low-speed USB device number 6 using xhci-hcd                           
[ 1412.982595] usb 2-1.2: Device not responding to setup address.                                    
[ 1413.195973] usb 2-1.2: Device not responding to setup address.                                    
[ 1413.407361] usb 2-1.2: device not accepting address 6, error -71                                  
[ 1413.491391] usb 2-1.2: new low-speed USB device number 7 using xhci-hcd                                
[ 1413.498486] usb 2-1.2: Device not responding to setup address.                                    
[ 1413.711781] usb 2-1.2: Device not responding to setup address.                                    
[ 1413.923380] usb 2-1.2: device not accepting address 7, error -71                                  
[ 1413.929721] usb 2-1-port2: unable to enumerate USB device

It looks like whatever USB driver it needs is not present in my current linux build.

My questions are as follows:

  • Is there a way to mux the I2C pins which go to the existing I2C0 hardware to interface with my new device?
  • Is there a USB driver available somewhere for a touch controller like this, or will I have to make one if I want to use it?

Thank you!

Hi, I’m the Toradex AI Assistant.

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


I2C Configuration for ILI2132 Touch Controller

Based on the Toradex documentation, I can address your questions about using the ILI2132 touch controller with your Colibri iMX8QXP.

I2C Bus Options for Colibri iMX8X

According to the I2C documentation, the Colibri standard provides one I2C bus on the SODIMM pins 194/196 (1). For the Colibri iMX8X specifically, there are additional I2C buses available:

  • Colibri iMX8X has two FFC extension connectors with dedicated I2C buses, also available as alternative pin functions in the SODIMM (1)
  • Pins 15/16 of X2 have a dedicated I2C for the first LVDS/MIPI-DSI (1)
  • Pins 13/14 of X3 have a dedicated I2C for the second LVDS/MIPI-DSI (1)

Device Tree Overlay Approach

You can create a custom device tree overlay to configure the I2C interface for your ILI2132 controller. The documentation provides guidance on writing device tree overlays (2).

To use the existing I2C lines, you would need to:

  1. Disable conflicting devices: As you mentioned, you can disable other devices on the same I2C line within the device tree to avoid address conflicts (2)

  2. Create a pin group: Define the I2C pins for your specific use case (2)

  3. Enable the group: Add your custom I2C configuration to the appropriate I2C controller node (2)

Finding the Correct I2C Controller

The documentation explains how to identify the correct I2C controller using the controller address (1):

# i2cdetect -l

(1)

For Colibri iMX8X, you can use this command to see the available I2C controllers and their addresses (1).

USB Touch Controller Support

Regarding the USB interface, the error messages you’re seeing suggest that the USB touch controller driver is not present in your current kernel configuration. The Toradex documentation focuses on I2C-based touch controllers, and the capacitive touch display documentation shows examples using I2C interfaces with device tree overlays (3).

Recommendation

Based on the available documentation, I recommend proceeding with the I2C approach since:

  1. The ILI2132 I2C driver is already available in the linux-toradex repository
  2. Toradex provides comprehensive documentation and examples for I2C touch controller integration (3)
  3. You have multiple I2C options available on the Colibri iMX8X, including the dedicated MIPI DSI/CSI I2C lines (1)

You can create a device tree overlay similar to the examples shown in the capacitive touch display documentation (3), adapting it for your ILI2132 controller’s I2C address and pin requirements.

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.