]> git.karo-electronics.de Git - linux-beck.git/commitdiff
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 a6eba8496b24f9d1af1310bec74b71185da4ea18..788837e99cb3da172159c35770dfbf1d47b86400 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 a9d6c5626a0ac828929bf3b0f581f603d120f453..b1156ba8ad1452c113fff20740a1d01596ab3cb2 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) {