Skip to content

Commit

Permalink
[ARM] S3C: PM save UART UDIVSLOT if doing PM
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Ben Dooks committed May 7, 2009
1 parent 57699e9 commit 4b637dc
Show file tree
Hide file tree
Showing 2 changed files with 11 additions and 0 deletions.
3 changes: 3 additions & 0 deletions arch/arm/plat-s3c/include/plat/pm.h
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,8 @@ extern void (*pm_cpu_sleep)(void);

extern unsigned long s3c_pm_flags;

extern unsigned char pm_uart_udivslot; /* true to save UART UDIVSLOT */

/* from sleep.S */

extern int s3c_cpu_save(unsigned long *saveblk);
Expand Down Expand Up @@ -88,6 +90,7 @@ struct pm_uart_save {
u32 ufcon;
u32 umcon;
u32 ubrdiv;
u32 udivslot;
};

/* helper functions to save/restore lists of registers. */
Expand Down
8 changes: 8 additions & 0 deletions arch/arm/plat-s3c/pm.c
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,8 @@ static inline void s3c_pm_debug_init(void)

/* Save the UART configurations if we are configured for debug. */

unsigned char pm_uart_udivslot;

#ifdef CONFIG_S3C2410_PM_DEBUG

struct pm_uart_save uart_save[CONFIG_SERIAL_SAMSUNG_UARTS];
Expand All @@ -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->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",
uart, save->ulcon, save->ucon, save->ufcon, save->ubrdiv);
}
Expand All @@ -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->umcon, regs + S3C2410_UMCON);
__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)
Expand Down

0 comments on commit 4b637dc

Please sign in to comment.