diff options
Diffstat (limited to 'meta-agl-bsp/meta-renesas/recipes-kernel/linux/linux/hibernation/0006-Add-rcar-du-hibernation-code.patch')
-rwxr-xr-x | meta-agl-bsp/meta-renesas/recipes-kernel/linux/linux/hibernation/0006-Add-rcar-du-hibernation-code.patch | 127 |
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 + |