[ARM] S3C: PM save UART UDIVSLOT if doing PM
Add the facility to save the UART UDIVSLOT register if the UART state is being saved over suspend. Signed-off-by: Ben Dooks <ben-linux@fluff.org>
This commit is contained in:
parent
57699e9adf
commit
4b637dc231
2 changed files with 11 additions and 0 deletions
|
@ -44,6 +44,8 @@ extern void (*pm_cpu_sleep)(void);
|
||||||
|
|
||||||
extern unsigned long s3c_pm_flags;
|
extern unsigned long s3c_pm_flags;
|
||||||
|
|
||||||
|
extern unsigned char pm_uart_udivslot; /* true to save UART UDIVSLOT */
|
||||||
|
|
||||||
/* from sleep.S */
|
/* from sleep.S */
|
||||||
|
|
||||||
extern int s3c_cpu_save(unsigned long *saveblk);
|
extern int s3c_cpu_save(unsigned long *saveblk);
|
||||||
|
@ -88,6 +90,7 @@ struct pm_uart_save {
|
||||||
u32 ufcon;
|
u32 ufcon;
|
||||||
u32 umcon;
|
u32 umcon;
|
||||||
u32 ubrdiv;
|
u32 ubrdiv;
|
||||||
|
u32 udivslot;
|
||||||
};
|
};
|
||||||
|
|
||||||
/* helper functions to save/restore lists of registers. */
|
/* helper functions to save/restore lists of registers. */
|
||||||
|
|
|
@ -70,6 +70,8 @@ static inline void s3c_pm_debug_init(void)
|
||||||
|
|
||||||
/* Save the UART configurations if we are configured for debug. */
|
/* Save the UART configurations if we are configured for debug. */
|
||||||
|
|
||||||
|
unsigned char pm_uart_udivslot;
|
||||||
|
|
||||||
#ifdef CONFIG_S3C2410_PM_DEBUG
|
#ifdef CONFIG_S3C2410_PM_DEBUG
|
||||||
|
|
||||||
struct pm_uart_save uart_save[CONFIG_SERIAL_SAMSUNG_UARTS];
|
struct pm_uart_save uart_save[CONFIG_SERIAL_SAMSUNG_UARTS];
|
||||||
|
@ -84,6 +86,9 @@ static void s3c_pm_save_uart(unsigned int uart, struct pm_uart_save *save)
|
||||||
save->umcon = __raw_readl(regs + S3C2410_UMCON);
|
save->umcon = __raw_readl(regs + S3C2410_UMCON);
|
||||||
save->ubrdiv = __raw_readl(regs + S3C2410_UBRDIV);
|
save->ubrdiv = __raw_readl(regs + S3C2410_UBRDIV);
|
||||||
|
|
||||||
|
if (pm_uart_udivslot)
|
||||||
|
save->udivslot = __raw_readl(regs + S3C2443_DIVSLOT);
|
||||||
|
|
||||||
S3C_PMDBG("UART[%d]: ULCON=%04x, UCON=%04x, UFCON=%04x, UBRDIV=%04x\n",
|
S3C_PMDBG("UART[%d]: ULCON=%04x, UCON=%04x, UFCON=%04x, UBRDIV=%04x\n",
|
||||||
uart, save->ulcon, save->ucon, save->ufcon, save->ubrdiv);
|
uart, save->ulcon, save->ucon, save->ufcon, save->ubrdiv);
|
||||||
}
|
}
|
||||||
|
@ -108,6 +113,9 @@ static void s3c_pm_restore_uart(unsigned int uart, struct pm_uart_save *save)
|
||||||
__raw_writel(save->ufcon, regs + S3C2410_UFCON);
|
__raw_writel(save->ufcon, regs + S3C2410_UFCON);
|
||||||
__raw_writel(save->umcon, regs + S3C2410_UMCON);
|
__raw_writel(save->umcon, regs + S3C2410_UMCON);
|
||||||
__raw_writel(save->ubrdiv, regs + S3C2410_UBRDIV);
|
__raw_writel(save->ubrdiv, regs + S3C2410_UBRDIV);
|
||||||
|
|
||||||
|
if (pm_uart_udivslot)
|
||||||
|
__raw_writel(save->udivslot, regs + S3C2443_DIVSLOT);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void s3c_pm_restore_uarts(void)
|
static void s3c_pm_restore_uarts(void)
|
||||||
|
|
Loading…
Add table
Reference in a new issue