mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-05 02:21:52 +09:00
drm/amd/display: fix trigger_hotplug to support mst case
[Why & How] Correct few problems below to have debugfs trigger_hotplug entry supports mst case * Adjust the place for acquiring the hpd_lock. We'll also access dc_link when simulate unplug * When detect the connector is a mst root, call reset_cur_dp_mst_topology() to simulate unplug * Don't support hotplug caused by CSN message since we can't change mst topology info directly. We can't simulate that * Clean up redundant code Tested-by: Daniel Wheeler <daniel.wheeler@amd.com> Reviewed-by: Hersen Wu <hersenxs.wu@amd.com> Acked-by: Alan Liu <HaoPing.Liu@amd.com> Signed-off-by: Wayne Lin <Wayne.Lin@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:
@@ -1256,14 +1256,22 @@ static ssize_t trigger_hotplug(struct file *f, const char __user *buf,
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
kfree(wr_buf);
|
||||
|
||||
if (param_nums <= 0) {
|
||||
DRM_DEBUG_DRIVER("user data not be read\n");
|
||||
kfree(wr_buf);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
mutex_lock(&aconnector->hpd_lock);
|
||||
|
||||
/* Don't support for mst end device*/
|
||||
if (aconnector->mst_port) {
|
||||
mutex_unlock(&aconnector->hpd_lock);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
if (param[0] == 1) {
|
||||
mutex_lock(&aconnector->hpd_lock);
|
||||
|
||||
if (!dc_link_detect_sink(aconnector->dc_link, &new_connection_type) &&
|
||||
new_connection_type != dc_connection_none)
|
||||
@@ -1300,6 +1308,10 @@ static ssize_t trigger_hotplug(struct file *f, const char __user *buf,
|
||||
|
||||
amdgpu_dm_update_connector_after_detect(aconnector);
|
||||
|
||||
/* If the aconnector is the root node in mst topology */
|
||||
if (aconnector->mst_mgr.mst_state == true)
|
||||
reset_cur_dp_mst_topology(link);
|
||||
|
||||
drm_modeset_lock_all(dev);
|
||||
dm_restore_drm_connector_state(dev, connector);
|
||||
drm_modeset_unlock_all(dev);
|
||||
@@ -1310,7 +1322,6 @@ static ssize_t trigger_hotplug(struct file *f, const char __user *buf,
|
||||
unlock:
|
||||
mutex_unlock(&aconnector->hpd_lock);
|
||||
|
||||
kfree(wr_buf);
|
||||
return size;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user