drm/rockchip: vop: double dclk when interface is BT656 on rv1106

Signed-off-by: Damon Ding <damon.ding@rock-chips.com>
Change-Id: Ia1fdfb2be84b1dc8b6e219cf1ae0a0692f42e09a
This commit is contained in:
Damon Ding
2022-03-31 11:27:29 +08:00
committed by Tao Huang
parent 37627a745e
commit 36bede602e

View File

@@ -2736,7 +2736,12 @@ vop_crtc_mode_valid(struct drm_crtc *crtc, const struct drm_display_mode *mode)
VOP_MINOR(vop->version) <= 2)
return MODE_BAD;
if (mode->flags & DRM_MODE_FLAG_DBLCLK)
/*
* Dclk need to be double if BT656 interface and vop version >= 2.12.
*/
if (mode->flags & DRM_MODE_FLAG_DBLCLK ||
(VOP_MAJOR(vop->version) == 2 && VOP_MINOR(vop->version) >= 12 &&
s->output_if & VOP_OUTPUT_IF_BT656))
request_clock *= 2;
clock = clk_round_rate(vop->dclk, request_clock * 1000) / 1000;
@@ -3038,6 +3043,8 @@ static bool vop_crtc_mode_fixup(struct drm_crtc *crtc,
{
struct vop *vop = to_vop(crtc);
const struct vop_data *vop_data = vop->data;
struct rockchip_crtc_state *s =
to_rockchip_crtc_state(crtc->state);
if (mode->hdisplay > vop_data->max_output.width)
return false;
@@ -3045,7 +3052,12 @@ static bool vop_crtc_mode_fixup(struct drm_crtc *crtc,
drm_mode_set_crtcinfo(adj_mode,
CRTC_INTERLACE_HALVE_V | CRTC_STEREO_DOUBLE);
if (mode->flags & DRM_MODE_FLAG_DBLCLK)
/*
* Dclk need to be double if BT656 interface and vop version >= 2.12.
*/
if (mode->flags & DRM_MODE_FLAG_DBLCLK ||
(VOP_MAJOR(vop->version) == 2 && VOP_MINOR(vop->version) >= 12 &&
s->output_if & VOP_OUTPUT_IF_BT656))
adj_mode->crtc_clock *= 2;
adj_mode->crtc_clock =