aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/radeon
diff options
context:
space:
mode:
authorJesse Sung <jesse.sung@canonical.com>2012-02-16 03:41:26 -0500
committerLuis Henriques <luis.henriques@canonical.com>2012-03-08 07:23:32 -0500
commitda86bc05c9923f5bbdf03f1d16075d98b9655c30 (patch)
treefa5595ccb3aff36c3489b4099521f36352844976 /drivers/gpu/drm/radeon
parent54b945739225a9671e107f462f31b2d7a881db75 (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.c21
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 }