aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/tilcdc
diff options
context:
space:
mode:
authorJyri Sarha <jsarha@ti.com>2016-06-14 04:43:30 -0400
committerJyri Sarha <jsarha@ti.com>2016-08-08 16:04:48 -0400
commit8fe5616b20e5742bb5fee0e77dffe2fc76ac92a0 (patch)
tree2d844f549f05617227929e765d590625787637cf /drivers/gpu/drm/tilcdc
parent5c6c201ccbaf9d3901f829441d457293f7ca8ef4 (diff)
drm/tilcdc: Restore old dpms state in pm_resume()
Restore old dpms state in pm_resume(). The dpms is turned off in pm_suspend() and it should be restored to its original state in pm_resume(). Without this patch the display is left blanked after a suspend/resume cycle. Fixes commit 614b3cfeb8d2 ("drm/tilcdc: disable the lcd controller/dma engine when suspend invoked") Signed-off-by: Jyri Sarha <jsarha@ti.com>
Diffstat (limited to 'drivers/gpu/drm/tilcdc')
-rw-r--r--drivers/gpu/drm/tilcdc/tilcdc_crtc.c7
-rw-r--r--drivers/gpu/drm/tilcdc/tilcdc_drv.c3
-rw-r--r--drivers/gpu/drm/tilcdc/tilcdc_drv.h2
3 files changed, 12 insertions, 0 deletions
diff --git a/drivers/gpu/drm/tilcdc/tilcdc_crtc.c b/drivers/gpu/drm/tilcdc/tilcdc_crtc.c
index 107c8bd04f6d..1601428c9b8e 100644
--- a/drivers/gpu/drm/tilcdc/tilcdc_crtc.c
+++ b/drivers/gpu/drm/tilcdc/tilcdc_crtc.c
@@ -246,6 +246,13 @@ void tilcdc_crtc_dpms(struct drm_crtc *crtc, int mode)
246 } 246 }
247} 247}
248 248
249int tilcdc_crtc_current_dpms_state(struct drm_crtc *crtc)
250{
251 struct tilcdc_crtc *tilcdc_crtc = to_tilcdc_crtc(crtc);
252
253 return tilcdc_crtc->dpms;
254}
255
249static bool tilcdc_crtc_mode_fixup(struct drm_crtc *crtc, 256static bool tilcdc_crtc_mode_fixup(struct drm_crtc *crtc,
250 const struct drm_display_mode *mode, 257 const struct drm_display_mode *mode,
251 struct drm_display_mode *adjusted_mode) 258 struct drm_display_mode *adjusted_mode)
diff --git a/drivers/gpu/drm/tilcdc/tilcdc_drv.c b/drivers/gpu/drm/tilcdc/tilcdc_drv.c
index d27809372d54..ed68324504f6 100644
--- a/drivers/gpu/drm/tilcdc/tilcdc_drv.c
+++ b/drivers/gpu/drm/tilcdc/tilcdc_drv.c
@@ -597,6 +597,7 @@ static int tilcdc_pm_suspend(struct device *dev)
597 } 597 }
598 598
599 /* Disable the LCDC controller, to avoid locking up the PRCM */ 599 /* Disable the LCDC controller, to avoid locking up the PRCM */
600 priv->saved_dpms_state = tilcdc_crtc_current_dpms_state(priv->crtc);
600 tilcdc_crtc_dpms(priv->crtc, DRM_MODE_DPMS_OFF); 601 tilcdc_crtc_dpms(priv->crtc, DRM_MODE_DPMS_OFF);
601 602
602 /* Save register state: */ 603 /* Save register state: */
@@ -627,6 +628,8 @@ static int tilcdc_pm_resume(struct device *dev)
627 priv->saved_register[n++]); 628 priv->saved_register[n++]);
628 } 629 }
629 630
631 tilcdc_crtc_dpms(priv->crtc, priv->saved_dpms_state);
632
630 drm_kms_helper_poll_enable(ddev); 633 drm_kms_helper_poll_enable(ddev);
631 634
632 return 0; 635 return 0;
diff --git a/drivers/gpu/drm/tilcdc/tilcdc_drv.h b/drivers/gpu/drm/tilcdc/tilcdc_drv.h
index c1de18bae415..3b52ce8ab69c 100644
--- a/drivers/gpu/drm/tilcdc/tilcdc_drv.h
+++ b/drivers/gpu/drm/tilcdc/tilcdc_drv.h
@@ -67,6 +67,7 @@ struct tilcdc_drm_private {
67 67
68 /* register contents saved across suspend/resume: */ 68 /* register contents saved across suspend/resume: */
69 u32 *saved_register; 69 u32 *saved_register;
70 int saved_dpms_state;
70 bool ctx_valid; 71 bool ctx_valid;
71 72
72#ifdef CONFIG_CPU_FREQ 73#ifdef CONFIG_CPU_FREQ
@@ -172,5 +173,6 @@ void tilcdc_crtc_set_simulate_vesa_sync(struct drm_crtc *crtc,
172int tilcdc_crtc_mode_valid(struct drm_crtc *crtc, struct drm_display_mode *mode); 173int tilcdc_crtc_mode_valid(struct drm_crtc *crtc, struct drm_display_mode *mode);
173int tilcdc_crtc_max_width(struct drm_crtc *crtc); 174int tilcdc_crtc_max_width(struct drm_crtc *crtc);
174void tilcdc_crtc_dpms(struct drm_crtc *crtc, int mode); 175void tilcdc_crtc_dpms(struct drm_crtc *crtc, int mode);
176int tilcdc_crtc_current_dpms_state(struct drm_crtc *crtc);
175 177
176#endif /* __TILCDC_DRV_H__ */ 178#endif /* __TILCDC_DRV_H__ */