diff options
-rw-r--r-- | drivers/gpu/drm/armada/armada_crtc.c | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/drivers/gpu/drm/armada/armada_crtc.c b/drivers/gpu/drm/armada/armada_crtc.c index bbf5ff785cd2..8c43ecc19c15 100644 --- a/drivers/gpu/drm/armada/armada_crtc.c +++ b/drivers/gpu/drm/armada/armada_crtc.c | |||
@@ -325,7 +325,11 @@ static void armada_drm_crtc_dpms(struct drm_crtc *crtc, int dpms) | |||
325 | 325 | ||
326 | if (dcrtc->dpms != dpms) { | 326 | if (dcrtc->dpms != dpms) { |
327 | dcrtc->dpms = dpms; | 327 | dcrtc->dpms = dpms; |
328 | if (!IS_ERR(dcrtc->clk) && !dpms_blanked(dpms)) | ||
329 | WARN_ON(clk_prepare_enable(dcrtc->clk)); | ||
328 | armada_drm_crtc_update(dcrtc); | 330 | armada_drm_crtc_update(dcrtc); |
331 | if (!IS_ERR(dcrtc->clk) && dpms_blanked(dpms)) | ||
332 | clk_disable_unprepare(dcrtc->clk); | ||
329 | if (dpms_blanked(dpms)) | 333 | if (dpms_blanked(dpms)) |
330 | armada_drm_vblank_off(dcrtc); | 334 | armada_drm_vblank_off(dcrtc); |
331 | else | 335 | else |
@@ -563,6 +567,13 @@ static int armada_drm_crtc_mode_set(struct drm_crtc *crtc, | |||
563 | writel_relaxed(val, dcrtc->base + LCD_SPU_DUMB_CTRL); | 567 | writel_relaxed(val, dcrtc->base + LCD_SPU_DUMB_CTRL); |
564 | } | 568 | } |
565 | 569 | ||
570 | /* | ||
571 | * If we are blanked, we would have disabled the clock. Re-enable | ||
572 | * it so that compute_clock() does the right thing. | ||
573 | */ | ||
574 | if (!IS_ERR(dcrtc->clk) && dpms_blanked(dcrtc->dpms)) | ||
575 | WARN_ON(clk_prepare_enable(dcrtc->clk)); | ||
576 | |||
566 | /* Now compute the divider for real */ | 577 | /* Now compute the divider for real */ |
567 | dcrtc->variant->compute_clock(dcrtc, adj, &sclk); | 578 | dcrtc->variant->compute_clock(dcrtc, adj, &sclk); |
568 | 579 | ||