Handle disabled/multiple CRTCs correctly.

Don't call the page flip ioctl on disabled CRTCs.  If all CRTCs are
disabled, then fake a flip completion.  Also, when multiple CRTCs are
enabled, report the swap completion event only once back to DRI.
diff --git a/src/drmmode_display.c b/src/drmmode_display.c
index f739af5..a5a1129 100644
--- a/src/drmmode_display.c
+++ b/src/drmmode_display.c
@@ -1158,8 +1158,6 @@
  * Page Flipping
  */
 
-#define PAGE_FLIP_EVENTS 1
-
 static void
 page_flip_handler(int fd, unsigned int sequence, unsigned int tv_sec,
 		unsigned int tv_usec, void *user_data)
@@ -1172,17 +1170,17 @@
 		.page_flip_handler = page_flip_handler,
 };
 
-Bool
+int
 drmmode_page_flip(DrawablePtr draw, uint32_t fb_id, void *priv)
 {
 	ScrnInfoPtr scrn = xf86Screens[draw->pScreen->myNum];
 	xf86CrtcConfigPtr config = XF86_CRTC_CONFIG_PTR(scrn);
 	drmmode_crtc_private_ptr crtc = config->crtc[0]->driver_private;
 	drmmode_ptr mode = crtc->drmmode;
-	int ret, i;
+	int ret, i, failed = 0, num_flipped = 0;
 	unsigned int flags = 0;
 
-#if PAGE_FLIP_EVENTS
+#if OMAP_USE_PAGE_FLIP_EVENTS
 	flags |= DRM_MODE_PAGE_FLIP_EVENT;
 #endif
 
@@ -1198,15 +1196,17 @@
 		if (ret) {
 			xf86DrvMsg(scrn->scrnIndex, X_WARNING,
 					"flip queue failed: %s\n", strerror(errno));
-			return FALSE;
+			failed = 1;
+		}
+		else {
+			num_flipped += 1;
 		}
 	}
 
-#if !PAGE_FLIP_EVENTS
-	page_flip_handler(0, 0, 0, 0, priv);
-#endif
-
-	return TRUE;
+	if (failed)
+		return -(num_flipped + 1);
+	else
+		return num_flipped;
 }
 
 /*