Hi Paul,
On Thu, Mar 03, 2022 at 09:26:30PM +0100, Paul Kocialkowski wrote:
On Wed 02 Feb 22, 21:34, Jagan Teki wrote:
Devices can also be child nodes when we also control that device through the upstream device (ie, MIPI-DCS for a MIPI-DSI device).
drm_of_find_panel_or_bridge can lookup panel or bridge for a given device has port and endpoint and it fails to lookup if the device has a child nodes.
This patch breaks the logicvc drm driver that I'm currently developping. The symptom is that drm_of_find_panel_or_bridge now always returns -EPROBE_DEFER even after the panel has probed and is running well. It seems that the function can no longer find the panel.
I haven't figured out the details, but reverting your patch makes it work again. I suspect other drivers might be affected as well, so it would probably be a good idea to revert the patch until the root cause is clearly understood and the patch can be adapted accordingly.
Here is what the device-tree looks like:
/ { panel: panel-lvds { compatible = "panel-lvds";
[...] port { #address-cells = <1>; #size-cells = <0>; panel_input: endpoint@0 { reg = <0>; remote-endpoint = <&logicvc_output>; }; };
}; };
&amba { logicvc: logicvc@43c00000 { compatible = "xylon,logicvc-3.02.a", "syscon", "simple-mfd"; reg = <0x43c00000 0x6000>;
#address-cells = <1>; #size-cells = <1>; [...] logicvc_display: display-engine@0 { compatible = "xylon,logicvc-4.01.a-display"; [...]
I think the issue lies in what you left out here: you have another node aside from the port one, called layers. I *think* the issue is that the code will now pick up the layers node, and try to use it as a panel, which will never probe.
I've had a look at all the other bindings though, it seems like this driver is the only one that can be affected: the anx7625 seems to be the only other driver that has a child node that isn't either a port or a panel (aux-bus) but it doesn't use drm_of_find_panel_or_bridge either.
Maxime