]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
drm/bridge: analogix_dp: Attach the next bridge in analogix_dp_bridge_attach()
authorDamon Ding <damon.ding@rock-chips.com>
Mon, 13 Apr 2026 13:25:49 +0000 (21:25 +0800)
committerLuca Ceresoli <luca.ceresoli@bootlin.com>
Mon, 13 Apr 2026 15:43:45 +0000 (17:43 +0200)
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>
drivers/gpu/drm/bridge/analogix/analogix_dp_core.c
drivers/gpu/drm/exynos/exynos_dp.c
include/drm/bridge/analogix_dp.h

index 50415a98acb7c2f290da8fb0935c4a9f551046b1..85033a8ab146b0b0dbf98f07d4e5aba6668aa2da 100644 (file)
@@ -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;
                }
        }
index 9f3d4d4c7352b785079a28e07c079e2080a0e222..6884ea6d04eb5874815cac15ed1884eb8bcb547e 100644 (file)
@@ -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:
index bae969dec63ab7c8d69888f10208920a17956cec..854af692229b96ce41d2f7e9e3ca9cc4a575bab2 100644 (file)
@@ -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);