diff options
author | Jyri Sarha <jsarha@ti.com> | 2016-06-14 04:43:30 -0400 |
---|---|---|
committer | Jyri Sarha <jsarha@ti.com> | 2016-08-08 16:04:48 -0400 |
commit | 8fe5616b20e5742bb5fee0e77dffe2fc76ac92a0 (patch) | |
tree | 2d844f549f05617227929e765d590625787637cf /drivers/gpu/drm/tilcdc | |
parent | 5c6c201ccbaf9d3901f829441d457293f7ca8ef4 (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.c | 7 | ||||
-rw-r--r-- | drivers/gpu/drm/tilcdc/tilcdc_drv.c | 3 | ||||
-rw-r--r-- | drivers/gpu/drm/tilcdc/tilcdc_drv.h | 2 |
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 | ||
249 | int 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 | |||
249 | static bool tilcdc_crtc_mode_fixup(struct drm_crtc *crtc, | 256 | static 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, | |||
172 | int tilcdc_crtc_mode_valid(struct drm_crtc *crtc, struct drm_display_mode *mode); | 173 | int tilcdc_crtc_mode_valid(struct drm_crtc *crtc, struct drm_display_mode *mode); |
173 | int tilcdc_crtc_max_width(struct drm_crtc *crtc); | 174 | int tilcdc_crtc_max_width(struct drm_crtc *crtc); |
174 | void tilcdc_crtc_dpms(struct drm_crtc *crtc, int mode); | 175 | void tilcdc_crtc_dpms(struct drm_crtc *crtc, int mode); |
176 | int tilcdc_crtc_current_dpms_state(struct drm_crtc *crtc); | ||
175 | 177 | ||
176 | #endif /* __TILCDC_DRV_H__ */ | 178 | #endif /* __TILCDC_DRV_H__ */ |