diff options
author | Alex Deucher <alexander.deucher@amd.com> | 2011-10-04 12:23:24 -0400 |
---|---|---|
committer | Dave Airlie <airlied@redhat.com> | 2011-10-05 05:31:40 -0400 |
commit | 6777a4f6898a53974ef7fe7ce09ec41fae0f32db (patch) | |
tree | e5680a33625e3a69d78c11e1fb56849e2c573beb /drivers | |
parent | 4f332844cc87c5f99c5300f788abbe8a8c731390 (diff) |
drm/radeon/kms: fix dp_detect handling for DP bridge chips
The HPD pin is not reliable for detecting whether a monitor
is connected or not. Skip HPD and just use DDC or load
detection.
Fixes phantom VGA connected bugs.
[Michel: fixes phantom VGA bugs on his llano system.]
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Reviewed-by: Michel Dänzer <michel.daenzer@amd.com>
Tested-by: Michel Dänzer <michel.daenzer@amd.com>
Cc: stable@kernel.org
Signed-off-by: Dave Airlie <airlied@redhat.com>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/gpu/drm/radeon/radeon_connectors.c | 21 |
1 files changed, 6 insertions, 15 deletions
diff --git a/drivers/gpu/drm/radeon/radeon_connectors.c b/drivers/gpu/drm/radeon/radeon_connectors.c index bce63fd329d4..449c3d8c6836 100644 --- a/drivers/gpu/drm/radeon/radeon_connectors.c +++ b/drivers/gpu/drm/radeon/radeon_connectors.c | |||
@@ -1303,23 +1303,14 @@ radeon_dp_detect(struct drm_connector *connector, bool force) | |||
1303 | /* get the DPCD from the bridge */ | 1303 | /* get the DPCD from the bridge */ |
1304 | radeon_dp_getdpcd(radeon_connector); | 1304 | radeon_dp_getdpcd(radeon_connector); |
1305 | 1305 | ||
1306 | if (radeon_hpd_sense(rdev, radeon_connector->hpd.hpd)) | 1306 | if (encoder) { |
1307 | ret = connector_status_connected; | 1307 | /* setup ddc on the bridge */ |
1308 | else { | 1308 | radeon_atom_ext_encoder_setup_ddc(encoder); |
1309 | /* need to setup ddc on the bridge */ | ||
1310 | if (encoder) | ||
1311 | radeon_atom_ext_encoder_setup_ddc(encoder); | ||
1312 | if (radeon_ddc_probe(radeon_connector, | 1309 | if (radeon_ddc_probe(radeon_connector, |
1313 | radeon_connector->requires_extended_probe)) | 1310 | radeon_connector->requires_extended_probe)) /* try DDC */ |
1314 | ret = connector_status_connected; | 1311 | ret = connector_status_connected; |
1315 | } | 1312 | else if (radeon_connector->dac_load_detect) { /* try load detection */ |
1316 | 1313 | struct drm_encoder_helper_funcs *encoder_funcs = encoder->helper_private; | |
1317 | if ((ret == connector_status_disconnected) && | ||
1318 | radeon_connector->dac_load_detect) { | ||
1319 | struct drm_encoder *encoder = radeon_best_single_encoder(connector); | ||
1320 | struct drm_encoder_helper_funcs *encoder_funcs; | ||
1321 | if (encoder) { | ||
1322 | encoder_funcs = encoder->helper_private; | ||
1323 | ret = encoder_funcs->detect(encoder, connector); | 1314 | ret = encoder_funcs->detect(encoder, connector); |
1324 | } | 1315 | } |
1325 | } | 1316 | } |