FRAMEBUFFER: increase FB clock. Minor clean up of deadline io sched and cpu clock ...
/drivers/video/msm/mdp4_overlay_dsi_video.c
blob:ba5af45f150e64040590b46ce0b24d4eb63def3f -> blob:f42bd5c74e28ba27a4afa57178d8519d94e944d8
--- drivers/video/msm/mdp4_overlay_dsi_video.c
+++ drivers/video/msm/mdp4_overlay_dsi_video.c
@@ -45,11 +45,9 @@ static int dsi_video_enabled;
#define MAX_CONTROLLER 1
-#ifdef BLT_MODE_CHANGE_ISSUE
-static struct wake_lock blt_mode_perf_up;
-static int blt_wake_lock_init = 0;
-extern int middle_of_blt_change;
-#endif
+extern struct mdp4_overlay_perf perf_request;
+static struct wake_lock blt_mode_perf_up;
+static int blt_wake_lock_init = 0;
static struct vsycn_ctrl {
struct device *dev;
@@ -163,6 +161,9 @@ int mdp4_dsi_video_pipe_commit(int cndx,
struct mdp4_overlay_pipe *real_pipe;
unsigned long flags;
int cnt = 0;
+ bool blt_mode_perf_backup = false;
+ u32 mdp_bw_backup = 0;
+ u32 mdp_clk_backup = 0;
vctrl = &vsync_ctrl_db[cndx];
@@ -199,9 +200,18 @@ int mdp4_dsi_video_pipe_commit(int cndx,
}
spin_unlock_irqrestore(&vctrl->spin_lock, flags);
+ if(vctrl->blt_change) {
+ blt_mode_perf_backup = true;
+ mdp_bw_backup = perf_request.mdp_bw;
+ mdp_clk_backup = perf_request.mdp_clk_rate;
+ perf_request.mdp_bw = OVERLAY_PERF_LEVEL_MAX;
+ perf_request.mdp_clk_rate = mdp_max_clk;
+ }
+
mdp4_overlay_mdp_perf_upd(vctrl->mfd, 1);
if (vctrl->blt_change) {
+ wake_lock(&blt_mode_perf_up);
pipe = vctrl->base_pipe;
spin_lock_irqsave(&vctrl->spin_lock, flags);
INIT_COMPLETION(vctrl->dmap_comp);
@@ -211,6 +221,11 @@ int mdp4_dsi_video_pipe_commit(int cndx,
mdp4_dsi_video_wait4dmap(0);
if (pipe->ov_blt_addr)
mdp4_dsi_video_wait4ov(0);
+ if(blt_mode_perf_backup == true){
+ perf_request.mdp_bw = mdp_bw_backup;
+ perf_request.mdp_clk_rate = mdp_clk_backup;
+ }
+ wake_unlock(&blt_mode_perf_up);
}
pipe = vp->plist;
@@ -689,13 +704,10 @@ int mdp4_dsi_video_on(struct platform_de
mdp_histogram_ctrl_all(TRUE);
-#ifdef BLT_MODE_CHANGE_ISSUE
- if(!blt_wake_lock_init)
- {
- wake_lock_init(&blt_mode_perf_up, WAKE_LOCK_IDLE, "blt_mode_wakelock");
- blt_wake_lock_init = true;
- }
-#endif
+ if(!blt_wake_lock_init) {
+ wake_lock_init(&blt_mode_perf_up, WAKE_LOCK_IDLE, "blt_mode_wakelock");
+ blt_wake_lock_init = true;
+ }
if (!vctrl->sysfs_created) {
ret = sysfs_create_group(&vctrl->dev->kobj,
@@ -984,26 +996,6 @@ void mdp4_dmap_done_dsi_video(int cndx)
spin_unlock(&vctrl->spin_lock);
}
-
-#ifdef BLT_MODE_CHANGE_ISSUE
-void mdp4_overlay0_done_blt_mode_change_recovery(int cndx)
-{
- struct vsycn_ctrl *vctrl;
- struct mdp4_overlay_pipe *pipe;
-
- vctrl = &vsync_ctrl_db[cndx];
- pipe = vctrl->base_pipe;
-
- spin_lock(&vctrl->spin_lock);
- vsync_irq_disable(INTR_OVERLAY0_DONE, MDP_OVERLAY0_TERM);
- vctrl->ov_done++;
- complete_all(&vctrl->ov_comp);
- spin_unlock(&vctrl->spin_lock);
-
- return;
-}
-#endif
-
/*
* mdp4_overlay0_done_dsi: called from isr
*/
@@ -1039,9 +1031,7 @@ static void mdp4_dsi_video_do_blt(struct
int cndx = 0;
struct vsycn_ctrl *vctrl;
struct mdp4_overlay_pipe *pipe;
-#ifdef BLT_MODE_CHANGE_ISSUE
- int tg_enabled;
-#endif
+
vctrl = &vsync_ctrl_db[cndx];
pipe = vctrl->base_pipe;
@@ -1051,9 +1041,7 @@ static void mdp4_dsi_video_do_blt(struct
pr_info("%s: no blt_base assigned\n", __func__);
return;
}
-#ifdef BLT_MODE_CHANGE_ISSUE
- wake_lock(&blt_mode_perf_up);
-#endif
+
spin_lock_irqsave(&vctrl->spin_lock, flag);
if (enable && pipe->ov_blt_addr == 0) {
pipe->ov_blt_addr = mfd->ov0_wb_buf->write_addr;
@@ -1077,27 +1065,10 @@ static void mdp4_dsi_video_do_blt(struct
if (!vctrl->blt_change) {
spin_unlock_irqrestore(&vctrl->spin_lock, flag);
-#ifdef BLT_MODE_CHANGE_ISSUE
- wake_unlock(&blt_mode_perf_up);
-#endif
return;
}
spin_unlock_irqrestore(&vctrl->spin_lock, flag);
- #ifdef BLT_MODE_CHANGE_ISSUE
- tg_enabled = inpdw(MDP_BASE + DSI_VIDEO_BASE) & 0x01;
- if(middle_of_blt_change != 3)
- middle_of_blt_change = TRUE;
- if (tg_enabled) {
- mdp4_dsi_video_wait4dmap_done(0);
- if (pipe->ov_blt_addr)
- mdp4_dsi_video_wait4ov(0);
- vctrl->blt_change = 0;
- }
- vctrl->blt_change = 0;
- middle_of_blt_change = FALSE;
- wake_unlock(&blt_mode_perf_up);
-#endif
}
void mdp4_dsi_video_overlay_blt(struct msm_fb_data_type *mfd,
@@ -1154,7 +1125,7 @@ void mdp4_dsi_video_overlay(struct msm_f
int ret = mdp4_dsi_video_pipe_commit(0, 0);
mutex_unlock(&mfd->dma->ov_mutex);
-
+
if (ret) {
if (pipe->ov_blt_addr)
mdp4_dsi_video_wait4ov(0);