aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/amd/amdgpu/amdgpu_connectors.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/amdgpu_connectors.c')
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu_connectors.c41
1 files changed, 18 insertions, 23 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_connectors.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_connectors.c
index 74d2efaec52f..96501ff0e55b 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_connectors.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_connectors.c
@@ -69,25 +69,18 @@ void amdgpu_connector_hotplug(struct drm_connector *connector)
69 /* don't do anything if sink is not display port, i.e., 69 /* don't do anything if sink is not display port, i.e.,
70 * passive dp->(dvi|hdmi) adaptor 70 * passive dp->(dvi|hdmi) adaptor
71 */ 71 */
72 if (dig_connector->dp_sink_type == CONNECTOR_OBJECT_ID_DISPLAYPORT) { 72 if (dig_connector->dp_sink_type == CONNECTOR_OBJECT_ID_DISPLAYPORT &&
73 int saved_dpms = connector->dpms; 73 amdgpu_display_hpd_sense(adev, amdgpu_connector->hpd.hpd) &&
74 /* Only turn off the display if it's physically disconnected */ 74 amdgpu_atombios_dp_needs_link_train(amdgpu_connector)) {
75 if (!amdgpu_display_hpd_sense(adev, amdgpu_connector->hpd.hpd)) { 75 /* Don't start link training before we have the DPCD */
76 drm_helper_connector_dpms(connector, DRM_MODE_DPMS_OFF); 76 if (amdgpu_atombios_dp_get_dpcd(amdgpu_connector))
77 } else if (amdgpu_atombios_dp_needs_link_train(amdgpu_connector)) { 77 return;
78 /* Don't try to start link training before we 78
79 * have the dpcd */ 79 /* Turn the connector off and back on immediately, which
80 if (amdgpu_atombios_dp_get_dpcd(amdgpu_connector)) 80 * will trigger link training
81 return; 81 */
82 82 drm_helper_connector_dpms(connector, DRM_MODE_DPMS_OFF);
83 /* set it to OFF so that drm_helper_connector_dpms() 83 drm_helper_connector_dpms(connector, DRM_MODE_DPMS_ON);
84 * won't return immediately since the current state
85 * is ON at this point.
86 */
87 connector->dpms = DRM_MODE_DPMS_OFF;
88 drm_helper_connector_dpms(connector, DRM_MODE_DPMS_ON);
89 }
90 connector->dpms = saved_dpms;
91 } 84 }
92 } 85 }
93} 86}
@@ -885,7 +878,7 @@ amdgpu_connector_vga_detect(struct drm_connector *connector, bool force)
885 ret = connector_status_disconnected; 878 ret = connector_status_disconnected;
886 879
887 if (amdgpu_connector->ddc_bus) 880 if (amdgpu_connector->ddc_bus)
888 dret = amdgpu_ddc_probe(amdgpu_connector, false); 881 dret = amdgpu_display_ddc_probe(amdgpu_connector, false);
889 if (dret) { 882 if (dret) {
890 amdgpu_connector->detected_by_load = false; 883 amdgpu_connector->detected_by_load = false;
891 amdgpu_connector_free_edid(connector); 884 amdgpu_connector_free_edid(connector);
@@ -1010,7 +1003,7 @@ amdgpu_connector_dvi_detect(struct drm_connector *connector, bool force)
1010 } 1003 }
1011 1004
1012 if (amdgpu_connector->ddc_bus) 1005 if (amdgpu_connector->ddc_bus)
1013 dret = amdgpu_ddc_probe(amdgpu_connector, false); 1006 dret = amdgpu_display_ddc_probe(amdgpu_connector, false);
1014 if (dret) { 1007 if (dret) {
1015 amdgpu_connector->detected_by_load = false; 1008 amdgpu_connector->detected_by_load = false;
1016 amdgpu_connector_free_edid(connector); 1009 amdgpu_connector_free_edid(connector);
@@ -1417,7 +1410,8 @@ amdgpu_connector_dp_detect(struct drm_connector *connector, bool force)
1417 /* setup ddc on the bridge */ 1410 /* setup ddc on the bridge */
1418 amdgpu_atombios_encoder_setup_ext_encoder_ddc(encoder); 1411 amdgpu_atombios_encoder_setup_ext_encoder_ddc(encoder);
1419 /* bridge chips are always aux */ 1412 /* bridge chips are always aux */
1420 if (amdgpu_ddc_probe(amdgpu_connector, true)) /* try DDC */ 1413 /* try DDC */
1414 if (amdgpu_display_ddc_probe(amdgpu_connector, true))
1421 ret = connector_status_connected; 1415 ret = connector_status_connected;
1422 else if (amdgpu_connector->dac_load_detect) { /* try load detection */ 1416 else if (amdgpu_connector->dac_load_detect) { /* try load detection */
1423 const struct drm_encoder_helper_funcs *encoder_funcs = encoder->helper_private; 1417 const struct drm_encoder_helper_funcs *encoder_funcs = encoder->helper_private;
@@ -1437,7 +1431,8 @@ amdgpu_connector_dp_detect(struct drm_connector *connector, bool force)
1437 ret = connector_status_connected; 1431 ret = connector_status_connected;
1438 } else { 1432 } else {
1439 /* try non-aux ddc (DP to DVI/HDMI/etc. adapter) */ 1433 /* try non-aux ddc (DP to DVI/HDMI/etc. adapter) */
1440 if (amdgpu_ddc_probe(amdgpu_connector, false)) 1434 if (amdgpu_display_ddc_probe(amdgpu_connector,
1435 false))
1441 ret = connector_status_connected; 1436 ret = connector_status_connected;
1442 } 1437 }
1443 } 1438 }