diff options
Diffstat (limited to 'arch/arm/plat-s3c/pm.c')
-rw-r--r-- | arch/arm/plat-s3c/pm.c | 19 |
1 files changed, 17 insertions, 2 deletions
diff --git a/arch/arm/plat-s3c/pm.c b/arch/arm/plat-s3c/pm.c index 061182ca66e3..8d97db2c7a0d 100644 --- a/arch/arm/plat-s3c/pm.c +++ b/arch/arm/plat-s3c/pm.c | |||
@@ -21,11 +21,10 @@ | |||
21 | 21 | ||
22 | #include <asm/cacheflush.h> | 22 | #include <asm/cacheflush.h> |
23 | #include <mach/hardware.h> | 23 | #include <mach/hardware.h> |
24 | #include <mach/map.h> | ||
24 | 25 | ||
25 | #include <plat/regs-serial.h> | 26 | #include <plat/regs-serial.h> |
26 | #include <mach/regs-clock.h> | 27 | #include <mach/regs-clock.h> |
27 | #include <mach/regs-gpio.h> | ||
28 | #include <mach/regs-mem.h> | ||
29 | #include <mach/regs-irq.h> | 28 | #include <mach/regs-irq.h> |
30 | #include <asm/irq.h> | 29 | #include <asm/irq.h> |
31 | 30 | ||
@@ -70,6 +69,8 @@ static inline void s3c_pm_debug_init(void) | |||
70 | 69 | ||
71 | /* Save the UART configurations if we are configured for debug. */ | 70 | /* Save the UART configurations if we are configured for debug. */ |
72 | 71 | ||
72 | unsigned char pm_uart_udivslot; | ||
73 | |||
73 | #ifdef CONFIG_S3C2410_PM_DEBUG | 74 | #ifdef CONFIG_S3C2410_PM_DEBUG |
74 | 75 | ||
75 | struct pm_uart_save uart_save[CONFIG_SERIAL_SAMSUNG_UARTS]; | 76 | struct pm_uart_save uart_save[CONFIG_SERIAL_SAMSUNG_UARTS]; |
@@ -83,6 +84,12 @@ static void s3c_pm_save_uart(unsigned int uart, struct pm_uart_save *save) | |||
83 | save->ufcon = __raw_readl(regs + S3C2410_UFCON); | 84 | save->ufcon = __raw_readl(regs + S3C2410_UFCON); |
84 | save->umcon = __raw_readl(regs + S3C2410_UMCON); | 85 | save->umcon = __raw_readl(regs + S3C2410_UMCON); |
85 | save->ubrdiv = __raw_readl(regs + S3C2410_UBRDIV); | 86 | save->ubrdiv = __raw_readl(regs + S3C2410_UBRDIV); |
87 | |||
88 | if (pm_uart_udivslot) | ||
89 | save->udivslot = __raw_readl(regs + S3C2443_DIVSLOT); | ||
90 | |||
91 | S3C_PMDBG("UART[%d]: ULCON=%04x, UCON=%04x, UFCON=%04x, UBRDIV=%04x\n", | ||
92 | uart, save->ulcon, save->ucon, save->ufcon, save->ubrdiv); | ||
86 | } | 93 | } |
87 | 94 | ||
88 | static void s3c_pm_save_uarts(void) | 95 | static void s3c_pm_save_uarts(void) |
@@ -98,11 +105,16 @@ static void s3c_pm_restore_uart(unsigned int uart, struct pm_uart_save *save) | |||
98 | { | 105 | { |
99 | void __iomem *regs = S3C_VA_UARTx(uart); | 106 | void __iomem *regs = S3C_VA_UARTx(uart); |
100 | 107 | ||
108 | s3c_pm_arch_update_uart(regs, save); | ||
109 | |||
101 | __raw_writel(save->ulcon, regs + S3C2410_ULCON); | 110 | __raw_writel(save->ulcon, regs + S3C2410_ULCON); |
102 | __raw_writel(save->ucon, regs + S3C2410_UCON); | 111 | __raw_writel(save->ucon, regs + S3C2410_UCON); |
103 | __raw_writel(save->ufcon, regs + S3C2410_UFCON); | 112 | __raw_writel(save->ufcon, regs + S3C2410_UFCON); |
104 | __raw_writel(save->umcon, regs + S3C2410_UMCON); | 113 | __raw_writel(save->umcon, regs + S3C2410_UMCON); |
105 | __raw_writel(save->ubrdiv, regs + S3C2410_UBRDIV); | 114 | __raw_writel(save->ubrdiv, regs + S3C2410_UBRDIV); |
115 | |||
116 | if (pm_uart_udivslot) | ||
117 | __raw_writel(save->udivslot, regs + S3C2443_DIVSLOT); | ||
106 | } | 118 | } |
107 | 119 | ||
108 | static void s3c_pm_restore_uarts(void) | 120 | static void s3c_pm_restore_uarts(void) |
@@ -313,6 +325,9 @@ static int s3c_pm_enter(suspend_state_t state) | |||
313 | 325 | ||
314 | S3C_PMDBG("%s: post sleep, preparing to return\n", __func__); | 326 | S3C_PMDBG("%s: post sleep, preparing to return\n", __func__); |
315 | 327 | ||
328 | /* LEDs should now be 1110 */ | ||
329 | s3c_pm_debug_smdkled(1 << 1, 0); | ||
330 | |||
316 | s3c_pm_check_restore(); | 331 | s3c_pm_check_restore(); |
317 | 332 | ||
318 | /* ok, let's return from sleep */ | 333 | /* ok, let's return from sleep */ |