summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJongpill Lee <boyko.lee@samsung.com>2010-07-16 10:19:41 +0900
committerKukjin Kim <kgene.kim@samsung.com>2010-08-05 18:32:41 +0900
commit8b526ae4ddd7a62397d99856079b59eda5d09360 (patch)
tree004b09ebdb47c96612d28b97fb7c7dd5907597cb
parent9fe6206f400646a2322096b56c59891d530e8d51 (diff)
downloadtalos-op-linux-8b526ae4ddd7a62397d99856079b59eda5d09360.tar.gz
talos-op-linux-8b526ae4ddd7a62397d99856079b59eda5d09360.zip
ARM: SAMSUNG: serial: Add FRACVAL support for newer UART
Add support for the FRACVAL register on the newer UART blocks which provides the same function as UDIVSLOT register but the FRACVAL is easier to implement. To support UDIVSLOT register, UDIVSLOT table search is necessary though supporting FRACVAL only needs the index value of UDIVSLOT table. Signed-off-by: Jongpill Lee <boyko.lee@samsung.com> Acked-by: Changhwan Youn <chaos.youn@samsung.com> Signed-off-by: Kukjin Kim <kgene.kim@samsung.com>
-rw-r--r--arch/arm/plat-samsung/include/plat/regs-serial.h2
-rw-r--r--drivers/serial/samsung.c9
2 files changed, 9 insertions, 2 deletions
diff --git a/arch/arm/plat-samsung/include/plat/regs-serial.h b/arch/arm/plat-samsung/include/plat/regs-serial.h
index a6eba8496b24..788837e99cb3 100644
--- a/arch/arm/plat-samsung/include/plat/regs-serial.h
+++ b/arch/arm/plat-samsung/include/plat/regs-serial.h
@@ -259,6 +259,8 @@ struct s3c2410_uartcfg {
unsigned short flags;
upf_t uart_flags; /* default uart flags */
+ unsigned int has_fracval;
+
unsigned long ucon; /* value of ucon for port */
unsigned long ulcon; /* value of ulcon for port */
unsigned long ufcon; /* value of ufcon for port */
diff --git a/drivers/serial/samsung.c b/drivers/serial/samsung.c
index a9d6c5626a0a..b1156ba8ad14 100644
--- a/drivers/serial/samsung.c
+++ b/drivers/serial/samsung.c
@@ -705,8 +705,13 @@ static void s3c24xx_serial_set_termios(struct uart_port *port,
if (ourport->info->has_divslot) {
unsigned int div = ourport->baudclk_rate / baud;
- udivslot = udivslot_table[div & 15];
- dbg("udivslot = %04x (div %d)\n", udivslot, div & 15);
+ if (cfg->has_fracval) {
+ udivslot = (div & 15);
+ dbg("fracval = %04x\n", udivslot);
+ } else {
+ udivslot = udivslot_table[div & 15];
+ dbg("udivslot = %04x (div %d)\n", udivslot, div & 15);
+ }
}
switch (termios->c_cflag & CSIZE) {
OpenPOWER on IntegriCloud