Add kernel Hibernation code for porter board.
[AGL/meta-agl.git] / meta-agl-bsp / meta-renesas / recipes-kernel / linux / linux / hibernation / 0007-Add-rcar-i2c-hibernation-code.patch
1 From 6c133013b75d88d5b4514dfecb3089f830b82d65 Mon Sep 17 00:00:00 2001
2 From: Yuichi Kusakabe <yuichi.kusakabe@jp.fujitsu.com>
3 Date: Thu, 18 May 2017 17:35:37 +0900
4 Subject: [PATCH 07/15] Add rcar-i2c hibernation code
5
6 Signed-off-by: Yuichi Kusakabe <yuichi.kusakabe@jp.fujitsu.com>
7 ---
8  drivers/i2c/busses/i2c-rcar.c | 38 ++++++++++++++++++++++++++++++++++++++
9  1 file changed, 38 insertions(+)
10
11 diff --git a/drivers/i2c/busses/i2c-rcar.c b/drivers/i2c/busses/i2c-rcar.c
12 index 8242002..c6a5a4b 100644
13 --- a/drivers/i2c/busses/i2c-rcar.c
14 +++ b/drivers/i2c/busses/i2c-rcar.c
15 @@ -754,6 +754,43 @@ static int rcar_i2c_probe(struct platform_device *pdev)
16  
17         return 0;
18  }
19 +static int rcar_i2c_suspend(struct device *dev)
20 +{
21 +       struct platform_device *pdev = to_platform_device(dev);
22 +       struct rcar_i2c_priv *priv = platform_get_drvdata(pdev);
23 +       pr_debug("suspend: i2c adapter name %s", priv->adap.name);
24 +       pr_debug("suspend: ICSCR: %08x\n", readl(priv->io + ICSCR));
25 +       pr_debug("suspend: ICMCR: %08x\n", readl(priv->io + ICMCR));
26 +       pr_debug("suspend: ICSSR: %08x\n", readl(priv->io + ICSSR));
27 +       pr_debug("suspend: ICMSR: %08x\n", readl(priv->io + ICMSR));
28 +       pr_debug("suspend: ICSIER: %08x\n", readl(priv->io + ICSIER));
29 +       pr_debug("suspend: ICMIER: %08x\n", readl(priv->io + ICMIER));
30 +       pr_debug("suspend: ICCCR: %08x\n", readl(priv->io + ICCCR));
31 +       pr_debug("suspend: ICSAR: %08x\n", readl(priv->io + ICSAR));
32 +       pr_debug("suspend: ICMAR: %08x\n", readl(priv->io + ICMAR));
33 +       clk_disable(priv->clk);
34 +       return 0;
35 +}
36 +static int rcar_i2c_resume(struct device *dev)
37 +{
38 +       struct platform_device *pdev = to_platform_device(dev);
39 +       struct rcar_i2c_priv *priv = platform_get_drvdata(pdev);
40 +       clk_enable(priv->clk);
41 +       pr_debug("resume: i2c adapter name %s", priv->adap.name);
42 +       pr_debug("resume: ICSCR: %08x\n", readl(priv->io + ICSCR));
43 +       pr_debug("resume: ICMCR: %08x\n", readl(priv->io + ICMCR));
44 +       pr_debug("resume: ICSSR: %08x\n", readl(priv->io + ICSSR));
45 +       pr_debug("resume: ICMSR: %08x\n", readl(priv->io + ICMSR));
46 +       pr_debug("resume: ICSIER: %08x\n", readl(priv->io + ICSIER));
47 +       pr_debug("resume: ICMIER: %08x\n", readl(priv->io + ICMIER));
48 +       pr_debug("resume: ICCCR: %08x\n", readl(priv->io + ICCCR));
49 +       pr_debug("resume: ICSAR: %08x\n", readl(priv->io + ICSAR));
50 +       pr_debug("resume: ICMAR: %08x\n", readl(priv->io + ICMAR));
51 +       return 0;
52 +}
53 +static const struct dev_pm_ops rcar_i2c_pm_ops = {
54 +       SET_SYSTEM_SLEEP_PM_OPS(rcar_i2c_suspend, rcar_i2c_resume)
55 +};
56  
57  static int rcar_i2c_remove(struct platform_device *pdev)
58  {
59 @@ -780,6 +817,7 @@ static struct platform_driver rcar_i2c_driver = {
60                 .name   = "i2c-rcar",
61                 .owner  = THIS_MODULE,
62                 .of_match_table = rcar_i2c_dt_ids,
63 +               .pm = &rcar_i2c_pm_ops,
64         },
65         .probe          = rcar_i2c_probe,
66         .remove         = rcar_i2c_remove,
67 -- 
68 1.8.3.1
69