drm/mediatek: handle events when enabling/disabling crtc
The driver currently handles vblank events only when updating planes on an already enabled CRTC. The atomic update API however allows requesting an event when enabling or disabling a CRTC. This currently leads to event objects being leaked in the kernel and to events not being sent out. Fix it. Signed-off-by: Bibby Hsieh <bibby.hsieh@mediatek.com> Signed-off-by: CK Hu <ck.hu@mediatek.com>
This commit is contained in:
parent
60b874f642
commit
411f5c1eac
1 changed files with 8 additions and 0 deletions
|
@ -328,6 +328,7 @@ err_pm_runtime_put:
|
||||||
static void mtk_crtc_ddp_hw_fini(struct mtk_drm_crtc *mtk_crtc)
|
static void mtk_crtc_ddp_hw_fini(struct mtk_drm_crtc *mtk_crtc)
|
||||||
{
|
{
|
||||||
struct drm_device *drm = mtk_crtc->base.dev;
|
struct drm_device *drm = mtk_crtc->base.dev;
|
||||||
|
struct drm_crtc *crtc = &mtk_crtc->base;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
DRM_DEBUG_DRIVER("%s\n", __func__);
|
DRM_DEBUG_DRIVER("%s\n", __func__);
|
||||||
|
@ -353,6 +354,13 @@ static void mtk_crtc_ddp_hw_fini(struct mtk_drm_crtc *mtk_crtc)
|
||||||
mtk_disp_mutex_unprepare(mtk_crtc->mutex);
|
mtk_disp_mutex_unprepare(mtk_crtc->mutex);
|
||||||
|
|
||||||
pm_runtime_put(drm->dev);
|
pm_runtime_put(drm->dev);
|
||||||
|
|
||||||
|
if (crtc->state->event && !crtc->state->active) {
|
||||||
|
spin_lock_irq(&crtc->dev->event_lock);
|
||||||
|
drm_crtc_send_vblank_event(crtc, crtc->state->event);
|
||||||
|
crtc->state->event = NULL;
|
||||||
|
spin_unlock_irq(&crtc->dev->event_lock);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void mtk_crtc_ddp_config(struct drm_crtc *crtc)
|
static void mtk_crtc_ddp_config(struct drm_crtc *crtc)
|
||||||
|
|
Loading…
Add table
Reference in a new issue