diff options
author | Alex Deucher <alexander.deucher@amd.com> | 2011-10-31 08:54:41 -0400 |
---|---|---|
committer | Dave Airlie <airlied@redhat.com> | 2011-11-01 12:01:58 -0400 |
commit | 00dfb8df5bf8c3afe4c0bb8361133156b06b7a2c (patch) | |
tree | 8e3f02edd94d6ac4e2478df506202e219e2ad5ed /drivers/gpu | |
parent | 06c9c2332cc3bffcc184f32ee503dc0a4eb83de0 (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')
-rw-r--r-- | drivers/gpu/drm/radeon/atombios_dp.c | 11 |
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 79e8ebc05307..b5628ce1228b 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 | ||
569 | void radeon_dp_set_link_config(struct drm_connector *connector, | 580 | void radeon_dp_set_link_config(struct drm_connector *connector, |