diff options
author | Luke Huang <lhuang@nvidia.com> | 2011-05-18 15:07:20 -0700 |
---|---|---|
committer | Dan Willemsen <dwillemsen@nvidia.com> | 2011-11-30 21:42:40 -0800 |
commit | c0f31b8d62347116def2e778b8b383e36a6ff328 (patch) | |
tree | 0d6a73b44cf6833ff6b14da777770cf0bb0d9f9c /arch/arm/mach-tegra/pm-irq.c | |
parent | ea431a6b4d5735f7dd42d56976b5aa1ed44d0847 (diff) |
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 <lhuang@nvidia.com>
Tested-by: Chih-Lung Huang <lhuang@nvidia.com>
Reviewed-by: Scott Williams <scwilliams@nvidia.com>
Rebase-Id: R371f4cecd474e8e1673e7ae6c465d7907998413f
Diffstat (limited to 'arch/arm/mach-tegra/pm-irq.c')
-rw-r--r-- | arch/arm/mach-tegra/pm-irq.c | 15 |
1 files changed, 14 insertions, 1 deletions
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(); |