LCD BeagleBone Black

Hi everyone,

I could use some help understanding some strange behavior I’m seeing on my BeagleBone Black.

I’ve set up a custom Device Tree Overlay for a 7-inch LCD display (model A070-92-TT01, using the AT070TN92 panel) and have made all the necessary changes in /boot/uEnv.txt to disable the onboard HDMI and load this overlay.

The puzzling part is, by monitoring the serial port during boot, I can confirm that the bootloader (U-Boot) is doing everything correctly. The logs clearly show that it reads my configuration, acknowledges that HDMI is disabled, and successfully loads my custom LCD overlay file.

The problem is that even with the overlay loading correctly, the end result is always the same: the LCD backlight turns on, but the screen remains completely black with no video signal. The tilcdc driver never seems to be initialized by the Linux kernel, and video test tools like modetest fail, reporting they can’t find the device.

So my question is: if U-Boot is doing its job correctly and passing the configuration to the kernel, what could be preventing the kernel from actually initializing the video driver? Could this point to a fundamental kernel configuration problem within this specific Debian 12 image (Kernel 5.10)?

Any ideas or diagnostic suggestions would be greatly appreciated.

Thanks!

We are probably missing a driver… Please share your lcd portion of the overlay..

Regards,

Thanks for the reply! Here is the complete source for the Device Tree Overlay (.dts`) that I am compiling and loading via U-Boot. I’ve been focusing on getting the panel timings and the DRM graph structure correct.

/dts-v1/;
/plugin/;

/ {
	compatible = "ti,beaglebone", "ti,beaglebone-black";

	part-number = "A070-LCD-WITH-POWER";
	version = "00A5";

	/* Fragment 0: Pinmux for video signals and a GPIO for power enable */
	fragment@0 {
		target = <&am33xx_pinmux>;
		__overlay__ {
			lcd_pins: pinmux_lcd_pins {
				pinctrl-single,pins = <
					/* 16-bit RGB Data and Control Signals (MUX MODE 0) */
					0x0a0 0x00	/* lcd_data0 */ 0x0a4 0x00	/* lcd_data1 */
					0x0a8 0x00	/* lcd_data2 */ 0x0ac 0x00	/* lcd_data3 */
					0x0b0 0x00	/* lcd_data4 */ 0x0b4 0x00	/* lcd_data5 */
					0x0b8 0x00	/* lcd_data6 */ 0x0bc 0x00	/* lcd_data7 */
					0x0c0 0x00	/* lcd_data8 */ 0x0c4 0x00	/* lcd_data9 */
					0x0c8 0x00	/* lcd_data10*/ 0x0cc 0x00	/* lcd_data11*/
					0x0d0 0x00	/* lcd_data12*/ 0x0d4 0x00	/* lcd_data13*/
					0x0d8 0x00	/* lcd_data14*/ 0x0dc 0x00	/* lcd_data15*/
					0x0e0 0x00	/* lcd_vsync */ 0x0e4 0x00	/* lcd_hsync */
					0x0e8 0x00	/* lcd_pclk */  0x0ec 0x00	/* lcd_ac_bias_en */

					/* P9_18 (spi0_sclk) as GPIO0_2 for panel power enable */
					0x150 0x07
				>;
			};
		};
	};

	/* Fragment 1: Enable the LCDC and define its output port */
	fragment@1 {
		target = <&lcdc>;
		__overlay__ {
			status = "okay";
			pinctrl-names = "default";
			pinctrl-0 = <&lcd_pins>;
			data-mapping = "rgb565";

			port {
				lcdc_ep: endpoint {
					remote-endpoint = <&panel_ep>;
				};
			};
		};
	};

	/* Fragment 2: Define the Panel, its timings, power, and input port */
	fragment@2 {
		target = <&ocp>;
		__overlay__ {
			panel: panel {
				compatible = "simple-panel";
				status = "okay";
				enable-gpios = <&gpio0 2 0>; /* Use GPIO0_2 to enable panel power */

				port {
					panel_ep: endpoint {
						remote-endpoint = <&lcdc_ep>;
					};
				};

				display-timings {
					native-mode = <&timing0>;
					timing0: timing0 {
						clock-frequency = <33000000>;
						hactive = <800>; vactive = <480>;
						hfront-porch = <40>; hback-porch = <40>; hsync-len = <48>;
						vfront-porch = <13>; vback-porch = <29>; vsync-len = <3>;
						hsync-active = <0>;  vsync-active = <0>;
						de-active = <1>;     pixelclk-active = <0>;
					};
				};
			};
		};
	};
};

I’m woried about a few things in your overlay..

Take a look at this 5.10.x example: BeagleBoard-DeviceTrees/src/arm/overlays/BB-BONE-LCD4-01-00A1.dts at v5.10.x-ti-unified · beagleboard/BeagleBoard-DeviceTrees · GitHub

I have an old note here, wish i wrote down more..

	//FIXME - LCD doesn't init...
	//port {
	//	lcdc_0: endpoint@0 {
	//		remote-endpoint = <&panel_0>;
	//	};
	//};

Hi, thank. With your help, I managed to get it working.

Now I’ll make some adjustments and post them in the chat for others to see.

Cheers