aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/radeon/radeon_connectors.c
diff options
context:
space:
mode:
authorAlex Deucher <alexander.deucher@amd.com>2011-08-13 13:36:13 -0400
committerGreg Kroah-Hartman <gregkh@suse.de>2011-08-17 10:55:54 -0700
commit920d4ab70ec7f77293084b3da73ae445b1dd2d67 (patch)
treee60ce1c573284fbaec94f13cb3f12738494c32be /drivers/gpu/drm/radeon/radeon_connectors.c
parentd24884b24d1527ead9b7a3a54516925de826b518 (diff)
downloadkernel_samsung_smdk4412-920d4ab70ec7f77293084b3da73ae445b1dd2d67.zip
kernel_samsung_smdk4412-920d4ab70ec7f77293084b3da73ae445b1dd2d67.tar.gz
kernel_samsung_smdk4412-920d4ab70ec7f77293084b3da73ae445b1dd2d67.tar.bz2
drm/radeon/kms: don't try to be smart in the hpd handler
commit d5811e8731213f80c80d89e980505052f16aca1c upstream. Attempting to try and turn off disconnected display hw in the hotput handler lead to more problems than it helped. For now just register an event and only attempt the do something interesting with DP. Other connectors are just too problematic: - Some systems have an HPD pin assigned to LVDS, but it's rarely if ever connected properly and we don't really care about hpd events on LVDS anyway since it's always connected. - The HPD pin is wired up correctly for eDP, but we don't really have to do anything since the events since it's always connected. - Some HPD pins fire more than once when you connect/disconnect - etc. Fixes: https://bugs.freedesktop.org/show_bug.cgi?id=39882 Signed-off-by: Alex Deucher <alexander.deucher@amd.com> Signed-off-by: Dave Airlie <airlied@redhat.com> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Diffstat (limited to 'drivers/gpu/drm/radeon/radeon_connectors.c')
-rw-r--r--drivers/gpu/drm/radeon/radeon_connectors.c14
1 files changed, 6 insertions, 8 deletions
diff --git a/drivers/gpu/drm/radeon/radeon_connectors.c b/drivers/gpu/drm/radeon/radeon_connectors.c
index 519b5e2..6ab6c41 100644
--- a/drivers/gpu/drm/radeon/radeon_connectors.c
+++ b/drivers/gpu/drm/radeon/radeon_connectors.c
@@ -64,18 +64,16 @@ void radeon_connector_hotplug(struct drm_connector *connector)
if (connector->dpms != DRM_MODE_DPMS_ON)
return;
- /* powering up/down the eDP panel generates hpd events which
- * can interfere with modesetting.
- */
- if (connector->connector_type == DRM_MODE_CONNECTOR_eDP)
- return;
+ /* just deal with DP (not eDP) here. */
+ if (connector->connector_type == DRM_MODE_CONNECTOR_DisplayPort) {
+ int saved_dpms = connector->dpms;
- /* pre-r600 did not always have the hpd pins mapped accurately to connectors */
- if (rdev->family >= CHIP_R600) {
- if (radeon_hpd_sense(rdev, radeon_connector->hpd.hpd))
+ if (radeon_hpd_sense(rdev, radeon_connector->hpd.hpd) &&
+ radeon_dp_needs_link_train(radeon_connector))
drm_helper_connector_dpms(connector, DRM_MODE_DPMS_ON);
else
drm_helper_connector_dpms(connector, DRM_MODE_DPMS_OFF);
+ connector->dpms = saved_dpms;
}
}