diff --git a/drivers/gpu/drm/rockchip/dw-dp.c b/drivers/gpu/drm/rockchip/dw-dp.c index d5c0564adeb2..37fb38b908cb 100644 --- a/drivers/gpu/drm/rockchip/dw-dp.c +++ b/drivers/gpu/drm/rockchip/dw-dp.c @@ -682,6 +682,15 @@ static int dw_dp_connector_get_modes(struct drm_connector *connector) struct edid *edid; int num_modes = 0; + if (dp->right && dp->right->next_bridge) { + struct drm_bridge *bridge = dp->right->next_bridge; + + if (bridge->ops & DRM_BRIDGE_OP_MODES) { + if (!drm_bridge_get_modes(bridge, connector)) + return 0; + } + } + if (dp->next_bridge) num_modes = drm_bridge_get_modes(dp->next_bridge, connector); @@ -2114,6 +2123,9 @@ static int dw_dp_connector_init(struct dw_dp *dp) int ret; connector->polled = DRM_CONNECTOR_POLL_HPD; + if (dp->next_bridge && dp->next_bridge->ops & DRM_BRIDGE_OP_DETECT) + connector->polled = DRM_CONNECTOR_POLL_CONNECT | + DRM_CONNECTOR_POLL_DISCONNECT; connector->ycbcr_420_allowed = true; ret = drm_connector_init(bridge->dev, connector,