On 18.06.2018 12:28, Heiko Stuebner wrote:
When the panel-driver is build as a module it currently fails hard as the panel cannot be probed directly:
dw_mipi_dsi_bind() __dw_mipi_dsi_probe() creates dsi bus creates panel device triggers panel module load panel not probed (module not loaded or panel probe slow) drm_bridge_attach fails with -EINVAL due to empty panel_bridge
So emit a -EPROBE_DEFER in that case to give the driver another chance at getting the display later.
Thats odd (at least for me), if the resource (panel in this case) is not present, bridge should not be attached (drm_bridge_attach should not be called). Ie __dw_mipi_dsi_probe should rather look for the panel and defer if not found. Resource gathering is the task of probe. drm_bridge_attach can be called after probe and it would be difficult for the caller to react properly for -EPROBE_DEFER error.
Regards Andrzej
Signed-off-by: Heiko Stuebner heiko@sntech.de
drivers/gpu/drm/bridge/synopsys/dw-mipi-dsi.c | 3 +++ 1 file changed, 3 insertions(+)
diff --git a/drivers/gpu/drm/bridge/synopsys/dw-mipi-dsi.c b/drivers/gpu/drm/bridge/synopsys/dw-mipi-dsi.c index bb4aeca5c0f9..bd503f000ed5 100644 --- a/drivers/gpu/drm/bridge/synopsys/dw-mipi-dsi.c +++ b/drivers/gpu/drm/bridge/synopsys/dw-mipi-dsi.c @@ -835,6 +835,9 @@ static int dw_mipi_dsi_bridge_attach(struct drm_bridge *bridge) return -ENODEV; }
- if (!dsi->panel_bridge)
return -EPROBE_DEFER;
- /* Set the encoder type as caller does not know it */ bridge->encoder->encoder_type = DRM_MODE_ENCODER_DSI;