msm_fb: display: switch blt mode on/off without turning off TG

Turning off dtv TG may cause blink. MDP requires h/w idle to change
blt mode, turning off TG can make sure mdp h/w is idle. If turning off
TG is not desired, one way to do is to check busy bits of overlay and
dmae and once they are both idle, the mode can be changed.

CRs-Fixed: 363717
Change-Id: I2817d7751ed04fd9ed144974328c4518c54af3d6
Signed-off-by: Huaibin Yang <huaibiny@codeaurora.org>
Signed-off-by: Ajay Singh Parmar <aparmar@codeaurora.org>
diff --git a/drivers/video/msm/mdp4_overlay_dtv.c b/drivers/video/msm/mdp4_overlay_dtv.c
index b9d6037..3ba4c7d 100644
--- a/drivers/video/msm/mdp4_overlay_dtv.c
+++ b/drivers/video/msm/mdp4_overlay_dtv.c
@@ -672,15 +672,19 @@
 	if (!change)
 		return;
 
-	if (dtv_enabled) {
+	if (dtv_enabled)
 		mdp4_overlay_dtv_wait4dmae(mfd);
-		MDP_OUTP(MDP_BASE + DTV_BASE, 0);	/* stop dtv */
-		msleep(20);
-	}
 
-	mdp4_overlay_dmae_xy(dtv_pipe);
-	mdp4_overlayproc_cfg(dtv_pipe);
-	MDP_OUTP(MDP_BASE + DTV_BASE, 1);	/* start dtv */
+	while (inpdw(MDP_BASE + 0x0018) & 0x12)
+		;
+
+	if (enable) {
+		mdp4_overlayproc_cfg(dtv_pipe);
+		mdp4_overlay_dmae_xy(dtv_pipe);
+	} else {
+		mdp4_overlay_dmae_xy(dtv_pipe);
+		mdp4_overlayproc_cfg(dtv_pipe);
+	}
 }
 
 void mdp4_dtv_overlay_blt_start(struct msm_fb_data_type *mfd)