From 0067dcdcd2f09efc2fcd95a31397470a8ef44f12 Mon Sep 17 00:00:00 2001 From: Benet Clark Date: Fri, 18 Sep 2015 13:06:11 -0700 Subject: [PATCH] msm: mdss: Move PP reg bus vote to reg bus voting framework There is a new framework for MDSS voting on the reg bus. However, the postprocessing client was never registered, and therefore making bus requests without the framework. This change moves the PP reg bus voting to be a part of the MDSS bus voting framework. Change-Id: I054b102baec0ccae56e7b9faafa8feadf3fc8d7a Signed-off-by: Benet Clark [cip@codeaurora.org: Resolved merge conflict] Signed-off-by: Clarence Ip --- drivers/video/fbdev/msm/mdss.h | 1 + drivers/video/fbdev/msm/mdss_mdp_pp.c | 34 +++++++++++++++++---------- 2 files changed, 22 insertions(+), 13 deletions(-) diff --git a/drivers/video/fbdev/msm/mdss.h b/drivers/video/fbdev/msm/mdss.h index 55fbd7c3a49a..a5fff43680db 100644 --- a/drivers/video/fbdev/msm/mdss.h +++ b/drivers/video/fbdev/msm/mdss.h @@ -314,6 +314,7 @@ struct mdss_data_type { struct list_head reg_bus_clist; struct mutex reg_bus_lock; struct reg_bus_client *reg_bus_clt; + struct reg_bus_client *pp_reg_bus_clt; u32 axi_port_cnt; u32 nrt_axi_port_cnt; diff --git a/drivers/video/fbdev/msm/mdss_mdp_pp.c b/drivers/video/fbdev/msm/mdss_mdp_pp.c index f36779627d0a..3f0e27201554 100644 --- a/drivers/video/fbdev/msm/mdss_mdp_pp.c +++ b/drivers/video/fbdev/msm/mdss_mdp_pp.c @@ -1960,13 +1960,12 @@ error: int mdss_mdp_pp_setup_locked(struct mdss_mdp_ctl *ctl) { struct mdss_data_type *mdata = ctl->mdata; - int ret = 0; + int ret = 0, i; u32 flags, pa_v2_flags; u32 max_bw_needed; u32 mixer_cnt; u32 mixer_id[MDSS_MDP_INTF_MAX_LAYERMIXER]; u32 disp_num; - int i, req = -1; bool valid_mixers = true; bool valid_ad_panel = true; if ((!ctl) || (!ctl->mfd) || (!mdss_pp_res) || (!mdata)) @@ -2009,7 +2008,6 @@ int mdss_mdp_pp_setup_locked(struct mdss_mdp_ctl *ctl) else pa_v2_flags = mdss_pp_res->pa_v2_disp_cfg[disp_num].pa_v2_data.flags; - /* * If a LUT based PP feature needs to be reprogrammed during resume, * increase the register bus bandwidth to maximum frequency @@ -2018,11 +2016,11 @@ int mdss_mdp_pp_setup_locked(struct mdss_mdp_ctl *ctl) max_bw_needed = (IS_PP_RESUME_COMMIT(flags) && (IS_PP_LUT_DIRTY(flags) || IS_SIX_ZONE_DIRTY(flags, pa_v2_flags))); - if (mdata->reg_bus_hdl && max_bw_needed) { - req = msm_bus_scale_client_update_request(mdata->reg_bus_hdl, - REG_CLK_CFG_HIGH); - if (req) - pr_err("Updated reg_bus_scale failed, ret = %d", req); + if (mdata->pp_reg_bus_clt && max_bw_needed) { + ret = mdss_update_reg_bus_vote(mdata->pp_reg_bus_clt, + VOTE_INDEX_80_MHZ); + if (ret) + pr_err("Updated reg_bus_scale failed, ret = %d", ret); } if (ctl->mixer_left) { @@ -2040,11 +2038,11 @@ int mdss_mdp_pp_setup_locked(struct mdss_mdp_ctl *ctl) mdata->ad_cfgs[disp_num].reg_sts = 0; } - if (mdata->reg_bus_hdl && max_bw_needed) { - req = msm_bus_scale_client_update_request(mdata->reg_bus_hdl, - REG_CLK_CFG_OFF); - if (req) - pr_err("Updated reg_bus_scale failed, ret = %d", req); + if (mdata->pp_reg_bus_clt && max_bw_needed) { + ret = mdss_update_reg_bus_vote(mdata->pp_reg_bus_clt, + VOTE_INDEX_DISABLE); + if (ret) + pr_err("Updated reg_bus_scale failed, ret = %d", ret); } if (IS_PP_RESUME_COMMIT(flags)) mdss_pp_res->pp_disp_flags[disp_num] &= @@ -2304,6 +2302,11 @@ int mdss_mdp_pp_init(struct device *dev) if (!mdata) return -EPERM; + + mdata->pp_reg_bus_clt = mdss_reg_bus_vote_client_create("pp\0"); + if (IS_ERR_OR_NULL(mdata->pp_reg_bus_clt)) + pr_err("bus client register failed\n"); + mutex_lock(&mdss_pp_mutex); if (!mdss_pp_res) { mdss_pp_res = devm_kzalloc(dev, sizeof(*mdss_pp_res), @@ -2400,6 +2403,8 @@ pp_exit: void mdss_mdp_pp_term(struct device *dev) { + struct mdss_data_type *mdata = mdss_mdp_get_mdata(); + if (mdss_pp_res) { mutex_lock(&mdss_pp_mutex); devm_kfree(dev, mdss_pp_res->dspp_hist); @@ -2407,6 +2412,9 @@ void mdss_mdp_pp_term(struct device *dev) mdss_pp_res = NULL; mutex_unlock(&mdss_pp_mutex); } + + mdss_reg_bus_vote_client_destroy(mdata->pp_reg_bus_clt); + mdata->pp_reg_bus_clt = NULL; } int mdss_mdp_pp_overlay_init(struct msm_fb_data_type *mfd)