aboutsummaryrefslogtreecommitdiffstats
path: root/arch/arm/mach-omap2/pm24xx.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/arm/mach-omap2/pm24xx.c')
-rw-r--r--arch/arm/mach-omap2/pm24xx.c16
1 files changed, 15 insertions, 1 deletions
diff --git a/arch/arm/mach-omap2/pm24xx.c b/arch/arm/mach-omap2/pm24xx.c
index d38f3121dde9..db1025562fb0 100644
--- a/arch/arm/mach-omap2/pm24xx.c
+++ b/arch/arm/mach-omap2/pm24xx.c
@@ -71,6 +71,11 @@ static int omap2_fclks_active(void)
71 71
72 f1 = cm_read_mod_reg(CORE_MOD, CM_FCLKEN1); 72 f1 = cm_read_mod_reg(CORE_MOD, CM_FCLKEN1);
73 f2 = cm_read_mod_reg(CORE_MOD, OMAP24XX_CM_FCLKEN2); 73 f2 = cm_read_mod_reg(CORE_MOD, OMAP24XX_CM_FCLKEN2);
74
75 /* Ignore UART clocks. These are handled by UART core (serial.c) */
76 f1 &= ~(OMAP24XX_EN_UART1 | OMAP24XX_EN_UART2);
77 f2 &= ~OMAP24XX_EN_UART3;
78
74 if (f1 | f2) 79 if (f1 | f2)
75 return 1; 80 return 1;
76 return 0; 81 return 0;
@@ -117,12 +122,20 @@ static void omap2_enter_full_retention(void)
117 if (omap_irq_pending()) 122 if (omap_irq_pending())
118 goto no_sleep; 123 goto no_sleep;
119 124
125 omap_uart_prepare_idle(0);
126 omap_uart_prepare_idle(1);
127 omap_uart_prepare_idle(2);
128
120 /* Jump to SRAM suspend code */ 129 /* Jump to SRAM suspend code */
121 omap2_sram_suspend(sdrc_read_reg(SDRC_DLLA_CTRL), 130 omap2_sram_suspend(sdrc_read_reg(SDRC_DLLA_CTRL),
122 OMAP_SDRC_REGADDR(SDRC_DLLA_CTRL), 131 OMAP_SDRC_REGADDR(SDRC_DLLA_CTRL),
123 OMAP_SDRC_REGADDR(SDRC_POWER)); 132 OMAP_SDRC_REGADDR(SDRC_POWER));
124no_sleep:
125 133
134 omap_uart_resume_idle(2);
135 omap_uart_resume_idle(1);
136 omap_uart_resume_idle(0);
137
138no_sleep:
126 if (omap2_pm_debug) { 139 if (omap2_pm_debug) {
127 unsigned long long tmp; 140 unsigned long long tmp;
128 141
@@ -283,6 +296,7 @@ static int omap2_pm_suspend(void)
283 mir1 = omap_readl(0x480fe0a4); 296 mir1 = omap_readl(0x480fe0a4);
284 omap_writel(1 << 5, 0x480fe0ac); 297 omap_writel(1 << 5, 0x480fe0ac);
285 298
299 omap_uart_prepare_suspend();
286 omap2_enter_full_retention(); 300 omap2_enter_full_retention();
287 301
288 omap_writel(mir1, 0x480fe0a4); 302 omap_writel(mir1, 0x480fe0a4);