Parallel RGB with Custom Display Adapter Board <Colibri>

Hello!

I am working on integrating the parallel RGB interface of a Colibri-IMX8DX module with a custom display adapter that was previously developed for a T30 module. Here is my system summary:

I know a custom device tree overlay is required and have used the example in Setting up Displays with Torizon | Toradex Developer Center as a baseline. I’ve also successfully used the supported Capacitive Touch Display - 7 inch with its display adapter and referenced the device tree overlay provided for it. I’ve come up with the following .dts and .dtsi files:

colibri-imx8x_panel-cap-touch-5inch_overlay.dts

colibri-imx8x_parallel-rgb24_overlay.dtsi

display-nhd50800480tf_overlay.dtsi

I used the following tables from the display data sheet to come up with the display timings listed in display-nhd50800480tf_overlay.dtsi:


I’ve tried using typical values from the data sheet as well and get the same result. I also read on another post setting pixelclk-active to 0 may fix some issues. I’ve kept it at 1 as wll, like in the provided overlay for the 7-inch screen. I could not find any information on where this value comes from, though.

I can compile and push a new image to the module successfully with these overlays however I’m getting some interesting results. If I power cycle the system with my new image, the screen turns white for a few seconds and then goes to black. If I push an application, there is no display output. As shown in the images below, If I reboot the system, I can see the splash screen (kind of) but obviously there is something very off. Still, the output ends up being black



I’m wondering what I have missed, Have I used the correct display timing values? I’m not really sure where to go from here. Any help would be kindly appreciated!

Hi, I’m the Toradex AI Assistant. The Toradex Support team will follow up with you shortly!

Did you like my answer?

:+1: :-1:


Hello,

For the Colibri iMX8X, the parallel RGB LCD interface supports the following specifications:

  • Up to 720p60 (720 x 1280 @ 60 Hz)
  • Up to 24-bit color (18-bit recommended)
  • Maximum pixel clock of 85MHz (source).

To address your issue, please consider the following key points:

  1. Base Device Tree Structure:
    Ensure your overlay follows this basic structure from the example:

    // Enable the parallel RGB interface on Colibri iMX8X  
    
    /dts-v1/;  
    /plugin/;  
    / {  
        compatible = "toradex,colibri-imx8x";  
    };  
    
    &adma_pwm {  
            status = "okay";  
    };  
    
    &backlight {  
            status = "okay";  
    };  
    
    &display_lcdif {  
            status = "okay";  
    };  
    
    &panel_dpi {
            status = "okay";  
    };  
    

    (source)

  2. Verification Steps:

    • Ensure the base device tree includes all required nodes before applying the overlay.
    • Confirm that your overlay is compatible with your kernel version.
    • Verify that the overlay is correctly listed in the /boot/overlays.txt file.
      (source)
  3. Kernel Consideration:
    Recent community feedback suggests that using the downstream kernel instead of linux-toradex-upstream may resolve overlay application issues on the Colibri iMX8X. You can find more details in the community discussion (source).

If you need further assistance on any of these points, feel free to ask!

Best regards,
Toradex AI Assistant.

Please note that the RGB interfaces of the Colibri T30 and Colibri iMX8X are not compatible in 24-bit mode.:

I’m not familiar with the specifics of your adapter, but you will likely need a different one to resolve this issue

@alex.tx I missed this piece of information, so thank you. I will look into setting up the screen to run in 18-bit mode, if possible, to see if I get correct output.

After looking into it more, the display adapter being used ties the LSB bits of each color to ground so that it effectively operates in 18-bit mode. I re-compiled using 18-bit data-mapping for the RGB parallel interface and get a very similar result. The only difference is that the images seem just a bit clearer. Any other suggestions? Thank you again for your time.

It looks like some kind of hardware issue to me.
Please share the details of your carrier board, the adapter schematic, how it is connected to the carrier board, and the display datasheet

Apologies for the late reply. Getting the screen to work was just a part of the integration effort. I also need to get touch configured as the touch signals are fed through the 40-pin extension connector (x16). I’ve had this connected the whole time while just trying to get the screen to work as I was planning on tackling this next. I didn’t realize the Backlight Enable was also being fed through the x16 connector as well via pin 20. This is more than likely the reason for the behavior I’m seeing. My question now is, where do I configure this? Should it be written in the &backlight node in the colibri-imx8x_parallel-rgb24_overlay.dtsi or somewhere else?

Could you please clarify which X16 connector you are referring to?
Also, please share details about your carrier board, the adapter schematic, and how it is connected to the carrier board.

I am using the Iris carrier board V2.0B. The X16 connector I am referring to is from section 3.9.3, on page 27 of the Iris Carrier Board Datasheet. Can I send you the adapter schematic privately? There are 2 connections between the display adapter and the Iris Carrier Board.

  1. Iris Unified Interface Display Connector (X3) to Display Adapter (X6)
  2. Iris Extension Connector (X16) to Display Adapter (J2)

On the Iris board, X16 pin 20 is connected to SODIMM_45, which is not the default pin for backlight control.
In our design, we use SODIMM_71 to enable the backlight and PWM_A (SODIMM_59) to control its brightness.
You can share your schematic privately by sending it to support.us@toradex.com. Please include link to this tread in your e-mail.

I am still waiting on confirmation from my company if I am able to send the adapter schematic. In the meantime, I’ve been able to get the display to work although I think I may have the bit configuration of the backlight enable pin incorrect because the screen still behaves as it did until the splash screen is shown, at which point I have proper output on the screen. This is how I got it to work:

#include "dt-bindings/pinctrl/pads-imx8qxp.h"

// Enable the parallel RGB interface on the Colibri iMX8X.
&{/} {
        panel_dpi: panel-dpi {
            status = "okay";
            compatible = "panel-dpi";
            backlight = <&backlight>;
            data-mapping = "bgr666";
            power-supply = <&reg_module_3v3>;

            port {
                    lcd_panel_in: endpoint {
                            remote-endpoint = <&adma_lcdif_out>;
                    };
            };
      };
};

&adma_lcdif {
    status = "okay";
    #address-cells = <1>;
    #size-cells = <0>;

    port@0 {
            reg = <0>;

            adma_lcdif_out: endpoint {
                    remote-endpoint = <&lcd_panel_in>;
            };
      };
};

&adma_pwm {
    status = "okay";
};

&adma_pwm_lpcg {
    status = "okay";
};

&backlight {
    status = "okay";
};

&colibri_gpio_keys {
    status = "disabled";
};

/* Colibri LCD Back-Light GPIO change to SODIMM 45 instead of 71 */
&pinctrl_gpio_bl_on {
    gpioblongrp {
            fsl,pins = <IMX8QXP_QSPI0A_DATA1_LSIO_GPIO3_IO10             0x60>;
    };
};

I am now facing an issue with the touch controller. The capacitive touch pins of our display adapter match those of the atmel touch adapter but uses a Focaltech driver, which the Toradex Linux directory has a driver for. I also know the address is 0x38. My problem is that the driver does not show up when using lsmod after the new image has been pushed. Here is the device tree overlay I am using. I used Focaltech’s example here: FT5X26-Focaltech-Drivers/FT5426_Linux_Driver/docs/focaltech-ts.txt at master · NewhavenDisplay/FT5X26-Focaltech-Drivers · GitHub

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

&i2c1 {
    #address-cells = <1>;
    #size-cells = <0>;
    status = "okay";

    /* Focaltech touch driver */
    focaltech_ts: touchscreen@38 {
            compatible = "focaltech,fts";
            reg = <0x38>;
            interrupt-parent = <&lsio_gpio0>;
            interrupts = <21 IRQ_TYPE_EDGE_FALLING>;
            pinctrl-names = "default";
            pinctrl-0 = <&pinctrl_atmel_adap>
            status = "okay";
            focaltech,reset-gpio = <&lsio_gpio0 22 GPIO_ACTIVE_LOW>;
            focaltech,irq-gpio = <&lsio_gpio0 21 GPIO_SINGLE_ENDED>;
            focaltech,num-max-touches = <5>;
            focaltech,display-coords = <0 0 480 800>;
    };
};

 &lsio_pwm0 {
    status = "disabled";
};

&lsio_pwm1 {
    status = "disabled";
};

Hi Alex, I’ve tracked down what I think is the solution. There is a driver in build 6.8.1-25 named edt-ft5x06, which works for that family of Focaltech IC’s, and is enabled in the kernel. The screen I am working with uses a FT5426 driver, which is not compatible with the edt-ft5x06 driver. I did notice though that there are more drivers available; focaltech_core and focaltech_i2c, but they are not enabled in the kernel. Are there any builds currently with these additional focaltech drivers enabled? If not, are there plans to make them enabled anytime soon?

Thank you again for all of your time and assitance!

We do not provide such builds and currently have no plans to do so. However, you are free to build your own custom kernel and include any drivers you require.

Thank you for getting back to me. I’ve gotten the screen to show output and was able to get the touch driver working. However, the output seems to be missing the MSB bit of just the blue channel. For instance, the RGB color (224, 224, 224) is showing as a shade of yellow instead of gray. If you remove the MSB of blue, you get RGB (224, 224, 112), which is indeed the color I’m seeing on the screen. The display adapter board I am using has the following connector for the unified display connector


ter:

Connections look correct to me and I’m not sure if I should look at hardware or software on this one. Thank you in advance.

Please double-check whether the LCD_BLUE_5 line on your adapter or display cable is damaged or disconnected

I double checked the cable and adapter. I measured continuity all the way through and even tried a different cable. I could not find any issues on the adapter or cable.

I cannot explain the MSB issue you reported other than as some form of connectivity problem.

I ended up with a different Device tree overlay for the touch driver but do you see anything wrong with the parallel RGB interface overlay?

I should also report that fbset reports no timing information, is that an indication that the overlay is not working correctly?

mode "800x480-0"
        # D: 0.000 MHz, H: 0.000 kHz, V: 0.000 Hz
        geometry 800 480 800 480 32
        timings 0 0 0 0 0 0 0
        accel true
        rgba 8/16,8/8,8/0,0/0
endmode