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