Commit 0eca56f9 authored by Rob Clark's avatar Rob Clark Committed by Dave Airlie

drm/imx: use drm_send_vblank_event() helper

Also, slightly changes the behavior to always put the vblank irq,
even if userspace did not request a vblank event.  As far as I
can tell, the previous code would leak a vblank irq refcnt if
userspace requested a pageflip without event.
Signed-off-by: default avatarRob Clark <rob@ti.com>
Signed-off-by: default avatarDave Airlie <airlied@redhat.com>
parent f7e96d7e
...@@ -311,31 +311,14 @@ static int ipu_crtc_mode_set(struct drm_crtc *crtc, ...@@ -311,31 +311,14 @@ static int ipu_crtc_mode_set(struct drm_crtc *crtc,
static void ipu_crtc_handle_pageflip(struct ipu_crtc *ipu_crtc) static void ipu_crtc_handle_pageflip(struct ipu_crtc *ipu_crtc)
{ {
struct drm_pending_vblank_event *e;
struct timeval now;
unsigned long flags; unsigned long flags;
struct drm_device *drm = ipu_crtc->base.dev; struct drm_device *drm = ipu_crtc->base.dev;
spin_lock_irqsave(&drm->event_lock, flags); spin_lock_irqsave(&drm->event_lock, flags);
if (ipu_crtc->page_flip_event)
e = ipu_crtc->page_flip_event; drm_send_vblank_event(drm, -1, ipu_crtc->page_flip_event);
if (!e) {
spin_unlock_irqrestore(&drm->event_lock, flags);
return;
}
do_gettimeofday(&now);
e->event.sequence = 0;
e->event.tv_sec = now.tv_sec;
e->event.tv_usec = now.tv_usec;
ipu_crtc->page_flip_event = NULL; ipu_crtc->page_flip_event = NULL;
imx_drm_crtc_vblank_put(ipu_crtc->imx_crtc); imx_drm_crtc_vblank_put(ipu_crtc->imx_crtc);
list_add_tail(&e->base.link, &e->base.file_priv->event_list);
wake_up_interruptible(&e->base.file_priv->event_wait);
spin_unlock_irqrestore(&drm->event_lock, flags); spin_unlock_irqrestore(&drm->event_lock, flags);
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment