aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/gpu/drm/armada/armada_crtc.c11
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