]> git.ipfire.org Git - thirdparty/kernel/linux.git/commit
drm/bridge: waveshare-dsi: Register and attach our DSI device at probe
authorMarek Vasut <marek.vasut+renesas@mailbox.org>
Fri, 6 Feb 2026 12:57:53 +0000 (13:57 +0100)
committerLuca Ceresoli <luca.ceresoli@bootlin.com>
Tue, 3 Mar 2026 08:11:14 +0000 (09:11 +0100)
commitb8eb97ead862de7a321dd55a901542a372f8f1cd
treeca8fbdf5c2df1ec3e9b1dfb401dd60e034121763
parentabdcd4c3586dee8c190ac932cb544036b0c937b9
drm/bridge: waveshare-dsi: Register and attach our DSI device at probe

In order to avoid any probe ordering issue, the best practice is to move
the secondary MIPI-DSI device registration and attachment to the
MIPI-DSI host at probe time.

Besides solving the probe ordering problems, this makes the bridge work
with R-Car DU. The R-Car DU will attempt to locate the DSI host bridge in
its own rcar_du_probe()->rcar_du_modeset_init()->rcar_du_encoder_init()
by calling of_drm_find_bridge() which calls of_drm_find_and_get_bridge()
and iterates over bridge_list to locate the DSI host bridge.

However, unless the WS driver calls mipi_dsi_attach() in probe(), the
DSI host bridge .attach callback rcar_mipi_dsi_host_attach() is not
called and the DSI host bridge is not added into bridge_list. Therefore
the of_drm_find_and_get_bridge() called from du_probe() will never find
the DSI host bridge and probe will indefinitelly fail with -EPROBE_DEFER.

The circular dependency here is, that if rcar_du_encoder_init() would
manage to find the DSI host bridge, it would call the WS driver .attach
callback ws_bridge_bridge_attach(), but this is too late and can never
happen. This change avoids the circular dependency.

Reviewed-by: Luca Ceresoli <luca.ceresoli@bootlin.com>
Signed-off-by: Marek Vasut <marek.vasut+renesas@mailbox.org>
Link: https://patch.msgid.link/20260206125801.78705-1-marek.vasut+renesas@mailbox.org
Signed-off-by: Luca Ceresoli <luca.ceresoli@bootlin.com>
drivers/gpu/drm/bridge/waveshare-dsi.c