aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/radeon/atombios_dp.c
diff options
context:
space:
mode:
authorDave Airlie <airlied@redhat.com>2010-01-28 02:15:25 -0500
committerDave Airlie <airlied@redhat.com>2010-01-31 19:13:15 -0500
commitf28cf33945cc112f8ee835512b7440905dc29ad2 (patch)
treedc824913b484b5f726f23692ff0e7e100f7a3e7a /drivers/gpu/drm/radeon/atombios_dp.c
parent43c33ed87d0f1b900a6a3014db556ecc7f4a989b (diff)
drm/kms/radeon: pick digitial encoders smarter. (v3)
booting a Lenovo W500 with LVDS + DP outputs showed up a TODO we had on our list, to pick a correct digital encoder block. The LVTMA encoder requires the second digital encoder, all others can use any encoder at all. This fixes the digital encoder selection logic to enable LVDS/DP combos to work okay. V2: fix silly addition of connector dig_block and cleanup the other places in the code that pick the encoder. V3: rename to dig_encoder and clean up further - also fix the picking algorithm. tested on Lenovo W500 + desktop 3650 cards. Signed-off-by: Dave Airlie <airlied@redhat.com>
Diffstat (limited to 'drivers/gpu/drm/radeon/atombios_dp.c')
-rw-r--r--drivers/gpu/drm/radeon/atombios_dp.c23
1 files changed, 8 insertions, 15 deletions
diff --git a/drivers/gpu/drm/radeon/atombios_dp.c b/drivers/gpu/drm/radeon/atombios_dp.c
index 9c023d25aad..71060114d5d 100644
--- a/drivers/gpu/drm/radeon/atombios_dp.c
+++ b/drivers/gpu/drm/radeon/atombios_dp.c
@@ -596,21 +596,14 @@ void dp_link_train(struct drm_encoder *encoder,
596 return; 596 return;
597 dig_connector = radeon_connector->con_priv; 597 dig_connector = radeon_connector->con_priv;
598 598
599 if (ASIC_IS_DCE32(rdev)) { 599 if (dig->dig_encoder)
600 if (dig->dig_block) 600 enc_id |= ATOM_DP_CONFIG_DIG2_ENCODER;
601 enc_id |= ATOM_DP_CONFIG_DIG2_ENCODER; 601 else
602 else 602 enc_id |= ATOM_DP_CONFIG_DIG1_ENCODER;
603 enc_id |= ATOM_DP_CONFIG_DIG1_ENCODER; 603 if (dig_connector->linkb)
604 if (dig_connector->linkb) 604 enc_id |= ATOM_DP_CONFIG_LINK_B;
605 enc_id |= ATOM_DP_CONFIG_LINK_B; 605 else
606 else 606 enc_id |= ATOM_DP_CONFIG_LINK_A;
607 enc_id |= ATOM_DP_CONFIG_LINK_A;
608 } else {
609 if (dig_connector->linkb)
610 enc_id |= ATOM_DP_CONFIG_DIG2_ENCODER | ATOM_DP_CONFIG_LINK_B;
611 else
612 enc_id |= ATOM_DP_CONFIG_DIG1_ENCODER | ATOM_DP_CONFIG_LINK_A;
613 }
614 607
615 memset(link_configuration, 0, DP_LINK_CONFIGURATION_SIZE); 608 memset(link_configuration, 0, DP_LINK_CONFIGURATION_SIZE);
616 if (dig_connector->dp_clock == 270000) 609 if (dig_connector->dp_clock == 270000)