summaryrefslogtreecommitdiff
path: root/arch/arm/mach-tegra/pm-irq.c
diff options
context:
space:
mode:
authorLuke Huang <lhuang@nvidia.com>2011-05-18 15:07:20 -0700
committerDan Willemsen <dwillemsen@nvidia.com>2011-11-30 21:42:40 -0800
commitc0f31b8d62347116def2e778b8b383e36a6ff328 (patch)
tree0d6a73b44cf6833ff6b14da777770cf0bb0d9f9c /arch/arm/mach-tegra/pm-irq.c
parentea431a6b4d5735f7dd42d56976b5aa1ed44d0847 (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.c15
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();