drm/radeon: Fully initialize LVDS info also when we can't get it from the ROM.
authorMichel Dänzer <daenzer@vmware.com>
Wed, 17 Jun 2009 16:28:38 +0000 (18:28 +0200)
committerDave Airlie <airlied@redhat.com>
Thu, 18 Jun 2009 23:30:06 +0000 (09:30 +1000)
This makes the panel on my PowerBook light up.

Signed-off-by: Dave Airlie <airlied@redhat.com>
drivers/gpu/drm/radeon/radeon_combios.c

index 06e8038bc4ac6773cc3a8e9583c3826e5698eb0f..afc4db280b949419d962aafdd2f5b93ed76328ff 100644 (file)
@@ -799,6 +799,7 @@ static struct radeon_encoder_lvds *radeon_legacy_get_lvds_info_from_regs(struct
        struct radeon_encoder_lvds *lvds = NULL;
        uint32_t fp_vert_stretch, fp_horz_stretch;
        uint32_t ppll_div_sel, ppll_val;
+       uint32_t lvds_ss_gen_cntl = RREG32(RADEON_LVDS_SS_GEN_CNTL);
 
        lvds = kzalloc(sizeof(struct radeon_encoder_lvds), GFP_KERNEL);
 
@@ -808,6 +809,14 @@ static struct radeon_encoder_lvds *radeon_legacy_get_lvds_info_from_regs(struct
        fp_vert_stretch = RREG32(RADEON_FP_VERT_STRETCH);
        fp_horz_stretch = RREG32(RADEON_FP_HORZ_STRETCH);
 
+       /* These should be fail-safe defaults, fingers crossed */
+       lvds->panel_pwr_delay = 200;
+       lvds->panel_vcc_delay = 2000;
+
+       lvds->lvds_gen_cntl = RREG32(RADEON_LVDS_GEN_CNTL);
+       lvds->panel_digon_delay = (lvds_ss_gen_cntl >> RADEON_LVDS_PWRSEQ_DELAY1_SHIFT) & 0xf;
+       lvds->panel_blon_delay = (lvds_ss_gen_cntl >> RADEON_LVDS_PWRSEQ_DELAY2_SHIFT) & 0xf;
+
        if (fp_vert_stretch & RADEON_VERT_STRETCH_ENABLE)
                lvds->native_mode.panel_yres =
                    ((fp_vert_stretch & RADEON_VERT_PANEL_SIZE) >>