This patch updates serial.c with DM355 support.

Signed-off-by: Hui Geng <[EMAIL PROTECTED]>
---
 arch/arm/mach-davinci/serial.c |   75 +++++++++++++++++----------------------
 1 files changed, 33 insertions(+), 42 deletions(-)

diff --git a/arch/arm/mach-davinci/serial.c b/arch/arm/mach-davinci/serial.c
index e6ae903..fec6ac7 100644
--- a/arch/arm/mach-davinci/serial.c
+++ b/arch/arm/mach-davinci/serial.c
@@ -31,8 +31,8 @@
 #include <asm/irq.h>
 #include <asm/hardware.h>
 #include <asm/arch/serial.h>
-#include <asm/arch/board.h>
 #include <asm/arch/irqs.h>
+#include <asm/arch/cpu.h>
 
 #define UART_DAVINCI_PWREMU 0x0c
 
@@ -43,36 +43,29 @@ static inline unsigned int davinci_serial_in(struct 
plat_serial8250_port *up,
        return (unsigned int)__raw_readb(up->membase + offset);
 }
 
-static inline void davinci_serial_outb(struct plat_serial8250_port *p,
+static inline void davinci_serial_outp(struct plat_serial8250_port *p,
                                       int offset, int value)
 {
        offset <<= p->regshift;
        __raw_writeb(value, p->membase + offset);
 }
 
-static inline void davinci_serial_outs(struct plat_serial8250_port *p,
-                                      int offset, int value)
-{
-       offset <<= p->regshift;
-       __raw_writew(value, p->membase + offset);
-}
-
 static void __init davinci_serial_reset(struct plat_serial8250_port *p)
 {
        /* reset both transmitter and receiver: bits 14,13 = UTRST, URRST */
        unsigned int pwremu = 0;
 
-       davinci_serial_outb(p, UART_IER, 0);  /* disable all interrupts */
+       davinci_serial_outp(p, UART_IER, 0);  /* disable all interrupts */
 
-       davinci_serial_outs(p, UART_DAVINCI_PWREMU, pwremu);
+       davinci_serial_outp(p, UART_DAVINCI_PWREMU, pwremu);
        mdelay(10);
 
        pwremu |= (0x3 << 13);
        pwremu |= 0x1;
-       davinci_serial_outs(p, UART_DAVINCI_PWREMU, pwremu);
+       davinci_serial_outp(p, UART_DAVINCI_PWREMU, pwremu);
 }
 
-#define UART_DM6467_SCR                __REG(DAVINCI_UART0_BASE + 0x40)
+#define UART_DM6467_SCR                __REG(DAVINCI_UART0_BASE + 0x40)
 /*
  * Internal UARTs need to be initialized for the 8250 autoconfig to work
  * properly. Note that the TX watermark initialization may not be needed
@@ -86,42 +79,40 @@ static int __init dm646x_serial_reset(void)
 
 void __init davinci_serial_init(struct platform_device *pdev)
 {
-       int i;
-       const struct davinci_uart_config *info;
-       char name[16];
        struct clk *uart_clk;
        struct device *dev = &pdev->dev;
-
-       /*
-        * Make sure the serial ports are muxed on at this point.
-        * You have to mux them off in device drivers later on
-        * if not needed.
-        */
-
-       info = davinci_get_config(DAVINCI_TAG_UART, struct davinci_uart_config);
-
-       if (info == NULL)
-               return;
-
-       for (i = 0; i < DAVINCI_MAX_NR_UARTS; i++) {
-               struct plat_serial8250_port *p = dev->platform_data + i;
-
-               if (!(info->enabled_uarts & (1 << i))) {
-                       p->membase = 0;
-                       p->mapbase = 0;
+       struct plat_serial8250_port *p;
+       int uart;
+       char uart_name[6];
+
+       memset(uart_name, 0, sizeof(uart_name));
+       for (p = dev->platform_data; p && p->flags; p++) {
+               switch (p->mapbase) {
+               case DAVINCI_UART0_BASE:
+                       uart = 0;
+                       break;
+               case DAVINCI_UART1_BASE:
+                       uart = 1;
+                       break;
+               case DAVINCI_UART2_BASE:
+               case DM355_UART2_BASE:
+                       uart = 2;
+                       break;
+               default:
+                       dev_err(dev,
+                               "Unknown UART base address 0x%08lx\n",
+                               p->mapbase);
                        continue;
                }
-
-               sprintf(name, "UART%d", i);
-               uart_clk = clk_get(dev, name);
+               sprintf(uart_name, "UART%i", uart);
+               uart_clk = clk_get(dev, uart_name);
                if (IS_ERR(uart_clk))
-                       printk(KERN_ERR "%s:%d: failed to get UART%d clock\n",
-                                       __func__, __LINE__, i);
-               else {
+                       dev_err(dev, "failed to get %s clock\n", uart_name);
+               else
                        clk_enable(uart_clk);
+
+               if (cpu_is_davinci_dm355())
                        davinci_serial_reset(p);
-               }
        }
 }
-
 late_initcall(dm646x_serial_reset);
-- 
1.5.4.3

_______________________________________________
Davinci-linux-open-source mailing list
[email protected]
http://linux.davincidsp.com/mailman/listinfo/davinci-linux-open-source

Reply via email to