diff options
| author | Camus Wong <camusw@codeaurora.org> | 2018-02-08 14:03:37 -0500 |
|---|---|---|
| committer | Camus Wong <camusw@codeaurora.org> | 2018-02-08 15:25:39 -0500 |
| commit | fe9857b511f3a6ccd68f9a112886d7d6019e5e28 (patch) | |
| tree | 44275454c3215f68840b2c765d13cbb1f0949299 /drivers/gpu/drm | |
| parent | f0020b57b545e3cbd39fef9d6676e48a6c73b95f (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.c | 22 |
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; |
