summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--drivers/video/fbdev/msm/mdss.h1
-rw-r--r--drivers/video/fbdev/msm/mdss_mdp_pp.c34
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)