From 5ed94c51e1e3a8e6e77601d239b265468de88b9d Mon Sep 17 00:00:00 2001 Message-Id: <5ed94c51e1e3a8e6e77601d239b265468de88b9d.1329290089.git.jesse.sung@canonical.com> In-Reply-To: References: From: Alex Deucher Date: Tue, 4 Oct 2011 12:23:24 -0400 Subject: [PATCH 1/2] drm/radeon/kms: fix dp_detect handling for DP bridge chips MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="------------1.7.9" This is a multi-part message in MIME format. --------------1.7.9 Content-Type: text/plain; charset=UTF-8; format=fixed Content-Transfer-Encoding: 8bit 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 Reviewed-by: Michel Dänzer Tested-by: Michel Dänzer Cc: stable@kernel.org Signed-off-by: Dave Airlie (cherry picked from commit 6777a4f6898a53974ef7fe7ce09ec41fae0f32db) Signed-off-by: Wen-chien Jesse Sung --- drivers/gpu/drm/radeon/radeon_connectors.c | 21 ++++++--------------- 1 files changed, 6 insertions(+), 15 deletions(-) --------------1.7.9 Content-Type: text/x-patch; name="0001-drm-radeon-kms-fix-dp_detect-handling-for-DP-bridge-.patch" Content-Transfer-Encoding: 8bit Content-Disposition: inline; filename="0001-drm-radeon-kms-fix-dp_detect-handling-for-DP-bridge-.patch" diff --git a/drivers/gpu/drm/radeon/radeon_connectors.c b/drivers/gpu/drm/radeon/radeon_connectors.c index 9eec292..800eadf 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) /* 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 (encoder) { + /* setup ddc on the bridge */ + radeon_atom_ext_encoder_setup_ddc(encoder); if (radeon_ddc_probe(radeon_connector, - radeon_connector->requires_extended_probe)) + radeon_connector->requires_extended_probe)) /* try DDC */ 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; + else if (radeon_connector->dac_load_detect) { /* try load detection */ + struct drm_encoder_helper_funcs *encoder_funcs = encoder->helper_private; ret = encoder_funcs->detect(encoder, connector); } } --------------1.7.9--