diff options
| author | Jesse Sung <jesse.sung@canonical.com> | 2012-02-16 03:41:26 -0500 |
|---|---|---|
| committer | Luis Henriques <luis.henriques@canonical.com> | 2012-03-08 07:23:32 -0500 |
| commit | da86bc05c9923f5bbdf03f1d16075d98b9655c30 (patch) | |
| tree | fa5595ccb3aff36c3489b4099521f36352844976 /drivers/gpu/drm/radeon | |
| parent | 54b945739225a9671e107f462f31b2d7a881db75 (diff) | |
drm/radeon/kms: fix dp_detect handling for DP bridge chips
BugLink: http://bugs.launchpad.net/bugs/825777
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>
(cherry picked from commit 6777a4f6898a53974ef7fe7ce09ec41fae0f32db)
Signed-off-by: Wen-chien Jesse Sung <jesse.sung@canonical.com>
Acked-by: Stefan Bader <stefan.bader@canonical.com>
Acked-by: Andy Whitcroft <andy.whitcroft@canonical.com>
Signed-off-by: Tim Gardner <tim.gardner@canonical.com>
Diffstat (limited to 'drivers/gpu/drm/radeon')
| -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 9eec29276ff..800eadfdd0c 100644 --- a/drivers/gpu/drm/radeon/radeon_connectors.c +++ b/drivers/gpu/drm/radeon/radeon_connectors.c | |||
| @@ -1315,23 +1315,14 @@ radeon_dp_detect(struct drm_connector *connector, bool force) | |||
| 1315 | /* get the DPCD from the bridge */ | 1315 | /* get the DPCD from the bridge */ |
| 1316 | radeon_dp_getdpcd(radeon_connector); | 1316 | radeon_dp_getdpcd(radeon_connector); |
| 1317 | 1317 | ||
| 1318 | if (radeon_hpd_sense(rdev, radeon_connector->hpd.hpd)) | 1318 | if (encoder) { |
| 1319 | ret = connector_status_connected; | 1319 | /* setup ddc on the bridge */ |
| 1320 | else { | 1320 | radeon_atom_ext_encoder_setup_ddc(encoder); |
| 1321 | /* need to setup ddc on the bridge */ | ||
| 1322 | if (encoder) | ||
| 1323 | radeon_atom_ext_encoder_setup_ddc(encoder); | ||
| 1324 | if (radeon_ddc_probe(radeon_connector, | 1321 | if (radeon_ddc_probe(radeon_connector, |
| 1325 | radeon_connector->requires_extended_probe)) | 1322 | radeon_connector->requires_extended_probe)) /* try DDC */ |
| 1326 | ret = connector_status_connected; | 1323 | ret = connector_status_connected; |
| 1327 | } | 1324 | else if (radeon_connector->dac_load_detect) { /* try load detection */ |
| 1328 | 1325 | struct drm_encoder_helper_funcs *encoder_funcs = encoder->helper_private; | |
| 1329 | if ((ret == connector_status_disconnected) && | ||
| 1330 | radeon_connector->dac_load_detect) { | ||
| 1331 | struct drm_encoder *encoder = radeon_best_single_encoder(connector); | ||
| 1332 | struct drm_encoder_helper_funcs *encoder_funcs; | ||
| 1333 | if (encoder) { | ||
| 1334 | encoder_funcs = encoder->helper_private; | ||
| 1335 | ret = encoder_funcs->detect(encoder, connector); | 1326 | ret = encoder_funcs->detect(encoder, connector); |
| 1336 | } | 1327 | } |
| 1337 | } | 1328 | } |
