summaryrefslogtreecommitdiffstats
path: root/meta-agl-bsp/meta-renesas/recipes-kernel/linux/linux/hibernation/0015-Add-rcar-usbphy-hibernation-code.patch
diff options
context:
space:
mode:
authorYuichi Kusakabe <yuichi.kusakabe@jp.fujitsu.com>2017-05-22 00:15:23 +0900
committerJan-Simon Moeller <jsmoeller@linuxfoundation.org>2017-05-25 13:47:13 +0000
commita14e289caaae4c342c2bc686bd5d327ed612b0fc (patch)
tree87cc82526cadd31c77f72a208421e44ee97e7a3a /meta-agl-bsp/meta-renesas/recipes-kernel/linux/linux/hibernation/0015-Add-rcar-usbphy-hibernation-code.patch
parent5b5a54b60f45e67d647cf6cc0fe2b879b2bb8229 (diff)
Add kernel Hibernation code for porter board.
This patch set is a support to Hibernation for a porter board. I've commit with Hibernation Off patch, because it depends strongly on user land. If you can use Hibernation, Please add local.conf agl-porter-hibernate. OVERRIDES .= ":agl-porter-hibernate" DISTRO_FEATURES_append = " agl-porter-hibernate" Change-Id: Ic64c9494a4bbd2518ef1aa334325b96eb7a9479e Signed-off-by: Yuichi Kusakabe <yuichi.kusakabe@jp.fujitsu.com> Reviewed-on: https://gerrit.automotivelinux.org/gerrit/9451 Tested-by: Jenkins Job builder account <agl-jobbuilder@automotivelinux.org> ci-image-build: Jenkins Job builder account <agl-jobbuilder@automotivelinux.org> Reviewed-by: Jan-Simon Moeller <jsmoeller@linuxfoundation.org>
Diffstat (limited to 'meta-agl-bsp/meta-renesas/recipes-kernel/linux/linux/hibernation/0015-Add-rcar-usbphy-hibernation-code.patch')
-rwxr-xr-xmeta-agl-bsp/meta-renesas/recipes-kernel/linux/linux/hibernation/0015-Add-rcar-usbphy-hibernation-code.patch83
1 files changed, 83 insertions, 0 deletions
diff --git a/meta-agl-bsp/meta-renesas/recipes-kernel/linux/linux/hibernation/0015-Add-rcar-usbphy-hibernation-code.patch b/meta-agl-bsp/meta-renesas/recipes-kernel/linux/linux/hibernation/0015-Add-rcar-usbphy-hibernation-code.patch
new file mode 100755
index 000000000..c0c2b1675
--- /dev/null
+++ b/meta-agl-bsp/meta-renesas/recipes-kernel/linux/linux/hibernation/0015-Add-rcar-usbphy-hibernation-code.patch
@@ -0,0 +1,83 @@
+From 28393daa686ef43966e3fa1652bcd8d860698ef4 Mon Sep 17 00:00:00 2001
+From: Yuichi Kusakabe <yuichi.kusakabe@jp.fujitsu.com>
+Date: Thu, 18 May 2017 18:00:39 +0900
+Subject: [PATCH 15/15] Add rcar-usbphy hibernation code
+
+Signed-off-by: Yuichi Kusakabe <yuichi.kusakabe@jp.fujitsu.com>
+---
+ drivers/usb/phy/phy-rcar-gen2-usb.c | 35 +++++++++++++++++++++++++++++++++++
+ 1 file changed, 35 insertions(+)
+
+diff --git a/drivers/usb/phy/phy-rcar-gen2-usb.c b/drivers/usb/phy/phy-rcar-gen2-usb.c
+index 9e7205d..05849e7 100644
+--- a/drivers/usb/phy/phy-rcar-gen2-usb.c
++++ b/drivers/usb/phy/phy-rcar-gen2-usb.c
+@@ -148,6 +148,7 @@ static int rcar_gen2_usb_phy_set_suspend(struct usb_phy *phy, int suspend)
+
+ devm_release_mem_region(&pdev->dev, res->start, resource_size(res));
+ devm_iounmap(&pdev->dev, priv->base);
++ priv->base = NULL;
+
+ spin_unlock_irqrestore(&priv->lock, flags);
+
+@@ -178,6 +179,7 @@ static int rcar_gen2_usb_phy_init(struct usb_phy *phy)
+ devm_release_mem_region(&pdev->dev, res->start,
+ resource_size(res));
+ devm_iounmap(&pdev->dev, priv->base);
++ priv->base = NULL;
+ spin_unlock_irqrestore(&priv->lock, flags);
+ }
+ return 0;
+@@ -209,6 +211,7 @@ static void rcar_gen2_usb_phy_shutdown(struct usb_phy *phy)
+ devm_release_mem_region(&pdev->dev, res->start,
+ resource_size(res));
+ devm_iounmap(&pdev->dev, priv->base);
++ priv->base = NULL;
+ }
+ out:
+ spin_unlock_irqrestore(&priv->lock, flags);
+@@ -431,9 +434,41 @@ static int phy_rcar_gen2_pm_resume(struct device *dev)
+ return 0;
+ }
+
++static int phy_rcar_gen2_pm_freeze(struct device *dev)
++{
++ struct rcar_gen2_usb_phy_priv *priv = dev_get_drvdata(dev);
++ pr_info("freeze: %p\n", priv->base);
++
++ return phy_rcar_gen2_pm_suspend(dev);
++}
++
++static int phy_rcar_gen2_pm_restore(struct device *dev)
++{
++ struct rcar_gen2_usb_phy_priv *priv = dev_get_drvdata(dev);
++ struct resource *res;
++
++ res = platform_get_resource(to_platform_device(dev), IORESOURCE_MEM, 0);
++ priv->base = devm_ioremap_resource(dev, res);
++ if (IS_ERR(priv->base)) {
++ pr_info("restore: pointer error %ld\n", PTR_ERR(priv->base));
++ return PTR_ERR(priv->base);
++ }
++ pr_info("restore: %p\n", priv->base);
++ __rcar_gen2_usb_phy_init(priv);
++ devm_release_mem_region(dev, res->start,
++ resource_size(res));
++ devm_iounmap(dev, priv->base);
++ priv->base = NULL;
++ return phy_rcar_gen2_pm_resume(dev);
++}
++
+ static const struct dev_pm_ops phy_rcar_gen2_dev_pm_ops = {
+ .suspend = phy_rcar_gen2_pm_suspend,
+ .resume = phy_rcar_gen2_pm_resume,
++ .freeze_noirq = phy_rcar_gen2_pm_freeze,
++ .restore = phy_rcar_gen2_pm_restore,
++ .thaw = phy_rcar_gen2_pm_resume,
++ .poweroff = phy_rcar_gen2_pm_suspend,
+ };
+ #endif
+
+--
+1.8.3.1
+