diff options
author | Dave Airlie <airlied@redhat.com> | 2014-06-05 00:01:31 -0400 |
---|---|---|
committer | Dave Airlie <airlied@redhat.com> | 2014-07-07 21:40:23 -0400 |
commit | 43aba7eb0dc052d84e88f3569ea3f030868d49b2 (patch) | |
tree | bc53dc854ba0327bb10339e0442ee6e640fec28b | |
parent | 65c2a89c30ed63db15fbbdba41b74e5f47278897 (diff) |
drm: add a path blob property
This property will be used by the MST code to provide userspace
with a path to parse so it can recognise connectors around hotplugs.
Reviewed-by: Todd Previte <tprevite@gmail.com>
Signed-off-by: Dave Airlie <airlied@redhat.com>
-rw-r--r-- | drivers/gpu/drm/drm_crtc.c | 26 | ||||
-rw-r--r-- | include/drm/drm_crtc.h | 5 |
2 files changed, 31 insertions, 0 deletions
diff --git a/drivers/gpu/drm/drm_crtc.c b/drivers/gpu/drm/drm_crtc.c index f939b058953c..bd7422676638 100644 --- a/drivers/gpu/drm/drm_crtc.c +++ b/drivers/gpu/drm/drm_crtc.c | |||
@@ -1257,6 +1257,7 @@ static int drm_mode_create_standard_connector_properties(struct drm_device *dev) | |||
1257 | { | 1257 | { |
1258 | struct drm_property *edid; | 1258 | struct drm_property *edid; |
1259 | struct drm_property *dpms; | 1259 | struct drm_property *dpms; |
1260 | struct drm_property *dev_path; | ||
1260 | 1261 | ||
1261 | /* | 1262 | /* |
1262 | * Standard properties (apply to all connectors) | 1263 | * Standard properties (apply to all connectors) |
@@ -1271,6 +1272,12 @@ static int drm_mode_create_standard_connector_properties(struct drm_device *dev) | |||
1271 | ARRAY_SIZE(drm_dpms_enum_list)); | 1272 | ARRAY_SIZE(drm_dpms_enum_list)); |
1272 | dev->mode_config.dpms_property = dpms; | 1273 | dev->mode_config.dpms_property = dpms; |
1273 | 1274 | ||
1275 | dev_path = drm_property_create(dev, | ||
1276 | DRM_MODE_PROP_BLOB | | ||
1277 | DRM_MODE_PROP_IMMUTABLE, | ||
1278 | "PATH", 0); | ||
1279 | dev->mode_config.path_property = dev_path; | ||
1280 | |||
1274 | return 0; | 1281 | return 0; |
1275 | } | 1282 | } |
1276 | 1283 | ||
@@ -3755,6 +3762,25 @@ done: | |||
3755 | return ret; | 3762 | return ret; |
3756 | } | 3763 | } |
3757 | 3764 | ||
3765 | int drm_mode_connector_set_path_property(struct drm_connector *connector, | ||
3766 | char *path) | ||
3767 | { | ||
3768 | struct drm_device *dev = connector->dev; | ||
3769 | int ret, size; | ||
3770 | size = strlen(path) + 1; | ||
3771 | |||
3772 | connector->path_blob_ptr = drm_property_create_blob(connector->dev, | ||
3773 | size, path); | ||
3774 | if (!connector->path_blob_ptr) | ||
3775 | return -EINVAL; | ||
3776 | |||
3777 | ret = drm_object_property_set_value(&connector->base, | ||
3778 | dev->mode_config.path_property, | ||
3779 | connector->path_blob_ptr->base.id); | ||
3780 | return ret; | ||
3781 | } | ||
3782 | EXPORT_SYMBOL(drm_mode_connector_set_path_property); | ||
3783 | |||
3758 | /** | 3784 | /** |
3759 | * drm_mode_connector_update_edid_property - update the edid property of a connector | 3785 | * drm_mode_connector_update_edid_property - update the edid property of a connector |
3760 | * @connector: drm connector | 3786 | * @connector: drm connector |
diff --git a/include/drm/drm_crtc.h b/include/drm/drm_crtc.h index eb0f6f36385e..4da62072701c 100644 --- a/include/drm/drm_crtc.h +++ b/include/drm/drm_crtc.h | |||
@@ -524,6 +524,8 @@ struct drm_connector { | |||
524 | struct drm_property_blob *edid_blob_ptr; | 524 | struct drm_property_blob *edid_blob_ptr; |
525 | struct drm_object_properties properties; | 525 | struct drm_object_properties properties; |
526 | 526 | ||
527 | struct drm_property_blob *path_blob_ptr; | ||
528 | |||
527 | uint8_t polled; /* DRM_CONNECTOR_POLL_* */ | 529 | uint8_t polled; /* DRM_CONNECTOR_POLL_* */ |
528 | 530 | ||
529 | /* requested DPMS state */ | 531 | /* requested DPMS state */ |
@@ -803,6 +805,7 @@ struct drm_mode_config { | |||
803 | struct list_head property_blob_list; | 805 | struct list_head property_blob_list; |
804 | struct drm_property *edid_property; | 806 | struct drm_property *edid_property; |
805 | struct drm_property *dpms_property; | 807 | struct drm_property *dpms_property; |
808 | struct drm_property *path_property; | ||
806 | struct drm_property *plane_type_property; | 809 | struct drm_property *plane_type_property; |
807 | 810 | ||
808 | /* DVI-I properties */ | 811 | /* DVI-I properties */ |
@@ -952,6 +955,8 @@ extern void drm_mode_config_init(struct drm_device *dev); | |||
952 | extern void drm_mode_config_reset(struct drm_device *dev); | 955 | extern void drm_mode_config_reset(struct drm_device *dev); |
953 | extern void drm_mode_config_cleanup(struct drm_device *dev); | 956 | extern void drm_mode_config_cleanup(struct drm_device *dev); |
954 | 957 | ||
958 | extern int drm_mode_connector_set_path_property(struct drm_connector *connector, | ||
959 | char *path); | ||
955 | extern int drm_mode_connector_update_edid_property(struct drm_connector *connector, | 960 | extern int drm_mode_connector_update_edid_property(struct drm_connector *connector, |
956 | struct edid *edid); | 961 | struct edid *edid); |
957 | 962 | ||