summaryrefslogtreecommitdiffstats
path: root/drivers/tty
diff options
context:
space:
mode:
authorGreg Kroah-Hartman <gregkh@suse.de>2011-01-13 12:10:18 -0800
committerGreg Kroah-Hartman <gregkh@suse.de>2011-01-13 12:10:18 -0800
commitab4382d27412e7e3e7c936e8d50d8888dfac3df8 (patch)
tree51d96dea2431140358784b6b426715f37f74fd53 /drivers/tty
parent728674a7e466628df2aeec6d11a2ae1ef968fb67 (diff)
tty: move drivers/serial/ to drivers/tty/serial/
The serial drivers are really just tty drivers, so move them to drivers/tty/ to make things a bit neater overall. This is part of the tty/serial driver movement proceedure as proposed by Arnd Bergmann and approved by everyone involved a number of months ago. Cc: Arnd Bergmann <arnd@arndb.de> Cc: Alan Cox <alan@lxorguk.ukuu.org.uk> Cc: Geert Uytterhoeven <geert@linux-m68k.org> Cc: Rogier Wolff <R.E.Wolff@bitwizard.nl> Cc: Michael H. Warfield <mhw@wittsend.com> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Diffstat (limited to 'drivers/tty')
-rw-r--r--drivers/tty/Makefile1
-rw-r--r--drivers/tty/serial/21285.c513
-rw-r--r--drivers/tty/serial/68328serial.c1472
-rw-r--r--drivers/tty/serial/68328serial.h188
-rw-r--r--drivers/tty/serial/68360serial.c2978
-rw-r--r--drivers/tty/serial/8250.c3377
-rw-r--r--drivers/tty/serial/8250.h80
-rw-r--r--drivers/tty/serial/8250_accent.c47
-rw-r--r--drivers/tty/serial/8250_acorn.c141
-rw-r--r--drivers/tty/serial/8250_boca.c61
-rw-r--r--drivers/tty/serial/8250_early.c287
-rw-r--r--drivers/tty/serial/8250_exar_st16c554.c52
-rw-r--r--drivers/tty/serial/8250_fourport.c53
-rw-r--r--drivers/tty/serial/8250_gsc.c122
-rw-r--r--drivers/tty/serial/8250_hp300.c327
-rw-r--r--drivers/tty/serial/8250_hub6.c58
-rw-r--r--drivers/tty/serial/8250_mca.c63
-rw-r--r--drivers/tty/serial/8250_pci.c3850
-rw-r--r--drivers/tty/serial/8250_pnp.c523
-rw-r--r--drivers/tty/serial/Kconfig1598
-rw-r--r--drivers/tty/serial/Makefile94
-rw-r--r--drivers/tty/serial/altera_jtaguart.c504
-rw-r--r--drivers/tty/serial/altera_uart.c608
-rw-r--r--drivers/tty/serial/amba-pl010.c825
-rw-r--r--drivers/tty/serial/amba-pl011.c1519
-rw-r--r--drivers/tty/serial/apbuart.c709
-rw-r--r--drivers/tty/serial/apbuart.h64
-rw-r--r--drivers/tty/serial/atmel_serial.c1808
-rw-r--r--drivers/tty/serial/bcm63xx_uart.c891
-rw-r--r--drivers/tty/serial/bfin_5xx.c1600
-rw-r--r--drivers/tty/serial/bfin_sport_uart.c935
-rw-r--r--drivers/tty/serial/bfin_sport_uart.h86
-rw-r--r--drivers/tty/serial/clps711x.c579
-rw-r--r--drivers/tty/serial/cpm_uart/Makefile11
-rw-r--r--drivers/tty/serial/cpm_uart/cpm_uart.h147
-rw-r--r--drivers/tty/serial/cpm_uart/cpm_uart_core.c1443
-rw-r--r--drivers/tty/serial/cpm_uart/cpm_uart_cpm1.c138
-rw-r--r--drivers/tty/serial/cpm_uart/cpm_uart_cpm1.h34
-rw-r--r--drivers/tty/serial/cpm_uart/cpm_uart_cpm2.c174
-rw-r--r--drivers/tty/serial/cpm_uart/cpm_uart_cpm2.h34
-rw-r--r--drivers/tty/serial/crisv10.c4573
-rw-r--r--drivers/tty/serial/crisv10.h147
-rw-r--r--drivers/tty/serial/dz.c955
-rw-r--r--drivers/tty/serial/dz.h129
-rw-r--r--drivers/tty/serial/icom.c1658
-rw-r--r--drivers/tty/serial/icom.h287
-rw-r--r--drivers/tty/serial/ifx6x60.c1406
-rw-r--r--drivers/tty/serial/ifx6x60.h129
-rw-r--r--drivers/tty/serial/imx.c1380
-rw-r--r--drivers/tty/serial/ioc3_serial.c2199
-rw-r--r--drivers/tty/serial/ioc4_serial.c2953
-rw-r--r--drivers/tty/serial/ip22zilog.c1221
-rw-r--r--drivers/tty/serial/ip22zilog.h281
-rw-r--r--drivers/tty/serial/jsm/Makefile8
-rw-r--r--drivers/tty/serial/jsm/jsm.h388
-rw-r--r--drivers/tty/serial/jsm/jsm_driver.c297
-rw-r--r--drivers/tty/serial/jsm/jsm_neo.c1412
-rw-r--r--drivers/tty/serial/jsm/jsm_tty.c910
-rw-r--r--drivers/tty/serial/kgdboc.c328
-rw-r--r--drivers/tty/serial/m32r_sio.c1192
-rw-r--r--drivers/tty/serial/m32r_sio.h48
-rw-r--r--drivers/tty/serial/m32r_sio_reg.h152
-rw-r--r--drivers/tty/serial/max3100.c926
-rw-r--r--drivers/tty/serial/max3107-aava.c344
-rw-r--r--drivers/tty/serial/max3107.c1213
-rw-r--r--drivers/tty/serial/max3107.h441
-rw-r--r--drivers/tty/serial/mcf.c662
-rw-r--r--drivers/tty/serial/mfd.c1513
-rw-r--r--drivers/tty/serial/mpc52xx_uart.c1527
-rw-r--r--drivers/tty/serial/mpsc.c2159
-rw-r--r--drivers/tty/serial/mrst_max3110.c919
-rw-r--r--drivers/tty/serial/mrst_max3110.h60
-rw-r--r--drivers/tty/serial/msm_serial.c758
-rw-r--r--drivers/tty/serial/msm_serial.h173
-rw-r--r--drivers/tty/serial/mux.c633
-rw-r--r--drivers/tty/serial/netx-serial.c750
-rw-r--r--drivers/tty/serial/nwpserial.c477
-rw-r--r--drivers/tty/serial/of_serial.c201
-rw-r--r--drivers/tty/serial/omap-serial.c1359
-rw-r--r--drivers/tty/serial/pch_uart.c1451
-rw-r--r--drivers/tty/serial/pmac_zilog.c2208
-rw-r--r--drivers/tty/serial/pmac_zilog.h396
-rw-r--r--drivers/tty/serial/pnx8xxx_uart.c854
-rw-r--r--drivers/tty/serial/pxa.c879
-rw-r--r--drivers/tty/serial/s3c2400.c106
-rw-r--r--drivers/tty/serial/s3c2410.c118
-rw-r--r--drivers/tty/serial/s3c2412.c152
-rw-r--r--drivers/tty/serial/s3c2440.c181
-rw-r--r--drivers/tty/serial/s3c24a0.c118
-rw-r--r--drivers/tty/serial/s3c6400.c152
-rw-r--r--drivers/tty/serial/s5pv210.c162
-rw-r--r--drivers/tty/serial/sa1100.c918
-rw-r--r--drivers/tty/serial/samsung.c1487
-rw-r--r--drivers/tty/serial/samsung.h120
-rw-r--r--drivers/tty/serial/sb1250-duart.c976
-rw-r--r--drivers/tty/serial/sc26xx.c757
-rw-r--r--drivers/tty/serial/serial_core.c2578
-rw-r--r--drivers/tty/serial/serial_cs.c869
-rw-r--r--drivers/tty/serial/serial_ks8695.c705
-rw-r--r--drivers/tty/serial/serial_lh7a40x.c682
-rw-r--r--drivers/tty/serial/serial_txx9.c1344
-rw-r--r--drivers/tty/serial/sh-sci.c2027
-rw-r--r--drivers/tty/serial/sh-sci.h660
-rw-r--r--drivers/tty/serial/sn_console.c1085
-rw-r--r--drivers/tty/serial/suncore.c247
-rw-r--r--drivers/tty/serial/suncore.h33
-rw-r--r--drivers/tty/serial/sunhv.c661
-rw-r--r--drivers/tty/serial/sunsab.c1152
-rw-r--r--drivers/tty/serial/sunsab.h322
-rw-r--r--drivers/tty/serial/sunsu.c1608
-rw-r--r--drivers/tty/serial/sunzilog.c1655
-rw-r--r--drivers/tty/serial/sunzilog.h289
-rw-r--r--drivers/tty/serial/timbuart.c531
-rw-r--r--drivers/tty/serial/timbuart.h58
-rw-r--r--drivers/tty/serial/uartlite.c709
-rw-r--r--drivers/tty/serial/ucc_uart.c1537
-rw-r--r--drivers/tty/serial/vr41xx_siu.c978
-rw-r--r--drivers/tty/serial/vt8500_serial.c648
-rw-r--r--drivers/tty/serial/zs.c1304
-rw-r--r--drivers/tty/serial/zs.h284
120 files changed, 97163 insertions, 0 deletions
diff --git a/drivers/tty/Makefile b/drivers/tty/Makefile
index d3685f071b8d..396277216e4f 100644
--- a/drivers/tty/Makefile
+++ b/drivers/tty/Makefile
@@ -10,3 +10,4 @@ obj-$(CONFIG_R3964) += n_r3964.o
obj-y += vt/
obj-$(CONFIG_HVC_DRIVER) += hvc/
+obj-y += serial/
diff --git a/drivers/tty/serial/21285.c b/drivers/tty/serial/21285.c
new file mode 100644
index 000000000000..d89aa38c5cf0
--- /dev/null
+++ b/drivers/tty/serial/21285.c
@@ -0,0 +1,513 @@
+/*
+ * linux/drivers/serial/21285.c
+ *
+ * Driver for the serial port on the 21285 StrongArm-110 core logic chip.
+ *
+ * Based on drivers/char/serial.c
+ */
+#include <linux/module.h>
+#include <linux/tty.h>
+#include <linux/ioport.h>
+#include <linux/init.h>
+#include <linux/console.h>
+#include <linux/device.h>
+#include <linux/tty_flip.h>
+#include <linux/serial_core.h>
+#include <linux/serial.h>
+#include <linux/io.h>
+
+#include <asm/irq.h>
+#include <asm/mach-types.h>
+#include <asm/hardware/dec21285.h>
+#include <mach/hardware.h>
+
+#define BAUD_BASE (mem_fclk_21285/64)
+
+#define SERIAL_21285_NAME "ttyFB"
+#define SERIAL_21285_MAJOR 204
+#define SERIAL_21285_MINOR 4
+
+#define RXSTAT_DUMMY_READ 0x80000000
+#define RXSTAT_FRAME (1 << 0)
+#define RXSTAT_PARITY (1 << 1)
+#define RXSTAT_OVERRUN (1 << 2)
+#define RXSTAT_ANYERR (RXSTAT_FRAME|RXSTAT_PARITY|RXSTAT_OVERRUN)
+
+#define H_UBRLCR_BREAK (1 << 0)
+#define H_UBRLCR_PARENB (1 << 1)
+#define H_UBRLCR_PAREVN (1 << 2)
+#define H_UBRLCR_STOPB (1 << 3)
+#define H_UBRLCR_FIFO (1 << 4)
+
+static const char serial21285_name[] = "Footbridge UART";
+
+#define tx_enabled(port) ((port)->unused[0])
+#define rx_enabled(port) ((port)->unused[1])
+
+/*
+ * The documented expression for selecting the divisor is:
+ * BAUD_BASE / baud - 1
+ * However, typically BAUD_BASE is not divisible by baud, so
+ * we want to select the divisor that gives us the minimum
+ * error. Therefore, we want:
+ * int(BAUD_BASE / baud - 0.5) ->
+ * int(BAUD_BASE / baud - (baud >> 1) / baud) ->
+ * int((BAUD_BASE - (baud >> 1)) / baud)
+ */
+
+static void serial21285_stop_tx(struct uart_port *port)
+{
+ if (tx_enabled(port)) {
+ disable_irq_nosync(IRQ_CONTX);
+ tx_enabled(port) = 0;
+ }
+}
+
+static void serial21285_start_tx(struct uart_port *port)
+{
+ if (!tx_enabled(port)) {
+ enable_irq(IRQ_CONTX);
+ tx_enabled(port) = 1;
+ }
+}
+
+static void serial21285_stop_rx(struct uart_port *port)
+{
+ if (rx_enabled(port)) {
+ disable_irq_nosync(IRQ_CONRX);
+ rx_enabled(port) = 0;
+ }
+}
+
+static void serial21285_enable_ms(struct uart_port *port)
+{
+}
+
+static irqreturn_t serial21285_rx_chars(int irq, void *dev_id)
+{
+ struct uart_port *port = dev_id;
+ struct tty_struct *tty = port->state->port.tty;
+ unsigned int status, ch, flag, rxs, max_count = 256;
+
+ status = *CSR_UARTFLG;
+ while (!(status & 0x10) && max_count--) {
+ ch = *CSR_UARTDR;
+ flag = TTY_NORMAL;
+ port->icount.rx++;
+
+ rxs = *CSR_RXSTAT | RXSTAT_DUMMY_READ;
+ if (unlikely(rxs & RXSTAT_ANYERR)) {
+ if (rxs & RXSTAT_PARITY)
+ port->icount.parity++;
+ else if (rxs & RXSTAT_FRAME)
+ port->icount.frame++;
+ if (rxs & RXSTAT_OVERRUN)
+ port->icount.overrun++;
+
+ rxs &= port->read_status_mask;
+
+ if (rxs & RXSTAT_PARITY)
+ flag = TTY_PARITY;
+ else if (rxs & RXSTAT_FRAME)
+ flag = TTY_FRAME;
+ }
+
+ uart_insert_char(port, rxs, RXSTAT_OVERRUN, ch, flag);
+
+ status = *CSR_UARTFLG;
+ }
+ tty_flip_buffer_push(tty);
+
+ return IRQ_HANDLED;
+}
+
+static irqreturn_t serial21285_tx_chars(int irq, void *dev_id)
+{
+ struct uart_port *port = dev_id;
+ struct circ_buf *xmit = &port->state->xmit;
+ int count = 256;
+
+ if (port->x_char) {
+ *CSR_UARTDR = port->x_char;
+ port->icount.tx++;
+ port->x_char = 0;
+ goto out;
+ }
+ if (uart_circ_empty(xmit) || uart_tx_stopped(port)) {
+ serial21285_stop_tx(port);
+ goto out;
+ }
+
+ do {
+ *CSR_UARTDR = xmit->buf[xmit->tail];
+ xmit->tail = (xmit->tail + 1) & (UART_XMIT_SIZE - 1);
+ port->icount.tx++;
+ if (uart_circ_empty(xmit))
+ break;
+ } while (--count > 0 && !(*CSR_UARTFLG & 0x20));
+
+ if (uart_circ_chars_pending(xmit) < WAKEUP_CHARS)
+ uart_write_wakeup(port);
+
+ if (uart_circ_empty(xmit))
+ serial21285_stop_tx(port);
+
+ out:
+ return IRQ_HANDLED;
+}
+
+static unsigned int serial21285_tx_empty(struct uart_port *port)