[Feature]add MT2731_MP2_MR2_SVN388 baseline version
Change-Id: Ief04314834b31e27effab435d3ca8ba33b499059
diff --git a/meta/meta-mediatek/recipes-graphics/libdrm/files/0002-Add-CRTC-ID-to-vblank-event.patch b/meta/meta-mediatek/recipes-graphics/libdrm/files/0002-Add-CRTC-ID-to-vblank-event.patch
new file mode 100644
index 0000000..1519dc2
--- /dev/null
+++ b/meta/meta-mediatek/recipes-graphics/libdrm/files/0002-Add-CRTC-ID-to-vblank-event.patch
@@ -0,0 +1,100 @@
+From 890d43a6a8d091211b82dd432af5e0a38472ffa6 Mon Sep 17 00:00:00 2001
+From: Ander Conselvan de Oliveira <ander.conselvan.de.oliveira@intel.com>
+Date: Mon, 17 Aug 2015 16:21:24 +0300
+Subject: [PATCH] Add CRTC ID to vblank event
+
+When using the atomic API, one request can span multiple CRTCs, however
+one event is generated per CRTC. As we cannot disambiguate the CRTC with
+user data (since we only have one piece of user data to pass in), newer
+kernels can include the CRTC ID in the page flip event.
+
+Add a new vfunc to dispatch vblank events carrying a CRTC ID to clients
+who negotiate a higher interface version.
+
+[daniels: Rebased, include new cap, call page_flip_handler if it is set
+ but page_flip_handler2 isn't even on newer contexts, write a
+ commit message.]
+
+v2: Split into separate commit.
+
+Signed-off-by: Ander Conselvan de Oliveira <ander.conselvan.de.oliveira@intel.com>
+Signed-off-by: Daniel Stone <daniels@collabora.com>
+Reviewed-by: Maarten Lankhorst <maarten.lankhorst@intel.com>
+---
+ xf86drm.h | 9 ++++++++-
+ xf86drmMode.c | 24 ++++++++++++++++--------
+ 2 files changed, 24 insertions(+), 9 deletions(-)
+
+diff --git a/xf86drm.h b/xf86drm.h
+index 0d92701..d75ca8c 100644
+--- a/xf86drm.h
++++ b/xf86drm.h
+@@ -728,7 +728,7 @@ extern void drmMsg(const char *format, ...) DRM_PRINTFLIKE(1, 2);
+ extern int drmSetMaster(int fd);
+ extern int drmDropMaster(int fd);
+
+-#define DRM_EVENT_CONTEXT_VERSION 2
++#define DRM_EVENT_CONTEXT_VERSION 3
+
+ typedef struct _drmEventContext {
+
+@@ -748,6 +748,13 @@ typedef struct _drmEventContext {
+ unsigned int tv_usec,
+ void *user_data);
+
++ void (*page_flip_handler2)(int fd,
++ unsigned int sequence,
++ unsigned int tv_sec,
++ unsigned int tv_usec,
++ unsigned int crtc_id,
++ void *user_data);
++
+ } drmEventContext, *drmEventContextPtr;
+
+ extern int drmHandleEvent(int fd, drmEventContextPtr evctx);
+diff --git a/xf86drmMode.c b/xf86drmMode.c
+index 0266bc1..d3bc20e 100644
+--- a/xf86drmMode.c
++++ b/xf86drmMode.c
+@@ -889,6 +889,7 @@ int drmHandleEvent(int fd, drmEventContextPtr evctx)
+ int len, i;
+ struct drm_event *e;
+ struct drm_event_vblank *vblank;
++ void *user_data;
+
+ /* The DRM read semantics guarantees that we always get only
+ * complete events. */
+@@ -915,15 +916,22 @@ int drmHandleEvent(int fd, drmEventContextPtr evctx)
+ U642VOID (vblank->user_data));
+ break;
+ case DRM_EVENT_FLIP_COMPLETE:
+- if (evctx->version < 2 ||
+- evctx->page_flip_handler == NULL)
+- break;
+ vblank = (struct drm_event_vblank *) e;
+- evctx->page_flip_handler(fd,
+- vblank->sequence,
+- vblank->tv_sec,
+- vblank->tv_usec,
+- U642VOID (vblank->user_data));
++ user_data = U642VOID (vblank->user_data);
++
++ if (evctx->version >= 3 && evctx->page_flip_handler2)
++ evctx->page_flip_handler2(fd,
++ vblank->sequence,
++ vblank->tv_sec,
++ vblank->tv_usec,
++ vblank->crtc_id,
++ user_data);
++ else if (evctx->version >= 2 && evctx->page_flip_handler)
++ evctx->page_flip_handler(fd,
++ vblank->sequence,
++ vblank->tv_sec,
++ vblank->tv_usec,
++ user_data);
+ break;
+ default:
+ break;
+--
+libgit2 0.26.0
+