diff --git a/drivers/video/fbdev/msm/mdss_fb.c b/drivers/video/fbdev/msm/mdss_fb.c index 6c36892844de..aacf8aceb027 100644 --- a/drivers/video/fbdev/msm/mdss_fb.c +++ b/drivers/video/fbdev/msm/mdss_fb.c @@ -2507,9 +2507,11 @@ static int __mdss_fb_sync_buf_done_callback(struct notifier_block *p, switch (event) { case MDP_NOTIFY_FRAME_BEGIN: - if (mfd->idle_time) - mod_delayed_work(system_wq, &mfd->idle_notify_work, - msecs_to_jiffies(mfd->idle_time)); + if (mfd->idle_time && !mod_delayed_work(system_wq, + &mfd->idle_notify_work, + msecs_to_jiffies(WAIT_DISP_OP_TIMEOUT))) + pr_debug("fb%d: start idle delayed work\n", + mfd->index); break; case MDP_NOTIFY_FRAME_READY: if (sync_pt_data->async_wait_fences && @@ -2519,6 +2521,11 @@ static int __mdss_fb_sync_buf_done_callback(struct notifier_block *p, __mdss_fb_wait_for_fence_sub(sync_pt_data, sync_pt_data->temp_fen, fence_cnt); } + if (mfd->idle_time && !mod_delayed_work(system_wq, + &mfd->idle_notify_work, + msecs_to_jiffies(mfd->idle_time))) + pr_debug("fb%d: restarted idle work\n", + mfd->index); break; case MDP_NOTIFY_FRAME_FLUSHED: pr_debug("%s: frame flushed\n", sync_pt_data->fence_name);