Possible fix
I might have found the source of the problem in the kernel's msm framebuffer driver.
I didn't have time to look into more detail but I noticed that in drivers/video/msm/msm_fb.c you have a check for the overlay_play result and force update and sleeping state (don't know what this is for).
If I remove this check and just go everytime with msmfb_pan_update than I no longer see the freeze.
This is the whole diff for my test, if anybody know how to code this the proper way please go ahead:
--- a/drivers/video/msm/msm_fb.c
+++ b/drivers/video/msm/msm_fb.c
@@ -805,7 +805,7 @@ static int msmfb_overlay_play(struct fb_info *info, unsigned long *argp)
int ret;
struct msmfb_overlay_data req;
struct file *p_src_file = 0;
- struct msmfb_info *msmfb = info->par;
+// struct msmfb_info *msmfb = info->par;
ret = copy_from_user(&req, argp, sizeof(req));
if (ret) {
@@ -816,12 +816,11 @@ static int msmfb_overlay_play(struct fb_info *info, unsigned long *argp)
ret = mdp->overlay_play(mdp, info, &req, &p_src_file);
- if (ret == 0 && (mdp->overrides & MSM_MDP_FORCE_UPDATE)
- && msmfb->sleeping == AWAKE) {
+// if (ret == 0) {
msmfb_pan_update(info,
0, 0, info->var.xres, info->var.yres,
info->var.yoffset, 1);
- }
+// }
if (p_src_file)
put_pmem_file(p_src_file);
Unfortunately I won't be able to go ahead with it this week so be my guest