|
@@ -64,14 +64,27 @@ void radeon_connector_hotplug(struct drm_connector *connector)
|
|
|
|
|
|
/* just deal with DP (not eDP) here. */
|
|
|
if (connector->connector_type == DRM_MODE_CONNECTOR_DisplayPort) {
|
|
|
- int saved_dpms = connector->dpms;
|
|
|
-
|
|
|
- /* Only turn off the display it it's physically disconnected */
|
|
|
- if (!radeon_hpd_sense(rdev, radeon_connector->hpd.hpd))
|
|
|
- drm_helper_connector_dpms(connector, DRM_MODE_DPMS_OFF);
|
|
|
- else if (radeon_dp_needs_link_train(radeon_connector))
|
|
|
- drm_helper_connector_dpms(connector, DRM_MODE_DPMS_ON);
|
|
|
- connector->dpms = saved_dpms;
|
|
|
+ struct radeon_connector_atom_dig *dig_connector =
|
|
|
+ radeon_connector->con_priv;
|
|
|
+
|
|
|
+ /* if existing sink type was not DP no need to retrain */
|
|
|
+ if (dig_connector->dp_sink_type != CONNECTOR_OBJECT_ID_DISPLAYPORT)
|
|
|
+ return;
|
|
|
+
|
|
|
+ /* first get sink type as it may be reset after (un)plug */
|
|
|
+ dig_connector->dp_sink_type = radeon_dp_getsinktype(radeon_connector);
|
|
|
+ /* don't do anything if sink is not display port, i.e.,
|
|
|
+ * passive dp->(dvi|hdmi) adaptor
|
|
|
+ */
|
|
|
+ if (dig_connector->dp_sink_type == CONNECTOR_OBJECT_ID_DISPLAYPORT) {
|
|
|
+ int saved_dpms = connector->dpms;
|
|
|
+ /* Only turn off the display if it's physically disconnected */
|
|
|
+ if (!radeon_hpd_sense(rdev, radeon_connector->hpd.hpd))
|
|
|
+ drm_helper_connector_dpms(connector, DRM_MODE_DPMS_OFF);
|
|
|
+ else if (radeon_dp_needs_link_train(radeon_connector))
|
|
|
+ drm_helper_connector_dpms(connector, DRM_MODE_DPMS_ON);
|
|
|
+ connector->dpms = saved_dpms;
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
|