summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMinkyu Kang <mk7.kang@samsung.com>2010-09-28 14:35:02 +0900
committerMinkyu Kang <mk7.kang@samsung.com>2010-10-19 11:35:29 +0900
commit1628cfc4fe4b2c3caa7e9d5622f0665c54e8ba6e (patch)
treeab110be7f4e8e532e1b44f878b7a59c6aaaa9750
parent1727e216987a2d4e3e220f8c09e4bb54a611d21e (diff)
downloadu-boot-imx-1628cfc4fe4b2c3caa7e9d5622f0665c54e8ba6e.zip
u-boot-imx-1628cfc4fe4b2c3caa7e9d5622f0665c54e8ba6e.tar.gz
u-boot-imx-1628cfc4fe4b2c3caa7e9d5622f0665c54e8ba6e.tar.bz2
ARMV7: S5P: serial: support the s5pc210
This patch is for s5pc210 support. Due to the resigter of baudrate is changed from slot to value, add both of them to uart structure. Signed-off-by: Minkyu Kang <mk7.kang@samsung.com> Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com>
-rw-r--r--arch/arm/include/asm/arch-s5pc1xx/uart.h14
-rw-r--r--drivers/serial/serial_s5p.c6
2 files changed, 16 insertions, 4 deletions
diff --git a/arch/arm/include/asm/arch-s5pc1xx/uart.h b/arch/arm/include/asm/arch-s5pc1xx/uart.h
index 2d7ad7e..f6eeab4 100644
--- a/arch/arm/include/asm/arch-s5pc1xx/uart.h
+++ b/arch/arm/include/asm/arch-s5pc1xx/uart.h
@@ -24,6 +24,12 @@
#define __ASM_ARCH_UART_H_
#ifndef __ASSEMBLY__
+/* baudrate rest value */
+union br_rest {
+ unsigned short slot; /* udivslot */
+ unsigned char value; /* ufracval */
+};
+
struct s5p_uart {
unsigned int ulcon;
unsigned int ucon;
@@ -38,10 +44,12 @@ struct s5p_uart {
unsigned char urxh;
unsigned char res2[3];
unsigned int ubrdiv;
- unsigned short udivslot;
- unsigned char res3[2];
- unsigned char res4[0x3d0];
+ union br_rest rest;
+ unsigned char res3[0x3d0];
};
+
+static int use_divslot = 1;
+
#endif /* __ASSEMBLY__ */
#endif
diff --git a/drivers/serial/serial_s5p.c b/drivers/serial/serial_s5p.c
index 7709664..36333c3 100644
--- a/drivers/serial/serial_s5p.c
+++ b/drivers/serial/serial_s5p.c
@@ -70,7 +70,11 @@ void serial_setbrg_dev(const int dev_index)
val = uclk / baudrate;
writel(val / 16 - 1, &uart->ubrdiv);
- writew(udivslot[val % 16], &uart->udivslot);
+
+ if (use_divslot)
+ writew(udivslot[val % 16], &uart->rest.slot);
+ else
+ writeb(val % 16, &uart->rest.value);
}
/*