aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/radeon/atombios_crtc.c
diff options
context:
space:
mode:
authorAlex Deucher <alexdeucher@gmail.com>2010-01-19 17:16:10 -0500
committerDave Airlie <airlied@redhat.com>2010-01-24 02:24:23 -0500
commitfc10332b8ac5ca32d11f898027d84c007543bd80 (patch)
tree28b24fb83e4c4bfc71286ce93f01271fa5027c95 /drivers/gpu/drm/radeon/atombios_crtc.c
parenta348c84d953f61c776e53cde0a63a4e407a23c18 (diff)
drm/radeon/kms: clean up pll struct
- add a new flag for fixed post div - pull the pll flags into the struct Signed-off-by: Alex Deucher <alexdeucher@gmail.com> Signed-off-by: Dave Airlie <airlied@redhat.com>
Diffstat (limited to 'drivers/gpu/drm/radeon/atombios_crtc.c')
-rw-r--r--drivers/gpu/drm/radeon/atombios_crtc.c35
1 files changed, 17 insertions, 18 deletions
diff --git a/drivers/gpu/drm/radeon/atombios_crtc.c b/drivers/gpu/drm/radeon/atombios_crtc.c
index 7af5c1f7b6de..7a8cdf2813dc 100644
--- a/drivers/gpu/drm/radeon/atombios_crtc.c
+++ b/drivers/gpu/drm/radeon/atombios_crtc.c
@@ -426,7 +426,11 @@ void atombios_crtc_set_pll(struct drm_crtc *crtc, struct drm_display_mode *mode)
426 uint32_t adjusted_clock; 426 uint32_t adjusted_clock;
427 uint32_t ref_div = 0, fb_div = 0, frac_fb_div = 0, post_div = 0; 427 uint32_t ref_div = 0, fb_div = 0, frac_fb_div = 0, post_div = 0;
428 struct radeon_pll *pll; 428 struct radeon_pll *pll;
429 int pll_flags = 0; 429
430 if (radeon_crtc->crtc_id == 0)
431 pll = &rdev->clock.p1pll;
432 else
433 pll = &rdev->clock.p2pll;
430 434
431 memset(&args, 0, sizeof(args)); 435 memset(&args, 0, sizeof(args));
432 436
@@ -434,20 +438,20 @@ void atombios_crtc_set_pll(struct drm_crtc *crtc, struct drm_display_mode *mode)
434 if ((rdev->family == CHIP_RS600) || 438 if ((rdev->family == CHIP_RS600) ||
435 (rdev->family == CHIP_RS690) || 439 (rdev->family == CHIP_RS690) ||
436 (rdev->family == CHIP_RS740)) 440 (rdev->family == CHIP_RS740))
437 pll_flags |= (RADEON_PLL_USE_FRAC_FB_DIV | 441 pll->flags |= (RADEON_PLL_USE_FRAC_FB_DIV |
438 RADEON_PLL_PREFER_CLOSEST_LOWER); 442 RADEON_PLL_PREFER_CLOSEST_LOWER);
439 443
440 if (ASIC_IS_DCE32(rdev) && mode->clock > 200000) /* range limits??? */ 444 if (ASIC_IS_DCE32(rdev) && mode->clock > 200000) /* range limits??? */
441 pll_flags |= RADEON_PLL_PREFER_HIGH_FB_DIV; 445 pll->flags |= RADEON_PLL_PREFER_HIGH_FB_DIV;
442 else 446 else
443 pll_flags |= RADEON_PLL_PREFER_LOW_REF_DIV; 447 pll->flags |= RADEON_PLL_PREFER_LOW_REF_DIV;
444 } else { 448 } else {
445 pll_flags |= RADEON_PLL_LEGACY; 449 pll->flags |= RADEON_PLL_LEGACY;
446 450
447 if (mode->clock > 200000) /* range limits??? */ 451 if (mode->clock > 200000) /* range limits??? */
448 pll_flags |= RADEON_PLL_PREFER_HIGH_FB_DIV; 452 pll->flags |= RADEON_PLL_PREFER_HIGH_FB_DIV;
449 else 453 else
450 pll_flags |= RADEON_PLL_PREFER_LOW_REF_DIV; 454 pll->flags |= RADEON_PLL_PREFER_LOW_REF_DIV;
451 455
452 } 456 }
453 457
@@ -456,10 +460,10 @@ void atombios_crtc_set_pll(struct drm_crtc *crtc, struct drm_display_mode *mode)
456 if (!ASIC_IS_AVIVO(rdev)) { 460 if (!ASIC_IS_AVIVO(rdev)) {
457 if (encoder->encoder_type != 461 if (encoder->encoder_type !=
458 DRM_MODE_ENCODER_DAC) 462 DRM_MODE_ENCODER_DAC)
459 pll_flags |= RADEON_PLL_NO_ODD_POST_DIV; 463 pll->flags |= RADEON_PLL_NO_ODD_POST_DIV;
460 if (encoder->encoder_type == 464 if (encoder->encoder_type ==
461 DRM_MODE_ENCODER_LVDS) 465 DRM_MODE_ENCODER_LVDS)
462 pll_flags |= RADEON_PLL_USE_REF_DIV; 466 pll->flags |= RADEON_PLL_USE_REF_DIV;
463 } 467 }
464 radeon_encoder = to_radeon_encoder(encoder); 468 radeon_encoder = to_radeon_encoder(encoder);
465 break; 469 break;
@@ -494,23 +498,18 @@ void atombios_crtc_set_pll(struct drm_crtc *crtc, struct drm_display_mode *mode)
494 adjusted_clock = mode->clock; 498 adjusted_clock = mode->clock;
495 } 499 }
496 500
497 if (radeon_crtc->crtc_id == 0)
498 pll = &rdev->clock.p1pll;
499 else
500 pll = &rdev->clock.p2pll;
501
502 if (ASIC_IS_AVIVO(rdev)) { 501 if (ASIC_IS_AVIVO(rdev)) {
503 if (radeon_new_pll) 502 if (radeon_new_pll)
504 radeon_compute_pll_avivo(pll, adjusted_clock, &pll_clock, 503 radeon_compute_pll_avivo(pll, adjusted_clock, &pll_clock,
505 &fb_div, &frac_fb_div, 504 &fb_div, &frac_fb_div,
506 &ref_div, &post_div, pll_flags); 505 &ref_div, &post_div);
507 else 506 else
508 radeon_compute_pll(pll, adjusted_clock, &pll_clock, 507 radeon_compute_pll(pll, adjusted_clock, &pll_clock,
509 &fb_div, &frac_fb_div, 508 &fb_div, &frac_fb_div,
510 &ref_div, &post_div, pll_flags); 509 &ref_div, &post_div);
511 } else 510 } else
512 radeon_compute_pll(pll, adjusted_clock, &pll_clock, &fb_div, &frac_fb_div, 511 radeon_compute_pll(pll, adjusted_clock, &pll_clock, &fb_div, &frac_fb_div,
513 &ref_div, &post_div, pll_flags); 512 &ref_div, &post_div);
514 513
515 index = GetIndexIntoMasterTable(COMMAND, SetPixelClock); 514 index = GetIndexIntoMasterTable(COMMAND, SetPixelClock);
516 atom_parse_cmd_header(rdev->mode_info.atom_context, index, &frev, 515 atom_parse_cmd_header(rdev->mode_info.atom_context, index, &frev,