From 3076510af7cd01a7fb0ae5103116a39ad35eb5cb Mon Sep 17 00:00:00 2001 From: Damon Ding Date: Mon, 13 Apr 2026 21:25:49 +0800 Subject: [PATCH] drm/bridge: analogix_dp: Attach the next bridge in analogix_dp_bridge_attach() Uniformly, move the next bridge attachment to the Analogix side rather than scattered on Rockchip and Exynos sides. It can also help get rid of the callback &analogix_dp_plat_data.attach() and make codes more concise. Signed-off-by: Damon Ding Reviewed-by: Dmitry Baryshkov Reviewed-by: Luca Ceresoli Tested-by: Marek Szyprowski Tested-by: Heiko Stuebner # rk3588 Link: https://patch.msgid.link/20260413132551.1049307-7-damon.ding@rock-chips.com Signed-off-by: Luca Ceresoli --- .../drm/bridge/analogix/analogix_dp_core.c | 7 ++++--- drivers/gpu/drm/exynos/exynos_dp.c | 19 ------------------- include/drm/bridge/analogix_dp.h | 1 - 3 files changed, 4 insertions(+), 23 deletions(-) diff --git a/drivers/gpu/drm/bridge/analogix/analogix_dp_core.c b/drivers/gpu/drm/bridge/analogix/analogix_dp_core.c index 50415a98acb7..85033a8ab146 100644 --- a/drivers/gpu/drm/bridge/analogix/analogix_dp_core.c +++ b/drivers/gpu/drm/bridge/analogix/analogix_dp_core.c @@ -931,10 +931,11 @@ static int analogix_dp_bridge_attach(struct drm_bridge *bridge, return -EINVAL; } - if (dp->plat_data->attach) { - ret = dp->plat_data->attach(dp->plat_data, bridge); + if (dp->plat_data->next_bridge) { + ret = drm_bridge_attach(dp->encoder, dp->plat_data->next_bridge, bridge, + DRM_BRIDGE_ATTACH_NO_CONNECTOR); if (ret) { - DRM_ERROR("Failed at platform attach func\n"); + dev_err(dp->dev, "failed to attach following panel or bridge (%d)\n", ret); return ret; } } diff --git a/drivers/gpu/drm/exynos/exynos_dp.c b/drivers/gpu/drm/exynos/exynos_dp.c index 9f3d4d4c7352..6884ea6d04eb 100644 --- a/drivers/gpu/drm/exynos/exynos_dp.c +++ b/drivers/gpu/drm/exynos/exynos_dp.c @@ -68,24 +68,6 @@ static int exynos_dp_poweroff(struct analogix_dp_plat_data *plat_data) return exynos_dp_crtc_clock_enable(plat_data, false); } -static int exynos_dp_bridge_attach(struct analogix_dp_plat_data *plat_data, - struct drm_bridge *bridge) -{ - struct exynos_dp_device *dp = to_dp(plat_data); - enum drm_bridge_attach_flags flags = 0; - int ret; - - /* Pre-empt DP connector creation if there's a bridge */ - if (plat_data->next_bridge) { - ret = drm_bridge_attach(&dp->encoder, plat_data->next_bridge, bridge, - flags | DRM_BRIDGE_ATTACH_NO_CONNECTOR); - if (ret) - return ret; - } - - return 0; -} - static void exynos_dp_mode_set(struct drm_encoder *encoder, struct drm_display_mode *mode, struct drm_display_mode *adjusted_mode) @@ -196,7 +178,6 @@ static int exynos_dp_probe(struct platform_device *pdev) dp->plat_data.dev_type = EXYNOS_DP; dp->plat_data.power_on = exynos_dp_poweron; dp->plat_data.power_off = exynos_dp_poweroff; - dp->plat_data.attach = exynos_dp_bridge_attach; dp->plat_data.ops = &exynos_dp_ops; out: diff --git a/include/drm/bridge/analogix_dp.h b/include/drm/bridge/analogix_dp.h index bae969dec63a..854af692229b 100644 --- a/include/drm/bridge/analogix_dp.h +++ b/include/drm/bridge/analogix_dp.h @@ -34,7 +34,6 @@ struct analogix_dp_plat_data { int (*power_on)(struct analogix_dp_plat_data *); int (*power_off)(struct analogix_dp_plat_data *); - int (*attach)(struct analogix_dp_plat_data *, struct drm_bridge *); }; int analogix_dp_resume(struct analogix_dp_device *dp);