Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 6777a4f6 authored by Alex Deucher's avatar Alex Deucher Committed by Dave Airlie
Browse files

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: default avatarAlex Deucher <alexander.deucher@amd.com>
Reviewed-by: default avatarMichel Dänzer <michel.daenzer@amd.com>
Tested-by: default avatarMichel Dänzer <michel.daenzer@amd.com>
Cc: stable@kernel.org
Signed-off-by: default avatarDave Airlie <airlied@redhat.com>
parent 4f332844
Loading
Loading
Loading
Loading
+6 −15
Original line number Diff line number Diff line
@@ -1303,23 +1303,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)
		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);
			}
		}