Loading drivers/video/msm/mdss/mdss_mdp_overlay.c +28 −9 Original line number Diff line number Diff line Loading @@ -52,6 +52,7 @@ static int mdss_mdp_overlay_fb_parse_dt(struct msm_fb_data_type *mfd); static int mdss_mdp_overlay_off(struct msm_fb_data_type *mfd); static void __overlay_kickoff_requeue(struct msm_fb_data_type *mfd); static void __vsync_retire_signal(struct msm_fb_data_type *mfd, int val); static int __vsync_set_vsync_handler(struct msm_fb_data_type *mfd); static inline bool is_ov_right_blend(struct mdp_rect *left_blend, struct mdp_rect *right_blend, u32 left_lm_w) Loading Loading @@ -1385,6 +1386,8 @@ int mdss_mdp_overlay_kickoff(struct msm_fb_data_type *mfd, mdss_mdp_clk_ctrl(MDP_BLOCK_POWER_ON); __vsync_set_vsync_handler(mfd); if (data) { mdss_mdp_set_roi(ctl, data); } else { Loading Loading @@ -3538,7 +3541,7 @@ __vsync_retire_get_fence(struct msm_sync_pt_data *sync_pt_data) struct msm_fb_data_type *mfd; struct mdss_overlay_private *mdp5_data; struct mdss_mdp_ctl *ctl; int rc, value; int value; mfd = container_of(sync_pt_data, typeof(*mfd), mdp_sync_pt_data); mdp5_data = mfd_to_mdp5_data(mfd); Loading @@ -3555,14 +3558,6 @@ __vsync_retire_get_fence(struct msm_sync_pt_data *sync_pt_data) return ERR_PTR(-EPERM); } if (!mdp5_data->vsync_retire_handler.enabled) { mdss_mdp_clk_ctrl(MDP_BLOCK_POWER_ON); rc = ctl->add_vsync_handler(ctl, &mdp5_data->vsync_retire_handler); mdss_mdp_clk_ctrl(MDP_BLOCK_POWER_OFF); if (IS_ERR_VALUE(rc)) return ERR_PTR(rc); } value = mdp5_data->vsync_timeline->value + 1 + mdp5_data->retire_cnt; mdp5_data->retire_cnt++; Loading @@ -3570,6 +3565,30 @@ __vsync_retire_get_fence(struct msm_sync_pt_data *sync_pt_data) "mdp-retire", value); } static int __vsync_set_vsync_handler(struct msm_fb_data_type *mfd) { struct mdss_overlay_private *mdp5_data = mfd_to_mdp5_data(mfd); struct mdss_mdp_ctl *ctl; int rc; ctl = mdp5_data->ctl; if (!mdp5_data->retire_cnt || mdp5_data->vsync_retire_handler.enabled) return 0; if (!ctl->add_vsync_handler) return -EOPNOTSUPP; if (!ctl->power_on) { pr_debug("fb%d vsync pending first update\n", mfd->index); return -EPERM; } rc = ctl->add_vsync_handler(ctl, &mdp5_data->vsync_retire_handler); return rc; } static int __vsync_retire_setup(struct msm_fb_data_type *mfd) { struct mdss_overlay_private *mdp5_data = mfd_to_mdp5_data(mfd); Loading Loading
drivers/video/msm/mdss/mdss_mdp_overlay.c +28 −9 Original line number Diff line number Diff line Loading @@ -52,6 +52,7 @@ static int mdss_mdp_overlay_fb_parse_dt(struct msm_fb_data_type *mfd); static int mdss_mdp_overlay_off(struct msm_fb_data_type *mfd); static void __overlay_kickoff_requeue(struct msm_fb_data_type *mfd); static void __vsync_retire_signal(struct msm_fb_data_type *mfd, int val); static int __vsync_set_vsync_handler(struct msm_fb_data_type *mfd); static inline bool is_ov_right_blend(struct mdp_rect *left_blend, struct mdp_rect *right_blend, u32 left_lm_w) Loading Loading @@ -1385,6 +1386,8 @@ int mdss_mdp_overlay_kickoff(struct msm_fb_data_type *mfd, mdss_mdp_clk_ctrl(MDP_BLOCK_POWER_ON); __vsync_set_vsync_handler(mfd); if (data) { mdss_mdp_set_roi(ctl, data); } else { Loading Loading @@ -3538,7 +3541,7 @@ __vsync_retire_get_fence(struct msm_sync_pt_data *sync_pt_data) struct msm_fb_data_type *mfd; struct mdss_overlay_private *mdp5_data; struct mdss_mdp_ctl *ctl; int rc, value; int value; mfd = container_of(sync_pt_data, typeof(*mfd), mdp_sync_pt_data); mdp5_data = mfd_to_mdp5_data(mfd); Loading @@ -3555,14 +3558,6 @@ __vsync_retire_get_fence(struct msm_sync_pt_data *sync_pt_data) return ERR_PTR(-EPERM); } if (!mdp5_data->vsync_retire_handler.enabled) { mdss_mdp_clk_ctrl(MDP_BLOCK_POWER_ON); rc = ctl->add_vsync_handler(ctl, &mdp5_data->vsync_retire_handler); mdss_mdp_clk_ctrl(MDP_BLOCK_POWER_OFF); if (IS_ERR_VALUE(rc)) return ERR_PTR(rc); } value = mdp5_data->vsync_timeline->value + 1 + mdp5_data->retire_cnt; mdp5_data->retire_cnt++; Loading @@ -3570,6 +3565,30 @@ __vsync_retire_get_fence(struct msm_sync_pt_data *sync_pt_data) "mdp-retire", value); } static int __vsync_set_vsync_handler(struct msm_fb_data_type *mfd) { struct mdss_overlay_private *mdp5_data = mfd_to_mdp5_data(mfd); struct mdss_mdp_ctl *ctl; int rc; ctl = mdp5_data->ctl; if (!mdp5_data->retire_cnt || mdp5_data->vsync_retire_handler.enabled) return 0; if (!ctl->add_vsync_handler) return -EOPNOTSUPP; if (!ctl->power_on) { pr_debug("fb%d vsync pending first update\n", mfd->index); return -EPERM; } rc = ctl->add_vsync_handler(ctl, &mdp5_data->vsync_retire_handler); return rc; } static int __vsync_retire_setup(struct msm_fb_data_type *mfd) { struct mdss_overlay_private *mdp5_data = mfd_to_mdp5_data(mfd); Loading