IMX8MP EVK native LVDS panel example device tree source

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

IMX8MP EVK native LVDS panel example device tree source

1,319 Views
ufnguru
Contributor I

Can anyone provide an example of a device tree file that supports a single native LVDS panel on either LVDS0 or LVDS1 connector? I am trying to use a single native LVDS panel on either LVDS0 or LVDS1 connector. When I try this DTB I lose the HDMI and the LVDS panel does not work.

0 Kudos
5 Replies

942 Views
Wobaffet
Senior Contributor I

Hello, I am trying to also intilize my LVDS display for my custom board also. I've used similar DT config like below, but I get:

root@imx8mp-lpddr4-evk:~# /usr/bin/weston --backend=drm-backend.so --shell=fullscreen-shell.so --no-clients-resize
Date: 2022-11-08 UTC
[14:04:39.947] weston 11.0.1
               https://wayland.freedesktop.org
               Bug reports to: https://gitlab.freedesktop.org/wayland/weston/issues/
               Build: lf-6.1.1-1.0.0+
[14:04:39.947] Command line: /usr/bin/weston --backend=drm-backend.so --shell=fullscreen-shell.so --no-clients-resize
[14:04:39.947] OS: Linux, 6.1.1+gcc0d1d210bdd, #1 SMP PREEMPT Thu Mar  2 14:54:17 UTC 2023, aarch64
[14:04:39.947] Flight recorder: enabled
[14:04:39.947] Using config file '/etc/xdg/weston/weston.ini'
[14:04:39.947] Output repaint window is 16 ms maximum.
[14:04:39.948] Loading module '/usr/lib/libweston-11/drm-backend.so'
[14:04:39.953] initializing drm backend
[14:04:39.953] Trying logind launcher...
[14:04:39.953] logind: failed to get session seat
[14:04:39.953] logind: cannot setup systemd-logind helper error: (No data available), using legacy fallback
[14:04:39.953] fatal: your system should either provide the logind D-Bus API, or use seatd.
[14:04:39.953] fatal: failed to create compositor backend
Internal warning: debug scope 'drm-backend' has not been destroyed.
/ {
        lvds0_panel {
                compatible = "panel-lvds";
                fsl,data-mapping="spwg";
                width-mm=<216>;
                height-mm=<135>;
                pinctrl-names = "default";
                pinctrl-0 = <&pinctrl_lvds>;
                gpio = <&gpio1 10 GPIO_ACTIVE_HIGH
                        &gpio1 11 GPIO_ACTIVE_HIGH>;
                panel-timing{
                clock-frequency=<74250000>;
                hactive=<1280>;
                vactive=<800>;
                hfront-porch=<53>;
                hback-porch=<53>;
                hsync-len=<54>;
                vfront-porch=<8>;
                vback-porch=<8>;
                vsync-len=<7>;
                de-active=<1>;
                };
                port {
                        panel_lvds_in: endpoint {
                                remote-endpoint = <&lvds_out>;
                        };
                };
        };
};
/delete-node/ &lvds_bridge;
/delete-node/ &pwm2;
/delete-node/ &lvds_backlight;
&ldb {
        status = "okay";
        lvds-channel@0 {
                status="okay";
                fsl,data-mapping = "spwg";
                /delete-node/ port@1;
                port@1 {
                        reg = <1>;
                        lvds_out: endpoint {
                                remote-endpoint = <&panel_lvds_in>;
                        };
                };
        };
};
&iomuxc{
        pinctrl_lvds:lvdsgrp {
                fsl,pins=<
                        MX8MP_IOMUXC_GPIO1_IO10__GPIO1_IO10 0x1c0
                        MX8MP_IOMUXC_GPIO1_IO11__GPIO1_IO11 0x1c0
                >;
        };
};

 What am I missing? Thank you in advance!

0 Kudos

1,271 Views
ufnguru
Contributor I

Here is my solution for a generic native LVDS panel on LVDS1, it works great:

#include "imx8mp-evk.dts"
 
/ {
lvds1_panel {
compatible = "panel-lvds";
        status = "okay";
backlight = <&lvds_backlight>;
    data-mapping = "vesa-24";
          width-mm = <216>;
                height-mm = <135>;
      panel-timing {
clock-frequency = <72400000>;
hactive = <1280>;
vactive = <800>;
hback-porch = <80>;
hfront-porch = <48>;
vback-porch = <3>;
vfront-porch = <29>;
hsync-len = <1>;
vsync-len = <6>;
};
 
port {
panel1_lvds_in: endpoint {
remote-endpoint = <&lvds1_out>;
};
};
};
};
 
&ldb {
status = "okay";
 
lvds-channel@1 {
fsl,data-mapping = "spwg";
fsl,data-width = <24>;
status = "okay";
 
port@1 {
reg = <1>;
 
lvds1_out: endpoint {
remote-endpoint = <&panel1_lvds_in>;
};
};
};
};

 

 

 

0 Kudos

1,302 Views
Bio_TICFSL
NXP TechSupport
NXP TechSupport

Hello,

 

In you bsp come with different dtb that you can use as example imx8mp-evk-jdi-wuxga-lvds-panel.dts.  Also please take a look at:

https://community.nxp.com/t5/i-MX-Processors-Knowledge-Base/Add-i-MX8MP-LVDS-driver-in-uboot/ta-p/14...

 

Regards

0 Kudos

1,292 Views
ufnguru
Contributor I

I'm convinced you did not even look at my file. Also, the imx8mp-evk-jdi-wuxga-lvds-panel.dts would never work unless the panel was one of those. My file works for all generic native panels on LVDS0 connector. It does not work on LVDS1 and I want it to work on LVDS1 what do I change?

0 Kudos

67 Views
gigli_korg
Contributor II

Hi ufnguru,

since I have some troubles on LVDS of iMX8MP board, I am navigating on several source of information, this thread included.

As suggestion, I recommend to you read the following documentation on kernel sources (repo is https://github.com/nxp-real-time-edge-sw/real-time-edge-linux, branch is linux_6.1.22):

[1] - $ROOT/Documentation/devicetree/bindings/display/imx/ldb.txt
[2] - $ROOT/Documentation/devicetree/bindings/display/bridge/fsl,ldb.yaml

They refers to two different kernel configuration options, hence two different source files, but with the same "compatible" property ""

In a short sentences dotted list list I understood the followings:
a- ldb component has 3 ports:
port@0 is the input port, linked with lcdif2 module
port@1 is an output port, linked with lvds0 phy and external module
port@2 is an other output port, linked with lvds1 phy and external module
b- ldb component has two channel
c- each ldb channel, imx8mp, has an output port linked to panlel/displayexternal-bridge

Hence, I suppose
- for LVDS0 output, the node "lvds-channel@0" shall have defined two subnodes: port@0 and port@1
- for LVDS1 output, the node "lvds-channel@1" shall have defined two subnodes: port@0 and port@2

I hope some NXP people can confirm (or not) my assertions.

Hoping to be useful.

0 Kudos