I tested the patch and it fixed the problem.
Thanks, Ari
2011/6/3 Alex Deucher alexdeucher@gmail.com:
The PHY was not initialized correctly after ac89af1e1010640db072416c786f97391b85790f since the function bailed early as an encoder was not assigned. The encoder isn't necessary for PHY init so just assign to 0 for init so that the table is executed.
Reported-by: Ari Savolainen ari.m.savolainen@gmail.com
Cc: Ari Savolainen ari.m.savolainen@gmail.com Signed-off-by: Alex Deucher alexdeucher@gmail.com
drivers/gpu/drm/radeon/radeon_encoders.c | 17 +++++++++++------ 1 files changed, 11 insertions(+), 6 deletions(-)
diff --git a/drivers/gpu/drm/radeon/radeon_encoders.c b/drivers/gpu/drm/radeon/radeon_encoders.c index 13e4fa0..302248b 100644 --- a/drivers/gpu/drm/radeon/radeon_encoders.c +++ b/drivers/gpu/drm/radeon/radeon_encoders.c @@ -949,10 +949,15 @@ atombios_dig_transmitter_setup(struct drm_encoder *encoder, int action, uint8_t int dp_lane_count = 0; int connector_object_id = 0; int igp_lane_info = 0;
- int dig_encoder = dig->dig_encoder;
- if (action == ATOM_TRANSMITTER_ACTION_INIT)
- if (action == ATOM_TRANSMITTER_ACTION_INIT) {
connector = radeon_get_connector_for_encoder_init(encoder);
- else
- /* just needed to avoid bailing in the encoder check. the encoder
- * isn't used for init
- */
- dig_encoder = 0;
- } else
connector = radeon_get_connector_for_encoder(encoder);
if (connector) { @@ -968,7 +973,7 @@ atombios_dig_transmitter_setup(struct drm_encoder *encoder, int action, uint8_t }
/* no dig encoder assigned */
- if (dig->dig_encoder == -1)
- if (dig_encoder == -1)
return;
if (atombios_get_encoder_mode(encoder) == ATOM_ENCODER_MODE_DP) @@ -1018,7 +1023,7 @@ atombios_dig_transmitter_setup(struct drm_encoder *encoder, int action, uint8_t
if (dig->linkb) args.v3.acConfig.ucLinkSel = 1;
- if (dig->dig_encoder & 1)
- if (dig_encoder & 1)
args.v3.acConfig.ucEncoderSel = 1;
/* Select the PLL for the PHY @@ -1068,7 +1073,7 @@ atombios_dig_transmitter_setup(struct drm_encoder *encoder, int action, uint8_t args.v3.acConfig.fDualLinkConnector = 1; } } else if (ASIC_IS_DCE32(rdev)) {
- args.v2.acConfig.ucEncoderSel = dig->dig_encoder;
- args.v2.acConfig.ucEncoderSel = dig_encoder;
if (dig->linkb) args.v2.acConfig.ucLinkSel = 1;
@@ -1095,7 +1100,7 @@ atombios_dig_transmitter_setup(struct drm_encoder *encoder, int action, uint8_t } else { args.v1.ucConfig = ATOM_TRANSMITTER_CONFIG_CLKSRC_PPLL;
- if (dig->dig_encoder)
- if (dig_encoder)
args.v1.ucConfig |= ATOM_TRANSMITTER_CONFIG_DIG2_ENCODER; else args.v1.ucConfig |= ATOM_TRANSMITTER_CONFIG_DIG1_ENCODER; -- 1.7.1.1