|
@@ -1297,12 +1297,33 @@ radeon_dp_detect(struct drm_connector *connector, bool force)
|
|
|
if (!radeon_dig_connector->edp_on)
|
|
|
atombios_set_edp_panel_power(connector,
|
|
|
ATOM_TRANSMITTER_ACTION_POWER_OFF);
|
|
|
- } else {
|
|
|
- /* need to setup ddc on the bridge */
|
|
|
- if (radeon_connector_encoder_is_dp_bridge(connector)) {
|
|
|
+ } else if (radeon_connector_encoder_is_dp_bridge(connector)) {
|
|
|
+ /* DP bridges are always DP */
|
|
|
+ radeon_dig_connector->dp_sink_type = CONNECTOR_OBJECT_ID_DISPLAYPORT;
|
|
|
+ /* get the DPCD from the bridge */
|
|
|
+ radeon_dp_getdpcd(radeon_connector);
|
|
|
+
|
|
|
+ if (radeon_hpd_sense(rdev, radeon_connector->hpd.hpd))
|
|
|
+ ret = connector_status_connected;
|
|
|
+ else {
|
|
|
+ /* need to setup ddc on the bridge */
|
|
|
if (encoder)
|
|
|
radeon_atom_ext_encoder_setup_ddc(encoder);
|
|
|
+ if (radeon_ddc_probe(radeon_connector,
|
|
|
+ radeon_connector->requires_extended_probe))
|
|
|
+ ret = connector_status_connected;
|
|
|
+ }
|
|
|
+
|
|
|
+ if ((ret == connector_status_disconnected) &&
|
|
|
+ radeon_connector->dac_load_detect) {
|
|
|
+ struct drm_encoder *encoder = radeon_best_single_encoder(connector);
|
|
|
+ struct drm_encoder_helper_funcs *encoder_funcs;
|
|
|
+ if (encoder) {
|
|
|
+ encoder_funcs = encoder->helper_private;
|
|
|
+ ret = encoder_funcs->detect(encoder, connector);
|
|
|
+ }
|
|
|
}
|
|
|
+ } else {
|
|
|
radeon_dig_connector->dp_sink_type = radeon_dp_getsinktype(radeon_connector);
|
|
|
if (radeon_hpd_sense(rdev, radeon_connector->hpd.hpd)) {
|
|
|
ret = connector_status_connected;
|
|
@@ -1318,16 +1339,6 @@ radeon_dp_detect(struct drm_connector *connector, bool force)
|
|
|
ret = connector_status_connected;
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
- if ((ret == connector_status_disconnected) &&
|
|
|
- radeon_connector->dac_load_detect) {
|
|
|
- struct drm_encoder *encoder = radeon_best_single_encoder(connector);
|
|
|
- struct drm_encoder_helper_funcs *encoder_funcs;
|
|
|
- if (encoder) {
|
|
|
- encoder_funcs = encoder->helper_private;
|
|
|
- ret = encoder_funcs->detect(encoder, connector);
|
|
|
- }
|
|
|
- }
|
|
|
}
|
|
|
|
|
|
radeon_connector_update_scratch_regs(connector, ret);
|