ARM: SAMSUNG: serial: Add FRACVAL support for newer UART
authorJongpill Lee <boyko.lee@samsung.com>
Fri, 16 Jul 2010 01:19:41 +0000 (10:19 +0900)
committerKukjin Kim <kgene.kim@samsung.com>
Thu, 5 Aug 2010 09:32:41 +0000 (18:32 +0900)
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>
arch/arm/plat-samsung/include/plat/regs-serial.h
drivers/serial/samsung.c

index a6eba84..788837e 100644 (file)
@@ -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 */
index a9d6c56..b1156ba 100644 (file)
@@ -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) {