mirror of https://gitee.com/openkylin/linux.git
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 614b3cfeb8
("drm/tilcdc: disable the lcd controller/dma
engine when suspend invoked")
Signed-off-by: Jyri Sarha <jsarha@ti.com>
This commit is contained in:
parent
5c6c201ccb
commit
8fe5616b20
|
@ -246,6 +246,13 @@ void tilcdc_crtc_dpms(struct drm_crtc *crtc, int mode)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int tilcdc_crtc_current_dpms_state(struct drm_crtc *crtc)
|
||||||
|
{
|
||||||
|
struct tilcdc_crtc *tilcdc_crtc = to_tilcdc_crtc(crtc);
|
||||||
|
|
||||||
|
return tilcdc_crtc->dpms;
|
||||||
|
}
|
||||||
|
|
||||||
static bool tilcdc_crtc_mode_fixup(struct drm_crtc *crtc,
|
static bool tilcdc_crtc_mode_fixup(struct drm_crtc *crtc,
|
||||||
const struct drm_display_mode *mode,
|
const struct drm_display_mode *mode,
|
||||||
struct drm_display_mode *adjusted_mode)
|
struct drm_display_mode *adjusted_mode)
|
||||||
|
|
|
@ -597,6 +597,7 @@ static int tilcdc_pm_suspend(struct device *dev)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Disable the LCDC controller, to avoid locking up the PRCM */
|
/* Disable the LCDC controller, to avoid locking up the PRCM */
|
||||||
|
priv->saved_dpms_state = tilcdc_crtc_current_dpms_state(priv->crtc);
|
||||||
tilcdc_crtc_dpms(priv->crtc, DRM_MODE_DPMS_OFF);
|
tilcdc_crtc_dpms(priv->crtc, DRM_MODE_DPMS_OFF);
|
||||||
|
|
||||||
/* Save register state: */
|
/* Save register state: */
|
||||||
|
@ -627,6 +628,8 @@ static int tilcdc_pm_resume(struct device *dev)
|
||||||
priv->saved_register[n++]);
|
priv->saved_register[n++]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
tilcdc_crtc_dpms(priv->crtc, priv->saved_dpms_state);
|
||||||
|
|
||||||
drm_kms_helper_poll_enable(ddev);
|
drm_kms_helper_poll_enable(ddev);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
|
@ -67,6 +67,7 @@ struct tilcdc_drm_private {
|
||||||
|
|
||||||
/* register contents saved across suspend/resume: */
|
/* register contents saved across suspend/resume: */
|
||||||
u32 *saved_register;
|
u32 *saved_register;
|
||||||
|
int saved_dpms_state;
|
||||||
bool ctx_valid;
|
bool ctx_valid;
|
||||||
|
|
||||||
#ifdef CONFIG_CPU_FREQ
|
#ifdef CONFIG_CPU_FREQ
|
||||||
|
@ -172,5 +173,6 @@ void tilcdc_crtc_set_simulate_vesa_sync(struct drm_crtc *crtc,
|
||||||
int tilcdc_crtc_mode_valid(struct drm_crtc *crtc, struct drm_display_mode *mode);
|
int tilcdc_crtc_mode_valid(struct drm_crtc *crtc, struct drm_display_mode *mode);
|
||||||
int tilcdc_crtc_max_width(struct drm_crtc *crtc);
|
int tilcdc_crtc_max_width(struct drm_crtc *crtc);
|
||||||
void tilcdc_crtc_dpms(struct drm_crtc *crtc, int mode);
|
void tilcdc_crtc_dpms(struct drm_crtc *crtc, int mode);
|
||||||
|
int tilcdc_crtc_current_dpms_state(struct drm_crtc *crtc);
|
||||||
|
|
||||||
#endif /* __TILCDC_DRV_H__ */
|
#endif /* __TILCDC_DRV_H__ */
|
||||||
|
|
Loading…
Reference in New Issue