diff options
author | Alex Deucher <alexdeucher@gmail.com> | 2010-05-03 01:13:14 -0400 |
---|---|---|
committer | Dave Airlie <airlied@redhat.com> | 2010-05-18 04:21:50 -0400 |
commit | d7311171c4cc8d6231427f7ac5056b939a184b80 (patch) | |
tree | bbe3db53048b12ccf1e480261e69121f095226d7 /drivers/gpu/drm/radeon/radeon_legacy_crtc.c | |
parent | ca2af92311eee95820f3b48c35045e5f56bc1477 (diff) |
drm/radeon/kms/pm: add support for no display power states
The lowest power states often cause display problems, so only enable
them when all displays are off.
Signed-off-by: Alex Deucher <alexdeucher@gmail.com>
Signed-off-by: Dave Airlie <airlied@redhat.com>
Diffstat (limited to 'drivers/gpu/drm/radeon/radeon_legacy_crtc.c')
-rw-r--r-- | drivers/gpu/drm/radeon/radeon_legacy_crtc.c | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/drivers/gpu/drm/radeon/radeon_legacy_crtc.c b/drivers/gpu/drm/radeon/radeon_legacy_crtc.c index 7701d42c4804..e1e5255396ac 100644 --- a/drivers/gpu/drm/radeon/radeon_legacy_crtc.c +++ b/drivers/gpu/drm/radeon/radeon_legacy_crtc.c | |||
@@ -314,6 +314,9 @@ void radeon_crtc_dpms(struct drm_crtc *crtc, int mode) | |||
314 | 314 | ||
315 | switch (mode) { | 315 | switch (mode) { |
316 | case DRM_MODE_DPMS_ON: | 316 | case DRM_MODE_DPMS_ON: |
317 | radeon_crtc->enabled = true; | ||
318 | /* adjust pm to dpms changes BEFORE enabling crtcs */ | ||
319 | radeon_pm_compute_clocks(rdev); | ||
317 | if (radeon_crtc->crtc_id) | 320 | if (radeon_crtc->crtc_id) |
318 | WREG32_P(RADEON_CRTC2_GEN_CNTL, RADEON_CRTC2_EN, ~(RADEON_CRTC2_EN | mask)); | 321 | WREG32_P(RADEON_CRTC2_GEN_CNTL, RADEON_CRTC2_EN, ~(RADEON_CRTC2_EN | mask)); |
319 | else { | 322 | else { |
@@ -323,7 +326,6 @@ void radeon_crtc_dpms(struct drm_crtc *crtc, int mode) | |||
323 | } | 326 | } |
324 | drm_vblank_post_modeset(dev, radeon_crtc->crtc_id); | 327 | drm_vblank_post_modeset(dev, radeon_crtc->crtc_id); |
325 | radeon_crtc_load_lut(crtc); | 328 | radeon_crtc_load_lut(crtc); |
326 | radeon_crtc->enabled = true; | ||
327 | break; | 329 | break; |
328 | case DRM_MODE_DPMS_STANDBY: | 330 | case DRM_MODE_DPMS_STANDBY: |
329 | case DRM_MODE_DPMS_SUSPEND: | 331 | case DRM_MODE_DPMS_SUSPEND: |
@@ -337,11 +339,10 @@ void radeon_crtc_dpms(struct drm_crtc *crtc, int mode) | |||
337 | WREG32_P(RADEON_CRTC_EXT_CNTL, mask, ~mask); | 339 | WREG32_P(RADEON_CRTC_EXT_CNTL, mask, ~mask); |
338 | } | 340 | } |
339 | radeon_crtc->enabled = false; | 341 | radeon_crtc->enabled = false; |
342 | /* adjust pm to dpms changes AFTER disabling crtcs */ | ||
343 | radeon_pm_compute_clocks(rdev); | ||
340 | break; | 344 | break; |
341 | } | 345 | } |
342 | |||
343 | /* adjust pm to dpms change */ | ||
344 | radeon_pm_compute_clocks(rdev); | ||
345 | } | 346 | } |
346 | 347 | ||
347 | int radeon_crtc_set_base(struct drm_crtc *crtc, int x, int y, | 348 | int radeon_crtc_set_base(struct drm_crtc *crtc, int x, int y, |