|
@@ -320,25 +320,6 @@ dm_dp_add_mst_connector(struct drm_dp_mst_topology_mgr *mgr,
|
|
|
struct amdgpu_device *adev = dev->dev_private;
|
|
|
struct amdgpu_dm_connector *aconnector;
|
|
|
struct drm_connector *connector;
|
|
|
- struct drm_connector_list_iter conn_iter;
|
|
|
-
|
|
|
- drm_connector_list_iter_begin(dev, &conn_iter);
|
|
|
- drm_for_each_connector_iter(connector, &conn_iter) {
|
|
|
- aconnector = to_amdgpu_dm_connector(connector);
|
|
|
- if (aconnector->mst_port == master
|
|
|
- && !aconnector->port) {
|
|
|
- DRM_INFO("DM_MST: reusing connector: %p [id: %d] [master: %p]\n",
|
|
|
- aconnector, connector->base.id, aconnector->mst_port);
|
|
|
-
|
|
|
- aconnector->port = port;
|
|
|
- drm_connector_set_path_property(connector, pathprop);
|
|
|
-
|
|
|
- drm_connector_list_iter_end(&conn_iter);
|
|
|
- aconnector->mst_connected = true;
|
|
|
- return &aconnector->base;
|
|
|
- }
|
|
|
- }
|
|
|
- drm_connector_list_iter_end(&conn_iter);
|
|
|
|
|
|
aconnector = kzalloc(sizeof(*aconnector), GFP_KERNEL);
|
|
|
if (!aconnector)
|
|
@@ -387,8 +368,6 @@ dm_dp_add_mst_connector(struct drm_dp_mst_topology_mgr *mgr,
|
|
|
*/
|
|
|
amdgpu_dm_connector_funcs_reset(connector);
|
|
|
|
|
|
- aconnector->mst_connected = true;
|
|
|
-
|
|
|
DRM_INFO("DM_MST: added connector: %p [id: %d] [master: %p]\n",
|
|
|
aconnector, connector->base.id, aconnector->mst_port);
|
|
|
|
|
@@ -400,6 +379,9 @@ dm_dp_add_mst_connector(struct drm_dp_mst_topology_mgr *mgr,
|
|
|
static void dm_dp_destroy_mst_connector(struct drm_dp_mst_topology_mgr *mgr,
|
|
|
struct drm_connector *connector)
|
|
|
{
|
|
|
+ struct amdgpu_dm_connector *master = container_of(mgr, struct amdgpu_dm_connector, mst_mgr);
|
|
|
+ struct drm_device *dev = master->base.dev;
|
|
|
+ struct amdgpu_device *adev = dev->dev_private;
|
|
|
struct amdgpu_dm_connector *aconnector = to_amdgpu_dm_connector(connector);
|
|
|
|
|
|
DRM_INFO("DM_MST: Disabling connector: %p [id: %d] [master: %p]\n",
|
|
@@ -413,7 +395,10 @@ static void dm_dp_destroy_mst_connector(struct drm_dp_mst_topology_mgr *mgr,
|
|
|
aconnector->dc_sink = NULL;
|
|
|
}
|
|
|
|
|
|
- aconnector->mst_connected = false;
|
|
|
+ drm_connector_unregister(connector);
|
|
|
+ if (adev->mode_info.rfbdev)
|
|
|
+ drm_fb_helper_remove_one_connector(&adev->mode_info.rfbdev->helper, connector);
|
|
|
+ drm_connector_put(connector);
|
|
|
}
|
|
|
|
|
|
static void dm_dp_mst_hotplug(struct drm_dp_mst_topology_mgr *mgr)
|
|
@@ -424,18 +409,10 @@ static void dm_dp_mst_hotplug(struct drm_dp_mst_topology_mgr *mgr)
|
|
|
drm_kms_helper_hotplug_event(dev);
|
|
|
}
|
|
|
|
|
|
-static void dm_dp_mst_link_status_reset(struct drm_connector *connector)
|
|
|
-{
|
|
|
- mutex_lock(&connector->dev->mode_config.mutex);
|
|
|
- drm_connector_set_link_status_property(connector, DRM_MODE_LINK_STATUS_BAD);
|
|
|
- mutex_unlock(&connector->dev->mode_config.mutex);
|
|
|
-}
|
|
|
-
|
|
|
static void dm_dp_mst_register_connector(struct drm_connector *connector)
|
|
|
{
|
|
|
struct drm_device *dev = connector->dev;
|
|
|
struct amdgpu_device *adev = dev->dev_private;
|
|
|
- struct amdgpu_dm_connector *aconnector = to_amdgpu_dm_connector(connector);
|
|
|
|
|
|
if (adev->mode_info.rfbdev)
|
|
|
drm_fb_helper_add_one_connector(&adev->mode_info.rfbdev->helper, connector);
|
|
@@ -443,9 +420,6 @@ static void dm_dp_mst_register_connector(struct drm_connector *connector)
|
|
|
DRM_ERROR("adev->mode_info.rfbdev is NULL\n");
|
|
|
|
|
|
drm_connector_register(connector);
|
|
|
-
|
|
|
- if (aconnector->mst_connected)
|
|
|
- dm_dp_mst_link_status_reset(connector);
|
|
|
}
|
|
|
|
|
|
static const struct drm_dp_mst_topology_cbs dm_mst_cbs = {
|