Commit 4d793a02 authored by Dmitry Baryshkov's avatar Dmitry Baryshkov
Browse files

drm/msm/dp: fix panel bridge attachment



In commit 8a3b4c17 ("drm/msm/dp: employ bridge mechanism for display
enable and disable") the DP driver received a drm_bridge instance, which
is always attached to the encoder as a root bridge. However it conflicts
with the panel_bridge support for eDP panels. The panel bridge attaches
to the encoder before the "dp" bridge (DP driver's drm_bridge instance
created in msm_dp_bridge_init()) has a chance to do so. Change
panel bridge attachment to come after the "dp" bridge attachment (and to
use it as a previous bridge).

Fixes: 8a3b4c17 ("drm/msm/dp: employ bridge mechanism for display enable and disable")
Cc: Kuogee Hsieh <quic_khsieh@quicinc.com>
Signed-off-by: default avatarDmitry Baryshkov <dmitry.baryshkov@linaro.org>
Tested-by: default avatarKuogee Hsieh <quic_khsieh@quicinc.com>
Reviewed-by: default avatarStephen Boyd <swboyd@chromium.org>
Link: https://lore.kernel.org/r/20220211224006.1797846-2-dmitry.baryshkov@linaro.org


[db: fixed commit message according to Stephen's suggestions]
Signed-off-by: default avatarDmitry Baryshkov <dmitry.baryshkov@linaro.org>
parent 2af0fc92
Loading
Loading
Loading
Loading
+11 −10
Original line number Diff line number Diff line
@@ -169,16 +169,6 @@ struct drm_connector *dp_drm_connector_init(struct msm_dp *dp_display)

	drm_connector_attach_encoder(connector, dp_display->encoder);

	if (dp_display->panel_bridge) {
		ret = drm_bridge_attach(dp_display->encoder,
					dp_display->panel_bridge, NULL,
					DRM_BRIDGE_ATTACH_NO_CONNECTOR);
		if (ret < 0) {
			DRM_ERROR("failed to attach panel bridge: %d\n", ret);
			return ERR_PTR(ret);
		}
	}

	return connector;
}

@@ -246,5 +236,16 @@ struct drm_bridge *msm_dp_bridge_init(struct msm_dp *dp_display, struct drm_devi
		return ERR_PTR(rc);
	}

	if (dp_display->panel_bridge) {
		rc = drm_bridge_attach(dp_display->encoder,
					dp_display->panel_bridge, bridge,
					DRM_BRIDGE_ATTACH_NO_CONNECTOR);
		if (rc < 0) {
			DRM_ERROR("failed to attach panel bridge: %d\n", rc);
			drm_bridge_remove(bridge);
			return ERR_PTR(rc);
		}
	}

	return bridge;
}