sh: Add CPG save/restore code for sh7724 R-standby
authorMagnus Damm <damm@opensource.se>
Fri, 27 Nov 2009 05:16:21 +0000 (05:16 +0000)
committerPaul Mundt <lethal@linux-sh.org>
Mon, 30 Nov 2009 03:02:49 +0000 (12:02 +0900)
Add sh7724 code to save and restore CPG state during
R-standby. Only CPG registers IRDACLKCR and SPUCLKCR
require software save and restore.

Signed-off-by: Magnus Damm <damm@opensource.se>
Signed-off-by: Paul Mundt <lethal@linux-sh.org>
arch/sh/kernel/cpu/sh4a/setup-sh7724.c

index 9c3cc8f..16e1874 100644 (file)
@@ -941,6 +941,9 @@ static struct {
        /* RWDT */
        unsigned short rwtcnt;
        unsigned short rwtcsr;
+       /* CPG */
+       unsigned long irdaclk;
+       unsigned long spuclk;
 } sh7724_rstandby_state;
 
 static int sh7724_pre_sleep_notifier_call(struct notifier_block *nb,
@@ -998,6 +1001,10 @@ static int sh7724_pre_sleep_notifier_call(struct notifier_block *nb,
        sh7724_rstandby_state.rwtcsr |= 0xa500;
        __raw_writew(sh7724_rstandby_state.rwtcsr & 0x07, 0xa4520004);
 
+       /* CPG */
+       sh7724_rstandby_state.irdaclk = __raw_readl(0xa4150018); /* IRDACLKCR */
+       sh7724_rstandby_state.spuclk = __raw_readl(0xa415003c); /* SPUCLKCR */
+
        return NOTIFY_DONE;
 }
 
@@ -1052,6 +1059,10 @@ static int sh7724_post_sleep_notifier_call(struct notifier_block *nb,
        __raw_writew(sh7724_rstandby_state.rwtcnt, 0xa4520000); /* RWTCNT */
        __raw_writew(sh7724_rstandby_state.rwtcsr, 0xa4520004); /* RWTCSR */
 
+       /* CPG */
+       __raw_writel(sh7724_rstandby_state.irdaclk, 0xa4150018); /* IRDACLKCR */
+       __raw_writel(sh7724_rstandby_state.spuclk, 0xa415003c); /* SPUCLKCR */
+
        return NOTIFY_DONE;
 }