diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_vvop.c b/drivers/gpu/drm/rockchip/rockchip_drm_vvop.c index 7f54a6823b57..2b0dbdbe7379 100644 --- a/drivers/gpu/drm/rockchip/rockchip_drm_vvop.c +++ b/drivers/gpu/drm/rockchip/rockchip_drm_vvop.c @@ -186,7 +186,17 @@ static void vvop_crtc_atomic_enable(struct drm_crtc *crtc, static void vvop_crtc_atomic_disable(struct drm_crtc *crtc, struct drm_crtc_state *old_state) { + unsigned long flags; + drm_crtc_vblank_off(crtc); + if (crtc->state->event && !crtc->state->active) { + spin_lock_irqsave(&crtc->dev->event_lock, flags); + drm_crtc_send_vblank_event(crtc, crtc->state->event); + spin_unlock_irqrestore(&crtc->dev->event_lock, flags); + + crtc->state->event = NULL; + } + } static void vvop_crtc_atomic_flush(struct drm_crtc *crtc,