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 */ |
