diff options
| author | Sree Sesha Aravind Vadrevu <svadrevu@codeaurora.org> | 2013-05-30 13:19:43 -0700 |
|---|---|---|
| committer | David Keitel <dkeitel@codeaurora.org> | 2016-03-23 20:17:55 -0700 |
| commit | fc32b1a18d17ea7f0cf70677c2b160bafc4b678f (patch) | |
| tree | 321b3ab78ba153440eac0072785906752a9cb8a0 | |
| parent | 9ebd686393001417e35cf8a74b8e779533caeb56 (diff) | |
msm: mdss: update bandwidth requests on clock switches
Bandwidth requests to the bus need to be cleared when clock
is turned off for command panel to save power.
Change-Id: Id952bf191100ec817c7201e8948ce1eefd6cdc8d
Signed-off-by: Sree Sesha Aravind Vadrevu <svadrevu@codeaurora.org>
| -rw-r--r-- | drivers/video/fbdev/msm/mdss.h | 1 | ||||
| -rw-r--r-- | drivers/video/fbdev/msm/mdss_mdp.c | 16 |
2 files changed, 12 insertions, 5 deletions
diff --git a/drivers/video/fbdev/msm/mdss.h b/drivers/video/fbdev/msm/mdss.h index 64270866302c..43f24c7b8245 100644 --- a/drivers/video/fbdev/msm/mdss.h +++ b/drivers/video/fbdev/msm/mdss.h @@ -119,6 +119,7 @@ struct mdss_data_type { struct mdss_iommu_map_type *iommu_map; void *debug_data; + int current_bus_idx; }; extern struct mdss_data_type *mdss_res; diff --git a/drivers/video/fbdev/msm/mdss_mdp.c b/drivers/video/fbdev/msm/mdss_mdp.c index df9b5ca52443..59e5088d4d76 100644 --- a/drivers/video/fbdev/msm/mdss_mdp.c +++ b/drivers/video/fbdev/msm/mdss_mdp.c @@ -345,7 +345,6 @@ static void mdss_mdp_bus_scale_unregister(struct mdss_data_type *mdata) int mdss_mdp_bus_scale_set_quota(u64 ab_quota, u64 ib_quota) { - static int current_bus_idx; int bus_idx; if (mdss_res->bus_hdl < 1) { @@ -359,9 +358,10 @@ int mdss_mdp_bus_scale_set_quota(u64 ab_quota, u64 ib_quota) int num_cases = mdp_bus_scale_table.num_usecases; struct msm_bus_vectors *vect = NULL; - bus_idx = (current_bus_idx % (num_cases - 1)) + 1; + bus_idx = (mdss_res->current_bus_idx % (num_cases - 1)) + 1; - vect = mdp_bus_scale_table.usecase[current_bus_idx].vectors; + vect = mdp_bus_scale_table.usecase[mdss_res->current_bus_idx]. + vectors; /* avoid performing updates for small changes */ if ((ALIGN(ab_quota, SZ_64M) == ALIGN(vect->ab, SZ_64M)) && @@ -377,7 +377,7 @@ int mdss_mdp_bus_scale_set_quota(u64 ab_quota, u64 ib_quota) pr_debug("bus scale idx=%d ab=%llu ib=%llu\n", bus_idx, vect->ab, vect->ib); } - current_bus_idx = bus_idx; + mdss_res->current_bus_idx = bus_idx; return msm_bus_scale_client_update_request(mdss_res->bus_hdl, bus_idx); } @@ -626,8 +626,14 @@ void mdss_mdp_clk_ctrl(int enable, int isr) if (mdata->vsync_ena) mdss_mdp_clk_update(MDSS_CLK_MDP_VSYNC, enable); - if (!enable) + if (!enable) { + msm_bus_scale_client_update_request( + mdss_res->bus_hdl, 0); pm_runtime_put(&mdata->pdev->dev); + } else { + msm_bus_scale_client_update_request( + mdss_res->bus_hdl, mdss_res->current_bus_idx); + } } mutex_unlock(&mdp_clk_lock); |
