Commit 2de3a078 authored by Manasi Navare's avatar Manasi Navare

drm/dp: Set the connector's TILE property even for DP SST connectors

Current driver sets the tile property only for DP MST connectors.
However there are some tiled displays where each SST connector
carries a single tile. So we need to attach this property object
for every connector and set it for every connector (DP SST and MST).
Plus since the tile information is obtained as a result of EDID
parsing, the best place to update tile property is where we update
edid property.
Also now we dont need to explicitly set this now for MST connectors.

This has been tested with xrandr --props and modetest and verified
that TILE property is exposed correctly.

Cc: Dave Airlie <airlied@redhat.com>
Cc: Jani Nikula <jani.nikula@linux.intel.com>
Cc: Daniel Vetter <daniel.vetter@intel.com>
Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
Signed-off-by: default avatarManasi Navare <manasi.d.navare@intel.com>
Reviewed-by: default avatarAlex Deucher <alexander.deucher@amd.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20190313021722.10068-1-manasi.d.navare@intel.com
parent e8074f75
...@@ -245,6 +245,7 @@ int drm_connector_init(struct drm_device *dev, ...@@ -245,6 +245,7 @@ int drm_connector_init(struct drm_device *dev,
INIT_LIST_HEAD(&connector->modes); INIT_LIST_HEAD(&connector->modes);
mutex_init(&connector->mutex); mutex_init(&connector->mutex);
connector->edid_blob_ptr = NULL; connector->edid_blob_ptr = NULL;
connector->tile_blob_ptr = NULL;
connector->status = connector_status_unknown; connector->status = connector_status_unknown;
connector->display_info.panel_orientation = connector->display_info.panel_orientation =
DRM_MODE_PANEL_ORIENTATION_UNKNOWN; DRM_MODE_PANEL_ORIENTATION_UNKNOWN;
...@@ -272,6 +273,9 @@ int drm_connector_init(struct drm_device *dev, ...@@ -272,6 +273,9 @@ int drm_connector_init(struct drm_device *dev,
drm_object_attach_property(&connector->base, drm_object_attach_property(&connector->base,
config->non_desktop_property, config->non_desktop_property,
0); 0);
drm_object_attach_property(&connector->base,
config->tile_property,
0);
if (drm_core_check_feature(dev, DRIVER_ATOMIC)) { if (drm_core_check_feature(dev, DRIVER_ATOMIC)) {
drm_object_attach_property(&connector->base, config->prop_crtc_id, 0); drm_object_attach_property(&connector->base, config->prop_crtc_id, 0);
...@@ -1712,6 +1716,8 @@ EXPORT_SYMBOL(drm_connector_set_path_property); ...@@ -1712,6 +1716,8 @@ EXPORT_SYMBOL(drm_connector_set_path_property);
* This looks up the tile information for a connector, and creates a * This looks up the tile information for a connector, and creates a
* property for userspace to parse if it exists. The property is of * property for userspace to parse if it exists. The property is of
* the form of 8 integers using ':' as a separator. * the form of 8 integers using ':' as a separator.
* This is used for dual port tiled displays with DisplayPort SST
* or DisplayPort MST connectors.
* *
* Returns: * Returns:
* Zero on success, errno on failure. * Zero on success, errno on failure.
...@@ -1755,6 +1761,9 @@ EXPORT_SYMBOL(drm_connector_set_tile_property); ...@@ -1755,6 +1761,9 @@ EXPORT_SYMBOL(drm_connector_set_tile_property);
* *
* This function creates a new blob modeset object and assigns its id to the * This function creates a new blob modeset object and assigns its id to the
* connector's edid property. * connector's edid property.
* Since we also parse tile information from EDID's displayID block, we also
* set the connector's tile property here. See drm_connector_set_tile_property()
* for more details.
* *
* Returns: * Returns:
* Zero on success, negative errno on failure. * Zero on success, negative errno on failure.
...@@ -1796,7 +1805,9 @@ int drm_connector_update_edid_property(struct drm_connector *connector, ...@@ -1796,7 +1805,9 @@ int drm_connector_update_edid_property(struct drm_connector *connector,
edid, edid,
&connector->base, &connector->base,
dev->mode_config.edid_property); dev->mode_config.edid_property);
if (ret)
return ret; return ret;
return drm_connector_set_tile_property(connector);
} }
EXPORT_SYMBOL(drm_connector_update_edid_property); EXPORT_SYMBOL(drm_connector_update_edid_property);
......
...@@ -3022,7 +3022,6 @@ struct edid *drm_dp_mst_get_edid(struct drm_connector *connector, struct drm_dp_ ...@@ -3022,7 +3022,6 @@ struct edid *drm_dp_mst_get_edid(struct drm_connector *connector, struct drm_dp_
edid = drm_edid_duplicate(port->cached_edid); edid = drm_edid_duplicate(port->cached_edid);
else { else {
edid = drm_get_edid(connector, &port->aux.ddc); edid = drm_get_edid(connector, &port->aux.ddc);
drm_connector_set_tile_property(connector);
} }
port->has_audio = drm_detect_monitor_audio(edid); port->has_audio = drm_detect_monitor_audio(edid);
drm_dp_mst_topology_put_port(port); drm_dp_mst_topology_put_port(port);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment