top of page
  • Linkedin

Embedded User Interface

Public·4 members

Integrating an ILI9881C based display to the Verdin IMX8MP

Welcome everyone!


Today we're going to start a new serie on display integration in Linux!

This time, we'll see how to integrate a custom ILI9881C based display panel to Linux, in Torizon OS.


The serie will be split like this:

  • Presentation + Setting up the DTS

  • Driver modification

  • Yocto integration and testing


HW Setup


Here is what we'll work with:

  • SoC: Verdin IMX8MP

  • Carrier board: Mallow

  • Display: KD070WXFID093A-C107A from our trusted partner DMB Technics


The display characteristics are:

  • 7" 800x1280

  • MIPI-DSI 4-Lanes (LPM mode for data)

  • ILI9881C display driver.

  • I2C Touchscreen using the GT9271 chip

  • PWM backlight


Developement setup


We'll use Torizon OS from Toradex, as it is the recommended OS to use with the Toradex HW and provides an environment easy to deploy.

As TorizonCore Builder does not allow to enable new Linux config, and Yocto development is the final step, we'll set up a separate Linux sources to quickly iterate on. Updating a running image with SCP to avoid flashing with TEZI each time also saves a lot of time, as a simple reboot gets you onto the new kernel.


For this we need to use the same linux as the one used by the Yocto reference image, which is the toradex_6.6-2.2.x-imx. The steps to set up a linux source tree can be found on their official documentation.


Creating Our Custom DTS


Create a new device tree file at arch/arm64/boot/dts/freescale/imx8mp-verdin-dev-custom-display.dts:



Step 1: Enable the Display Controller


The LCDIF (LCD Interface) generates the pixel data:


The LCDIF is already configured in the base DTS, we just need to enable it.


Step 2: Configure the Backlight


Our display uses PWM for backlight control:


It will:

  • Ensure PWM3 is enabled

  • Enable the already existing backlight node

  • And set its enable GPIO (already configured and declared)


Step 3: Configure MIPI-DSI and the Panel


This is the core of the configuration, as it enable the MIPI-DSI component and declare our panel.

It will:

  • Enable the mipi_dsi node, which is already configured in the base DTS.

  • Declare a port on the MIPI-DSI to connect our panel to.

  • Declare the panel, which use our custom compatible string (more on this in the next part!), an its port to link it to the mipi_dsi node.

The panel node is really simple, as the timings are declared in the driver and the touchscreen will handle the reset.


Step 4: GPIO Pin Configuration


We need to configure the reset GPIO pin muxing, to be used by our touchscreen driver:


The modification is the enable the Pull-Up to follow Toradex recommendation from the Verdin IMX8MP Datasheet.


Step 5: Enable GPU (Optional but Recommended)


Enable the GPU blocks for hardware acceleration:


This enables the 2D and 3D GPU cores, which significantly improves graphics performance.


Conclusion


This first part already gives a good overview of the different components which are used in this kind of integration.

The Device Tree is a central part in this work, as it will enable and connect together the different HW components.


Next time, we'll see how to patch the ILI9881C driver to add our display to it, stay tuned!

11 Views
bottom of page