]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
drm/bridge: display-connector: don't set OP_DETECT for DisplayPorts
authorDmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
Sat, 2 Aug 2025 10:40:35 +0000 (13:40 +0300)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 13 Nov 2025 20:37:02 +0000 (15:37 -0500)
[ Upstream commit cb640b2ca54617f4a9d4d6efd5ff2afd6be11f19 ]

Detecting the monitor for DisplayPort targets is more complicated than
just reading the HPD pin level: it requires reading the DPCD in order to
check what kind of device is attached to the port and whether there is
an actual display attached.

In order to let DRM framework handle such configurations, disable
DRM_BRIDGE_OP_DETECT for dp-connector devices, letting the actual DP
driver perform detection. This still keeps DRM_BRIDGE_OP_HPD enabled, so
it is valid for the bridge to report HPD events.

Currently inside the kernel there are only two targets which list
hpd-gpios for dp-connector devices: arm64/qcom/qcs6490-rb3gen2 and
arm64/qcom/sa8295p-adp. Both should be fine with this change.

Cc: Bjorn Andersson <andersson@kernel.org>
Cc: Konrad Dybcio <konradybcio@kernel.org>
Cc: linux-arm-msm@vger.kernel.org
Acked-by: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
Link: https://lore.kernel.org/r/20250802-dp-conn-no-detect-v1-1-2748c2b946da@oss.qualcomm.com
Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/gpu/drm/bridge/display-connector.c

index 52b7b5889e6fea9de01db8bf0ce807424ec51e22..4f0295efb8f6881083851b9528e1801201069386 100644 (file)
@@ -373,7 +373,8 @@ static int display_connector_probe(struct platform_device *pdev)
        if (conn->bridge.ddc)
                conn->bridge.ops |= DRM_BRIDGE_OP_EDID
                                 |  DRM_BRIDGE_OP_DETECT;
-       if (conn->hpd_gpio)
+       /* Detecting the monitor requires reading DPCD */
+       if (conn->hpd_gpio && type != DRM_MODE_CONNECTOR_DisplayPort)
                conn->bridge.ops |= DRM_BRIDGE_OP_DETECT;
        if (conn->hpd_irq >= 0)
                conn->bridge.ops |= DRM_BRIDGE_OP_HPD;