drm/rockchip: vop2: dp and hdmi omit mode fixup

Dp and hdmi need setting precise clock, if the clock source can't
generator the precise clock for a display mode, the display mode
will be filter in mode valid previous.

Signed-off-by: Zhang Yubing <yubing.zhang@rock-chips.com>
Change-Id: I9ec86296a8332368d9f851640c7e8d067a0d96c3
This commit is contained in:
Zhang Yubing
2022-01-16 14:37:58 +08:00
parent 0fa7f27673
commit 3aa6ab2a5d

View File

@@ -5117,12 +5117,26 @@ static bool vop2_crtc_mode_fixup(struct drm_crtc *crtc,
struct drm_display_mode *adj_mode)
{
struct vop2_video_port *vp = to_vop2_video_port(crtc);
struct drm_connector *connector;
struct drm_connector_list_iter conn_iter;
struct drm_crtc_state *new_crtc_state = container_of(mode, struct drm_crtc_state, mode);
drm_mode_set_crtcinfo(adj_mode, CRTC_INTERLACE_HALVE_V | CRTC_STEREO_DOUBLE);
if (mode->flags & DRM_MODE_FLAG_DBLCLK)
adj_mode->crtc_clock *= 2;
drm_connector_list_iter_begin(crtc->dev, &conn_iter);
drm_for_each_connector_iter(connector, &conn_iter) {
if ((new_crtc_state->connector_mask & drm_connector_mask(connector)) &&
((connector->connector_type == DRM_MODE_CONNECTOR_DisplayPort) ||
(connector->connector_type == DRM_MODE_CONNECTOR_HDMIA))) {
drm_connector_list_iter_end(&conn_iter);
return true;
}
}
drm_connector_list_iter_end(&conn_iter);
if (adj_mode->crtc_clock <= VOP2_MAX_DCLK_RATE)
adj_mode->crtc_clock = DIV_ROUND_UP(clk_round_rate(vp->dclk,
adj_mode->crtc_clock * 1000), 1000);