From ca885383eb84a60101dc0d578b3412b53937b932 Mon Sep 17 00:00:00 2001 From: Zheng Yang Date: Mon, 29 Nov 2021 15:30:28 +0800 Subject: [PATCH] drm/rockchip: dw-dp: support dynamic binding to different vp port According to the application scenario, DP0/DP1 may be bind to the same vp port, or different vp port. The corresponding bit in output_if needs to be set or cleared correctly. Change-Id: I880946d0c61a209d5a16ff7d2aada43f87a075c5 Signed-off-by: Zheng Yang --- drivers/gpu/drm/rockchip/dw-dp.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/drivers/gpu/drm/rockchip/dw-dp.c b/drivers/gpu/drm/rockchip/dw-dp.c index 0a526badbc61..2c9632e090fa 100644 --- a/drivers/gpu/drm/rockchip/dw-dp.c +++ b/drivers/gpu/drm/rockchip/dw-dp.c @@ -1496,7 +1496,14 @@ static void dw_dp_encoder_enable(struct drm_encoder *encoder) static void dw_dp_encoder_disable(struct drm_encoder *encoder) { + struct dw_dp *dp = encoder_to_dp(encoder); + struct drm_crtc *crtc = encoder->crtc; + struct rockchip_crtc_state *s = to_rockchip_crtc_state(crtc->state); + if (dp->split_mode) + s->output_if &= ~(VOP_OUTPUT_IF_DP0 | VOP_OUTPUT_IF_DP1); + else + s->output_if &= ~(dp->id ? VOP_OUTPUT_IF_DP1 : VOP_OUTPUT_IF_DP0); } static int dw_dp_encoder_atomic_check(struct drm_encoder *encoder, @@ -1519,7 +1526,7 @@ static int dw_dp_encoder_atomic_check(struct drm_encoder *encoder, s->output_flags |= dp->id ? ROCKCHIP_OUTPUT_DATA_SWAP : 0; s->output_if |= VOP_OUTPUT_IF_DP0 | VOP_OUTPUT_IF_DP1; } else { - s->output_if = dp->id ? VOP_OUTPUT_IF_DP1 : VOP_OUTPUT_IF_DP0; + s->output_if |= dp->id ? VOP_OUTPUT_IF_DP1 : VOP_OUTPUT_IF_DP0; } s->output_bpc = di->bpc; s->bus_flags = di->bus_flags;