From 54821e8d8549d69789b433192cb410734ebec992 Mon Sep 17 00:00:00 2001 From: Wyon Bi Date: Thu, 9 Dec 2021 15:39:43 +0800 Subject: [PATCH] drm/rockchip: dw-dp: Fix aux timeout at boot Use the HPD state machine state in detect instead of HPD_STATUS. Signed-off-by: Wyon Bi Change-Id: I9e6b14c819fa29dd38101340e40334f050832524 --- drivers/gpu/drm/rockchip/dw-dp.c | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/drivers/gpu/drm/rockchip/dw-dp.c b/drivers/gpu/drm/rockchip/dw-dp.c index 2db48619d972..36963c99bcd5 100644 --- a/drivers/gpu/drm/rockchip/dw-dp.c +++ b/drivers/gpu/drm/rockchip/dw-dp.c @@ -300,6 +300,13 @@ enum { DPTX_SDP_HORIZONTAL_INTERVAL = BIT(1), }; +enum { + SOURCE_STATE_IDLE, + SOURCE_STATE_UNPLUG, + SOURCE_STATE_HPD_TIMEOUT = 4, + SOURCE_STATE_PLUG = 7 +}; + enum { DPTX_PHY_PATTERN_NONE, DPTX_PHY_PATTERN_TPS_1, @@ -451,7 +458,7 @@ static bool dw_dp_detect(struct dw_dp *dp) regmap_read(dp->regmap, DPTX_HPD_STATUS, &value); - return !!(value & HPD_STATUS); + return FIELD_GET(HPD_STATE, value) == SOURCE_STATE_PLUG; } static enum drm_connector_status @@ -1661,8 +1668,10 @@ static ssize_t dw_dp_aux_transfer(struct drm_dp_aux *aux, regmap_write(dp->regmap, DPTX_AUX_CMD, value); status = wait_for_completion_timeout(&dp->complete, timeout); - if (!status) + if (!status) { + dev_err(dp->dev, "timeout waiting for AUX reply\n"); return -ETIMEDOUT; + } regmap_read(dp->regmap, DPTX_AUX_STATUS, &value); if (value & AUX_TIMEOUT)