Guide for setting up LVDS with Colibri imx8x

Are there any good resources for setting up an LVDS display with the Colibri imx8x. I am using a Riverdi screen:
RVT70HSLNWC00-B

I am just trying to get something as basic as possible on the screen to verify that I can use the display. I saw the article: Setting up Displays with Torizon | Toradex Developer Center

and

However the device tree overlays I need based on the table:
Colibri iMX8X Iris v2.0 toradex_5.4-2.3.x-imx colibri-imx8x_parallel-rgb-lvds_overlay.dtbo, colibri-imx8x_atmel-mxt-connector_overlay.dtbo, display-dpi-lt170410_overlay.dtbo

Are not in the directory: /sysroot/boot/ostree/torizon-*/dtb/overlays

After doing a build using the torizon core builder I was able to get the device tree files over to the imx8. Using a scope to probe the x2 connector i can see that the voltage rail’s are good. However I don’t see any of the clk or data signals changing they are all constant values.

Greetings @egbio,

I just checked and there should be overlays in /sysroot/boot/ostree/torizon-*/dtb/overlays. What version of Torizon are you running perhaps?

Also in regards to our overlays they’re made to work with our specific LVDS display. They can then be used as references for enabling other similar LVDS displays. As an explanation here’s what each one does:

  • colibri-imx8x_parallel-rgb-lvds_overlay.dtbo : This enables the parallel RGB interface and the LVDS transceiver on the iris 2.0 board. You’ll still need this overlay in general for any LVDS display.
  • colibri-imx8x_atmel-mxt-connector_overlay.dtbo: This overlay is for enabling the touch on the display. This is specific to our display so you’ll probably need to modify it for your specific display.
  • display-dpi-lt170410_overlay.dtbo: This overlay provides the display timing information. Again these timings are specific to our display so you’ll need to look at your display’s data sheet for timing information and adjust accordingly.

Little more information on adjusting for alternative displays here: Setting up Displays with Torizon | Toradex Developer Center

Furthermore you said you probed X2, but the LVDS connector/pins are on X7 with the Iris 2.0 carrier board. X2 is the DVI FFC connector.

Best Regards,
Jeremias

I am using the x2 FFC connector on the colibri imx8qxp. I am running torizon kernel version 5.4. I enabled: fdt_overlays=imx8qxp-colibri-lvds-single-eval-v3.dtbo imx8qxp-colibri-lvds-dual-eval-v3.dtbo

The imx8qxp doesn’t look to have the parallel rgb device tree in the torizon device tree repo.

I am using the colibri carrier board.

Ahh okay for using the on-module X2 connector for LVDS, a number of changes will be required in the device-tree.

Before when we were on the 4.14 kernel we had dedicated device trees for such a purpose: fsl-imx8qxp-colibri-lvds-dual-eval-v3.dts « freescale « dts « boot « arm64 « arch - linux-toradex.git - Linux kernel for Apalis, Colibri and Verdin modules

However since we’ve recently updated to the 5.4 kernel we haven’t had the time to create equivalent LVDS device trees for this kernel yet. Though it is in our backlog to do so. However I imagine from studying the 4.14 device tree it should be possible to do the changes necessary for the 5.4 kernel, I’d suggest this as a starting point.

Best Regards,
Jeremias

@jeremias.tx is the following not roughly equivalent in functionality to the device tree you linked device-trees/imx8qxp-colibri-lvds-dual-eval-v3.dts at toradex_5.4-2.1.x-imx · toradex/device-trees · GitHub ?

In the event that it is wouldn’t i just need to create a custom overlay for the screen based on display-dpi-lt170410_overlay.dtbo

No that is not an equivalent, it was going to be but we never finished the work for it in 5.4-2.1 before moving onto 5.4-2.3. If you compare it to the device tree for 4.14 I shared, you can see it’s missing a lot of content and doesn’t really touch anything LVDS related at all.

Best Regards,
Jeremias

Is the parallel-rgb interface still necessary if using the X2 connector. It seems like that would only be necessary if it was using the parallel to lvds chip on the carrier board and not the SoC

That’s what I assumed. Is it necessary to enable the parallel RGB interface still since I am not using the chip on the colibri carrier board?

You are correct, the parallel RGB is only necessary if using an on carrier converted like we have on our Iris carrier. The X2 connector directly accesses the modules native LVDS pins.

Best Regards,
Jeremias

Hi @jeremias.tx Alexander provided me with a device tree fortunately.

It still appears that there is an issue with the LVDS output though. I see no output on any of the pins aside from the 3.3 volt line’s. I’ve read through the torizoncore-builder articles, Display Output, Resolution and Timings (Linux) | Toradex Developer Center,
Device Tree Customization | Toradex Developer Center,
and Device Tree Overlays (Linux) | Toradex Developer Center
but i can’t seem to figure out what the issue is.

The following is the build file i am using:

input:
  easy-installer:
    #remote: "https://artifacts.toradex.com:443/artifactory/torizoncore-oe-prod-frankfurt/dunfell-5.x.y/release/7/colibri-imx8x/torizon/torizon-core-docker-evaluation/oedeploy/torizon-core-docker-evaluation-colibri-imx8x-Tezi_5.3.0%2Bbuild.7.container.tar"
    remote: "https://artifacts.toradex.com:443/artifactory/torizoncore-oe-prerelease-frankfurt/dunfell-5.x.y/nightly/367/colibri-imx8x/torizon/torizon-core-docker-evaluation/oedeploy/torizon-core-docker-evaluation-colibri-imx8x-Tezi_5.4.0-devel-20210801%2Bbuild.367.container.tar"

customization:
  device-tree:
    include-dirs:
      - device-trees/include/
    overlays:
      add:
         - device-trees/dts-arm64/imx8qxp-colibri-lvds-single-channel.dts

output:
  easy-installer:
    local: torizon-core-colibri-imx8-custom-dt

and the device tree provided is:

// SPDX-License-Identifier: GPL-2.0+ OR X11
/*
 * Copyright 2018-2020 Toradex
 */

/dts-v1/;

#include "imx8qxp-colibri.dtsi"

/ {
	model = "Toradex Colibri iMX8QXP/DX on LVDS Embedded World Demo";
	compatible = "toradex,colibri-imx8x-lvds-demo",
		     "toradex,colibri-imx8x",
		     "fsl,imx8qxp";

	panel_lvds: panel-lvds {
		compatible = "panel-lvds";
		backlight = <&backlight>;
		data-mapping = "vesa-24";
		width-mm = <217>;
		height-mm = <136>;

		status = "okay";

		panel-timing {
			clock-frequency = <68930000>;
			hactive = <1280>;
			vactive = <800>;
			hback-porch = <64>;
			hfront-porch = <64>;
			vback-porch = <5>;
			vfront-porch = <5>;
			hsync-len = <40>;
			vsync-len = <6>;
			hsync-active = <0>;
			vsync-active = <0>;
			pixelclk-active = <0>;
		};

		port {
			panel_lvds_in: endpoint {
				remote-endpoint = <&lvds0_out>;
			};
		};
	};
};

&adma_pwm {
	status = "okay";
};

&adma_pwm_lpcg {
	status = "okay";
};

&backlight {
	pinctrl-0 = <&pinctrl_gpio_hpd>;
	enable-gpios = <&lsio_gpio1 31 GPIO_ACTIVE_HIGH>; /* Colibri BL_ON */
	status = "okay";
};

/* Colibri FastEthernet */
&fec1 {
	status = "okay";
};

&ldb1 {
	status = "okay";

	lvds-channel@0 {
		 fsl,data-mapping = "spwg";
		 fsl,data-width = <24>;
		 status = "okay";

		 port@1 {
			  reg = <1>;

			  lvds0_out: endpoint {
				   remote-endpoint = <&panel_lvds_in>;
			  };
		 };
	};
};

&ldb1_phy {
	status = "okay";
};

&ldb2 {
	status = "disabled";
};

/* Colibri UART_A */
&lpuart3 {
	status= "okay";
};

&mipi0_dphy {
	status = "okay";
};

Any pointers as to what i am missing. Thanks for the help

Hi @egbio,

I saw your reply here as well as your new community post. Can we move the conversation to here: No output on X2 of imx8qxp colibri for LVDS

And avoid opening duplicate posts otherwise the conversation will be hard to follow.

Best Regards,
Jeremias