summaryrefslogtreecommitdiff
path: root/drivers/serial/serial_sh.c
diff options
context:
space:
mode:
authorWolfgang Denk <wd@denx.de>2008-01-23 14:35:26 +0100
committerWolfgang Denk <wd@denx.de>2008-01-23 14:35:26 +0100
commit351080e2e8f633dfecd957c14bd06e55100d6a7f (patch)
tree300f532c7dcc670cd303a1a17d912acd2c145b8c /drivers/serial/serial_sh.c
parent8d54477b9bfc666632e767946ea190fc6ce52775 (diff)
parent55ed1516cbc1dad3ae277c67ee06fc4a46eaac7d (diff)
downloadu-boot-imx-351080e2e8f633dfecd957c14bd06e55100d6a7f.zip
u-boot-imx-351080e2e8f633dfecd957c14bd06e55100d6a7f.tar.gz
u-boot-imx-351080e2e8f633dfecd957c14bd06e55100d6a7f.tar.bz2
Merge branch 'master' of git://www.denx.de/git/u-boot-sh
Diffstat (limited to 'drivers/serial/serial_sh.c')
-rw-r--r--drivers/serial/serial_sh.c32
1 files changed, 14 insertions, 18 deletions
diff --git a/drivers/serial/serial_sh.c b/drivers/serial/serial_sh.c
index 00a9b39..70fd23f 100644
--- a/drivers/serial/serial_sh.c
+++ b/drivers/serial/serial_sh.c
@@ -1,6 +1,6 @@
/*
* SuperH SCIF device driver.
- * Copyright (c) 2007 Nobuhiro Iwamatsu
+ * Copyright (c) 2007,2008 Nobuhiro Iwamatsu
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -36,7 +36,7 @@
#define SCSCR (vu_short *)(SCIF_BASE + 0x8)
#define SCFCR (vu_short *)(SCIF_BASE + 0x18)
#define SCFDR (vu_short *)(SCIF_BASE + 0x1C)
-#ifdef CONFIG_SH7720 /* SH7720 specific */
+#ifdef CONFIG_CPU_SH7720 /* SH7720 specific */
#define SCFSR (vu_short *)(SCIF_BASE + 0x14) /* SCSSR */
#define SCFTDR (vu_char *)(SCIF_BASE + 0x20)
#define SCFRDR (vu_char *)(SCIF_BASE + 0x24)
@@ -57,12 +57,19 @@
#define SCLSR (vu_short *)(SCIF_BASE + 0x24)
#define LSR_ORER 1
#elif defined (CONFIG_SH3)
-#ifdef CONFIG_SH7720 /* SH7720 specific */
-# define SCLSR SCFSR /* SCSSR */
+#ifdef CONFIG_CPU_SH7720 /* SH7720 specific */
+#define SCLSR (vu_short *)(SCIF_BASE + 0x24)
+#define LSR_ORER 0x0200
#else
-# define SCLSR (vu_short *)(SCIF_BASE + 0x24)
+#define SCLSR SCFSR /* SCSSR */
+#define LSR_ORER 1
#endif
-#define LSR_ORER 0x0200
+#endif
+
+#if defined(CONFIG_CPU_SH7720)
+#define SCBRR_VALUE(bps, clk) (((clk*2)+16*bps)/(32*bps)-1)
+#else /* Generic SuperH */
+#define SCBRR_VALUE(bps, clk) ((clk+16*bps)/(32*bps)-1)
#endif
#define SCR_RE (1 << 4)
@@ -82,18 +89,7 @@
void serial_setbrg (void)
{
DECLARE_GLOBAL_DATA_PTR;
-
-#if defined(CONFIG_CPU_SH7720)
- int divisor = gd->baudrate * 16;
-
- *SCBRR = (CONFIG_SYS_CLK_FREQ * 2 + (divisor / 2)) /
- (gd->baudrate * 32) - 1;
-#else
- int divisor = gd->baudrate * 32;
-
- *SCBRR = (CONFIG_SYS_CLK_FREQ + (divisor / 2)) /
- (gd->baudrate * 32) - 1;
-#endif
+ *SCBRR = SCBRR_VALUE(gd->baudrate,CONFIG_SYS_CLK_FREQ);
}
int serial_init (void)