From: Mark Yao Date: Thu, 15 Jun 2017 03:39:13 +0000 (+0800) Subject: drm/rockchip: vop: initital crtc pll status X-Git-Tag: release-20171130_firefly~4^2~391 X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;ds=sidebyside;h=2eabaca27c86204b9736e2703d06a3b16f85ad2b;p=firefly-linux-kernel-4.4.55.git drm/rockchip: vop: initital crtc pll status If the crtc pll status is not init, always cause mode_changed at first dclk source generate, that would cause logo flush fixup(10a90aa drm/rockchip: support setting specail pll for hdmi) Change-Id: I0ee20fd098654ff89f268be82b50d2d5b605e9d5 Signed-off-by: Mark Yao --- diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c index 266ee026c672..aa348530fec5 100644 --- a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c +++ b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c @@ -2127,6 +2127,8 @@ static void vop_crtc_destroy(struct drm_crtc *crtc) static void vop_crtc_reset(struct drm_crtc *crtc) { struct rockchip_crtc_state *s = to_rockchip_crtc_state(crtc->state); + struct rockchip_drm_private *private = crtc->dev->dev_private; + struct vop *vop = to_vop(crtc); if (crtc->state) { __drm_atomic_helper_crtc_destroy_state(crtc, crtc->state); @@ -2138,6 +2140,20 @@ static void vop_crtc_reset(struct drm_crtc *crtc) return; crtc->state = &s->base; crtc->state->crtc = crtc; + + if (vop->dclk_source) { + struct clk *parent; + + parent = clk_get_parent(vop->dclk_source); + if (parent) { + if (clk_is_match(private->default_pll.pll, parent)) + s->pll = &private->default_pll; + else if (clk_is_match(private->hdmi_pll.pll, parent)) + s->pll = &private->hdmi_pll; + if (s->pll) + s->pll->use_count++; + } + } s->left_margin = 100; s->right_margin = 100; s->top_margin = 100;