diff options
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/amdgpu_connectors.c')
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_connectors.c | 41 |
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 | } |