lh7a40x: move serial driver to drivers/serial
authorJean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
Sun, 31 May 2009 10:44:27 +0000 (12:44 +0200)
committerWolfgang Denk <wd@denx.de>
Fri, 12 Jun 2009 18:39:53 +0000 (20:39 +0200)
Signed-off-by: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
cpu/lh7a40x/Makefile
cpu/lh7a40x/serial.c [deleted file]
drivers/serial/Makefile
drivers/serial/serial_lh7a40x.c [new file with mode: 0644]
include/configs/lpd7a400.h
include/configs/lpd7a404.h

index b9ae76effaccb25a272e004496c0caa9222cdecc..1b3f58abb93bd50e85ce42b122d23fac0a2250ca 100644 (file)
@@ -26,7 +26,7 @@ include $(TOPDIR)/config.mk
 LIB    = $(obj)lib$(CPU).a
 
 START  = start.o
-COBJS  = cpu.o speed.o serial.o timer.o
+COBJS  = cpu.o speed.o timer.o
 
 SRCS   := $(START:.o=.S) $(SOBJS:.o=.S) $(COBJS:.o=.c)
 OBJS   := $(addprefix $(obj),$(SOBJS) $(COBJS))
diff --git a/cpu/lh7a40x/serial.c b/cpu/lh7a40x/serial.c
deleted file mode 100644 (file)
index 4767489..0000000
+++ /dev/null
@@ -1,184 +0,0 @@
-/*
- * (C) Copyright 2002
- * Gary Jennejohn, DENX Software Engineering, <garyj@denx.de>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- *
- */
-
-#include <common.h>
-#include <lh7a40x.h>
-
-DECLARE_GLOBAL_DATA_PTR;
-
-#if defined(CONFIG_CONSOLE_UART1)
-# define UART_CONSOLE 1
-#elif defined(CONFIG_CONSOLE_UART2)
-# define UART_CONSOLE 2
-#elif defined(CONFIG_CONSOLE_UART3)
-# define UART_CONSOLE 3
-#else
-# error "No console configured ... "
-#endif
-
-void serial_setbrg (void)
-{
-       lh7a40x_uart_t* uart = LH7A40X_UART_PTR(UART_CONSOLE);
-       int i;
-       unsigned int reg = 0;
-
-       /*
-        * userguide 15.1.2.4
-        *
-        * BAUDDIV is (UART_REF_FREQ/(16 X BAUD))-1
-        *
-        *   UART_REF_FREQ = external system clock input / 2 (Hz)
-        *   BAUD is desired baudrate (bits/s)
-        *
-        *   NOTE: we add (divisor/2) to numerator to round for
-        *         more precision
-        */
-       reg = (((get_PLLCLK()/2) + ((16*gd->baudrate)/2)) / (16 * gd->baudrate)) - 1;
-       uart->brcon = reg;
-
-       for (i = 0; i < 100; i++);
-}
-
-/*
- * Initialise the serial port with the given baudrate. The settings
- * are always 8 data bits, no parity, 1 stop bit, no start bits.
- *
- */
-int serial_init (void)
-{
-       lh7a40x_uart_t* uart = LH7A40X_UART_PTR(UART_CONSOLE);
-
-       /* UART must be enabled before writing to any config registers */
-       uart->con |= (UART_EN);
-
-#ifdef CONFIG_CONSOLE_UART1
-       /* infrared disabled */
-       uart->con |= UART_SIRD;
-#endif
-       /* loopback disabled */
-       uart->con &= ~(UART_LBE);
-
-       /* modem lines and tx/rx polarities */
-       uart->con &= ~(UART_MXP | UART_TXP | UART_RXP);
-
-       /* FIFO enable, N81 */
-       uart->fcon = (UART_WLEN_8 | UART_FEN | UART_STP2_1);
-
-       /* set baudrate */
-       serial_setbrg ();
-
-       /* enable rx interrupt */
-       uart->inten |= UART_RI;
-
-       return (0);
-}
-
-/*
- * Read a single byte from the serial port. Returns 1 on success, 0
- * otherwise. When the function is succesfull, the character read is
- * written into its argument c.
- */
-int serial_getc (void)
-{
-       lh7a40x_uart_t* uart = LH7A40X_UART_PTR(UART_CONSOLE);
-
-       /* wait for character to arrive */
-       while (uart->status & UART_RXFE);
-
-       return(uart->data & 0xff);
-}
-
-#ifdef CONFIG_HWFLOW
-static int hwflow = 0; /* turned off by default */
-int hwflow_onoff(int on)
-{
-       switch(on) {
-       case 0:
-       default:
-               break; /* return current */
-       case 1:
-               hwflow = 1; /* turn on */
-               break;
-       case -1:
-               hwflow = 0; /* turn off */
-               break;
-       }
-       return hwflow;
-}
-#endif
-
-#ifdef CONFIG_MODEM_SUPPORT
-static int be_quiet = 0;
-void disable_putc(void)
-{
-       be_quiet = 1;
-}
-
-void enable_putc(void)
-{
-       be_quiet = 0;
-}
-#endif
-
-
-/*
- * Output a single byte to the serial port.
- */
-void serial_putc (const char c)
-{
-       lh7a40x_uart_t* uart = LH7A40X_UART_PTR(UART_CONSOLE);
-
-#ifdef CONFIG_MODEM_SUPPORT
-       if (be_quiet)
-               return;
-#endif
-
-       /* wait for room in the tx FIFO */
-       while (!(uart->status & UART_TXFE));
-
-#ifdef CONFIG_HWFLOW
-       /* Wait for CTS up */
-       while(hwflow && !(uart->status & UART_CTS));
-#endif
-
-       uart->data = c;
-
-       /* If \n, also do \r */
-       if (c == '\n')
-               serial_putc ('\r');
-}
-
-/*
- * Test whether a character is in the RX buffer
- */
-int serial_tstc (void)
-{
-       lh7a40x_uart_t* uart = LH7A40X_UART_PTR(UART_CONSOLE);
-
-       return(!(uart->status & UART_RXFE));
-}
-
-void
-serial_puts (const char *s)
-{
-       while (*s) {
-               serial_putc (*s++);
-       }
-}
index 4a35703d222805c742bf86d78b4d2fff38df3cdf..ab5d5654d62a736641604e0297862d3aa7947a43 100644 (file)
@@ -39,6 +39,7 @@ COBJS-$(CONFIG_IMX_SERIAL) += serial_imx.o
 COBJS-$(CONFIG_IXP_SERIAL) += serial_ixp.o
 COBJS-$(CONFIG_KS8695_SERIAL) += serial_ks8695.o
 COBJS-$(CONFIG_LPC2292_SERIAL) += serial_lpc2292.o
+COBJS-$(CONFIG_LH7A40X_SERIAL) += serial_lh7a40x.o
 COBJS-$(CONFIG_MAX3100_SERIAL) += serial_max3100.o
 COBJS-$(CONFIG_MX31_UART) += serial_mx31.o
 COBJS-$(CONFIG_NETARM_SERIAL) += serial_netarm.o
diff --git a/drivers/serial/serial_lh7a40x.c b/drivers/serial/serial_lh7a40x.c
new file mode 100644 (file)
index 0000000..4767489
--- /dev/null
@@ -0,0 +1,184 @@
+/*
+ * (C) Copyright 2002
+ * Gary Jennejohn, DENX Software Engineering, <garyj@denx.de>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ */
+
+#include <common.h>
+#include <lh7a40x.h>
+
+DECLARE_GLOBAL_DATA_PTR;
+
+#if defined(CONFIG_CONSOLE_UART1)
+# define UART_CONSOLE 1
+#elif defined(CONFIG_CONSOLE_UART2)
+# define UART_CONSOLE 2
+#elif defined(CONFIG_CONSOLE_UART3)
+# define UART_CONSOLE 3
+#else
+# error "No console configured ... "
+#endif
+
+void serial_setbrg (void)
+{
+       lh7a40x_uart_t* uart = LH7A40X_UART_PTR(UART_CONSOLE);
+       int i;
+       unsigned int reg = 0;
+
+       /*
+        * userguide 15.1.2.4
+        *
+        * BAUDDIV is (UART_REF_FREQ/(16 X BAUD))-1
+        *
+        *   UART_REF_FREQ = external system clock input / 2 (Hz)
+        *   BAUD is desired baudrate (bits/s)
+        *
+        *   NOTE: we add (divisor/2) to numerator to round for
+        *         more precision
+        */
+       reg = (((get_PLLCLK()/2) + ((16*gd->baudrate)/2)) / (16 * gd->baudrate)) - 1;
+       uart->brcon = reg;
+
+       for (i = 0; i < 100; i++);
+}
+
+/*
+ * Initialise the serial port with the given baudrate. The settings
+ * are always 8 data bits, no parity, 1 stop bit, no start bits.
+ *
+ */
+int serial_init (void)
+{
+       lh7a40x_uart_t* uart = LH7A40X_UART_PTR(UART_CONSOLE);
+
+       /* UART must be enabled before writing to any config registers */
+       uart->con |= (UART_EN);
+
+#ifdef CONFIG_CONSOLE_UART1
+       /* infrared disabled */
+       uart->con |= UART_SIRD;
+#endif
+       /* loopback disabled */
+       uart->con &= ~(UART_LBE);
+
+       /* modem lines and tx/rx polarities */
+       uart->con &= ~(UART_MXP | UART_TXP | UART_RXP);
+
+       /* FIFO enable, N81 */
+       uart->fcon = (UART_WLEN_8 | UART_FEN | UART_STP2_1);
+
+       /* set baudrate */
+       serial_setbrg ();
+
+       /* enable rx interrupt */
+       uart->inten |= UART_RI;
+
+       return (0);
+}
+
+/*
+ * Read a single byte from the serial port. Returns 1 on success, 0
+ * otherwise. When the function is succesfull, the character read is
+ * written into its argument c.
+ */
+int serial_getc (void)
+{
+       lh7a40x_uart_t* uart = LH7A40X_UART_PTR(UART_CONSOLE);
+
+       /* wait for character to arrive */
+       while (uart->status & UART_RXFE);
+
+       return(uart->data & 0xff);
+}
+
+#ifdef CONFIG_HWFLOW
+static int hwflow = 0; /* turned off by default */
+int hwflow_onoff(int on)
+{
+       switch(on) {
+       case 0:
+       default:
+               break; /* return current */
+       case 1:
+               hwflow = 1; /* turn on */
+               break;
+       case -1:
+               hwflow = 0; /* turn off */
+               break;
+       }
+       return hwflow;
+}
+#endif
+
+#ifdef CONFIG_MODEM_SUPPORT
+static int be_quiet = 0;
+void disable_putc(void)
+{
+       be_quiet = 1;
+}
+
+void enable_putc(void)
+{
+       be_quiet = 0;
+}
+#endif
+
+
+/*
+ * Output a single byte to the serial port.
+ */
+void serial_putc (const char c)
+{
+       lh7a40x_uart_t* uart = LH7A40X_UART_PTR(UART_CONSOLE);
+
+#ifdef CONFIG_MODEM_SUPPORT
+       if (be_quiet)
+               return;
+#endif
+
+       /* wait for room in the tx FIFO */
+       while (!(uart->status & UART_TXFE));
+
+#ifdef CONFIG_HWFLOW
+       /* Wait for CTS up */
+       while(hwflow && !(uart->status & UART_CTS));
+#endif
+
+       uart->data = c;
+
+       /* If \n, also do \r */
+       if (c == '\n')
+               serial_putc ('\r');
+}
+
+/*
+ * Test whether a character is in the RX buffer
+ */
+int serial_tstc (void)
+{
+       lh7a40x_uart_t* uart = LH7A40X_UART_PTR(UART_CONSOLE);
+
+       return(!(uart->status & UART_RXFE));
+}
+
+void
+serial_puts (const char *s)
+{
+       while (*s) {
+               serial_putc (*s++);
+       }
+}
index b1bd74fc6fb73a6904234cbab9cbc98167460e1f..bf4a57d249bd06ce4d2a65860de04445977d3bd4 100644 (file)
@@ -43,6 +43,7 @@
 /*
  * select serial console configuration
  */
+#define CONFIG_LH7A40X_SERIAL
 #define CONFIG_CONSOLE_UART2   /* UART2 LH7A40x for console */
 
 /* allow to overwrite serial and ethaddr */
index b197674d47aeb91abd066a81756e7740f92e8704..102c0af3b9fe3650eb613547cabd692621535b94 100644 (file)
@@ -43,6 +43,7 @@
 /*
  * select serial console configuration
  */
+#define CONFIG_LH7A40X_SERIAL
 #define CONFIG_CONSOLE_UART2   /* UART2 LH7A40x for console */
 
 /* allow to overwrite serial and ethaddr */