[PATCH xserver 2/7] modesetting: Store info to identify a connector

Daniel Martin consume.noise at gmail.com
Mon Nov 20 10:02:05 UTC 2017


That is the connector_type, connector_type_id and path_blob. We'll
identify a connector using this information later, as the output_id is
unreliable.

Signed-off-by: Daniel Martin <consume.noise at gmail.com>
---
 hw/xfree86/drivers/modesetting/drmmode_display.c | 10 +++++++---
 hw/xfree86/drivers/modesetting/drmmode_display.h |  3 +++
 2 files changed, 10 insertions(+), 3 deletions(-)

diff --git a/hw/xfree86/drivers/modesetting/drmmode_display.c b/hw/xfree86/drivers/modesetting/drmmode_display.c
index 537b2b2c0..b6835572a 100644
--- a/hw/xfree86/drivers/modesetting/drmmode_display.c
+++ b/hw/xfree86/drivers/modesetting/drmmode_display.c
@@ -1355,6 +1355,7 @@ drmmode_output_destroy(xf86OutputPtr output)
     int i;
 
     drmModeFreePropertyBlob(drmmode_output->edid_blob);
+    drmModeFreePropertyBlob(drmmode_output->path_blob);
     drmModeFreePropertyBlob(drmmode_output->tile_blob);
 
     for (i = 0; i < drmmode_output->num_props; i++) {
@@ -1728,9 +1729,6 @@ drmmode_output_init(ScrnInfoPtr pScrn, drmmode_ptr drmmode, drmModeResPtr mode_r
 
     drmmode_create_name(pScrn, koutput, name, path_blob);
 
-    if (path_blob)
-        drmModeFreePropertyBlob(path_blob);
-
     if (path_blob && dynamic) {
         /* see if we have an output with this name already
            and hook stuff up */
@@ -1742,6 +1740,8 @@ drmmode_output_init(ScrnInfoPtr pScrn, drmmode_ptr drmmode, drmModeResPtr mode_r
 
             drmmode_output = output->driver_private;
             drmmode_output->output_id = mode_res->connectors[num];
+
+            drmModeFreePropertyBlob(path_blob);
             return 1;
         }
     }
@@ -1782,8 +1782,11 @@ drmmode_output_init(ScrnInfoPtr pScrn, drmmode_ptr drmmode, drmModeResPtr mode_r
     }
 
     drmmode_output->output_id = mode_res->connectors[num];
+    drmmode_output->connector_type = koutput->connector_type;
+    drmmode_output->connector_type_id = koutput->connector_type_id;
     drmmode_output->num_encoders = koutput->count_encoders;
     drmmode_output->mode_encoders = kencoders;
+    drmmode_output->path_blob = path_blob;
     drmmode_output->drmmode = drmmode;
     output->mm_width = koutput->mmWidth;
     output->mm_height = koutput->mmHeight;
@@ -1816,6 +1819,7 @@ drmmode_output_init(ScrnInfoPtr pScrn, drmmode_ptr drmmode, drmModeResPtr mode_r
         free(kencoders);
     }
     drmModeFreeConnector(koutput);
+    drmModeFreePropertyBlob(path_blob);
 
     return 0;
 }
diff --git a/hw/xfree86/drivers/modesetting/drmmode_display.h b/hw/xfree86/drivers/modesetting/drmmode_display.h
index b146e717a..9b5407709 100644
--- a/hw/xfree86/drivers/modesetting/drmmode_display.h
+++ b/hw/xfree86/drivers/modesetting/drmmode_display.h
@@ -129,9 +129,12 @@ typedef struct {
 typedef struct {
     drmmode_ptr drmmode;
     int output_id;
+    int connector_type;
+    int connector_type_id;
     int num_encoders;
     drmModeEncoderPtr *mode_encoders;
     drmModePropertyBlobPtr edid_blob;
+    drmModePropertyBlobPtr path_blob;
     drmModePropertyBlobPtr tile_blob;
     int dpms_enum_id;
     int num_props;
-- 
2.13.6



More information about the xorg-devel mailing list