drm/radeon/kms: fix LVDS setup on r4xx
R4xx mobility chips use atombios, which does not store the LVDS_GEN_CNTL parameter setup like combios. Rather, it's configured in LVDSEncoderControl. As such, LVDS_GEN_CNTL is set wrong when on resume. Call LVDSEncoderControl to set it properly. Should fix fdo bug 25336 Signed-off-by: Alex Deucher <alexdeucher@gmail.com> Signed-off-by: Dave Airlie <airlied@redhat.com>
This commit is contained in:
parent
23956dfa82
commit
32f48ffea9
|
@ -424,7 +424,7 @@ union lvds_encoder_control {
|
|||
LVDS_ENCODER_CONTROL_PS_ALLOCATION_V2 v2;
|
||||
};
|
||||
|
||||
static void
|
||||
void
|
||||
atombios_digital_setup(struct drm_encoder *encoder, int action)
|
||||
{
|
||||
struct drm_device *dev = encoder->dev;
|
||||
|
|
|
@ -136,7 +136,14 @@ static void radeon_legacy_lvds_mode_set(struct drm_encoder *encoder,
|
|||
lvds_pll_cntl &= ~RADEON_LVDS_PLL_EN;
|
||||
|
||||
lvds_ss_gen_cntl = RREG32(RADEON_LVDS_SS_GEN_CNTL);
|
||||
if ((!rdev->is_atom_bios)) {
|
||||
if (rdev->is_atom_bios) {
|
||||
/* LVDS_GEN_CNTL parameters are computed in LVDSEncoderControl
|
||||
* need to call that on resume to set up the reg properly.
|
||||
*/
|
||||
radeon_encoder->pixel_clock = adjusted_mode->clock;
|
||||
atombios_digital_setup(encoder, PANEL_ENCODER_ACTION_ENABLE);
|
||||
lvds_gen_cntl = RREG32(RADEON_LVDS_GEN_CNTL);
|
||||
} else {
|
||||
struct radeon_encoder_lvds *lvds = (struct radeon_encoder_lvds *)radeon_encoder->enc_priv;
|
||||
if (lvds) {
|
||||
DRM_DEBUG("bios LVDS_GEN_CNTL: 0x%x\n", lvds->lvds_gen_cntl);
|
||||
|
@ -147,8 +154,7 @@ static void radeon_legacy_lvds_mode_set(struct drm_encoder *encoder,
|
|||
(lvds->panel_blon_delay << RADEON_LVDS_PWRSEQ_DELAY2_SHIFT));
|
||||
} else
|
||||
lvds_gen_cntl = RREG32(RADEON_LVDS_GEN_CNTL);
|
||||
} else
|
||||
lvds_gen_cntl = RREG32(RADEON_LVDS_GEN_CNTL);
|
||||
}
|
||||
lvds_gen_cntl |= RADEON_LVDS_DISPLAY_DIS;
|
||||
lvds_gen_cntl &= ~(RADEON_LVDS_ON |
|
||||
RADEON_LVDS_BLON |
|
||||
|
|
|
@ -385,6 +385,7 @@ struct drm_encoder *radeon_encoder_legacy_tv_dac_add(struct drm_device *dev, int
|
|||
struct drm_encoder *radeon_encoder_legacy_tmds_int_add(struct drm_device *dev, int bios_index);
|
||||
struct drm_encoder *radeon_encoder_legacy_tmds_ext_add(struct drm_device *dev, int bios_index);
|
||||
extern void atombios_external_tmds_setup(struct drm_encoder *encoder, int action);
|
||||
extern void atombios_digital_setup(struct drm_encoder *encoder, int action);
|
||||
extern int atombios_get_encoder_mode(struct drm_encoder *encoder);
|
||||
extern void radeon_encoder_set_active_device(struct drm_encoder *encoder);
|
||||
|
||||
|
|
Loading…
Reference in New Issue