libdrm & xf86-video-intel for this.

-- 
Jesse Barnes, Intel Open Source Technology Center
diff --git a/libdrm/xf86drmMode.c b/libdrm/xf86drmMode.c
index ea11207..414a60a 100644
--- a/libdrm/xf86drmMode.c
+++ b/libdrm/xf86drmMode.c
@@ -353,10 +353,13 @@ drmModeEncoderPtr drmModeGetEncoder(int fd, uint32_t encoder_id)
  * Connector manipulation
  */
 
-drmModeConnectorPtr drmModeGetConnector(int fd, uint32_t connector_id)
+static drmModeConnectorPtr doGetConnector(int fd, uint32_t connector_id,
+					  int probe)
 {
 	struct drm_mode_get_connector conn;
 	drmModeConnectorPtr r = NULL;
+	int cmd = probe ? DRM_IOCTL_MODE_GETCONNECTOR :
+		DRM_IOCTL_MODE_GETCONNECTOR_CURRENT;
 
 	conn.connector_id = connector_id;
 	conn.connector_type_id = 0;
@@ -369,7 +372,7 @@ drmModeConnectorPtr drmModeGetConnector(int fd, uint32_t connector_id)
 	conn.count_encoders  = 0;
 	conn.encoders_ptr = 0;
 
-	if (drmIoctl(fd, DRM_IOCTL_MODE_GETCONNECTOR, &conn))
+	if (drmIoctl(fd, cmd, &conn))
 		return 0;
 
 	if (conn.count_props) {
@@ -383,7 +386,7 @@ drmModeConnectorPtr drmModeGetConnector(int fd, uint32_t connector_id)
 	if (conn.count_encoders)
 		conn.encoders_ptr = VOID2U64(drmMalloc(conn.count_encoders*sizeof(uint32_t)));
 
-	if (drmIoctl(fd, DRM_IOCTL_MODE_GETCONNECTOR, &conn))
+	if (drmIoctl(fd, cmd, &conn))
 		goto err_allocs;
 
 	if(!(r = drmMalloc(sizeof(*r)))) {
@@ -420,6 +423,16 @@ err_allocs:
 	return r;
 }
 
+drmModeConnectorPtr drmModeGetConnector(int fd, uint32_t connector_id)
+{
+	return doGetConnector(fd, connector_id, 1);
+}
+
+drmModeConnectorPtr drmModeGetConnectorCurrent(int fd, uint32_t connector_id)
+{
+	return doGetConnector(fd, connector_id, 0);
+}
+
 int drmModeAttachMode(int fd, uint32_t connector_id, drmModeModeInfoPtr mode_info)
 {
 	struct drm_mode_mode_cmd res;
diff --git a/libdrm/xf86drmMode.h b/libdrm/xf86drmMode.h
index 62304bb..98f9af1 100644
--- a/libdrm/xf86drmMode.h
+++ b/libdrm/xf86drmMode.h
@@ -337,6 +337,8 @@ drmModeEncoderPtr drmModeGetEncoder(int fd, uint32_t encoder_id);
  */
 extern drmModeConnectorPtr drmModeGetConnector(int fd,
 		uint32_t connectorId);
+extern drmModeConnectorPtr drmModeGetConnectorCurrent(int fd,
+		uint32_t connectorId);
 
 /**
  * Attaches the given mode to an connector.
diff --git a/shared-core/drm.h b/shared-core/drm.h
index b97ba09..6ddcc5b 100644
--- a/shared-core/drm.h
+++ b/shared-core/drm.h
@@ -1107,7 +1107,7 @@ struct drm_gem_open {
 #define DRM_IOCTL_MODE_GETFB		DRM_IOWR(0xAD, struct drm_mode_fb_cmd)
 #define DRM_IOCTL_MODE_ADDFB		DRM_IOWR(0xAE, struct drm_mode_fb_cmd)
 #define DRM_IOCTL_MODE_RMFB		DRM_IOWR(0xAF, uint32_t)
-#define DRM_IOCTL_MODE_REPLACEFB	DRM_IOWR(0xB0, struct drm_mode_fb_cmd)
+#define DRM_IOCTL_MODE_GETCONNECTOR_CURRENT	DRM_IOWR(0xB0, struct drm_mode_fb_cmd)
 
 /*...@}*/
 
diff --git a/src/drmmode_display.c b/src/drmmode_display.c
index 15ffc29..08ce1a0 100644
--- a/src/drmmode_display.c
+++ b/src/drmmode_display.c
@@ -762,8 +762,8 @@ drmmode_output_init(ScrnInfoPtr pScrn, drmmode_ptr drmmode, int num)
 	drmmode_output_private_ptr drmmode_output;
 	char name[32];
 
-	koutput = drmModeGetConnector(drmmode->fd,
-				      drmmode->mode_res->connectors[num]);
+	koutput = drmModeGetConnectorCurrent(drmmode->fd,
+					     drmmode->mode_res->connectors[num]);
 	if (!koutput)
 		return;
 
------------------------------------------------------------------------------
Register Now & Save for Velocity, the Web Performance & Operations 
Conference from O'Reilly Media. Velocity features a full day of 
expert-led, hands-on workshops and two days of sessions from industry 
leaders in dedicated Performance & Operations tracks. Use code vel09scf 
and Save an extra 15% before 5/3. http://p.sf.net/sfu/velocityconf
--
_______________________________________________
Dri-devel mailing list
Dri-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/dri-devel

Reply via email to