From 46e88d6992bcc068485615445a8eed7263fde764 Mon Sep 17 00:00:00 2001 From: Zhang Yubing Date: Thu, 27 Feb 2025 11:20:37 +0800 Subject: [PATCH] drm/rockchip: dsi2: add crtc post enable and pre disable callback Add crtc post enable and pre disable callback. Setting dsc config done in crtc post enable callback if dsc is enable. Change-Id: I6eb5e3c14ba70c90d2f3337c22754a3a7a96ea81 Signed-off-by: Zhang Yubing Signed-off-by: Guochun Huang --- .../gpu/drm/rockchip/dw-mipi-dsi2-rockchip.c | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/drivers/gpu/drm/rockchip/dw-mipi-dsi2-rockchip.c b/drivers/gpu/drm/rockchip/dw-mipi-dsi2-rockchip.c index eab63327b6de..92a19144dbae 100644 --- a/drivers/gpu/drm/rockchip/dw-mipi-dsi2-rockchip.c +++ b/drivers/gpu/drm/rockchip/dw-mipi-dsi2-rockchip.c @@ -502,6 +502,7 @@ static void dw_mipi_dsi2_encoder_atomic_disable(struct drm_encoder *encoder, struct rockchip_crtc_state *s = to_rockchip_crtc_state(encoder->crtc->state); struct drm_crtc *new_crtc; struct drm_crtc_state *new_crtc_state = NULL; + int output_if; new_crtc = dw_mipi_dsi2_get_new_crtc(dsi2, old_state); if (new_crtc) @@ -530,6 +531,13 @@ static void dw_mipi_dsi2_encoder_atomic_disable(struct drm_encoder *encoder, dw_mipi_dsi2_post_disable(dsi2); + if (dsi2->slave) + output_if = VOP_OUTPUT_IF_MIPI0 | VOP_OUTPUT_IF_MIPI1; + else + output_if = dsi2->id ? VOP_OUTPUT_IF_MIPI1 : VOP_OUTPUT_IF_MIPI0; + + rockchip_drm_crtc_output_pre_disable(encoder->crtc, output_if); + dsi2->enabled = false; if (dsi2->slave) dsi2->slave->enabled = false; @@ -1013,7 +1021,7 @@ static void dw_mipi_dsi2_encoder_atomic_enable(struct drm_encoder *encoder, struct dw_mipi_dsi2 *dsi2 = encoder_to_dsi2(encoder); struct drm_crtc *crtc; struct drm_crtc_state *old_crtc_state = NULL; - int ret; + int output_if, ret; crtc = dw_mipi_dsi2_get_new_crtc(dsi2, state); if (crtc) @@ -1050,6 +1058,13 @@ static void dw_mipi_dsi2_encoder_atomic_enable(struct drm_encoder *encoder, if (old_crtc_state && old_crtc_state->self_refresh_active) rockchip_drm_crtc_standby(encoder->crtc, 0); + if (dsi2->slave) + output_if = VOP_OUTPUT_IF_MIPI0 | VOP_OUTPUT_IF_MIPI1; + else + output_if = dsi2->id ? VOP_OUTPUT_IF_MIPI1 : VOP_OUTPUT_IF_MIPI0; + + rockchip_drm_crtc_output_post_enable(encoder->crtc, output_if); + dsi2->enabled = true; if (dsi2->slave) dsi2->slave->enabled = true;