Commit 5566c10d authored by Linus Torvalds's avatar Linus Torvalds

Merge bk://bk.arm.linux.org.uk/linux-2.6-serial

into ppc970.osdl.org:/home/torvalds/v2.6/linux
parents 0d61fc5e d6a03f19
...@@ -133,6 +133,7 @@ struct uart_8250_port { ...@@ -133,6 +133,7 @@ struct uart_8250_port {
unsigned char acr; unsigned char acr;
unsigned char ier; unsigned char ier;
unsigned char lcr; unsigned char lcr;
unsigned char mcr;
unsigned char mcr_mask; /* mask of user bits */ unsigned char mcr_mask; /* mask of user bits */
unsigned char mcr_force; /* mask of forced bits */ unsigned char mcr_force; /* mask of forced bits */
unsigned char lsr_break_flag; unsigned char lsr_break_flag;
...@@ -177,11 +178,11 @@ static _INLINE_ unsigned int serial_in(struct uart_8250_port *up, int offset) ...@@ -177,11 +178,11 @@ static _INLINE_ unsigned int serial_in(struct uart_8250_port *up, int offset)
offset <<= up->port.regshift; offset <<= up->port.regshift;
switch (up->port.iotype) { switch (up->port.iotype) {
case SERIAL_IO_HUB6: case UPIO_HUB6:
outb(up->port.hub6 - 1 + offset, up->port.iobase); outb(up->port.hub6 - 1 + offset, up->port.iobase);
return inb(up->port.iobase + 1); return inb(up->port.iobase + 1);
case SERIAL_IO_MEM: case UPIO_MEM:
return readb(up->port.membase + offset); return readb(up->port.membase + offset);
default: default:
...@@ -195,12 +196,12 @@ serial_out(struct uart_8250_port *up, int offset, int value) ...@@ -195,12 +196,12 @@ serial_out(struct uart_8250_port *up, int offset, int value)
offset <<= up->port.regshift; offset <<= up->port.regshift;
switch (up->port.iotype) { switch (up->port.iotype) {
case SERIAL_IO_HUB6: case UPIO_HUB6:
outb(up->port.hub6 - 1 + offset, up->port.iobase); outb(up->port.hub6 - 1 + offset, up->port.iobase);
outb(value, up->port.iobase + 1); outb(value, up->port.iobase + 1);
break; break;
case SERIAL_IO_MEM: case UPIO_MEM:
writeb(value, up->port.membase + offset); writeb(value, up->port.membase + offset);
break; break;
...@@ -574,7 +575,7 @@ static void autoconfig(struct uart_8250_port *up, unsigned int probeflags) ...@@ -574,7 +575,7 @@ static void autoconfig(struct uart_8250_port *up, unsigned int probeflags)
if (!up->port.iobase && !up->port.mapbase && !up->port.membase) if (!up->port.iobase && !up->port.mapbase && !up->port.membase)
return; return;
DEBUG_AUTOCONF("ttyS%d: autoconf (0x%04x, 0x%08lx): ", DEBUG_AUTOCONF("ttyS%d: autoconf (0x%04x, 0x%p): ",
up->port.line, up->port.iobase, up->port.membase); up->port.line, up->port.iobase, up->port.membase);
/* /*
...@@ -1176,7 +1177,7 @@ static void serial8250_set_mctrl(struct uart_port *port, unsigned int mctrl) ...@@ -1176,7 +1177,7 @@ static void serial8250_set_mctrl(struct uart_port *port, unsigned int mctrl)
if (mctrl & TIOCM_LOOP) if (mctrl & TIOCM_LOOP)
mcr |= UART_MCR_LOOP; mcr |= UART_MCR_LOOP;
mcr = (mcr & up->mcr_mask) | up->mcr_force; mcr = (mcr & up->mcr_mask) | up->mcr_force | up->mcr;
serial_out(up, UART_MCR, mcr); serial_out(up, UART_MCR, mcr);
} }
...@@ -1202,6 +1203,7 @@ static int serial8250_startup(struct uart_port *port) ...@@ -1202,6 +1203,7 @@ static int serial8250_startup(struct uart_port *port)
int retval; int retval;
up->capabilities = uart_config[up->port.type].flags; up->capabilities = uart_config[up->port.type].flags;
up->mcr = 0;
if (up->port.type == PORT_16C950) { if (up->port.type == PORT_16C950) {
/* Wake up and initialize UART */ /* Wake up and initialize UART */
...@@ -1451,8 +1453,19 @@ serial8250_set_termios(struct uart_port *port, struct termios *termios, ...@@ -1451,8 +1453,19 @@ serial8250_set_termios(struct uart_port *port, struct termios *termios,
else else
fcr = UART_FCR_ENABLE_FIFO | UART_FCR_TRIGGER_8; fcr = UART_FCR_ENABLE_FIFO | UART_FCR_TRIGGER_8;
} }
if (up->port.type == PORT_16750)
/*
* TI16C750: hardware flow control and 64 byte FIFOs. When AFE is
* enabled, RTS will be deasserted when the receive FIFO contains
* more characters than the trigger, or the MCR RTS bit is cleared.
*/
if (up->port.type == PORT_16750) {
up->mcr &= ~UART_MCR_AFE;
if (termios->c_cflag & CRTSCTS)
up->mcr |= UART_MCR_AFE;
fcr |= UART_FCR7_64BYTE; fcr |= UART_FCR7_64BYTE;
}
/* /*
* Ok, we're now changing the port state. Do it with * Ok, we're now changing the port state. Do it with
...@@ -1514,10 +1527,17 @@ serial8250_set_termios(struct uart_port *port, struct termios *termios, ...@@ -1514,10 +1527,17 @@ serial8250_set_termios(struct uart_port *port, struct termios *termios,
} else { } else {
serial_outp(up, UART_LCR, cval | UART_LCR_DLAB);/* set DLAB */ serial_outp(up, UART_LCR, cval | UART_LCR_DLAB);/* set DLAB */
} }
serial_outp(up, UART_DLL, quot & 0xff); /* LS of divisor */ serial_outp(up, UART_DLL, quot & 0xff); /* LS of divisor */
serial_outp(up, UART_DLM, quot >> 8); /* MS of divisor */ serial_outp(up, UART_DLM, quot >> 8); /* MS of divisor */
/*
* LCR DLAB must be set to enable 64-byte FIFO mode. If the FCR
* is written without DLAB set, this mode will be disabled.
*/
if (up->port.type == PORT_16750) if (up->port.type == PORT_16750)
serial_outp(up, UART_FCR, fcr); /* set fcr */ serial_outp(up, UART_FCR, fcr);
serial_outp(up, UART_LCR, cval); /* reset DLAB */ serial_outp(up, UART_LCR, cval); /* reset DLAB */
up->lcr = cval; /* Save LCR */ up->lcr = cval; /* Save LCR */
if (up->port.type != PORT_16750) { if (up->port.type != PORT_16750) {
...@@ -1527,6 +1547,7 @@ serial8250_set_termios(struct uart_port *port, struct termios *termios, ...@@ -1527,6 +1547,7 @@ serial8250_set_termios(struct uart_port *port, struct termios *termios,
} }
serial_outp(up, UART_FCR, fcr); /* set fcr */ serial_outp(up, UART_FCR, fcr); /* set fcr */
} }
serial8250_set_mctrl(&up->port, up->port.mctrl);
spin_unlock_irqrestore(&up->port.lock, flags); spin_unlock_irqrestore(&up->port.lock, flags);
} }
...@@ -1613,7 +1634,7 @@ serial8250_request_std_resource(struct uart_8250_port *up, struct resource **res ...@@ -1613,7 +1634,7 @@ serial8250_request_std_resource(struct uart_8250_port *up, struct resource **res
int ret = 0; int ret = 0;
switch (up->port.iotype) { switch (up->port.iotype) {
case SERIAL_IO_MEM: case UPIO_MEM:
if (up->port.mapbase) { if (up->port.mapbase) {
*res = request_mem_region(up->port.mapbase, size, "serial"); *res = request_mem_region(up->port.mapbase, size, "serial");
if (!*res) if (!*res)
...@@ -1621,8 +1642,8 @@ serial8250_request_std_resource(struct uart_8250_port *up, struct resource **res ...@@ -1621,8 +1642,8 @@ serial8250_request_std_resource(struct uart_8250_port *up, struct resource **res
} }
break; break;
case SERIAL_IO_HUB6: case UPIO_HUB6:
case SERIAL_IO_PORT: case UPIO_PORT:
*res = request_region(up->port.iobase, size, "serial"); *res = request_region(up->port.iobase, size, "serial");
if (!*res) if (!*res)
ret = -EBUSY; ret = -EBUSY;
...@@ -1639,7 +1660,7 @@ serial8250_request_rsa_resource(struct uart_8250_port *up, struct resource **res ...@@ -1639,7 +1660,7 @@ serial8250_request_rsa_resource(struct uart_8250_port *up, struct resource **res
int ret = 0; int ret = 0;
switch (up->port.iotype) { switch (up->port.iotype) {
case SERIAL_IO_MEM: case UPIO_MEM:
if (up->port.mapbase) { if (up->port.mapbase) {
start = up->port.mapbase; start = up->port.mapbase;
start += UART_RSA_BASE << up->port.regshift; start += UART_RSA_BASE << up->port.regshift;
...@@ -1649,8 +1670,8 @@ serial8250_request_rsa_resource(struct uart_8250_port *up, struct resource **res ...@@ -1649,8 +1670,8 @@ serial8250_request_rsa_resource(struct uart_8250_port *up, struct resource **res
} }
break; break;
case SERIAL_IO_HUB6: case UPIO_HUB6:
case SERIAL_IO_PORT: case UPIO_PORT:
start = up->port.iobase; start = up->port.iobase;
start += UART_RSA_BASE << up->port.regshift; start += UART_RSA_BASE << up->port.regshift;
*res = request_region(start, size, "serial-rsa"); *res = request_region(start, size, "serial-rsa");
...@@ -1667,6 +1688,8 @@ static void serial8250_release_port(struct uart_port *port) ...@@ -1667,6 +1688,8 @@ static void serial8250_release_port(struct uart_port *port)
struct uart_8250_port *up = (struct uart_8250_port *)port; struct uart_8250_port *up = (struct uart_8250_port *)port;
unsigned long start, offset = 0, size = 0; unsigned long start, offset = 0, size = 0;
if (!(up->port.flags & UPF_RESOURCES))
return;
if (up->port.type == PORT_RSA) { if (up->port.type == PORT_RSA) {
offset = UART_RSA_BASE << up->port.regshift; offset = UART_RSA_BASE << up->port.regshift;
size = 8; size = 8;
...@@ -1675,7 +1698,7 @@ static void serial8250_release_port(struct uart_port *port) ...@@ -1675,7 +1698,7 @@ static void serial8250_release_port(struct uart_port *port)
size <<= up->port.regshift; size <<= up->port.regshift;
switch (up->port.iotype) { switch (up->port.iotype) {
case SERIAL_IO_MEM: case UPIO_MEM:
if (up->port.mapbase) { if (up->port.mapbase) {
/* /*
* Unmap the area. * Unmap the area.
...@@ -1691,8 +1714,8 @@ static void serial8250_release_port(struct uart_port *port) ...@@ -1691,8 +1714,8 @@ static void serial8250_release_port(struct uart_port *port)
} }
break; break;
case SERIAL_IO_HUB6: case UPIO_HUB6:
case SERIAL_IO_PORT: case UPIO_PORT:
start = up->port.iobase; start = up->port.iobase;
if (size) if (size)
......
...@@ -17,15 +17,6 @@ ...@@ -17,15 +17,6 @@
#include <linux/config.h> #include <linux/config.h>
struct serial8250_probe {
struct module *owner;
int (*pci_init_one)(struct pci_dev *dev);
void (*pci_remove_one)(struct pci_dev *dev);
void (*pnp_init)(void);
};
int serial8250_register_probe(struct serial8250_probe *probe);
void serial8250_unregister_probe(struct serial8250_probe *probe);
void serial8250_get_irq_map(unsigned int *map); void serial8250_get_irq_map(unsigned int *map);
void serial8250_suspend_port(int line); void serial8250_suspend_port(int line);
void serial8250_resume_port(int line); void serial8250_resume_port(int line);
......
...@@ -186,6 +186,8 @@ setup_serial_hcdp(void *tablep) ...@@ -186,6 +186,8 @@ setup_serial_hcdp(void *tablep)
port.irq = gsi; port.irq = gsi;
#endif #endif
port.flags = UPF_SKIP_TEST | UPF_BOOT_AUTOCONF | UPF_RESOURCES; port.flags = UPF_SKIP_TEST | UPF_BOOT_AUTOCONF | UPF_RESOURCES;
if (gsi)
port.flags |= UPF_AUTO_IRQ;
/* /*
* Note: the above memset() initializes port.line to 0, * Note: the above memset() initializes port.line to 0,
......
...@@ -224,6 +224,37 @@ config SERIAL_CLPS711X_CONSOLE ...@@ -224,6 +224,37 @@ config SERIAL_CLPS711X_CONSOLE
your boot loader (lilo or loadlin) about how to pass options to the your boot loader (lilo or loadlin) about how to pass options to the
kernel at boot time.) kernel at boot time.)
config SERIAL_S3C2410
tristate "Samsung S3C2410 Serial port support"
depends on ARM && ARCH_S3C2410
select SERIAL_CORE
help
Support for the on-chip UARTs on the Samsung S3C2410X CPU,
providing /dev/ttySAC0, 1 and 2 (note, some machines may not
provide all of these ports, depending on how the serial port
pins are configured.
config SERIAL_S3C2410_CONSOLE
bool "Support for console on S3C2410 serial port"
depends on SERIAL_S3C2410=y
help
Allow selection of the S3C2410 on-board serial ports for use as
an virtual console.
Even if you say Y here, the currently visible virtual console
(/dev/tty0) will still be used as the system console by default, but
you can alter that using a kernel command line option such as
"console=ttySACx". (Try "man bootparam" or see the documentation of
your boot loader about how to pass options to the kernel at
boot time.)
config SERIAL_BAST_SIO
bool "Support for BAST SuperIO serial ports"
depends on ARCH_BAST && SERIAL_8250=y
help
Support for registerin the SuperIO chip on BAST board with
the 8250/16550 uart code.
config SERIAL_DZ config SERIAL_DZ
bool "DECstation DZ serial driver" bool "DECstation DZ serial driver"
depends on DECSTATION depends on DECSTATION
......
...@@ -20,6 +20,7 @@ obj-$(CONFIG_SERIAL_AMBA) += amba.o ...@@ -20,6 +20,7 @@ obj-$(CONFIG_SERIAL_AMBA) += amba.o
obj-$(CONFIG_SERIAL_CLPS711X) += clps711x.o obj-$(CONFIG_SERIAL_CLPS711X) += clps711x.o
obj-$(CONFIG_SERIAL_PXA) += pxa.o obj-$(CONFIG_SERIAL_PXA) += pxa.o
obj-$(CONFIG_SERIAL_SA1100) += sa1100.o obj-$(CONFIG_SERIAL_SA1100) += sa1100.o
obj-$(CONFIG_SERIAL_S3C2410) += s3c2410.o
obj-$(CONFIG_SERIAL_UART00) += uart00.o obj-$(CONFIG_SERIAL_UART00) += uart00.o
obj-$(CONFIG_SERIAL_SUNCORE) += suncore.o obj-$(CONFIG_SERIAL_SUNCORE) += suncore.o
obj-$(CONFIG_SERIAL_SUNZILOG) += sunzilog.o obj-$(CONFIG_SERIAL_SUNZILOG) += sunzilog.o
...@@ -36,3 +37,4 @@ obj-$(CONFIG_SERIAL_PMACZILOG) += pmac_zilog.o ...@@ -36,3 +37,4 @@ obj-$(CONFIG_SERIAL_PMACZILOG) += pmac_zilog.o
obj-$(CONFIG_SERIAL_AU1X00) += au1x00_uart.o obj-$(CONFIG_SERIAL_AU1X00) += au1x00_uart.o
obj-$(CONFIG_SERIAL_DZ) += dz.o obj-$(CONFIG_SERIAL_DZ) += dz.o
obj-$(CONFIG_SERIAL_SH_SCI) += sh-sci.o obj-$(CONFIG_SERIAL_SH_SCI) += sh-sci.o
obj-$(CONFIG_SERIAL_BAST_SIO) += bast_sio.o
#include <linux/module.h>
#include <linux/config.h>
#include <linux/kernel.h>
#include <linux/init.h>
#include <linux/tty.h>
#include <linux/serial.h>
#include <linux/serial_core.h>
#include <linux/types.h>
#include <asm/io.h>
#include <asm/serial.h>
#include <asm/mach-types.h>
#include <asm/arch/map.h>
#include <asm/arch/irqs.h>
#include <asm/arch/bast-map.h>
#include <asm/arch/bast-irq.h>
static int __init serial_bast_register(unsigned long port, unsigned int irq)
{
struct serial_struct serial_req;
#if 0
printk("BAST: SuperIO serial (%08lx,%d)\n", port, irq);
#endif
serial_req.flags = UPF_AUTOPROBE | UPF_RESOURCES | UPF_SHARE_IRQ;
serial_req.baud_base = BASE_BAUD;
serial_req.irq = irq;
serial_req.io_type = UPIO_MEM;
serial_req.iomap_base = port;
serial_req.iomem_base = ioremap(port, 0x10);
serial_req.iomem_reg_shift = 0;
return register_serial(&serial_req);
}
#define SERIAL_BASE (S3C2410_CS2 + BAST_PA_SUPERIO)
static int __init serial_bast_init(void)
{
if (machine_is_bast()) {
serial_bast_register(SERIAL_BASE + 0x2f8, IRQ_PCSERIAL1);
serial_bast_register(SERIAL_BASE + 0x3f8, IRQ_PCSERIAL2);
}
return 0;
}
static void __exit serial_bast_exit(void)
{
/* todo -> remove both our ports */
}
module_init(serial_bast_init);
module_exit(serial_bast_exit);
MODULE_LICENSE("GPL");
MODULE_AUTHOR("Ben Dooks, ben@simtec.co.uk");
MODULE_DESCRIPTION("BAST Onboard Serial setup");
This diff is collapsed.
...@@ -894,6 +894,7 @@ static int sa1100_serial_probe(struct device *_dev) ...@@ -894,6 +894,7 @@ static int sa1100_serial_probe(struct device *_dev)
if (sa1100_ports[i].port.mapbase != res->start) if (sa1100_ports[i].port.mapbase != res->start)
continue; continue;
sa1100_ports[i].port.dev = _dev;
uart_add_one_port(&sa1100_reg, &sa1100_ports[i].port); uart_add_one_port(&sa1100_reg, &sa1100_ports[i].port);
dev_set_drvdata(_dev, &sa1100_ports[i]); dev_set_drvdata(_dev, &sa1100_ports[i]);
break; break;
......
...@@ -2227,7 +2227,7 @@ int uart_add_one_port(struct uart_driver *drv, struct uart_port *port) ...@@ -2227,7 +2227,7 @@ int uart_add_one_port(struct uart_driver *drv, struct uart_port *port)
* Register the port whether it's detected or not. This allows * Register the port whether it's detected or not. This allows
* setserial to be used to alter this ports parameters. * setserial to be used to alter this ports parameters.
*/ */
tty_register_device(drv->tty_driver, port->line, NULL); tty_register_device(drv->tty_driver, port->line, port->dev);
out: out:
up(&port_sem); up(&port_sem);
......
...@@ -54,6 +54,8 @@ ...@@ -54,6 +54,8 @@
#include <pcmcia/ds.h> #include <pcmcia/ds.h>
#include <pcmcia/cisreg.h> #include <pcmcia/cisreg.h>
#include "8250.h"
#ifdef PCMCIA_DEBUG #ifdef PCMCIA_DEBUG
static int pc_debug = PCMCIA_DEBUG; static int pc_debug = PCMCIA_DEBUG;
MODULE_PARM(pc_debug, "i"); MODULE_PARM(pc_debug, "i");
...@@ -158,6 +160,38 @@ static void serial_remove(dev_link_t *link) ...@@ -158,6 +160,38 @@ static void serial_remove(dev_link_t *link)
} }
} }
static void serial_suspend(dev_link_t *link)
{
link->state |= DEV_SUSPEND;
if (link->state & DEV_CONFIG) {
struct serial_info *info = link->priv;
int i;
for (i = 0; i < info->ndev; i++)
serial8250_suspend_port(info->line[i]);
if (!info->slave)
pcmcia_release_configuration(link->handle);
}
}
static void serial_resume(dev_link_t *link)
{
link->state &= ~DEV_SUSPEND;
if (DEV_OK(link)) {
struct serial_info *info = link->priv;
int i;
if (!info->slave)
pcmcia_request_configuration(link->handle, &link->conf);
for (i = 0; i < info->ndev; i++)
serial8250_resume_port(info->line[i]);
}
}
/*====================================================================== /*======================================================================
serial_attach() creates an "instance" of the driver, allocating serial_attach() creates an "instance" of the driver, allocating
...@@ -674,16 +708,18 @@ serial_event(event_t event, int priority, event_callback_args_t * args) ...@@ -674,16 +708,18 @@ serial_event(event_t event, int priority, event_callback_args_t * args)
break; break;
case CS_EVENT_PM_SUSPEND: case CS_EVENT_PM_SUSPEND:
link->state |= DEV_SUSPEND; serial_suspend(link);
/* Fall through... */ break;
case CS_EVENT_RESET_PHYSICAL: case CS_EVENT_RESET_PHYSICAL:
if ((link->state & DEV_CONFIG) && !info->slave) if ((link->state & DEV_CONFIG) && !info->slave)
pcmcia_release_configuration(link->handle); pcmcia_release_configuration(link->handle);
break; break;
case CS_EVENT_PM_RESUME: case CS_EVENT_PM_RESUME:
link->state &= ~DEV_SUSPEND; serial_resume(link);
/* Fall through... */ break;
case CS_EVENT_CARD_RESET: case CS_EVENT_CARD_RESET:
if (DEV_OK(link) && !info->slave) if (DEV_OK(link) && !info->slave)
pcmcia_request_configuration(link->handle, &link->conf); pcmcia_request_configuration(link->handle, &link->conf);
......
...@@ -16,8 +16,6 @@ ...@@ -16,8 +16,6 @@
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software * along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
* $Id: serial_core.h,v 1.49 2002/07/20 18:06:32 rmk Exp $
*/ */
/* /*
...@@ -83,6 +81,9 @@ ...@@ -83,6 +81,9 @@
#define PORT_SCIF 53 #define PORT_SCIF 53
#define PORT_IRDA 54 #define PORT_IRDA 54
/* Samsung S3C2410 SoC and derivatives thereof */
#define PORT_S3C2410 55
#ifdef __KERNEL__ #ifdef __KERNEL__
#include <linux/config.h> #include <linux/config.h>
...@@ -94,6 +95,7 @@ ...@@ -94,6 +95,7 @@
struct uart_port; struct uart_port;
struct uart_info; struct uart_info;
struct serial_struct; struct serial_struct;
struct device;
/* /*
* This structure describes all the operations that can be * This structure describes all the operations that can be
...@@ -182,7 +184,6 @@ struct uart_port { ...@@ -182,7 +184,6 @@ struct uart_port {
unsigned int flags; unsigned int flags;
#define UPF_HUP_NOTIFY (1 << 0)
#define UPF_FOURPORT (1 << 1) #define UPF_FOURPORT (1 << 1)
#define UPF_SAK (1 << 2) #define UPF_SAK (1 << 2)
#define UPF_SPD_MASK (0x1030) #define UPF_SPD_MASK (0x1030)
...@@ -215,6 +216,7 @@ struct uart_port { ...@@ -215,6 +216,7 @@ struct uart_port {
unsigned int custom_divisor; unsigned int custom_divisor;
unsigned int line; /* port index */ unsigned int line; /* port index */
unsigned long mapbase; /* for ioremap */ unsigned long mapbase; /* for ioremap */
struct device *dev; /* parent device */
unsigned char hub6; /* this should be in the 8250 driver */ unsigned char hub6; /* this should be in the 8250 driver */
unsigned char unused[3]; unsigned char unused[3];
}; };
......
...@@ -121,6 +121,7 @@ ...@@ -121,6 +121,7 @@
/* /*
* These are the definitions for the Modem Control Register * These are the definitions for the Modem Control Register
*/ */
#define UART_MCR_AFE 0x20 /* Enable auto-RTS/CTS (TI16C750) */
#define UART_MCR_LOOP 0x10 /* Enable loopback test mode */ #define UART_MCR_LOOP 0x10 /* Enable loopback test mode */
#define UART_MCR_OUT2 0x08 /* Out2 complement */ #define UART_MCR_OUT2 0x08 /* Out2 complement */
#define UART_MCR_OUT1 0x04 /* Out1 complement */ #define UART_MCR_OUT1 0x04 /* Out1 complement */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment