From: Dave Airlie
<airlied@xxxxxxxxxx>This property will be used by the MST
code to provide userspace
with a path to parse so it can recognise
connectors around hotplugs.
Signed-off-by: Dave Airlie
<airlied@xxxxxxxxxx>---
drivers/gpu/drm/drm_crtc.c | 26
++++++++++++++++++++++++++
include/drm/drm_crtc.h | 5 +++++
2 files changed, 31 insertions(+)
diff --git
a/drivers/gpu/drm/drm_crtc.c b/drivers/gpu/drm/drm_crtc.c
index
8bf87a6..06b9255 100644
--- a/drivers/gpu/drm/drm_crtc.c
+++
b/drivers/gpu/drm/drm_crtc.c
@@ -1165,6 +1165,7 @@ static int
drm_mode_create_standard_connector_properties(struct drm_device *dev)
{
struct drm_property *edid;
struct drm_property *dpms;
+
struct drm_property *dev_path;
/*
* Standard properties
(apply to all connectors)
@@ -1179,6 +1180,12 @@ static int
drm_mode_create_standard_connector_properties(struct drm_device *dev)
ARRAY_SIZE(drm_dpms_enum_list));
dev->mode_config.dpms_property = dpms;
+ dev_path =
drm_property_create(dev,
+ DRM_MODE_PROP_BLOB |
+
DRM_MODE_PROP_IMMUTABLE,
+ "PATH", 0);
+
dev->mode_config.path_property = dev_path;
+
return 0;
}
@@ -3637,6 +3644,25 @@ done:
return ret;
}
+int
drm_mode_connector_set_path_property(struct drm_connector *connector,
+
char *path)
+{
+ struct drm_device *dev = connector->dev;
+
int ret, size;
+ size = strlen(path) + 1;
+
+
connector->path_blob_ptr =
drm_property_create_blob(connector->dev,
+ size, path);
+
if (!connector->path_blob_ptr)
+ return -EINVAL;
+
+ ret =
drm_object_property_set_value(&connector->base,
+
dev->mode_config.path_property,
+
connector->path_blob_ptr->base.id);
+ return ret;
+}
+EXPORT_SYMBOL(drm_mode_connector_set_path_property);
+
/**
* drm_mode_connector_update_edid_property - update the edid
property of a connector
* @connector: drm connector
diff --git
a/include/drm/drm_crtc.h b/include/drm/drm_crtc.h
index
55bc523..e33959b 100644
--- a/include/drm/drm_crtc.h
+++
b/include/drm/drm_crtc.h
@@ -500,6 +500,8 @@ struct drm_connector {
struct drm_property_blob *edid_blob_ptr;
struct
drm_object_properties properties;
+ struct drm_property_blob
*path_blob_ptr;
+
uint8_t polled; /* DRM_CONNECTOR_POLL_* */
/* requested DPMS state */
@@ -774,6 +776,7 @@ struct
drm_mode_config {
struct list_head property_blob_list;
struct
drm_property *edid_property;
struct drm_property *dpms_property;
+
struct drm_property *path_property;
struct drm_property
*plane_type_property;
/* DVI-I properties */
@@ -926,6
+929,8 @@ extern void drm_mode_config_init(struct drm_device *dev);
extern void drm_mode_config_reset(struct drm_device *dev);
extern
void drm_mode_config_cleanup(struct drm_device *dev);
+extern
int drm_mode_connector_set_path_property(struct drm_connector
*connector,
+ char *path);
extern int
drm_mode_connector_update_edid_property(struct drm_connector *connector,
struct edid *edid);
extern int
drm_object_property_set_value(struct drm_mode_object *obj,