Hi, On Fri, Oct 1, 2021 at 2:00 PM Bjorn Andersson <bjorn.andersson@xxxxxxxxxx> wrote: > > On Fri 27 Aug 13:52 PDT 2021, Doug Anderson wrote: > > > Hi, > > > > On Mon, Jul 26, 2021 at 4:15 PM Bjorn Andersson > > <bjorn.andersson@xxxxxxxxxx> wrote: > > > > > > +static int dp_parser_find_panel(struct dp_parser *parser) > > > +{ > > > + struct device_node *np = parser->pdev->dev.of_node; > > > + int rc; > > > + > > > + rc = drm_of_find_panel_or_bridge(np, 2, 0, &parser->drm_panel, NULL); > > > > Why port 2? Shouldn't this just be port 1 always? The yaml says that > > port 1 is "Output endpoint of the controller". We should just use port > > 1 here, right? > > > > Finally got back to this, changed it to 1 and figured out why I left it > at 2. > > drm_of_find_panel_or_bridge() on a DP controller will find the of_graph > reference to the USB-C controller, scan through the registered panels > and conclude that the of_node of the USB-C controller isn't a registered > panel and return -EPROBE_DEFER. I'm confused, but maybe it would help if I could see something concrete. Is there a specific board this was happening on? Under the DP node in the device tree I expect: ports { port@1 { reg = <1>; edp_out: endpoint { remote-endpoint = <&edp_panel_in>; }; }; }; If you have "port@1" pointing to a USB-C controller but this instance of the DP controller is actually hooked up straight to a panel then you should simply delete the "port@1" that points to the typeC and replace it with one that points to a panel, right? -Doug