Interfacing custom TFT display to Colibri iMX6ULL WB IT

Hello,

we are currently in the process of connecting an existing base board to the Colibri module mentioned in the title.
As the module is NAND-based I used Yocto and created a custom image based on the reference minimal image with some changes in kernel config and some device tree tweaks, e.g. disabling peripherials on the Colibri Evaluation Board V3 we do not support in our design.

Next step would be to create a device tree node for the KOE TX14D26VM1BAA TFT display we have in our design.
After reading Display Output, Resolution and Timings (Linux) and searching for information in this community I am still unsure on how to accomplish that, thus some questions on how display, display driver and framebuffer chain works for iMX6ULL WB:

  • As a test, I tried to change the video and vidargs settings in the u-boot environment, but always endend up with VGA resolution, even when I cleared the parameters. So I guess, VGA timing is hardwired somewhere or a default?

  • Looking for a template I searched for the VGA timings in imx6ull-colibri-wifi-eval-v3.dts and included *.dtsi, but could not find any panel-timings there except compatible = "edt,et057090dhu"; in the panel_dpi node. Found et057090dhu in panel-simple.c from the kernel, though. Do the VGA timings derive from there?

  • So final and most important question: How should the device tree node to set up the timings for our display basically look like and how is it associated to the mxsfb display driver? Should it be panel_dpi or lcdif'? What about settings like bits-per-pixel` or RGB666 mode?

Following the output of tdx-info:

Software summary
------------------------------------------------------------
Bootloader:               U-Boot
Kernel version:           6.1.55-6.4.0-devel+git.d23900f974e0 #1 SMP Sat Sep 23 09:11:13 UTC 2023
Kernel command line:      user_debug=30 ubi.mtd=ubi root=ubi0:rootfs rw rootfstype=ubifs ubi.fm_autoconvert=1 console=tty1 console=ttymxc0,115200n8 consoleblank=0 video=mxsfb:800x480M-16@60
Distro name:              NAME="TDX Wayland with XWayland Upstream"
Distro version:           VERSION_ID=6.4.0-devel-20231120151614-build.0
Hostname:                 colibri-imx6ull-15037569
------------------------------------------------------------

Hardware info
------------------------------------------------------------
HW model:                 Toradex Colibri iMX6ULL 512MB on Orica Gui Board for Blaster 3000
Toradex version:          0040 V1.1A
Serial number:            15037569
Processor arch:           armv7l
------------------------------------------------------------

Thanks in advance.

Hello,
I’m in simillar situation. I have found timing hardcoded at u-boot-toradex\arch\arm\dts\imx7-colibri-u-boot.dtsi (I’m working on imx7)

	display-timings {
			native-mode = <&timing_wvga>;
		/* WVGA Timing, e.g. EDT ET070080DH6 */
			timing_wvga: 800x480 {
				clock-frequency = <33260000>;
				hactive = <800>;
				vactive = <480>;

You need to checkout u-boot sources first with devel tool.
devtool modify -x u-boot-toradex

And apply it with devtool
build u-boot-toradex

But acctually the desired resolution width 800 is still not working for me. it is still 640
As far I understain then parameters video and vidargs are for framebuffer resolution.

Hello community,

after some trial & error and fixing some wiring problems (cable length!) we have the display up and running using the Generic Display connector X20 on the Eval Board.

In case anybody has similiar difficulties here is short summary of what worked for me regarding the device tree settings:

Changed panel_dpi in imx6ull-colibri.dtsi to

	panel_dpi: panel-dpi {
		compatible = "panel-dpi";
		label = "lcddisp";
		data-mapping = "bgr666";
		bus-width = <18>;
		backlight = <&backlight>;
		power-supply = <&reg_3v3>;
		status = "disabled";

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

		panel-timing {
			clock-frequency = <6400000>;
			hactive = <320>;
			vactive = <240>;
			hsync-len = <88>;
			hfront-porch = <18>;
			hback-porch = <70>;
			vsync-len = <23>;
			vfront-porch = <10>;
			vback-porch = <13>;
			de-active = <1>;
			hsync-active = <0>;
			pixelclk-active = <1>;
		};
	};

Note that

		compatible = "edt,et057090dhu";

was replaced by

		compatible = "panel-dpi";

and that

		data-mapping = bgr666;

and

		bus-width = <18>;

were set. Not quite sure if both are needed, though.

The port seems to be vital and has to be kept.

Regarding the timings: The display uses data enable mode, so vsync-active was left out.
Don’t know if all of the sync timing parameters are really needed but at least they do not cause any trouble.

Note on the u-boot environment variables like video, vidargs or videomode:
Neither of them seemed to have any effect in my case.

Framebuffer settings returned by fbset alyways showed the layout defined in the panel_dpi device tree node.

Hope this is helpful for others.

Best regards
Stephan

Hello @sb.cato,

Apologies for the delay in answering to you. In the meantime, I also figured out that using the generic display driver would be the solution for you. So you are on the correct path here. Thanks for sharing your complete solution here :slight_smile:

1 Like