summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSree Sesha Aravind Vadrevu <svadrevu@codeaurora.org>2013-05-30 13:19:43 -0700
committerDavid Keitel <dkeitel@codeaurora.org>2016-03-23 20:17:55 -0700
commitfc32b1a18d17ea7f0cf70677c2b160bafc4b678f (patch)
tree321b3ab78ba153440eac0072785906752a9cb8a0
parent9ebd686393001417e35cf8a74b8e779533caeb56 (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.h1
-rw-r--r--drivers/video/fbdev/msm/mdss_mdp.c16
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);