diff options
| author | Damon Ding <damon.ding@rock-chips.com> | 2026-04-13 21:25:49 +0800 |
|---|---|---|
| committer | Luca Ceresoli <luca.ceresoli@bootlin.com> | 2026-04-13 17:43:45 +0200 |
| commit | 3076510af7cd01a7fb0ae5103116a39ad35eb5cb (patch) | |
| tree | 36ee6167a0bd1c5aa0410ac54b2c77fec1dfc449 | |
| parent | 02b8a4f240abdc4e99efd6cf95c47378a1015903 (diff) | |
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 <damon.ding@rock-chips.com>
Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
Reviewed-by: Luca Ceresoli <luca.ceresoli@bootlin.com>
Tested-by: Marek Szyprowski <m.szyprowski@samsung.com>
Tested-by: Heiko Stuebner <heiko@sntech.de> # rk3588
Link: https://patch.msgid.link/20260413132551.1049307-7-damon.ding@rock-chips.com
Signed-off-by: Luca Ceresoli <luca.ceresoli@bootlin.com>
| -rw-r--r-- | drivers/gpu/drm/bridge/analogix/analogix_dp_core.c | 7 | ||||
| -rw-r--r-- | drivers/gpu/drm/exynos/exynos_dp.c | 19 | ||||
| -rw-r--r-- | 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); |
