From 3ab3c34b6a028a0b1b42beb007e3a368b7ab4be8 Mon Sep 17 00:00:00 2001 From: =?utf8?q?=E9=BB=84=E6=B6=9B?= Date: Sun, 13 Feb 2011 15:50:45 +0800 Subject: [PATCH] rk29: more work around CRU_CLKGATE3_CON bit21~20 bug --- arch/arm/mach-rk29/clock.c | 2 +- arch/arm/mach-rk29/include/mach/cru.h | 1 + arch/arm/mach-rk29/pm.c | 2 +- 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/arch/arm/mach-rk29/clock.c b/arch/arm/mach-rk29/clock.c index 3d5959da06df..4ccc2d708072 100755 --- a/arch/arm/mach-rk29/clock.c +++ b/arch/arm/mach-rk29/clock.c @@ -180,7 +180,7 @@ static int clksel_set_parent(struct clk *clk, struct clk *parent) } /* Work around CRU_CLKGATE3_CON bit21~20 bug */ -static volatile u32 cru_clkgate3_con_mirror; +volatile u32 cru_clkgate3_con_mirror; static int gate_mode(struct clk *clk, int on) { diff --git a/arch/arm/mach-rk29/include/mach/cru.h b/arch/arm/mach-rk29/include/mach/cru.h index b6602e9ea9d9..158630fb76f8 100644 --- a/arch/arm/mach-rk29/include/mach/cru.h +++ b/arch/arm/mach-rk29/include/mach/cru.h @@ -296,6 +296,7 @@ enum cru_soft_reset { #define CRU_SOFTRST1_CON 0x70 #define CRU_SOFTRST2_CON 0x74 +extern volatile u32 cru_clkgate3_con_mirror; void cru_set_soft_reset(enum cru_soft_reset idx, bool on); #endif diff --git a/arch/arm/mach-rk29/pm.c b/arch/arm/mach-rk29/pm.c index 153111ea8aaa..09128ab22dd9 100644 --- a/arch/arm/mach-rk29/pm.c +++ b/arch/arm/mach-rk29/pm.c @@ -92,7 +92,7 @@ static int rk29_pm_enter(suspend_state_t state) clkgate[0] = cru_readl(CRU_CLKGATE0_CON); clkgate[1] = cru_readl(CRU_CLKGATE1_CON); clkgate[2] = cru_readl(CRU_CLKGATE2_CON); - clkgate[3] = cru_readl(CRU_CLKGATE3_CON); + clkgate[3] = cru_clkgate3_con_mirror; cru_writel(~((1 << CLK_GATE_CORE) | (1 << CLK_GATE_ACLK_CPU) | (1 << CLK_GATE_ACLK_CPU2) -- 2.34.1