mirror of https://gitee.com/openkylin/linux.git
drm/i915/dp/mst: Fix MST logic in intel_dp_long_pulse()
In commit7d23e3c37b
("drm/i915: Cleaning up intel_dp_hpd_pulse") some much needed clean-up was done, but unfortunately part of the change broke DP MST. The real issue was setting the connector state to disconnected in the MST case, which is good, but the code then (after a goto) checks if the connector state is not connected and shuts down MST if this is the case, which is bad. With this change both SST and MST seem to be happy. v2: Add removed check further up in the function to be sure that MST is shut down when we lose the link. (Ander) Fixes: commit7d23e3c37b
("drm/i915: Cleaning up intel_dp_hpd_pulse") cc: Sivakumar Thulasimani <sivakumar.thulasimani@intel.com> cc: Shubhangi Shrivastava <shubhangi.shrivastava@intel.com> cc: Ander Conselvan de Oliveira <conselvan2@gmail.com> cc: Nathan D Ciobanu <nathan.d.ciobanu@intel.com> Signed-off-by: Jim Bride <jim.bride@linux.intel.com> Reviewed-by: Ander Conselvan de Oliveira <conselvan2@gmail.com> Reviewed-by: Lyude <cpaul@redhat.com> Signed-off-by: Ander Conselvan de Oliveira <ander.conselvan.de.oliveira@intel.com> Link: http://patchwork.freedesktop.org/patch/msgid/1460394684-7036-1-git-send-email-jim.bride@linux.intel.com
This commit is contained in:
parent
e10fa551ae
commit
0e505a08b5
|
@ -4578,6 +4578,15 @@ intel_dp_long_pulse(struct intel_connector *intel_connector)
|
||||||
intel_dp->compliance_test_type = 0;
|
intel_dp->compliance_test_type = 0;
|
||||||
intel_dp->compliance_test_data = 0;
|
intel_dp->compliance_test_data = 0;
|
||||||
|
|
||||||
|
if (intel_dp->is_mst) {
|
||||||
|
DRM_DEBUG_KMS("MST device may have disappeared %d vs %d\n",
|
||||||
|
intel_dp->is_mst,
|
||||||
|
intel_dp->mst_mgr.mst_state);
|
||||||
|
intel_dp->is_mst = false;
|
||||||
|
drm_dp_mst_topology_mgr_set_mst(&intel_dp->mst_mgr,
|
||||||
|
intel_dp->is_mst);
|
||||||
|
}
|
||||||
|
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -4635,20 +4644,9 @@ intel_dp_long_pulse(struct intel_connector *intel_connector)
|
||||||
}
|
}
|
||||||
|
|
||||||
out:
|
out:
|
||||||
if (status != connector_status_connected) {
|
if ((status != connector_status_connected) &&
|
||||||
|
(intel_dp->is_mst == false))
|
||||||
intel_dp_unset_edid(intel_dp);
|
intel_dp_unset_edid(intel_dp);
|
||||||
/*
|
|
||||||
* If we were in MST mode, and device is not there,
|
|
||||||
* get out of MST mode
|
|
||||||
*/
|
|
||||||
if (intel_dp->is_mst) {
|
|
||||||
DRM_DEBUG_KMS("MST device may have disappeared %d vs %d\n",
|
|
||||||
intel_dp->is_mst, intel_dp->mst_mgr.mst_state);
|
|
||||||
intel_dp->is_mst = false;
|
|
||||||
drm_dp_mst_topology_mgr_set_mst(&intel_dp->mst_mgr,
|
|
||||||
intel_dp->is_mst);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
intel_display_power_put(to_i915(dev), power_domain);
|
intel_display_power_put(to_i915(dev), power_domain);
|
||||||
return;
|
return;
|
||||||
|
|
Loading…
Reference in New Issue