From c0f31b8d62347116def2e778b8b383e36a6ff328 Mon Sep 17 00:00:00 2001 From: Luke Huang Date: Wed, 18 May 2011 15:07:20 -0700 Subject: arm: tegra: irq: fix wake level programming After toggeling the latchwake_en bit, the status of wake event is latched to pmc_sw_wake_status, not pmc_wake_status. Adding a new function to read out from the proper register. Original-Change-Id: Ib1478504fd16197afe3a2b676833f9ce7f6f7528 Reviewed-on: http://git-master/r/32078 Reviewed-by: Chih-Lung Huang Tested-by: Chih-Lung Huang Reviewed-by: Scott Williams Rebase-Id: R371f4cecd474e8e1673e7ae6c465d7907998413f --- arch/arm/mach-tegra/pm-irq.c | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) (limited to 'arch/arm/mach-tegra/pm-irq.c') diff --git a/arch/arm/mach-tegra/pm-irq.c b/arch/arm/mach-tegra/pm-irq.c index 5bce13532301..eda278ccd89c 100644 --- a/arch/arm/mach-tegra/pm-irq.c +++ b/arch/arm/mach-tegra/pm-irq.c @@ -113,6 +113,19 @@ static inline u64 read_pmc_wake_status(void) return reg; } +static inline u64 read_pmc_sw_wake_status(void) +{ + u64 reg; + +#ifdef CONFIG_ARCH_TEGRA_2x_SOC + reg = readl(pmc + PMC_SW_WAKE_STATUS); +#else + reg = __raw_readl(pmc + PMC_SW_WAKE_STATUS); + reg |= ((u64)readl(pmc + PMC_SW_WAKE2_STATUS)) << 32; +#endif + return reg; +} + static inline void clear_pmc_sw_wake_status(void) { pmc_32kwritel(0, PMC_SW_WAKE_STATUS); @@ -234,7 +247,7 @@ static int tegra_pm_irq_syscore_suspend(void) temp &= ~PMC_CTRL_LATCH_WAKEUPS; pmc_32kwritel(temp, PMC_CTRL); - status = read_pmc_wake_status(); + status = read_pmc_sw_wake_status(); lvl = read_pmc_wake_level(); -- cgit v1.2.3