drm/rockchip: vop: move dclk pll into vop private data
authorMark Yao <mark.yao@rock-chips.com>
Thu, 27 Jul 2017 03:18:35 +0000 (11:18 +0800)
committerHuang, Tao <huangtao@rock-chips.com>
Thu, 27 Jul 2017 08:45:55 +0000 (16:45 +0800)
each vop only need one dclk pll reference, Save dclk pll
on rockchip_crtc_state would make things complex

Change-Id: Id779f1bf54d5bfa52aed413c238781083f333782
Signed-off-by: Mark Yao <mark.yao@rock-chips.com>
drivers/gpu/drm/rockchip/rockchip_drm_drv.h
drivers/gpu/drm/rockchip/rockchip_drm_vop.c

index 50eed5037760552e13f0822109e9a43a1b3fe267..4379bb971844726aaab39abc3b0bc0d2c5ce3216 100644 (file)
@@ -76,7 +76,6 @@ struct rockchip_dclk_pll {
 struct rockchip_crtc_state {
        struct drm_crtc_state base;
        struct drm_property_blob *cabc_lut;
-       struct rockchip_dclk_pll *pll;
        int left_margin;
        int right_margin;
        int top_margin;
index cf99c393ef60ecb1ce0471c72689b9c621b57ee3..9110d553b0f97c331e0c829648bffc64b8dfa9ce 100644 (file)
@@ -234,6 +234,8 @@ struct vop {
        struct devfreq *devfreq;
        struct notifier_block dmc_nb;
 
+       struct rockchip_dclk_pll *pll;
+
        struct vop_win win[];
 };
 
@@ -1683,8 +1685,8 @@ static void vop_crtc_enable(struct drm_crtc *crtc)
                   0 : BIT(VSYNC_POSITIVE);
        VOP_CTRL_SET(vop, pin_pol, val);
 
-       if (vop->dclk_source && s->pll && s->pll->pll) {
-               if (clk_set_parent(vop->dclk_source, s->pll->pll))
+       if (vop->dclk_source && vop->pll && vop->pll->pll) {
+               if (clk_set_parent(vop->dclk_source, vop->pll->pll))
                        DRM_DEV_ERROR(vop->dev,
                                      "failed to set dclk's parents\n");
        }
@@ -1928,30 +1930,31 @@ static void vop_dclk_source_generate(struct drm_crtc *crtc,
        struct rockchip_crtc_state *s = to_rockchip_crtc_state(crtc_state);
        struct rockchip_crtc_state *old_s = to_rockchip_crtc_state(crtc->state);
        struct vop *vop = to_vop(crtc);
+       struct rockchip_dclk_pll *old_pll = vop->pll;
 
        if (!vop->dclk_source)
                return;
 
        if (crtc_state->active) {
-               WARN_ON(s->pll && !s->pll->use_count);
-               if (!s->pll || s->pll->use_count > 1 ||
+               WARN_ON(vop->pll && !vop->pll->use_count);
+               if (!vop->pll || vop->pll->use_count > 1 ||
                    s->output_type != old_s->output_type) {
-                       if (s->pll)
-                               s->pll->use_count--;
+                       if (vop->pll)
+                               vop->pll->use_count--;
 
                        if (s->output_type != DRM_MODE_CONNECTOR_HDMIA &&
                            !private->default_pll.use_count)
-                               s->pll = &private->default_pll;
+                               vop->pll = &private->default_pll;
                        else
-                               s->pll = &private->hdmi_pll;
+                               vop->pll = &private->hdmi_pll;
 
-                       s->pll->use_count++;
+                       vop->pll->use_count++;
                }
-       } else if (s->pll) {
-               s->pll->use_count--;
-               s->pll = NULL;
+       } else if (vop->pll) {
+               vop->pll->use_count--;
+               vop->pll = NULL;
        }
-       if (s->pll && s->pll != old_s->pll)
+       if (vop->pll != old_pll)
                crtc_state->mode_changed = true;
 }
 
@@ -2343,11 +2346,11 @@ static void vop_crtc_reset(struct drm_crtc *crtc)
                parent = clk_get_parent(vop->dclk_source);
                if (parent) {
                        if (clk_is_match(private->default_pll.pll, parent))
-                               s->pll = &private->default_pll;
+                               vop->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++;
+                               vop->pll = &private->hdmi_pll;
+                       if (vop->pll)
+                               vop->pll->use_count++;
                }
        }
        s->left_margin = 100;