From: Boram Park Date: Mon, 23 Nov 2015 09:10:31 +0000 (+0900) Subject: ecore_drm: add drm fd_handler to handle vblank and vendor events X-Git-Tag: accepted/tizen/mobile/20151124.233811~1 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=950eff2b58d1a96b45824df4c93a2bea247f3a70;p=platform%2Fupstream%2Fefl.git ecore_drm: add drm fd_handler to handle vblank and vendor events Change-Id: I497ea6564cf5ad4dbf279708feae99aa36d54a8f --- diff --git a/src/lib/ecore_drm/ecore_drm_device.c b/src/lib/ecore_drm/ecore_drm_device.c index 00fad55..2b47f72 100644 --- a/src/lib/ecore_drm/ecore_drm_device.c +++ b/src/lib/ecore_drm/ecore_drm_device.c @@ -67,6 +67,21 @@ _ecore_drm_device_cb_vblank(int fd EINA_UNUSED, unsigned int frame EINA_UNUSED, free(cb); } +static Eina_Bool +_ecore_drm_device_cb_event(void *data, Ecore_Fd_Handler *hdlr EINA_UNUSED) +{ + Ecore_Drm_Device *dev; + int ret; + + if (!(dev = data)) return ECORE_CALLBACK_RENEW; + + ret = drmHandleEvent(dev->drm.fd, &dev->drm_ctx); + if (ret < 0) + ERR("drmHandleEvent Failed: %m"); + + return ECORE_CALLBACK_RENEW; +} + #if 0 static Eina_Bool _ecore_drm_device_cb_idle(void *data) @@ -318,6 +333,10 @@ ecore_drm_device_open(Ecore_Drm_Device *dev) eeze_udev_watch_add(EEZE_UDEV_TYPE_DRM, events, _ecore_drm_device_cb_output_event, dev); + dev->drm.hdlr = + ecore_main_fd_handler_add(dev->drm.fd, ECORE_FD_READ, + _ecore_drm_device_cb_event, dev, NULL, NULL); + /* dev->drm.idler = */ /* ecore_idle_enterer_add(_ecore_drm_device_cb_idle, dev); */ @@ -336,6 +355,9 @@ ecore_drm_device_close(Ecore_Drm_Device *dev) /* close xkb context */ if (dev->xkb_ctx) xkb_context_unref(dev->xkb_ctx); + if (dev->drm.hdlr) ecore_main_fd_handler_del(dev->drm.hdlr); + dev->drm.hdlr = NULL; + _ecore_drm_launcher_device_close(dev->drm.name, dev->drm.fd); /* reset device fd */