From f14693316bf8f1bd14b018d1111ca1fed75df54a Mon Sep 17 00:00:00 2001 From: Zhang Yubing Date: Tue, 22 Mar 2022 16:45:23 +0800 Subject: [PATCH] drm/rockchip: dw-dp: reset dp controller status After disable dp controller, reset it status to avoid something wrong if the status is abnormal. Signed-off-by: Zhang Yubing Change-Id: I9de6ab056317a09b104ef604a6ef4ec20610fb65 --- drivers/gpu/drm/rockchip/dw-dp.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/drivers/gpu/drm/rockchip/dw-dp.c b/drivers/gpu/drm/rockchip/dw-dp.c index 77394ea7ce37..46aa074dee70 100644 --- a/drivers/gpu/drm/rockchip/dw-dp.c +++ b/drivers/gpu/drm/rockchip/dw-dp.c @@ -2112,6 +2112,17 @@ static void dw_dp_bridge_atomic_enable(struct drm_bridge *bridge, } } +static void dw_dp_reset(struct dw_dp *dp) +{ + regmap_update_bits(dp->regmap, DPTX_SOFT_RESET_CTRL, CONTROLLER_RESET, + FIELD_PREP(CONTROLLER_RESET, 1)); + udelay(10); + regmap_update_bits(dp->regmap, DPTX_SOFT_RESET_CTRL, CONTROLLER_RESET, + FIELD_PREP(CONTROLLER_RESET, 0)); + + dw_dp_init(dp); +} + static void dw_dp_bridge_atomic_disable(struct drm_bridge *bridge, struct drm_bridge_state *old_bridge_state) { @@ -2120,6 +2131,7 @@ static void dw_dp_bridge_atomic_disable(struct drm_bridge *bridge, dw_dp_video_disable(dp); dw_dp_link_disable(dp); bitmap_zero(dp->sdp_reg_bank, SDP_REG_BANK_SIZE); + dw_dp_reset(dp); } static enum drm_connector_status dw_dp_detect_dpcd(struct dw_dp *dp)