summaryrefslogtreecommitdiff
path: root/drivers/gpu/drm
diff options
context:
space:
mode:
authorCamus Wong <camusw@codeaurora.org>2018-02-08 14:03:37 -0500
committerCamus Wong <camusw@codeaurora.org>2018-02-08 15:25:39 -0500
commitfe9857b511f3a6ccd68f9a112886d7d6019e5e28 (patch)
tree44275454c3215f68840b2c765d13cbb1f0949299 /drivers/gpu/drm
parentf0020b57b545e3cbd39fef9d6676e48a6c73b95f (diff)
DRM: SDE: Avoid vblank request to the same state
This change add check to existing vblank request state. It will avoid enable vblank multiple times. It will also avoid disable vblank multiple times. Change-Id: I10781c33e51b1032b72fcbc1a01a7d01be8be510 Signed-off-by: Camus Wong <camusw@codeaurora.org>
Diffstat (limited to 'drivers/gpu/drm')
-rw-r--r--drivers/gpu/drm/msm/sde/sde_crtc.c22
1 files changed, 12 insertions, 10 deletions
diff --git a/drivers/gpu/drm/msm/sde/sde_crtc.c b/drivers/gpu/drm/msm/sde/sde_crtc.c
index 2a31bc7fedc7..3f5aa4d276c9 100644
--- a/drivers/gpu/drm/msm/sde/sde_crtc.c
+++ b/drivers/gpu/drm/msm/sde/sde_crtc.c
@@ -1190,7 +1190,7 @@ static void sde_crtc_disable(struct drm_crtc *crtc)
sde_crtc->vblank_requested) {
ret = _sde_crtc_vblank_enable_no_lock(sde_crtc, false);
if (ret)
- SDE_ERROR("%s vblank enable failed: %d\n",
+ SDE_ERROR("%s vblank disable failed: %d\n",
sde_crtc->name, ret);
}
@@ -1491,16 +1491,18 @@ int sde_crtc_vblank(struct drm_crtc *crtc, bool en)
sde_crtc = to_sde_crtc(crtc);
mutex_lock(&sde_crtc->crtc_lock);
- SDE_EVT32(DRMID(&sde_crtc->base), en, sde_crtc->enabled,
- sde_crtc->suspend, sde_crtc->vblank_requested);
- if (sde_crtc->enabled && !sde_crtc->suspend) {
- ret = _sde_crtc_vblank_enable_no_lock(sde_crtc, en);
- if (ret)
- SDE_ERROR("%s vblank enable failed: %d\n",
- sde_crtc->name, ret);
- }
+ if (sde_crtc->vblank_requested != en) {
+ SDE_EVT32(DRMID(&sde_crtc->base), en, sde_crtc->enabled,
+ sde_crtc->suspend, sde_crtc->vblank_requested);
+ if (sde_crtc->enabled && !sde_crtc->suspend) {
+ ret = _sde_crtc_vblank_enable_no_lock(sde_crtc, en);
+ if (ret)
+ SDE_ERROR("%s vblank enable failed: %d\n",
+ sde_crtc->name, ret);
+ }
- sde_crtc->vblank_requested = en;
+ sde_crtc->vblank_requested = en;
+ }
mutex_unlock(&sde_crtc->crtc_lock);
return 0;