LVDS trouble (5.15, rk3288)

Rob Kramer rob at teegee.cloud
Fri Dec 16 03:05:38 PST 2022


Hi all,

I have a RK3288 board from a Chinese display vendor that came with the 
usual giant Rockchip tarball that they patched here and there to make 
the board work. It seems to be based on a rk3288-evb (+rk808), since 
that is what they patched in the kernel. The kernel is a 4.4 kernel with 
Android stuff in it (i.e. fiq-debugger) and a large amount of Rockchip 
patches.

The board connects to an anonymous panel via LVDS. When I try to 
replicate this dts setup in my 5.15 tree (with Armbian paches), I can't 
get the panel to probe/register no matter what I try. The 
rockchip_lvds_bind call keeps failing with -517 (EPROBE_DEFER), because 
drm_of_find_panel_or_bridge() can't find the panel -- because it never 
registered with the drm-panel global panel-list.

   [    0.108667] platform rob-panel: Fixing up cyclic dependency with 
ff96c000.lvds
   [    1.331742] rockchip-lvds ff96c000.lvds: [drm:rockchip_lvds_bind] 
*ERROR* failed to find panel and bridge node: -517

Since the vendor setup is so old and uses Rockchip patches that were 
never upstreamed, the device tree structure will be quite different as 
well. Does something like the example at 
http://rockchip.wikidot.com/lvds still apply at all for 5.15?

I've appended the relevant part of my dts. The compatible string is a 
random 1920x1080 LVDS panel that I picked, just to see if I can get any 
kind of panel to register in the kernel (I can't). The commented out 
compatible string is another attempt, using 'panel-lvds'. It doesn't 
work, and I don't know what I'm doing :)

Would a panel in the dts just silently fail because some property is 
wrong? What could I do to debug the reason that my panel is completely 
ignored? Do I have to define the panel in panel-simple.c, or can it be 
defined in the DT only?

When I look in the FDT, all the connections to other phandles look fine, 
btw.

Cheers!

     Rob


         lvds_panel: rob-panel {
                 status = "okay";
                 compatible = "auo,g133han01";
//              compatible = "topdisp,dummy", "panel-lvds";
                 backlight = <&backlight>;
                 enable-gpios = <&gpio7 RK_PB7 GPIO_ACTIVE_HIGH>;

                 unprepare-delay-ms = <2>;
                 enable-delay-ms = <20>;
                 init-delay-ms = <3>;
                 power-supply = <&vcc_lcd>;
                 rockchip,data-mapping = "vesa";
                 rockchip,data-width = <24>;
                 rockchip,output = "duallvds";

                 port {
                         panel_in_lvds: endpoint {
                                 remote-endpoint = <&lvds_out_panel>;
                         };
                 };

                 display-timings {
                         native-mode = <&timing0>;
                         timing0: timing0 {
                                 clock-frequency = <148000000>;
                                 ..snip..
                         };
                 };
         };

&lvds {
         status = "okay";
         dual-channel;
         ports {
                 port at 1 {
                         reg = <1>;
                         #address-cells = <1>;
                         #size-cells = <0>;

                         lvds_out_panel: endpoint at 1 {
                                 reg = <1>;
                                 remote-endpoint = <&panel_in_lvds>;
                         };
                 };
         };
};




More information about the Linux-rockchip mailing list