drm/rockchip: vop2: Invert HDMI V/HSYNC polarity for rk3588

HDMI on rk3588 have a inverted V/HSYNC polarity than
other platform.

Signed-off-by: Andy Yan <andy.yan@rock-chips.com>
Change-Id: I84fc369c211a6f8715c77421c0938fe05516fca6
This commit is contained in:
Andy Yan
2021-11-15 20:42:37 +08:00
committed by Tao Huang
parent f50cc40593
commit 7cac99fca4

View File

@@ -5360,6 +5360,21 @@ static int vop2_get_mipi_port_mux(struct vop2 *vop2, int vp_id)
}
}
static u32 vop2_get_hdmi_pol(struct vop2 *vop2, u32 flags)
{
u32 val;
if (vop2->version == VOP_VERSION_RK3588) {
val = (flags & DRM_MODE_FLAG_NHSYNC) ? BIT(HSYNC_POSITIVE) : 0;
val |= (flags & DRM_MODE_FLAG_NVSYNC) ? BIT(VSYNC_POSITIVE) : 0;
} else {
val = (flags & DRM_MODE_FLAG_NHSYNC) ? 0 : BIT(HSYNC_POSITIVE);
val |= (flags & DRM_MODE_FLAG_NVSYNC) ? 0 : BIT(VSYNC_POSITIVE);
}
return val;
}
static void vop2_crtc_atomic_enable(struct drm_crtc *crtc, struct drm_crtc_state *old_state)
{
struct vop2_video_port *vp = to_vop2_video_port(crtc);
@@ -5598,6 +5613,7 @@ static void vop2_crtc_atomic_enable(struct drm_crtc *crtc, struct drm_crtc_state
if (vcstate->dsc_enable)
VOP_GRF_SET(vop2, grf, grf_hdmi0_dsc_en, 1);
val = vop2_get_hdmi_pol(vop2, adjusted_mode->flags);
VOP_GRF_SET(vop2, grf, grf_hdmi0_en, 1);
VOP_GRF_SET(vop2, vo1_grf, grf_hdmi0_pin_pol, val);
@@ -5621,6 +5637,7 @@ static void vop2_crtc_atomic_enable(struct drm_crtc *crtc, struct drm_crtc_state
if (vcstate->dsc_enable)
VOP_GRF_SET(vop2, grf, grf_hdmi1_dsc_en, 1);
val = vop2_get_hdmi_pol(vop2, adjusted_mode->flags);
VOP_GRF_SET(vop2, grf, grf_hdmi1_en, 1);
VOP_GRF_SET(vop2, vo1_grf, grf_hdmi1_pin_pol, val);