diff --git a/core-symbols.txt b/core-symbols.txt
index dcf900188bc10ce9554e5e24ce07c6cd3f33a3b7..da98a6a97582480aff09d4e21d0f0272c97271dd 100644
--- a/core-symbols.txt
+++ b/core-symbols.txt
@@ -103,6 +103,7 @@ drmModeAtomicGetCursor
 drmModeAtomicMerge
 drmModeAtomicSetCursor
 drmModeAttachMode
+drmModeConnectorGetPossibleCrtcs
 drmModeConnectorSetProperty
 drmModeCreateLease
 drmModeCreatePropertyBlob
diff --git a/xf86drmMode.c b/xf86drmMode.c
index 6d636dccdc0df917fe1b678eeba297bf9bf99cd0..9dc424519c21ee6807b11462162c6c99d9d0d2ee 100644
--- a/xf86drmMode.c
+++ b/xf86drmMode.c
@@ -610,6 +610,29 @@ drm_public drmModeConnectorPtr drmModeGetConnectorCurrent(int fd, uint32_t conne
 	return _drmModeGetConnector(fd, connector_id, 0);
 }
 
+drm_public uint32_t drmModeConnectorGetPossibleCrtcs(int fd,
+                                                     const drmModeConnector *connector)
+{
+	drmModeEncoder *encoder;
+	int i;
+	uint32_t possible_crtcs;
+
+	possible_crtcs = 0;
+	for (i = 0; i < connector->count_encoders; i++) {
+		encoder = drmModeGetEncoder(fd, connector->encoders[i]);
+		if (!encoder) {
+			return 0;
+		}
+
+		possible_crtcs |= encoder->possible_crtcs;
+		drmModeFreeEncoder(encoder);
+	}
+
+	if (possible_crtcs == 0)
+		errno = ENOENT;
+	return possible_crtcs;
+}
+
 drm_public int drmModeAttachMode(int fd, uint32_t connector_id, drmModeModeInfoPtr mode_info)
 {
 	struct drm_mode_mode_cmd res;
diff --git a/xf86drmMode.h b/xf86drmMode.h
index 46dc80a29ecbcf8bc747acc9bfd6fae19292119f..4617d1e0b0920551aacf5ada18d32675203ea2f9 100644
--- a/xf86drmMode.h
+++ b/xf86drmMode.h
@@ -380,6 +380,19 @@ extern drmModeConnectorPtr drmModeGetConnector(int fd,
 extern drmModeConnectorPtr drmModeGetConnectorCurrent(int fd,
 						      uint32_t connector_id);
 
+/**
+ * Get a bitmask of CRTCs a connector is compatible with.
+ *
+ * The bits reference CRTC indices. If the n-th CRTC is compatible with the
+ * connector, the n-th bit will be set. The indices are taken from the array
+ * returned by drmModeGetResources(). The indices are different from the object
+ * IDs.
+ *
+ * Zero is returned on error.
+ */
+extern uint32_t drmModeConnectorGetPossibleCrtcs(int fd,
+                                                 const drmModeConnector *connector);
+
 /**
  * Attaches the given mode to an connector.
  */