summaryrefslogtreecommitdiffstats
path: root/meta-agl-bsp/meta-renesas/recipes-kernel/linux/linux/hibernation/0006-Add-rcar-du-hibernation-code.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta-agl-bsp/meta-renesas/recipes-kernel/linux/linux/hibernation/0006-Add-rcar-du-hibernation-code.patch')
-rwxr-xr-xmeta-agl-bsp/meta-renesas/recipes-kernel/linux/linux/hibernation/0006-Add-rcar-du-hibernation-code.patch127
1 files changed, 127 insertions, 0 deletions
diff --git a/meta-agl-bsp/meta-renesas/recipes-kernel/linux/linux/hibernation/0006-Add-rcar-du-hibernation-code.patch b/meta-agl-bsp/meta-renesas/recipes-kernel/linux/linux/hibernation/0006-Add-rcar-du-hibernation-code.patch
new file mode 100755
index 000000000..8942ed44e
--- /dev/null
+++ b/meta-agl-bsp/meta-renesas/recipes-kernel/linux/linux/hibernation/0006-Add-rcar-du-hibernation-code.patch
@@ -0,0 +1,127 @@
+From 4a9a11deb2e83549d2e77cac129f879a0000ef7e Mon Sep 17 00:00:00 2001
+From: Yuichi Kusakabe <yuichi.kusakabe@jp.fujitsu.com>
+Date: Thu, 18 May 2017 17:33:54 +0900
+Subject: [PATCH 06/15] Add rcar-du hibernation code
+
+Signed-off-by: Yuichi Kusakabe <yuichi.kusakabe@jp.fujitsu.com>
+---
+ drivers/gpu/drm/rcar-du/rcar_du_drv.c | 68 ++++++++++++++++++++++++++++++++++-
+ 1 file changed, 67 insertions(+), 1 deletion(-)
+
+diff --git a/drivers/gpu/drm/rcar-du/rcar_du_drv.c b/drivers/gpu/drm/rcar-du/rcar_du_drv.c
+index 53f1f6a..fbb212c 100644
+--- a/drivers/gpu/drm/rcar-du/rcar_du_drv.c
++++ b/drivers/gpu/drm/rcar-du/rcar_du_drv.c
+@@ -442,6 +442,15 @@ static int rcar_du_pm_suspend(struct device *dev)
+
+ drm_kms_helper_poll_disable(rcdu->ddev);
+
++#ifdef CONFIG_MACH_FTEN
++ list_for_each_entry(encoder,
++ &rcdu->ddev->mode_config.encoder_list, head) {
++ if ((encoder->encoder_type == DRM_MODE_ENCODER_TVDAC) &&
++ (get_rcar_slave_funcs(encoder)->dpms))
++ get_rcar_slave_funcs(encoder)->dpms(encoder,
++ DRM_MODE_DPMS_SUSPEND);
++ }
++#else
+ #if defined(CONFIG_DRM_ADV7511) || defined(CONFIG_DRM_ADV7511_MODULE)
+ list_for_each_entry(encoder,
+ &rcdu->ddev->mode_config.encoder_list, head) {
+@@ -451,6 +460,8 @@ static int rcar_du_pm_suspend(struct device *dev)
+ DRM_MODE_DPMS_OFF);
+ }
+ #endif
++#endif
++
+ #ifdef CONFIG_DRM_RCAR_LVDS
+ for (i = 0; i < rcdu->info->num_lvds; ++i) {
+ if (rcdu->lvds[i])
+@@ -483,6 +494,15 @@ static int rcar_du_pm_resume(struct device *dev)
+ }
+ #endif
+
++#ifdef CONFIG_MACH_FTEN
++ list_for_each_entry(encoder,
++ &rcdu->ddev->mode_config.encoder_list, head) {
++ if ((encoder->encoder_type == DRM_MODE_ENCODER_TVDAC) &&
++ (get_rcar_slave_funcs(encoder)->dpms))
++ get_rcar_slave_funcs(encoder)->dpms(encoder,
++ DRM_MODE_DPMS_ON);
++ }
++#else
+ #if defined(CONFIG_DRM_ADV7511) || defined(CONFIG_DRM_ADV7511_MODULE)
+ list_for_each_entry(encoder,
+ &rcdu->ddev->mode_config.encoder_list, head) {
+@@ -492,14 +512,53 @@ static int rcar_du_pm_resume(struct device *dev)
+ DRM_MODE_DPMS_ON);
+ }
+ #endif
++#endif
+ drm_kms_helper_poll_enable(rcdu->ddev);
+
+ return 0;
+ }
+-#endif
++#ifdef CONFIG_MACH_FTEN
++static int rcar_du_pm_freeze(struct device *dev)
++{
++ int ret;
++
++ ret = rcar_du_pm_suspend(dev);
++ return ret;
++}
++
++static int rcar_du_pm_thaw(struct device *dev)
++{
++ int ret;
+
++ ret = rcar_du_pm_resume(dev);
++ return ret;
++}
++
++static int rcar_du_pm_restore(struct device *dev)
++{
++ int i, ret;
++ struct rcar_du_device *rcdu = dev_get_drvdata(dev);
++
++ ret = rcar_du_pm_resume(dev);
++ for (i = 0; i < rcdu->pdata->num_crtcs; ++i)
++ rcar_du_crtc_enable_vblank(&rcdu->crtcs[i],
++ rcdu->crtcs[i].vblank_enable);
++ return ret;
++}
++#endif
++#endif
+ static const struct dev_pm_ops rcar_du_pm_ops = {
++#if defined(CONFIG_MACH_FTEN) && defined(CONFIG_HIBERNATION) && \
++ defined(CONFIG_PM_SLEEP)
++ .suspend = rcar_du_pm_suspend,
++ .resume = rcar_du_pm_resume,
++ .freeze = rcar_du_pm_freeze,
++ .thaw = rcar_du_pm_thaw,
++ .poweroff = rcar_du_pm_suspend,
++ .restore = rcar_du_pm_restore,
++#else
+ SET_SYSTEM_SLEEP_PM_OPS(rcar_du_pm_suspend, rcar_du_pm_resume)
++#endif
+ };
+
+ /* -----------------------------------------------------------------------------
+@@ -620,6 +679,13 @@ static const struct rcar_du_device_info rcar_du_r8a7791_info = {
+ .possible_clones = 0,
+ .encoder_type = DRM_MODE_ENCODER_NONE,
+ },
++#if defined(CONFIG_MACH_FTEN)
++ [RCAR_DU_OUTPUT_COMPOSITE] = {
++ .possible_crtcs = BIT(1),
++ .possible_clones = 0,
++ .encoder_type = DRM_MODE_ENCODER_TVDAC,
++ },
++#endif
+ },
+ .num_lvds = 1,
+ .drgbs_bit = 1,
+--
+1.8.3.1
+