On Thu, Feb 10, 2011 at 1:56 PM, Alex Deucher <alexdeucher@xxxxxxxxx> wrote: > I'm sick of fighting this. Just add a new pick_pll_algo() > function and quirk specific boards as they are reported. > > Add a quirk for the pll algo selection on the MacBookPro2,2. > > Reported-by: Justin P. Mattock <justinmattock@xxxxxxxxx> > > Signed-off-by: Alex Deucher <alexdeucher@xxxxxxxxx> > Cc: stable@xxxxxxxxxx > --- > drivers/gpu/drm/radeon/atombios_crtc.c | 39 +++++++++++++++++++++++++++----- > 1 files changed, 33 insertions(+), 6 deletions(-) > > diff --git a/drivers/gpu/drm/radeon/atombios_crtc.c b/drivers/gpu/drm/radeon/atombios_crtc.c > index dd4e3ac..4a505ba 100644 > --- a/drivers/gpu/drm/radeon/atombios_crtc.c > +++ b/drivers/gpu/drm/radeon/atombios_crtc.c > @@ -839,6 +839,32 @@ static void atombios_crtc_program_pll(struct drm_crtc *crtc, > atom_execute_table(rdev->mode_info.atom_context, index, (uint32_t *)&args); > } > > +#define RADEON_PLL_ALGO_LEGACY 0 > +#define RADEON_PLL_ALGO_AVIVO 1 > + > +static int atombios_crtc_pick_pll_algo(struct drm_crtc *crtc, struct drm_display_mode *mode) > +{ > + struct drm_device *dev = crtc->dev; > + struct radeon_device *rdev = dev->dev_private; > + > + /* board specific quirks */ > + /* funky macbooks */ > + if ((dev->pdev->device == 0x71C5) && > + (dev->pdev->subsystem_vendor == 0x106b) && > + (dev->pdev->subsystem_device == 0x0080)) { > + return RADEON_PLL_ALGO_LEGACY; > + } > + > + /* defaults */ > + /* rv515 seems happier with the old algo */ > + if (rdev->family == CHIP_RV515) > + return RADEON_PLL_ALGO_LEGACY; > + else if (ASIC_IS_AVIVO(rdev)) > + return RADEON_PLL_ALGO_AVIVO; > + > + return RADEON_PLL_ALGO_LEGACY; > +} > + > static void atombios_crtc_set_pll(struct drm_crtc *crtc, struct drm_display_mode *mode) > { > struct radeon_crtc *radeon_crtc = to_radeon_crtc(crtc); > @@ -957,16 +983,17 @@ static void atombios_crtc_set_pll(struct drm_crtc *crtc, struct drm_display_mode > /* adjust pixel clock as needed */ > adjusted_clock = atombios_adjust_pll(crtc, mode, pll, ss_enabled, &ss); > > - /* rv515 seems happier with the old algo */ > - if (rdev->family == CHIP_RV515) > + switch (atombios_crtc_pick_pll_algo(crtc, mode)) { > + case RADEON_PLL_ALGO_LEGACY: > + default: > radeon_compute_pll_legacy(pll, adjusted_clock, &pll_clock, &fb_div, &frac_fb_div, > &ref_div, &post_div); > - else if (ASIC_IS_AVIVO(rdev)) > + break; > + case RADEON_PLL_ALGO_AVIVO: > radeon_compute_pll_avivo(pll, adjusted_clock, &pll_clock, &fb_div, &frac_fb_div, > &ref_div, &post_div); > - else > - radeon_compute_pll_legacy(pll, adjusted_clock, &pll_clock, &fb_div, &frac_fb_div, > - &ref_div, &post_div); > + break; > + }; > > atombios_crtc_program_ss(crtc, ATOM_DISABLE, radeon_crtc->pll_id, &ss); > > -- > 1.7.1.1 I can get behind this. Reviewed-by: Corbin Simpson <MostAwesomeDude@xxxxxxxxx> -- When the facts change, I change my mind. What do you do, sir? ~ Keynes Corbin Simpson <MostAwesomeDude@xxxxxxxxx> _______________________________________________ dri-devel mailing list dri-devel@xxxxxxxxxxxxxxxxxxxxx http://lists.freedesktop.org/mailman/listinfo/dri-devel