aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/radeon
diff options
context:
space:
mode:
authorAlex Deucher <alexander.deucher@amd.com>2011-10-31 08:54:41 -0400
committerDave Airlie <airlied@redhat.com>2011-11-01 12:01:58 -0400
commit00dfb8df5bf8c3afe4c0bb8361133156b06b7a2c (patch)
tree8e3f02edd94d6ac4e2478df506202e219e2ad5ed /drivers/gpu/drm/radeon
parent06c9c2332cc3bffcc184f32ee503dc0a4eb83de0 (diff)
drm/radeon/kms: properly set panel mode for eDP
This should make eDP more reliable. Signed-off-by: Alex Deucher <alexander.deucher@amd.com> Cc: stable@kernel.org Signed-off-by: Dave Airlie <airlied@redhat.com>
Diffstat (limited to 'drivers/gpu/drm/radeon')
-rw-r--r--drivers/gpu/drm/radeon/atombios_dp.c11
1 files changed, 11 insertions, 0 deletions
diff --git a/drivers/gpu/drm/radeon/atombios_dp.c b/drivers/gpu/drm/radeon/atombios_dp.c
index 79e8ebc0530..b5628ce1228 100644
--- a/drivers/gpu/drm/radeon/atombios_dp.c
+++ b/drivers/gpu/drm/radeon/atombios_dp.c
@@ -553,6 +553,7 @@ static void radeon_dp_set_panel_mode(struct drm_encoder *encoder,
553{ 553{
554 struct drm_device *dev = encoder->dev; 554 struct drm_device *dev = encoder->dev;
555 struct radeon_device *rdev = dev->dev_private; 555 struct radeon_device *rdev = dev->dev_private;
556 struct radeon_connector *radeon_connector = to_radeon_connector(connector);
556 int panel_mode = DP_PANEL_MODE_EXTERNAL_DP_MODE; 557 int panel_mode = DP_PANEL_MODE_EXTERNAL_DP_MODE;
557 558
558 if (!ASIC_IS_DCE4(rdev)) 559 if (!ASIC_IS_DCE4(rdev))
@@ -560,10 +561,20 @@ static void radeon_dp_set_panel_mode(struct drm_encoder *encoder,
560 561
561 if (radeon_connector_encoder_is_dp_bridge(connector)) 562 if (radeon_connector_encoder_is_dp_bridge(connector))
562 panel_mode = DP_PANEL_MODE_INTERNAL_DP1_MODE; 563 panel_mode = DP_PANEL_MODE_INTERNAL_DP1_MODE;
564 else if (connector->connector_type == DRM_MODE_CONNECTOR_eDP) {
565 u8 tmp = radeon_read_dpcd_reg(radeon_connector, DP_EDP_CONFIGURATION_CAP);
566 if (tmp & 1)
567 panel_mode = DP_PANEL_MODE_INTERNAL_DP2_MODE;
568 }
563 569
564 atombios_dig_encoder_setup(encoder, 570 atombios_dig_encoder_setup(encoder,
565 ATOM_ENCODER_CMD_SETUP_PANEL_MODE, 571 ATOM_ENCODER_CMD_SETUP_PANEL_MODE,
566 panel_mode); 572 panel_mode);
573
574 if ((connector->connector_type == DRM_MODE_CONNECTOR_eDP) &&
575 (panel_mode == DP_PANEL_MODE_INTERNAL_DP2_MODE)) {
576 radeon_write_dpcd_reg(radeon_connector, DP_EDP_CONFIGURATION_SET, 1);
577 }
567} 578}
568 579
569void radeon_dp_set_link_config(struct drm_connector *connector, 580void radeon_dp_set_link_config(struct drm_connector *connector,