Trouble generating custom Device Tree for a certain LVDS display in official 3rd-party Android image

Hello.

My setup is the following:

Carrier board: Toradex Ixora rev. 1.1A;
Module: Apalis iMX8 QuadMax 4GB IT ver. V1.1C;
Installed software: Toradex_Apalis-iMX8_B0_Kynetics-Android-Image_11-eval-SNAPSHOT-20210323 with modified Device Tree;
Display connected to the Carrier board: 3rd-party Full HD display connected using LVDS interface.

I want to modify the Device Tree of the official Toradex Android 11 image in order to work with a 3-rd party display connected to the LVDS interface of the Carrier Board.
After unpacking the “dtbo-imx8qm.img” file from the Android 11 archive, I obtained the “dt.0.src” and “dt.1.src” files:
dt.0.src (163.8 KB)
dt.1.src (163.9 KB)

After reading the datasheet of the 3-rd party display, I made changes in the Device Tree data structures related to LVDS.
The modified files are: “dt.0.src_modified” and “dt.1.src_modified”:
dt.0.src_modified (164.3 KB)
dt.1.src_modified (164.4 KB)

The modifications are related to the following Device Tree data structures:

compatible, ldb@572410e0, lvds1_panel

You can use the Meld tool to spot the differences between the original files and the modified ones.

After I compile this 2 new modified Device Tree source files using “dtc” and pack the DTB files in a new “dtbo-imx8qm.img” file, the new Android 11 setup doesn’t boot and hangs at logo screen.

What can be done to correctly modify the Device Tree so that the new Android 11 setup can boot successfully using the 3-rd party LVDS display?

Thank you.

Hi @embeddedsystem,

Probably you are missing more modifications that are needed for this to work correctly. Take as an example this overlay for Apalis and LVDS called apalis-imx8_mezzanine_lvds_overlay.dts:

// SPDX-License-Identifier: GPL-2.0-or-later OR MIT
/*
 * Copyright 2020-2021 Toradex
 */

// LVDS display overlay for Apalis Evaluation board Mezzanine
#include <dt-bindings/gpio/gpio.h>

/dts-v1/;
/plugin/;
/ {
	compatible = "toradex,apalis-imx8";
};

&ldb1 {
	status = "okay";

	lvds-channel@0 {
		#address-cells = <1>;
		#size-cells = <0>;

		fsl,data-mapping = "spwg";
		fsl,data-width = <24>;
		status = "okay";

		port@1 {
			reg = <1>;

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

&ldb1_phy {
	status = "okay";
};

&panel_lvds {
	status = "okay";
};

/* Enable 10" LVDS backlight LVDS_0_BKL1_ON */
&lsio_gpio1 {
	LVDS_0_BKL1_ON {
		gpio-hog;
		gpios = <22 GPIO_ACTIVE_HIGH>;
		line-name = "LVDS_0_BKL1_ON";
		output-high;
	};
};

/*
 * Put LVDS_0_PWM_BKL1 (GPIO8) low. GPIO8 is shared with gpio-fan.
 * JP20 should be set to 1-2 (automatic) instead of GPIO8 (2-3).
 */
&lsio_gpio3 {
	PWM_BKL1 {
		gpio-hog;
		gpios = <28 GPIO_ACTIVE_HIGH>;
		line-name = "LVDS_0_PWM_BKL1";
		output-low;
	};
};

&gpio_fan {
	status = "disabled";
};

Can you try to also change the &ldb1 node with the settings from your display and check if this works?

Best Regards,
Hiago.

Hello.

The solution consists in modifying the “compatibility” attribute from the lvds1_panel structure with a value that matches the manufacturer and model of the display.

1 Like