From: Sascha Hauer Date: Fri, 11 Feb 2011 07:32:18 +0000 (+0100) Subject: Merge commit 'v2.6.38-rc4' into imx-for-2.6.39 X-Git-Tag: v2.6.39-rc1~434^2~5^2~91 X-Git-Url: https://openfabrics.org/gitweb/?a=commitdiff_plain;h=f19693a17c6705e197eb24d4618060eaac1b535c;p=~emulex%2Finfiniband.git Merge commit 'v2.6.38-rc4' into imx-for-2.6.39 Conflicts: arch/arm/mach-mxs/clock-mx28.c Signed-off-by: Sascha Hauer --- f19693a17c6705e197eb24d4618060eaac1b535c diff --cc arch/arm/mach-mxs/clock-mx28.c index c9d7951e8bf,fd1c4c54b8e..febd787f054 --- a/arch/arm/mach-mxs/clock-mx28.c +++ b/arch/arm/mach-mxs/clock-mx28.c @@@ -609,12 -609,6 +609,11 @@@ static struct clk_lookup lookups[] = _REGISTER_CLOCK("duart", NULL, uart_clk) _REGISTER_CLOCK("imx28-fec.0", NULL, fec_clk) _REGISTER_CLOCK("imx28-fec.1", NULL, fec_clk) + _REGISTER_CLOCK("mxs-auart.0", NULL, uart_clk) + _REGISTER_CLOCK("mxs-auart.1", NULL, uart_clk) + _REGISTER_CLOCK("mxs-auart.2", NULL, uart_clk) + _REGISTER_CLOCK("mxs-auart.3", NULL, uart_clk) + _REGISTER_CLOCK("mxs-auart.4", NULL, uart_clk) - _REGISTER_CLOCK("fec.0", NULL, fec_clk) _REGISTER_CLOCK("rtc", NULL, rtc_clk) _REGISTER_CLOCK("pll2", NULL, pll2_clk) _REGISTER_CLOCK(NULL, "hclk", hbus_clk) diff --cc drivers/tty/serial/Kconfig index 00000000000,2b8334601c8..5c4b3475621 mode 000000,100644..100644 --- a/drivers/tty/serial/Kconfig +++ b/drivers/tty/serial/Kconfig @@@ -1,0 -1,1599 +1,1614 @@@ + # + # Serial device configuration + # + + menu "Serial drivers" + depends on HAS_IOMEM + + # + # The new 8250/16550 serial drivers + config SERIAL_8250 + tristate "8250/16550 and compatible serial support" + select SERIAL_CORE + ---help--- + This selects whether you want to include the driver for the standard + serial ports. The standard answer is Y. People who might say N + here are those that are setting up dedicated Ethernet WWW/FTP + servers, or users that have one of the various bus mice instead of a + serial mouse and don't intend to use their machine's standard serial + port for anything. (Note that the Cyclades and Stallion multi + serial port drivers do not need this driver built in for them to + work.) + + To compile this driver as a module, choose M here: the + module will be called 8250. + [WARNING: Do not compile this driver as a module if you are using + non-standard serial ports, since the configuration information will + be lost when the driver is unloaded. This limitation may be lifted + in the future.] + + BTW1: If you have a mouseman serial mouse which is not recognized by + the X window system, try running gpm first. + + BTW2: If you intend to use a software modem (also called Winmodem) + under Linux, forget it. These modems are crippled and require + proprietary drivers which are only available under Windows. + + Most people will say Y or M here, so that they can use serial mice, + modems and similar devices connecting to the standard serial ports. + + config SERIAL_8250_CONSOLE + bool "Console on 8250/16550 and compatible serial port" + depends on SERIAL_8250=y + select SERIAL_CORE_CONSOLE + ---help--- + If you say Y here, it will be possible to use a serial port as the + system console (the system console is the device which receives all + kernel messages and warnings and which allows logins in single user + mode). This could be useful if some terminal or printer is connected + to that serial port. + + 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=ttyS1". (Try "man bootparam" or see the documentation of + your boot loader (grub or lilo or loadlin) about how to pass options + to the kernel at boot time.) + + If you don't have a VGA card installed and you say Y here, the + kernel will automatically use the first serial line, /dev/ttyS0, as + system console. + + You can set that using a kernel command line option such as + "console=uart8250,io,0x3f8,9600n8" + "console=uart8250,mmio,0xff5e0000,115200n8". + and it will switch to normal serial console when the corresponding + port is ready. + "earlycon=uart8250,io,0x3f8,9600n8" + "earlycon=uart8250,mmio,0xff5e0000,115200n8". + it will not only setup early console. + + If unsure, say N. + + config FIX_EARLYCON_MEM + bool + depends on X86 + default y + + config SERIAL_8250_GSC + tristate + depends on SERIAL_8250 && GSC + default SERIAL_8250 + + config SERIAL_8250_PCI + tristate "8250/16550 PCI device support" if EXPERT + depends on SERIAL_8250 && PCI + default SERIAL_8250 + help + This builds standard PCI serial support. You may be able to + disable this feature if you only need legacy serial support. + Saves about 9K. + + config SERIAL_8250_PNP + tristate "8250/16550 PNP device support" if EXPERT + depends on SERIAL_8250 && PNP + default SERIAL_8250 + help + This builds standard PNP serial support. You may be able to + disable this feature if you only need legacy serial support. + + config SERIAL_8250_HP300 + tristate + depends on SERIAL_8250 && HP300 + default SERIAL_8250 + + config SERIAL_8250_CS + tristate "8250/16550 PCMCIA device support" + depends on PCMCIA && SERIAL_8250 + ---help--- + Say Y here to enable support for 16-bit PCMCIA serial devices, + including serial port cards, modems, and the modem functions of + multi-function Ethernet/modem cards. (PCMCIA- or PC-cards are + credit-card size devices often used with laptops.) + + To compile this driver as a module, choose M here: the + module will be called serial_cs. + + If unsure, say N. + + config SERIAL_8250_NR_UARTS + int "Maximum number of 8250/16550 serial ports" + depends on SERIAL_8250 + default "4" + help + Set this to the number of serial ports you want the driver + to support. This includes any ports discovered via ACPI or + PCI enumeration and any ports that may be added at run-time + via hot-plug, or any ISA multi-port serial cards. + + config SERIAL_8250_RUNTIME_UARTS + int "Number of 8250/16550 serial ports to register at runtime" + depends on SERIAL_8250 + range 0 SERIAL_8250_NR_UARTS + default "4" + help + Set this to the maximum number of serial ports you want + the kernel to register at boot time. This can be overridden + with the module parameter "nr_uarts", or boot-time parameter + 8250.nr_uarts + + config SERIAL_8250_EXTENDED + bool "Extended 8250/16550 serial driver options" + depends on SERIAL_8250 + help + If you wish to use any non-standard features of the standard "dumb" + driver, say Y here. This includes HUB6 support, shared serial + interrupts, special multiport support, support for more than the + four COM 1/2/3/4 boards, etc. + + Note that the answer to this question won't directly affect the + kernel: saying N will just cause the configurator to skip all + the questions about serial driver options. If unsure, say N. + + config SERIAL_8250_MANY_PORTS + bool "Support more than 4 legacy serial ports" + depends on SERIAL_8250_EXTENDED && !IA64 + help + Say Y here if you have dumb serial boards other than the four + standard COM 1/2/3/4 ports. This may happen if you have an AST + FourPort, Accent Async, Boca (read the Boca mini-HOWTO, available + from ), or other custom + serial port hardware which acts similar to standard serial port + hardware. If you only use the standard COM 1/2/3/4 ports, you can + say N here to save some memory. You can also say Y if you have an + "intelligent" multiport card such as Cyclades, Digiboards, etc. + + # + # Multi-port serial cards + # + + config SERIAL_8250_FOURPORT + tristate "Support Fourport cards" + depends on SERIAL_8250 != n && ISA && SERIAL_8250_MANY_PORTS + help + Say Y here if you have an AST FourPort serial board. + + To compile this driver as a module, choose M here: the module + will be called 8250_fourport. + + config SERIAL_8250_ACCENT + tristate "Support Accent cards" + depends on SERIAL_8250 != n && ISA && SERIAL_8250_MANY_PORTS + help + Say Y here if you have an Accent Async serial board. + + To compile this driver as a module, choose M here: the module + will be called 8250_accent. + + config SERIAL_8250_BOCA + tristate "Support Boca cards" + depends on SERIAL_8250 != n && ISA && SERIAL_8250_MANY_PORTS + help + Say Y here if you have a Boca serial board. Please read the Boca + mini-HOWTO, available from + + To compile this driver as a module, choose M here: the module + will be called 8250_boca. + + config SERIAL_8250_EXAR_ST16C554 + tristate "Support Exar ST16C554/554D Quad UART" + depends on SERIAL_8250 != n && ISA && SERIAL_8250_MANY_PORTS + help + The Uplogix Envoy TU301 uses this Exar Quad UART. If you are + tinkering with your Envoy TU301, or have a machine with this UART, + say Y here. + + To compile this driver as a module, choose M here: the module + will be called 8250_exar_st16c554. + + config SERIAL_8250_HUB6 + tristate "Support Hub6 cards" + depends on SERIAL_8250 != n && ISA && SERIAL_8250_MANY_PORTS + help + Say Y here if you have a HUB6 serial board. + + To compile this driver as a module, choose M here: the module + will be called 8250_hub6. + + config SERIAL_8250_SHARE_IRQ + bool "Support for sharing serial interrupts" + depends on SERIAL_8250_EXTENDED + help + Some serial boards have hardware support which allows multiple dumb + serial ports on the same board to share a single IRQ. To enable + support for this in the serial driver, say Y here. + + config SERIAL_8250_DETECT_IRQ + bool "Autodetect IRQ on standard ports (unsafe)" + depends on SERIAL_8250_EXTENDED + help + Say Y here if you want the kernel to try to guess which IRQ + to use for your serial port. + + This is considered unsafe; it is far better to configure the IRQ in + a boot script using the setserial command. + + If unsure, say N. + + config SERIAL_8250_RSA + bool "Support RSA serial ports" + depends on SERIAL_8250_EXTENDED + help + ::: To be written ::: + + config SERIAL_8250_MCA + tristate "Support 8250-type ports on MCA buses" + depends on SERIAL_8250 != n && MCA + help + Say Y here if you have a MCA serial ports. + + To compile this driver as a module, choose M here: the module + will be called 8250_mca. + + config SERIAL_8250_ACORN + tristate "Acorn expansion card serial port support" + depends on ARCH_ACORN && SERIAL_8250 + help + If you have an Atomwide Serial card or Serial Port card for an Acorn + system, say Y to this option. The driver can handle 1, 2, or 3 port + cards. If unsure, say N. + + config SERIAL_8250_RM9K + bool "Support for MIPS RM9xxx integrated serial port" + depends on SERIAL_8250 != n && SERIAL_RM9000 + select SERIAL_8250_SHARE_IRQ + help + Selecting this option will add support for the integrated serial + port hardware found on MIPS RM9122 and similar processors. + If unsure, say N. + + comment "Non-8250 serial port support" + + config SERIAL_AMBA_PL010 + tristate "ARM AMBA PL010 serial port support" + depends on ARM_AMBA && (BROKEN || !ARCH_VERSATILE) + select SERIAL_CORE + help + This selects the ARM(R) AMBA(R) PrimeCell PL010 UART. If you have + an Integrator/AP or Integrator/PP2 platform, or if you have a + Cirrus Logic EP93xx CPU, say Y or M here. + + If unsure, say N. + + config SERIAL_AMBA_PL010_CONSOLE + bool "Support for console on AMBA serial port" + depends on SERIAL_AMBA_PL010=y + select SERIAL_CORE_CONSOLE + ---help--- + Say Y here if you wish to use an AMBA PrimeCell UART as the system + console (the system console is the device which receives all kernel + messages and warnings and which allows logins in single user mode). + + Even if you say Y here, the currently visible framebuffer 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=ttyAM0". (Try "man bootparam" or see the documentation of + your boot loader (lilo or loadlin) about how to pass options to the + kernel at boot time.) + + config SERIAL_AMBA_PL011 + tristate "ARM AMBA PL011 serial port support" + depends on ARM_AMBA + select SERIAL_CORE + help + This selects the ARM(R) AMBA(R) PrimeCell PL011 UART. If you have + an Integrator/PP2, Integrator/CP or Versatile platform, say Y or M + here. + + If unsure, say N. + + config SERIAL_AMBA_PL011_CONSOLE + bool "Support for console on AMBA serial port" + depends on SERIAL_AMBA_PL011=y + select SERIAL_CORE_CONSOLE + ---help--- + Say Y here if you wish to use an AMBA PrimeCell UART as the system + console (the system console is the device which receives all kernel + messages and warnings and which allows logins in single user mode). + + Even if you say Y here, the currently visible framebuffer 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=ttyAMA0". (Try "man bootparam" or see the documentation of + your boot loader (lilo or loadlin) about how to pass options to the + kernel at boot time.) + + config SERIAL_SB1250_DUART + tristate "BCM1xxx on-chip DUART serial support" + depends on SIBYTE_SB1xxx_SOC=y + select SERIAL_CORE + default y + ---help--- + Support for the asynchronous serial interface (DUART) included in + the BCM1250 and derived System-On-a-Chip (SOC) devices. Note that + the letter D in DUART stands for "dual", which is how the device + is implemented. Depending on the SOC configuration there may be + one or more DUARTs available of which all are handled. + + If unsure, say Y. To compile this driver as a module, choose M here: + the module will be called sb1250-duart. + + config SERIAL_SB1250_DUART_CONSOLE + bool "Support for console on a BCM1xxx DUART serial port" + depends on SERIAL_SB1250_DUART=y + select SERIAL_CORE_CONSOLE + default y + ---help--- + If you say Y here, it will be possible to use a serial port as the + system console (the system console is the device which receives all + kernel messages and warnings and which allows logins in single user + mode). + + If unsure, say Y. + + config SERIAL_ATMEL + bool "AT91 / AT32 on-chip serial port support" + depends on (ARM && ARCH_AT91) || AVR32 + select SERIAL_CORE + help + This enables the driver for the on-chip UARTs of the Atmel + AT91 and AT32 processors. + + config SERIAL_ATMEL_CONSOLE + bool "Support for console on AT91 / AT32 serial port" + depends on SERIAL_ATMEL=y + select SERIAL_CORE_CONSOLE + help + Say Y here if you wish to use an on-chip UART on a Atmel + AT91 or AT32 processor as the system console (the system + console is the device which receives all kernel messages and + warnings and which allows logins in single user mode). + + config SERIAL_ATMEL_PDC + bool "Support DMA transfers on AT91 / AT32 serial port" + depends on SERIAL_ATMEL + default y + help + Say Y here if you wish to use the PDC to do DMA transfers to + and from the Atmel AT91 / AT32 serial port. In order to + actually use DMA transfers, make sure that the use_dma_tx + and use_dma_rx members in the atmel_uart_data struct is set + appropriately for each port. + + Note that break and error handling currently doesn't work + properly when DMA is enabled. Make sure that ports where + this matters don't use DMA. + + config SERIAL_ATMEL_TTYAT + bool "Install as device ttyATn instead of ttySn" + depends on SERIAL_ATMEL=y + help + Say Y here if you wish to have the internal AT91 / AT32 UARTs + appear as /dev/ttyATn (major 204, minor starting at 154) + instead of the normal /dev/ttySn (major 4, minor starting at + 64). This is necessary if you also want other UARTs, such as + external 8250/16C550 compatible UARTs. + The ttySn nodes are legally reserved for the 8250 serial driver + but are often misused by other serial drivers. + + To use this, you should create suitable ttyATn device nodes in + /dev/, and pass "console=ttyATn" to the kernel. + + Say Y if you have an external 8250/16C550 UART. If unsure, say N. + + config SERIAL_KS8695 + bool "Micrel KS8695 (Centaur) serial port support" + depends on ARCH_KS8695 + select SERIAL_CORE + help + This selects the Micrel Centaur KS8695 UART. Say Y here. + + config SERIAL_KS8695_CONSOLE + bool "Support for console on KS8695 (Centaur) serial port" + depends on SERIAL_KS8695=y + select SERIAL_CORE_CONSOLE + help + Say Y here if you wish to use a KS8695 (Centaur) UART as the + system console (the system console is the device which + receives all kernel messages and warnings and which allows + logins in single user mode). + + config SERIAL_CLPS711X + tristate "CLPS711X serial port support" + depends on ARM && ARCH_CLPS711X + select SERIAL_CORE + help + ::: To be written ::: + + config SERIAL_CLPS711X_CONSOLE + bool "Support for console on CLPS711X serial port" + depends on SERIAL_CLPS711X=y + select SERIAL_CORE_CONSOLE + help + 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=ttyCL1". (Try "man bootparam" or see the documentation of + your boot loader (lilo or loadlin) about how to pass options to the + kernel at boot time.) + + config SERIAL_SAMSUNG + tristate "Samsung SoC serial support" + depends on ARM && PLAT_SAMSUNG + select SERIAL_CORE + help + Support for the on-chip UARTs on the Samsung S3C24XX series CPUs, + 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_SAMSUNG_UARTS_4 + bool + depends on ARM && PLAT_SAMSUNG + default y if CPU_S3C2443 + help + Internal node for the common case of 4 Samsung compatible UARTs + + config SERIAL_SAMSUNG_UARTS + int + depends on ARM && PLAT_SAMSUNG + default 2 if ARCH_S3C2400 + default 6 if ARCH_S5P6450 + default 4 if SERIAL_SAMSUNG_UARTS_4 + default 3 + help + Select the number of available UART ports for the Samsung S3C + serial driver + + config SERIAL_SAMSUNG_DEBUG + bool "Samsung SoC serial debug" + depends on SERIAL_SAMSUNG && DEBUG_LL + help + Add support for debugging the serial driver. Since this is + generally being used as a console, we use our own output + routines that go via the low-level debug printascii() + function. + + config SERIAL_SAMSUNG_CONSOLE + bool "Support for console on Samsung SoC serial port" + depends on SERIAL_SAMSUNG=y + select SERIAL_CORE_CONSOLE + help + Allow selection of the S3C24XX 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_S3C2400 + tristate "Samsung S3C2410 Serial port support" + depends on ARM && SERIAL_SAMSUNG && CPU_S3C2400 + default y if CPU_S3C2400 + help + Serial port support for the Samsung S3C2400 SoC + + config SERIAL_S3C2410 + tristate "Samsung S3C2410 Serial port support" + depends on SERIAL_SAMSUNG && CPU_S3C2410 + default y if CPU_S3C2410 + help + Serial port support for the Samsung S3C2410 SoC + + config SERIAL_S3C2412 + tristate "Samsung S3C2412/S3C2413 Serial port support" + depends on SERIAL_SAMSUNG && CPU_S3C2412 + default y if CPU_S3C2412 + help + Serial port support for the Samsung S3C2412 and S3C2413 SoC + + config SERIAL_S3C2440 + tristate "Samsung S3C2440/S3C2442/S3C2416 Serial port support" + depends on SERIAL_SAMSUNG && (CPU_S3C2440 || CPU_S3C2442 || CPU_S3C2416) + default y if CPU_S3C2440 + default y if CPU_S3C2442 + select SERIAL_SAMSUNG_UARTS_4 if CPU_S3C2416 + help + Serial port support for the Samsung S3C2440, S3C2416 and S3C2442 SoC + + config SERIAL_S3C24A0 + tristate "Samsung S3C24A0 Serial port support" + depends on SERIAL_SAMSUNG && CPU_S3C24A0 + default y if CPU_S3C24A0 + help + Serial port support for the Samsung S3C24A0 SoC + + config SERIAL_S3C6400 + tristate "Samsung S3C6400/S3C6410/S5P6440/S5P6450/S5PC100 Serial port support" + depends on SERIAL_SAMSUNG && (CPU_S3C6400 || CPU_S3C6410 || CPU_S5P6440 || CPU_S5P6450 || CPU_S5PC100) + select SERIAL_SAMSUNG_UARTS_4 + default y + help + Serial port support for the Samsung S3C6400, S3C6410, S5P6440, S5P6450 + and S5PC100 SoCs + + config SERIAL_S5PV210 + tristate "Samsung S5PV210 Serial port support" + depends on SERIAL_SAMSUNG && (CPU_S5PV210 || CPU_S5P6442 || CPU_S5PV310) + select SERIAL_SAMSUNG_UARTS_4 if (CPU_S5PV210 || CPU_S5PV310) + default y + help + Serial port support for Samsung's S5P Family of SoC's + + + config SERIAL_MAX3100 + tristate "MAX3100 support" + depends on SPI + select SERIAL_CORE + help + MAX3100 chip support + + config SERIAL_MAX3107 + tristate "MAX3107 support" + depends on SPI + select SERIAL_CORE + help + MAX3107 chip support + + config SERIAL_MAX3107_AAVA + tristate "MAX3107 AAVA platform support" + depends on X86_MRST && SERIAL_MAX3107 && GPIOLIB + select SERIAL_CORE + help + Support for the MAX3107 chip configuration found on the AAVA + platform. Includes the extra initialisation and GPIO support + neded for this device. + + config SERIAL_DZ + bool "DECstation DZ serial driver" + depends on MACH_DECSTATION && 32BIT + select SERIAL_CORE + default y + ---help--- + DZ11-family serial controllers for DECstations and VAXstations, + including the DC7085, M7814, and M7819. + + config SERIAL_DZ_CONSOLE + bool "Support console on DECstation DZ serial driver" + depends on SERIAL_DZ=y + select SERIAL_CORE_CONSOLE + default y + ---help--- + If you say Y here, it will be possible to use a serial port as the + system console (the system console is the device which receives all + kernel messages and warnings and which allows logins in single user + mode). + + Note that the firmware uses ttyS3 as the serial console on + DECstations that use this driver. + + If unsure, say Y. + + config SERIAL_ZS + tristate "DECstation Z85C30 serial support" + depends on MACH_DECSTATION + select SERIAL_CORE + default y + ---help--- + Support for the Zilog 85C350 serial communications controller used + for serial ports in newer DECstation systems. These include the + DECsystem 5900 and all models of the DECstation and DECsystem 5000 + systems except from model 200. + + If unsure, say Y. To compile this driver as a module, choose M here: + the module will be called zs. + + config SERIAL_ZS_CONSOLE + bool "Support for console on a DECstation Z85C30 serial port" + depends on SERIAL_ZS=y + select SERIAL_CORE_CONSOLE + default y + ---help--- + If you say Y here, it will be possible to use a serial port as the + system console (the system console is the device which receives all + kernel messages and warnings and which allows logins in single user + mode). + + Note that the firmware uses ttyS1 as the serial console on the + Maxine and ttyS3 on the others using this driver. + + If unsure, say Y. + + config SERIAL_21285 + tristate "DC21285 serial port support" + depends on ARM && FOOTBRIDGE + select SERIAL_CORE + help + If you have a machine based on a 21285 (Footbridge) StrongARM(R)/ + PCI bridge you can enable its onboard serial port by enabling this + option. + + config SERIAL_21285_CONSOLE + bool "Console on DC21285 serial port" + depends on SERIAL_21285=y + select SERIAL_CORE_CONSOLE + help + If you have enabled the serial port on the 21285 footbridge you can + make it the console by answering Y to this option. + + 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=ttyFB". (Try "man bootparam" or see the documentation of + your boot loader (lilo or loadlin) about how to pass options to the + kernel at boot time.) + + config SERIAL_MPSC + bool "Marvell MPSC serial port support" + depends on PPC32 && MV64X60 + select SERIAL_CORE + help + Say Y here if you want to use the Marvell MPSC serial controller. + + config SERIAL_MPSC_CONSOLE + bool "Support for console on Marvell MPSC serial port" + depends on SERIAL_MPSC + select SERIAL_CORE_CONSOLE + help + Say Y here if you want to support a serial console on a Marvell MPSC. + + config SERIAL_PXA + bool "PXA serial port support" + depends on ARCH_PXA || ARCH_MMP + select SERIAL_CORE + help + If you have a machine based on an Intel XScale PXA2xx CPU you + can enable its onboard serial ports by enabling this option. + + config SERIAL_PXA_CONSOLE + bool "Console on PXA serial port" + depends on SERIAL_PXA + select SERIAL_CORE_CONSOLE + help + If you have enabled the serial port on the Intel XScale PXA + CPU you can make it the console by answering Y to this option. + + 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=ttySA0". (Try "man bootparam" or see the documentation of + your boot loader (lilo or loadlin) about how to pass options to the + kernel at boot time.) + + config SERIAL_SA1100 + bool "SA1100 serial port support" + depends on ARM && ARCH_SA1100 + select SERIAL_CORE + help + If you have a machine based on a SA1100/SA1110 StrongARM(R) CPU you + can enable its onboard serial port by enabling this option. + Please read for further + info. + + config SERIAL_SA1100_CONSOLE + bool "Console on SA1100 serial port" + depends on SERIAL_SA1100 + select SERIAL_CORE_CONSOLE + help + If you have enabled the serial port on the SA1100/SA1110 StrongARM + CPU you can make it the console by answering Y to this option. + + 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=ttySA0". (Try "man bootparam" or see the documentation of + your boot loader (lilo or loadlin) about how to pass options to the + kernel at boot time.) + + config SERIAL_MRST_MAX3110 + tristate "SPI UART driver for Max3110" + depends on SPI_DW_PCI + select SERIAL_CORE + select SERIAL_CORE_CONSOLE + help + This is the UART protocol driver for the MAX3110 device on + the Intel Moorestown platform. On other systems use the max3100 + driver. + + config SERIAL_MFD_HSU + tristate "Medfield High Speed UART support" + depends on PCI + select SERIAL_CORE + + config SERIAL_MFD_HSU_CONSOLE + boolean "Medfile HSU serial console support" + depends on SERIAL_MFD_HSU=y + select SERIAL_CORE_CONSOLE + + config SERIAL_BFIN + tristate "Blackfin serial port support" + depends on BLACKFIN + select SERIAL_CORE + select SERIAL_BFIN_UART0 if (BF531 || BF532 || BF533 || BF561) + help + Add support for the built-in UARTs on the Blackfin. + + To compile this driver as a module, choose M here: the + module will be called bfin_5xx. + + config SERIAL_BFIN_CONSOLE + bool "Console on Blackfin serial port" + depends on SERIAL_BFIN=y + select SERIAL_CORE_CONSOLE + + choice + prompt "UART Mode" + depends on SERIAL_BFIN + default SERIAL_BFIN_DMA + help + This driver supports the built-in serial ports of the Blackfin family + of CPUs + + config SERIAL_BFIN_DMA + bool "DMA mode" + depends on !DMA_UNCACHED_NONE && KGDB_SERIAL_CONSOLE=n + help + This driver works under DMA mode. If this option is selected, the + blackfin simple dma driver is also enabled. + + config SERIAL_BFIN_PIO + bool "PIO mode" + help + This driver works under PIO mode. + + endchoice + + config SERIAL_BFIN_UART0 + bool "Enable UART0" + depends on SERIAL_BFIN + help + Enable UART0 + + config BFIN_UART0_CTSRTS + bool "Enable UART0 hardware flow control" + depends on SERIAL_BFIN_UART0 + help + Enable hardware flow control in the driver. + + config SERIAL_BFIN_UART1 + bool "Enable UART1" + depends on SERIAL_BFIN && (!BF531 && !BF532 && !BF533 && !BF561) + help + Enable UART1 + + config BFIN_UART1_CTSRTS + bool "Enable UART1 hardware flow control" + depends on SERIAL_BFIN_UART1 + help + Enable hardware flow control in the driver. + + config SERIAL_BFIN_UART2 + bool "Enable UART2" + depends on SERIAL_BFIN && (BF54x || BF538 || BF539) + help + Enable UART2 + + config BFIN_UART2_CTSRTS + bool "Enable UART2 hardware flow control" + depends on SERIAL_BFIN_UART2 + help + Enable hardware flow control in the driver. + + config SERIAL_BFIN_UART3 + bool "Enable UART3" + depends on SERIAL_BFIN && (BF54x) + help + Enable UART3 + + config BFIN_UART3_CTSRTS + bool "Enable UART3 hardware flow control" + depends on SERIAL_BFIN_UART3 + help + Enable hardware flow control in the driver. + + config SERIAL_IMX + bool "IMX serial port support" + depends on ARM && (ARCH_IMX || ARCH_MXC) + select SERIAL_CORE + select RATIONAL + help + If you have a machine based on a Motorola IMX CPU you + can enable its onboard serial port by enabling this option. + + config SERIAL_IMX_CONSOLE + bool "Console on IMX serial port" + depends on SERIAL_IMX + select SERIAL_CORE_CONSOLE + help + If you have enabled the serial port on the Motorola IMX + CPU you can make it the console by answering Y to this option. + + 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=ttySA0". (Try "man bootparam" or see the documentation of + your boot loader (lilo or loadlin) about how to pass options to the + kernel at boot time.) + + config SERIAL_UARTLITE + tristate "Xilinx uartlite serial port support" + depends on PPC32 || MICROBLAZE || MFD_TIMBERDALE + select SERIAL_CORE + help + Say Y here if you want to use the Xilinx uartlite serial controller. + + To compile this driver as a module, choose M here: the + module will be called uartlite. + + config SERIAL_UARTLITE_CONSOLE + bool "Support for console on Xilinx uartlite serial port" + depends on SERIAL_UARTLITE=y + select SERIAL_CORE_CONSOLE + help + Say Y here if you wish to use a Xilinx uartlite as the system + console (the system console is the device which receives all kernel + messages and warnings and which allows logins in single user mode). + + config SERIAL_SUNCORE + bool + depends on SPARC + select SERIAL_CORE + select SERIAL_CORE_CONSOLE + default y + + config SERIAL_SUNZILOG + tristate "Sun Zilog8530 serial support" + depends on SPARC + help + This driver supports the Zilog8530 serial ports found on many Sparc + systems. Say Y or M if you want to be able to these serial ports. + + config SERIAL_SUNZILOG_CONSOLE + bool "Console on Sun Zilog8530 serial port" + depends on SERIAL_SUNZILOG=y + help + If you would like to be able to use the Zilog8530 serial port + on your Sparc system as the console, you can do so by answering + Y to this option. + + config SERIAL_SUNSU + tristate "Sun SU serial support" + depends on SPARC && PCI + help + This driver supports the 8250 serial ports that run the keyboard and + mouse on (PCI) UltraSPARC systems. Say Y or M if you want to be able + to these serial ports. + + config SERIAL_SUNSU_CONSOLE + bool "Console on Sun SU serial port" + depends on SERIAL_SUNSU=y + help + If you would like to be able to use the SU serial port + on your Sparc system as the console, you can do so by answering + Y to this option. + + config SERIAL_MUX + tristate "Serial MUX support" + depends on GSC + select SERIAL_CORE + default y + ---help--- + Saying Y here will enable the hardware MUX serial driver for + the Nova, K class systems and D class with a 'remote control card'. + The hardware MUX is not 8250/16550 compatible therefore the + /dev/ttyB0 device is shared between the Serial MUX and the PDC + software console. The following steps need to be completed to use + the Serial MUX: + + 1. create the device entry (mknod /dev/ttyB0 c 11 0) + 2. Edit the /etc/inittab to start a getty listening on /dev/ttyB0 + 3. Add device ttyB0 to /etc/securetty (if you want to log on as + root on this console.) + 4. Change the kernel command console parameter to: console=ttyB0 + + config SERIAL_MUX_CONSOLE + bool "Support for console on serial MUX" + depends on SERIAL_MUX=y + select SERIAL_CORE_CONSOLE + default y + + config PDC_CONSOLE + bool "PDC software console support" + depends on PARISC && !SERIAL_MUX && VT + default n + help + Saying Y here will enable the software based PDC console to be + used as the system console. This is useful for machines in + which the hardware based console has not been written yet. The + following steps must be competed to use the PDC console: + + 1. create the device entry (mknod /dev/ttyB0 c 11 0) + 2. Edit the /etc/inittab to start a getty listening on /dev/ttyB0 + 3. Add device ttyB0 to /etc/securetty (if you want to log on as + root on this console.) + 4. Change the kernel command console parameter to: console=ttyB0 + + config SERIAL_SUNSAB + tristate "Sun Siemens SAB82532 serial support" + depends on SPARC && PCI + help + This driver supports the Siemens SAB82532 DUSCC serial ports on newer + (PCI) UltraSPARC systems. Say Y or M if you want to be able to these + serial ports. + + config SERIAL_SUNSAB_CONSOLE + bool "Console on Sun Siemens SAB82532 serial port" + depends on SERIAL_SUNSAB=y + help + If you would like to be able to use the SAB82532 serial port + on your Sparc system as the console, you can do so by answering + Y to this option. + + config SERIAL_SUNHV + bool "Sun4v Hypervisor Console support" + depends on SPARC64 + help + This driver supports the console device found on SUN4V Sparc + systems. Say Y if you want to be able to use this device. + + config SERIAL_IP22_ZILOG + tristate "SGI Zilog8530 serial support" + depends on SGI_HAS_ZILOG + select SERIAL_CORE + help + This driver supports the Zilog8530 serial ports found on SGI + systems. Say Y or M if you want to be able to these serial ports. + + config SERIAL_IP22_ZILOG_CONSOLE + bool "Console on SGI Zilog8530 serial port" + depends on SERIAL_IP22_ZILOG=y + select SERIAL_CORE_CONSOLE + + config SERIAL_SH_SCI + tristate "SuperH SCI(F) serial port support" + depends on HAVE_CLK && (SUPERH || H8300 || ARCH_SHMOBILE) + select SERIAL_CORE + + config SERIAL_SH_SCI_NR_UARTS + int "Maximum number of SCI(F) serial ports" + depends on SERIAL_SH_SCI + default "2" + + config SERIAL_SH_SCI_CONSOLE + bool "Support for console on SuperH SCI(F)" + depends on SERIAL_SH_SCI=y + select SERIAL_CORE_CONSOLE + + config SERIAL_SH_SCI_DMA + bool "DMA support" + depends on SERIAL_SH_SCI && SH_DMAE && EXPERIMENTAL + + config SERIAL_PNX8XXX + bool "Enable PNX8XXX SoCs' UART Support" + depends on MIPS && (SOC_PNX8550 || SOC_PNX833X) + select SERIAL_CORE + help + If you have a MIPS-based Philips SoC such as PNX8550 or PNX8330 + and you want to use serial ports, say Y. Otherwise, say N. + + config SERIAL_PNX8XXX_CONSOLE + bool "Enable PNX8XX0 serial console" + depends on SERIAL_PNX8XXX + select SERIAL_CORE_CONSOLE + help + If you have a MIPS-based Philips SoC such as PNX8550 or PNX8330 + and you want to use serial console, say Y. Otherwise, say N. + + config SERIAL_CORE + tristate + + config SERIAL_CORE_CONSOLE + bool + + config CONSOLE_POLL + bool + + config SERIAL_68328 + bool "68328 serial support" + depends on M68328 || M68EZ328 || M68VZ328 + help + This driver supports the built-in serial port of the Motorola 68328 + (standard, EZ and VZ varieties). + + config SERIAL_68328_RTS_CTS + bool "Support RTS/CTS on 68328 serial port" + depends on SERIAL_68328 + + config SERIAL_MCF + bool "Coldfire serial support" + depends on COLDFIRE + select SERIAL_CORE + help + This serial driver supports the Freescale Coldfire serial ports. + + config SERIAL_MCF_BAUDRATE + int "Default baudrate for Coldfire serial ports" + depends on SERIAL_MCF + default 19200 + help + This setting lets you define what the default baudrate is for the + ColdFire serial ports. The usual default varies from board to board, + and this setting is a way of catering for that. + + config SERIAL_MCF_CONSOLE + bool "Coldfire serial console support" + depends on SERIAL_MCF + select SERIAL_CORE_CONSOLE + help + Enable a ColdFire internal serial port to be the system console. + + config SERIAL_68360_SMC + bool "68360 SMC uart support" + depends on M68360 + help + This driver supports the SMC serial ports of the Motorola 68360 CPU. + + config SERIAL_68360_SCC + bool "68360 SCC uart support" + depends on M68360 + help + This driver supports the SCC serial ports of the Motorola 68360 CPU. + + config SERIAL_68360 + bool + depends on SERIAL_68360_SMC || SERIAL_68360_SCC + default y + + config SERIAL_PMACZILOG + tristate "Mac or PowerMac z85c30 ESCC support" + depends on (M68K && MAC) || (PPC_OF && PPC_PMAC) + select SERIAL_CORE + help + This driver supports the Zilog z85C30 serial ports found on + (Power)Mac machines. + Say Y or M if you want to be able to these serial ports. + + config SERIAL_PMACZILOG_TTYS + bool "Use ttySn device nodes for Zilog z85c30" + depends on SERIAL_PMACZILOG + help + The pmac_zilog driver for the z85C30 chip on many powermacs + historically used the device numbers for /dev/ttySn. The + 8250 serial port driver also uses these numbers, which means + the two drivers being unable to coexist; you could not use + both z85C30 and 8250 type ports at the same time. + + If this option is not selected, the pmac_zilog driver will + use the device numbers allocated for /dev/ttyPZn. This allows + the pmac_zilog and 8250 drivers to co-exist, but may cause + existing userspace setups to break. Programs that need to + access the built-in serial ports on powermacs will need to + be reconfigured to use /dev/ttyPZn instead of /dev/ttySn. + + If you enable this option, any z85c30 ports in the system will + be registered as ttyS0 onwards as in the past, and you will be + unable to use the 8250 module for PCMCIA or other 16C550-style + UARTs. + + Say N unless you need the z85c30 ports on your (Power)Mac + to appear as /dev/ttySn. + + config SERIAL_PMACZILOG_CONSOLE + bool "Console on Mac or PowerMac z85c30 serial port" + depends on SERIAL_PMACZILOG=y + select SERIAL_CORE_CONSOLE + help + If you would like to be able to use the z85c30 serial port + on your (Power)Mac as the console, you can do so by answering + Y to this option. + + config SERIAL_LH7A40X + tristate "Sharp LH7A40X embedded UART support" + depends on ARM && ARCH_LH7A40X + select SERIAL_CORE + help + This enables support for the three on-board UARTs of the + Sharp LH7A40X series CPUs. Choose Y or M. + + config SERIAL_LH7A40X_CONSOLE + bool "Support for console on Sharp LH7A40X serial port" + depends on SERIAL_LH7A40X=y + select SERIAL_CORE_CONSOLE + help + Say Y here if you wish to use one of the serial ports as the + system console--the system console is the device which + receives all kernel messages and warnings and which allows + logins in single user mode. + + Even if you say Y here, the currently visible framebuffer console + (/dev/tty0) will still be used as the default system console, but + you can alter that using a kernel command line, for example + "console=ttyAM1". + + config SERIAL_CPM + tristate "CPM SCC/SMC serial port support" + depends on CPM2 || 8xx + select SERIAL_CORE + help + This driver supports the SCC and SMC serial ports on Motorola + embedded PowerPC that contain a CPM1 (8xx) or CPM2 (8xxx) + + config SERIAL_CPM_CONSOLE + bool "Support for console on CPM SCC/SMC serial port" + depends on SERIAL_CPM=y + select SERIAL_CORE_CONSOLE + help + Say Y here if you wish to use a SCC or SMC CPM UART as the system + console (the system console is the device which receives all kernel + messages and warnings and which allows logins in single user mode). + + Even if you say Y here, the currently visible framebuffer 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=ttyCPM0". (Try "man bootparam" or see the documentation of + your boot loader (lilo or loadlin) about how to pass options to the + kernel at boot time.) + + config SERIAL_SGI_L1_CONSOLE + bool "SGI Altix L1 serial console support" + depends on IA64_GENERIC || IA64_SGI_SN2 + select SERIAL_CORE + select SERIAL_CORE_CONSOLE + help + If you have an SGI Altix and you would like to use the system + controller serial port as your console (you want this!), + say Y. Otherwise, say N. + + config SERIAL_MPC52xx + tristate "Freescale MPC52xx/MPC512x family PSC serial support" + depends on PPC_MPC52xx || PPC_MPC512x + select SERIAL_CORE + help + This driver supports MPC52xx and MPC512x PSC serial ports. If you would + like to use them, you must answer Y or M to this option. Note that + for use as console, it must be included in kernel and not as a + module. + + config SERIAL_MPC52xx_CONSOLE + bool "Console on a Freescale MPC52xx/MPC512x family PSC serial port" + depends on SERIAL_MPC52xx=y + select SERIAL_CORE_CONSOLE + help + Select this options if you'd like to use one of the PSC serial port + of the Freescale MPC52xx family as a console. + + config SERIAL_MPC52xx_CONSOLE_BAUD + int "Freescale MPC52xx/MPC512x family PSC serial port baud" + depends on SERIAL_MPC52xx_CONSOLE=y + default "9600" + help + Select the MPC52xx console baud rate. + This value is only used if the bootloader doesn't pass in the + console baudrate + + config SERIAL_ICOM + tristate "IBM Multiport Serial Adapter" + depends on PCI && (PPC_ISERIES || PPC_PSERIES) + select SERIAL_CORE + select FW_LOADER + help + This driver is for a family of multiport serial adapters + including 2 port RVX, 2 port internal modem, 4 port internal + modem and a split 1 port RVX and 1 port internal modem. + + This driver can also be built as a module. If so, the module + will be called icom. + + config SERIAL_M32R_SIO + bool "M32R SIO I/F" + depends on M32R + default y + select SERIAL_CORE + help + Say Y here if you want to use the M32R serial controller. + + config SERIAL_M32R_SIO_CONSOLE + bool "use SIO console" + depends on SERIAL_M32R_SIO=y + select SERIAL_CORE_CONSOLE + help + Say Y here if you want to support a serial console. + + If you use an M3T-M32700UT or an OPSPUT platform, + please say also y for SERIAL_M32R_PLDSIO. + + config SERIAL_M32R_PLDSIO + bool "M32R SIO I/F on a PLD" + depends on SERIAL_M32R_SIO=y && (PLAT_OPSPUT || PLAT_USRV || PLAT_M32700UT) + default n + help + Say Y here if you want to use the M32R serial controller + on a PLD (Programmable Logic Device). + + If you use an M3T-M32700UT or an OPSPUT platform, + please say Y. + + config SERIAL_TXX9 + bool "TMPTX39XX/49XX SIO support" + depends on HAS_TXX9_SERIAL + select SERIAL_CORE + default y + + config HAS_TXX9_SERIAL + bool + + config SERIAL_TXX9_NR_UARTS + int "Maximum number of TMPTX39XX/49XX SIO ports" + depends on SERIAL_TXX9 + default "6" + + config SERIAL_TXX9_CONSOLE + bool "TMPTX39XX/49XX SIO Console support" + depends on SERIAL_TXX9=y + select SERIAL_CORE_CONSOLE + + config SERIAL_TXX9_STDSERIAL + bool "TX39XX/49XX SIO act as standard serial" + depends on !SERIAL_8250 && SERIAL_TXX9 + + config SERIAL_VR41XX + tristate "NEC VR4100 series Serial Interface Unit support" + depends on CPU_VR41XX + select SERIAL_CORE + help + If you have a NEC VR4100 series processor and you want to use + Serial Interface Unit(SIU) or Debug Serial Interface Unit(DSIU) + (not include VR4111/VR4121 DSIU), say Y. Otherwise, say N. + + config SERIAL_VR41XX_CONSOLE + bool "Enable NEC VR4100 series Serial Interface Unit console" + depends on SERIAL_VR41XX=y + select SERIAL_CORE_CONSOLE + help + If you have a NEC VR4100 series processor and you want to use + a console on a serial port, say Y. Otherwise, say N. + + config SERIAL_JSM + tristate "Digi International NEO PCI Support" + depends on PCI + select SERIAL_CORE + help + This is a driver for Digi International's Neo series + of cards which provide multiple serial ports. You would need + something like this to connect more than two modems to your Linux + box, for instance in order to become a dial-in server. This driver + supports PCI boards only. + + If you have a card like this, say Y here, otherwise say N. + + To compile this driver as a module, choose M here: the + module will be called jsm. + + config SERIAL_SGI_IOC4 + tristate "SGI IOC4 controller serial support" + depends on (IA64_GENERIC || IA64_SGI_SN2) && SGI_IOC4 + select SERIAL_CORE + help + If you have an SGI Altix with an IOC4 based Base IO card + and wish to use the serial ports on this card, say Y. + Otherwise, say N. + + config SERIAL_SGI_IOC3 + tristate "SGI Altix IOC3 serial support" + depends on (IA64_GENERIC || IA64_SGI_SN2) && SGI_IOC3 + select SERIAL_CORE + help + If you have an SGI Altix with an IOC3 serial card, + say Y or M. Otherwise, say N. + + config SERIAL_MSM + bool "MSM on-chip serial port support" + depends on ARM && ARCH_MSM + select SERIAL_CORE + + config SERIAL_MSM_CONSOLE + bool "MSM serial console support" + depends on SERIAL_MSM=y + select SERIAL_CORE_CONSOLE + + config SERIAL_VT8500 + bool "VIA VT8500 on-chip serial port support" + depends on ARM && ARCH_VT8500 + select SERIAL_CORE + + config SERIAL_VT8500_CONSOLE + bool "VIA VT8500 serial console support" + depends on SERIAL_VT8500=y + select SERIAL_CORE_CONSOLE + + config SERIAL_NETX + tristate "NetX serial port support" + depends on ARM && ARCH_NETX + select SERIAL_CORE + help + If you have a machine based on a Hilscher NetX SoC you + can enable its onboard serial port by enabling this option. + + To compile this driver as a module, choose M here: the + module will be called netx-serial. + + config SERIAL_NETX_CONSOLE + bool "Console on NetX serial port" + depends on SERIAL_NETX=y + select SERIAL_CORE_CONSOLE + help + If you have enabled the serial port on the Hilscher NetX SoC + you can make it the console by answering Y to this option. + + config SERIAL_OF_PLATFORM + tristate "Serial port on Open Firmware platform bus" + depends on OF + depends on SERIAL_8250 || SERIAL_OF_PLATFORM_NWPSERIAL + help + If you have a PowerPC based system that has serial ports + on a platform specific bus, you should enable this option. + Currently, only 8250 compatible ports are supported, but + others can easily be added. + + config SERIAL_OMAP + tristate "OMAP serial port support" + depends on ARCH_OMAP2 || ARCH_OMAP3 || ARCH_OMAP4 + select SERIAL_CORE + help + If you have a machine based on an Texas Instruments OMAP CPU you + can enable its onboard serial ports by enabling this option. + + By enabling this option you take advantage of dma feature available + with the omap-serial driver. DMA support can be enabled from platform + data. + + config SERIAL_OMAP_CONSOLE + bool "Console on OMAP serial port" + depends on SERIAL_OMAP + select SERIAL_CORE_CONSOLE + help + Select this option if you would like to use omap serial port as + 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=ttyOx". (Try "man bootparam" or see the documentation of + your boot loader about how to pass options to the kernel at + boot time.) + + config SERIAL_OF_PLATFORM_NWPSERIAL + tristate "NWP serial port driver" + depends on PPC_OF && PPC_DCR + select SERIAL_OF_PLATFORM + select SERIAL_CORE_CONSOLE + select SERIAL_CORE + help + This driver supports the cell network processor nwp serial + device. + + config SERIAL_OF_PLATFORM_NWPSERIAL_CONSOLE + bool "Console on NWP serial port" + depends on SERIAL_OF_PLATFORM_NWPSERIAL=y + select SERIAL_CORE_CONSOLE + help + Support for Console on the NWP serial ports. + + config SERIAL_QE + tristate "Freescale QUICC Engine serial port support" + depends on QUICC_ENGINE + select SERIAL_CORE + select FW_LOADER + default n + help + This driver supports the QE serial ports on Freescale embedded + PowerPC that contain a QUICC Engine. + + config SERIAL_SC26XX + tristate "SC2681/SC2692 serial port support" + depends on SNI_RM + select SERIAL_CORE + help + This is a driver for the onboard serial ports of + older RM400 machines. + + config SERIAL_SC26XX_CONSOLE + bool "Console on SC2681/SC2692 serial port" + depends on SERIAL_SC26XX + select SERIAL_CORE_CONSOLE + help + Support for Console on SC2681/SC2692 serial ports. + + config SERIAL_BFIN_SPORT + tristate "Blackfin SPORT emulate UART" + depends on BLACKFIN + select SERIAL_CORE + help + Enable SPORT emulate UART on Blackfin series. + + To compile this driver as a module, choose M here: the + module will be called bfin_sport_uart. + + config SERIAL_BFIN_SPORT_CONSOLE + bool "Console on Blackfin sport emulated uart" + depends on SERIAL_BFIN_SPORT=y + select SERIAL_CORE_CONSOLE + + config SERIAL_BFIN_SPORT0_UART + bool "Enable UART over SPORT0" + depends on SERIAL_BFIN_SPORT && !(BF542 || BF544) + help + Enable UART over SPORT0 + + config SERIAL_BFIN_SPORT0_UART_CTSRTS + bool "Enable UART over SPORT0 hardware flow control" + depends on SERIAL_BFIN_SPORT0_UART + help + Enable hardware flow control in the driver. + + config SERIAL_BFIN_SPORT1_UART + bool "Enable UART over SPORT1" + depends on SERIAL_BFIN_SPORT + help + Enable UART over SPORT1 + + config SERIAL_BFIN_SPORT1_UART_CTSRTS + bool "Enable UART over SPORT1 hardware flow control" + depends on SERIAL_BFIN_SPORT1_UART + help + Enable hardware flow control in the driver. + + config SERIAL_BFIN_SPORT2_UART + bool "Enable UART over SPORT2" + depends on SERIAL_BFIN_SPORT && (BF54x || BF538 || BF539) + help + Enable UART over SPORT2 + + config SERIAL_BFIN_SPORT2_UART_CTSRTS + bool "Enable UART over SPORT2 hardware flow control" + depends on SERIAL_BFIN_SPORT2_UART + help + Enable hardware flow control in the driver. + + config SERIAL_BFIN_SPORT3_UART + bool "Enable UART over SPORT3" + depends on SERIAL_BFIN_SPORT && (BF54x || BF538 || BF539) + help + Enable UART over SPORT3 + + config SERIAL_BFIN_SPORT3_UART_CTSRTS + bool "Enable UART over SPORT3 hardware flow control" + depends on SERIAL_BFIN_SPORT3_UART + help + Enable hardware flow control in the driver. + + config SERIAL_TIMBERDALE + tristate "Support for timberdale UART" + select SERIAL_CORE + ---help--- + Add support for UART controller on timberdale. + + config SERIAL_BCM63XX + tristate "bcm63xx serial port support" + select SERIAL_CORE + depends on BCM63XX + help + If you have a bcm63xx CPU, you can enable its onboard + serial port by enabling this options. + + To compile this driver as a module, choose M here: the + module will be called bcm963xx_uart. + + config SERIAL_BCM63XX_CONSOLE + bool "Console on bcm63xx serial port" + depends on SERIAL_BCM63XX=y + select SERIAL_CORE_CONSOLE + help + If you have enabled the serial port on the bcm63xx CPU + you can make it the console by answering Y to this option. + + config SERIAL_GRLIB_GAISLER_APBUART + tristate "GRLIB APBUART serial support" + depends on OF + select SERIAL_CORE + ---help--- + Add support for the GRLIB APBUART serial port. + + config SERIAL_GRLIB_GAISLER_APBUART_CONSOLE + bool "Console on GRLIB APBUART serial port" + depends on SERIAL_GRLIB_GAISLER_APBUART=y + select SERIAL_CORE_CONSOLE + help + Support for running a console on the GRLIB APBUART + + config SERIAL_ALTERA_JTAGUART + tristate "Altera JTAG UART support" + select SERIAL_CORE + help + This driver supports the Altera JTAG UART port. + + config SERIAL_ALTERA_JTAGUART_CONSOLE + bool "Altera JTAG UART console support" + depends on SERIAL_ALTERA_JTAGUART=y + select SERIAL_CORE_CONSOLE + help + Enable a Altera JTAG UART port to be the system console. + + config SERIAL_ALTERA_JTAGUART_CONSOLE_BYPASS + bool "Bypass output when no connection" + depends on SERIAL_ALTERA_JTAGUART_CONSOLE + select SERIAL_CORE_CONSOLE + help + Bypass console output and keep going even if there is no + JTAG terminal connection with the host. + + config SERIAL_ALTERA_UART + tristate "Altera UART support" + select SERIAL_CORE + help + This driver supports the Altera softcore UART port. + + config SERIAL_ALTERA_UART_MAXPORTS + int "Maximum number of Altera UART ports" + depends on SERIAL_ALTERA_UART + default 4 + help + This setting lets you define the maximum number of the Altera + UART ports. The usual default varies from board to board, and + this setting is a way of catering for that. + + config SERIAL_ALTERA_UART_BAUDRATE + int "Default baudrate for Altera UART ports" + depends on SERIAL_ALTERA_UART + default 115200 + help + This setting lets you define what the default baudrate is for the + Altera UART ports. The usual default varies from board to board, + and this setting is a way of catering for that. + + config SERIAL_ALTERA_UART_CONSOLE + bool "Altera UART console support" + depends on SERIAL_ALTERA_UART=y + select SERIAL_CORE_CONSOLE + help + Enable a Altera UART port to be the system console. + + config SERIAL_IFX6X60 + tristate "SPI protocol driver for Infineon 6x60 modem (EXPERIMENTAL)" + depends on GPIOLIB && SPI && EXPERIMENTAL + help + Support for the IFX6x60 modem devices on Intel MID platforms. + + config SERIAL_PCH_UART + tristate "Intel EG20T PCH UART" + depends on PCI && DMADEVICES + select SERIAL_CORE + select PCH_DMA + help + This driver is for PCH(Platform controller Hub) UART of Intel EG20T + which is an IOH(Input/Output Hub) for x86 embedded processor. + Enabling PCH_DMA, this PCH UART works as DMA mode. ++ ++config SERIAL_MXS_AUART ++ depends on ARCH_MXS ++ tristate "MXS AUART support" ++ select SERIAL_CORE ++ help ++ This driver supports the MXS Application UART (AUART) port. ++ ++config SERIAL_MXS_AUART_CONSOLE ++ bool "MXS AUART console support" ++ depends on SERIAL_MXS_AUART=y ++ select SERIAL_CORE_CONSOLE ++ help ++ Enable a MXS AUART port to be the system console. ++ + endmenu diff --cc drivers/tty/serial/Makefile index 00000000000,8ea92e9c73b..c8550719de5 mode 000000,100644..100644 --- a/drivers/tty/serial/Makefile +++ b/drivers/tty/serial/Makefile @@@ -1,0 -1,94 +1,95 @@@ + # + # Makefile for the kernel serial device drivers. + # + + obj-$(CONFIG_SERIAL_CORE) += serial_core.o + obj-$(CONFIG_SERIAL_21285) += 21285.o + + # These Sparc drivers have to appear before others such as 8250 + # which share ttySx minor node space. Otherwise console device + # names change and other unplesantries. + obj-$(CONFIG_SERIAL_SUNCORE) += suncore.o + obj-$(CONFIG_SERIAL_SUNHV) += sunhv.o + obj-$(CONFIG_SERIAL_SUNZILOG) += sunzilog.o + obj-$(CONFIG_SERIAL_SUNSU) += sunsu.o + obj-$(CONFIG_SERIAL_SUNSAB) += sunsab.o + + obj-$(CONFIG_SERIAL_8250) += 8250.o + obj-$(CONFIG_SERIAL_8250_PNP) += 8250_pnp.o + obj-$(CONFIG_SERIAL_8250_GSC) += 8250_gsc.o + obj-$(CONFIG_SERIAL_8250_PCI) += 8250_pci.o + obj-$(CONFIG_SERIAL_8250_HP300) += 8250_hp300.o + obj-$(CONFIG_SERIAL_8250_CS) += serial_cs.o + obj-$(CONFIG_SERIAL_8250_ACORN) += 8250_acorn.o + obj-$(CONFIG_SERIAL_8250_CONSOLE) += 8250_early.o + obj-$(CONFIG_SERIAL_8250_FOURPORT) += 8250_fourport.o + obj-$(CONFIG_SERIAL_8250_ACCENT) += 8250_accent.o + obj-$(CONFIG_SERIAL_8250_BOCA) += 8250_boca.o + obj-$(CONFIG_SERIAL_8250_EXAR_ST16C554) += 8250_exar_st16c554.o + obj-$(CONFIG_SERIAL_8250_HUB6) += 8250_hub6.o + obj-$(CONFIG_SERIAL_8250_MCA) += 8250_mca.o + obj-$(CONFIG_SERIAL_AMBA_PL010) += amba-pl010.o + obj-$(CONFIG_SERIAL_AMBA_PL011) += amba-pl011.o + obj-$(CONFIG_SERIAL_CLPS711X) += clps711x.o + obj-$(CONFIG_SERIAL_PXA) += pxa.o + obj-$(CONFIG_SERIAL_PNX8XXX) += pnx8xxx_uart.o + obj-$(CONFIG_SERIAL_SA1100) += sa1100.o + obj-$(CONFIG_SERIAL_BCM63XX) += bcm63xx_uart.o + obj-$(CONFIG_SERIAL_BFIN) += bfin_5xx.o + obj-$(CONFIG_SERIAL_BFIN_SPORT) += bfin_sport_uart.o + obj-$(CONFIG_SERIAL_SAMSUNG) += samsung.o + obj-$(CONFIG_SERIAL_S3C2400) += s3c2400.o + obj-$(CONFIG_SERIAL_S3C2410) += s3c2410.o + obj-$(CONFIG_SERIAL_S3C2412) += s3c2412.o + obj-$(CONFIG_SERIAL_S3C2440) += s3c2440.o + obj-$(CONFIG_SERIAL_S3C24A0) += s3c24a0.o + obj-$(CONFIG_SERIAL_S3C6400) += s3c6400.o + obj-$(CONFIG_SERIAL_S5PV210) += s5pv210.o + obj-$(CONFIG_SERIAL_MAX3100) += max3100.o + obj-$(CONFIG_SERIAL_MAX3107) += max3107.o + obj-$(CONFIG_SERIAL_MAX3107_AAVA) += max3107-aava.o + obj-$(CONFIG_SERIAL_IP22_ZILOG) += ip22zilog.o + obj-$(CONFIG_SERIAL_MUX) += mux.o + obj-$(CONFIG_SERIAL_68328) += 68328serial.o + obj-$(CONFIG_SERIAL_68360) += 68360serial.o + obj-$(CONFIG_SERIAL_MCF) += mcf.o + obj-$(CONFIG_SERIAL_PMACZILOG) += pmac_zilog.o + obj-$(CONFIG_SERIAL_LH7A40X) += serial_lh7a40x.o + obj-$(CONFIG_SERIAL_DZ) += dz.o + obj-$(CONFIG_SERIAL_ZS) += zs.o + obj-$(CONFIG_SERIAL_SH_SCI) += sh-sci.o + obj-$(CONFIG_SERIAL_SGI_L1_CONSOLE) += sn_console.o + obj-$(CONFIG_SERIAL_CPM) += cpm_uart/ + obj-$(CONFIG_SERIAL_IMX) += imx.o + obj-$(CONFIG_SERIAL_MPC52xx) += mpc52xx_uart.o + obj-$(CONFIG_SERIAL_ICOM) += icom.o + obj-$(CONFIG_SERIAL_M32R_SIO) += m32r_sio.o + obj-$(CONFIG_SERIAL_MPSC) += mpsc.o + obj-$(CONFIG_SERIAL_SB1250_DUART) += sb1250-duart.o + obj-$(CONFIG_ETRAX_SERIAL) += crisv10.o + obj-$(CONFIG_SERIAL_SC26XX) += sc26xx.o + obj-$(CONFIG_SERIAL_JSM) += jsm/ + obj-$(CONFIG_SERIAL_TXX9) += serial_txx9.o + obj-$(CONFIG_SERIAL_VR41XX) += vr41xx_siu.o + obj-$(CONFIG_SERIAL_SGI_IOC4) += ioc4_serial.o + obj-$(CONFIG_SERIAL_SGI_IOC3) += ioc3_serial.o + obj-$(CONFIG_SERIAL_ATMEL) += atmel_serial.o + obj-$(CONFIG_SERIAL_UARTLITE) += uartlite.o + obj-$(CONFIG_SERIAL_MSM) += msm_serial.o + obj-$(CONFIG_SERIAL_NETX) += netx-serial.o + obj-$(CONFIG_SERIAL_OF_PLATFORM) += of_serial.o + obj-$(CONFIG_SERIAL_OF_PLATFORM_NWPSERIAL) += nwpserial.o + obj-$(CONFIG_SERIAL_KS8695) += serial_ks8695.o + obj-$(CONFIG_SERIAL_OMAP) += omap-serial.o + obj-$(CONFIG_KGDB_SERIAL_CONSOLE) += kgdboc.o + obj-$(CONFIG_SERIAL_QE) += ucc_uart.o + obj-$(CONFIG_SERIAL_TIMBERDALE) += timbuart.o + obj-$(CONFIG_SERIAL_GRLIB_GAISLER_APBUART) += apbuart.o + obj-$(CONFIG_SERIAL_ALTERA_JTAGUART) += altera_jtaguart.o + obj-$(CONFIG_SERIAL_ALTERA_UART) += altera_uart.o + obj-$(CONFIG_SERIAL_VT8500) += vt8500_serial.o + obj-$(CONFIG_SERIAL_MRST_MAX3110) += mrst_max3110.o + obj-$(CONFIG_SERIAL_MFD_HSU) += mfd.o + obj-$(CONFIG_SERIAL_IFX6X60) += ifx6x60.o + obj-$(CONFIG_SERIAL_PCH_UART) += pch_uart.o ++obj-$(CONFIG_SERIAL_MXS_AUART) += mxs-auart.o diff --cc drivers/tty/serial/mxs-auart.c index 00000000000,00000000000..6d01ac96810 new file mode 100644 --- /dev/null +++ b/drivers/tty/serial/mxs-auart.c @@@ -1,0 -1,0 +1,799 @@@ ++/* ++ * Freescale STMP37XX/STMP378X Application UART driver ++ * ++ * Author: dmitry pervushin ++ * ++ * Copyright 2008-2010 Freescale Semiconductor, Inc. ++ * Copyright 2008 Embedded Alley Solutions, Inc All Rights Reserved. ++ * ++ * The code contained herein is licensed under the GNU General Public ++ * License. You may obtain a copy of the GNU General Public License ++ * Version 2 or later at the following locations: ++ * ++ * http://www.opensource.org/licenses/gpl-license.html ++ * http://www.gnu.org/copyleft/gpl.html ++ */ ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#include ++ ++#define MXS_AUART_PORTS 5 ++ ++#define AUART_CTRL0 0x00000000 ++#define AUART_CTRL0_SET 0x00000004 ++#define AUART_CTRL0_CLR 0x00000008 ++#define AUART_CTRL0_TOG 0x0000000c ++#define AUART_CTRL1 0x00000010 ++#define AUART_CTRL1_SET 0x00000014 ++#define AUART_CTRL1_CLR 0x00000018 ++#define AUART_CTRL1_TOG 0x0000001c ++#define AUART_CTRL2 0x00000020 ++#define AUART_CTRL2_SET 0x00000024 ++#define AUART_CTRL2_CLR 0x00000028 ++#define AUART_CTRL2_TOG 0x0000002c ++#define AUART_LINECTRL 0x00000030 ++#define AUART_LINECTRL_SET 0x00000034 ++#define AUART_LINECTRL_CLR 0x00000038 ++#define AUART_LINECTRL_TOG 0x0000003c ++#define AUART_LINECTRL2 0x00000040 ++#define AUART_LINECTRL2_SET 0x00000044 ++#define AUART_LINECTRL2_CLR 0x00000048 ++#define AUART_LINECTRL2_TOG 0x0000004c ++#define AUART_INTR 0x00000050 ++#define AUART_INTR_SET 0x00000054 ++#define AUART_INTR_CLR 0x00000058 ++#define AUART_INTR_TOG 0x0000005c ++#define AUART_DATA 0x00000060 ++#define AUART_STAT 0x00000070 ++#define AUART_DEBUG 0x00000080 ++#define AUART_VERSION 0x00000090 ++#define AUART_AUTOBAUD 0x000000a0 ++ ++#define AUART_CTRL0_SFTRST (1 << 31) ++#define AUART_CTRL0_CLKGATE (1 << 30) ++ ++#define AUART_CTRL2_CTSEN (1 << 15) ++#define AUART_CTRL2_RTS (1 << 11) ++#define AUART_CTRL2_RXE (1 << 9) ++#define AUART_CTRL2_TXE (1 << 8) ++#define AUART_CTRL2_UARTEN (1 << 0) ++ ++#define AUART_LINECTRL_BAUD_DIVINT_SHIFT 16 ++#define AUART_LINECTRL_BAUD_DIVINT_MASK 0xffff0000 ++#define AUART_LINECTRL_BAUD_DIVINT(v) (((v) & 0xffff) << 16) ++#define AUART_LINECTRL_BAUD_DIVFRAC_SHIFT 8 ++#define AUART_LINECTRL_BAUD_DIVFRAC_MASK 0x00003f00 ++#define AUART_LINECTRL_BAUD_DIVFRAC(v) (((v) & 0x3f) << 8) ++#define AUART_LINECTRL_WLEN_MASK 0x00000060 ++#define AUART_LINECTRL_WLEN(v) (((v) & 0x3) << 5) ++#define AUART_LINECTRL_FEN (1 << 4) ++#define AUART_LINECTRL_STP2 (1 << 3) ++#define AUART_LINECTRL_EPS (1 << 2) ++#define AUART_LINECTRL_PEN (1 << 1) ++#define AUART_LINECTRL_BRK (1 << 0) ++ ++#define AUART_INTR_RTIEN (1 << 22) ++#define AUART_INTR_TXIEN (1 << 21) ++#define AUART_INTR_RXIEN (1 << 20) ++#define AUART_INTR_CTSMIEN (1 << 17) ++#define AUART_INTR_RTIS (1 << 6) ++#define AUART_INTR_TXIS (1 << 5) ++#define AUART_INTR_RXIS (1 << 4) ++#define AUART_INTR_CTSMIS (1 << 1) ++ ++#define AUART_STAT_BUSY (1 << 29) ++#define AUART_STAT_CTS (1 << 28) ++#define AUART_STAT_TXFE (1 << 27) ++#define AUART_STAT_TXFF (1 << 25) ++#define AUART_STAT_RXFE (1 << 24) ++#define AUART_STAT_OERR (1 << 19) ++#define AUART_STAT_BERR (1 << 18) ++#define AUART_STAT_PERR (1 << 17) ++#define AUART_STAT_FERR (1 << 16) ++ ++static struct uart_driver auart_driver; ++ ++struct mxs_auart_port { ++ struct uart_port port; ++ ++ unsigned int flags; ++ unsigned int ctrl; ++ ++ unsigned int irq; ++ ++ struct clk *clk; ++ struct device *dev; ++}; ++ ++static void mxs_auart_stop_tx(struct uart_port *u); ++ ++#define to_auart_port(u) container_of(u, struct mxs_auart_port, port) ++ ++static inline void mxs_auart_tx_chars(struct mxs_auart_port *s) ++{ ++ struct circ_buf *xmit = &s->port.state->xmit; ++ ++ while (!(readl(s->port.membase + AUART_STAT) & ++ AUART_STAT_TXFF)) { ++ if (s->port.x_char) { ++ s->port.icount.tx++; ++ writel(s->port.x_char, ++ s->port.membase + AUART_DATA); ++ s->port.x_char = 0; ++ continue; ++ } ++ if (!uart_circ_empty(xmit) && !uart_tx_stopped(&s->port)) { ++ s->port.icount.tx++; ++ writel(xmit->buf[xmit->tail], ++ s->port.membase + AUART_DATA); ++ xmit->tail = (xmit->tail + 1) & (UART_XMIT_SIZE - 1); ++ if (uart_circ_chars_pending(xmit) < WAKEUP_CHARS) ++ uart_write_wakeup(&s->port); ++ } else ++ break; ++ } ++ if (uart_circ_empty(&(s->port.state->xmit))) ++ writel(AUART_INTR_TXIEN, ++ s->port.membase + AUART_INTR_CLR); ++ else ++ writel(AUART_INTR_TXIEN, ++ s->port.membase + AUART_INTR_SET); ++ ++ if (uart_tx_stopped(&s->port)) ++ mxs_auart_stop_tx(&s->port); ++} ++ ++static void mxs_auart_rx_char(struct mxs_auart_port *s) ++{ ++ int flag; ++ u32 stat; ++ u8 c; ++ ++ c = readl(s->port.membase + AUART_DATA); ++ stat = readl(s->port.membase + AUART_STAT); ++ ++ flag = TTY_NORMAL; ++ s->port.icount.rx++; ++ ++ if (stat & AUART_STAT_BERR) { ++ s->port.icount.brk++; ++ if (uart_handle_break(&s->port)) ++ goto out; ++ } else if (stat & AUART_STAT_PERR) { ++ s->port.icount.parity++; ++ } else if (stat & AUART_STAT_FERR) { ++ s->port.icount.frame++; ++ } ++ ++ /* ++ * Mask off conditions which should be ingored. ++ */ ++ stat &= s->port.read_status_mask; ++ ++ if (stat & AUART_STAT_BERR) { ++ flag = TTY_BREAK; ++ } else if (stat & AUART_STAT_PERR) ++ flag = TTY_PARITY; ++ else if (stat & AUART_STAT_FERR) ++ flag = TTY_FRAME; ++ ++ if (stat & AUART_STAT_OERR) ++ s->port.icount.overrun++; ++ ++ if (uart_handle_sysrq_char(&s->port, c)) ++ goto out; ++ ++ uart_insert_char(&s->port, stat, AUART_STAT_OERR, c, flag); ++out: ++ writel(stat, s->port.membase + AUART_STAT); ++} ++ ++static void mxs_auart_rx_chars(struct mxs_auart_port *s) ++{ ++ struct tty_struct *tty = s->port.state->port.tty; ++ u32 stat = 0; ++ ++ for (;;) { ++ stat = readl(s->port.membase + AUART_STAT); ++ if (stat & AUART_STAT_RXFE) ++ break; ++ mxs_auart_rx_char(s); ++ } ++ ++ writel(stat, s->port.membase + AUART_STAT); ++ tty_flip_buffer_push(tty); ++} ++ ++static int mxs_auart_request_port(struct uart_port *u) ++{ ++ return 0; ++} ++ ++static int mxs_auart_verify_port(struct uart_port *u, ++ struct serial_struct *ser) ++{ ++ if (u->type != PORT_UNKNOWN && u->type != PORT_IMX) ++ return -EINVAL; ++ return 0; ++} ++ ++static void mxs_auart_config_port(struct uart_port *u, int flags) ++{ ++} ++ ++static const char *mxs_auart_type(struct uart_port *u) ++{ ++ struct mxs_auart_port *s = to_auart_port(u); ++ ++ return dev_name(s->dev); ++} ++ ++static void mxs_auart_release_port(struct uart_port *u) ++{ ++} ++ ++static void mxs_auart_set_mctrl(struct uart_port *u, unsigned mctrl) ++{ ++ struct mxs_auart_port *s = to_auart_port(u); ++ ++ u32 ctrl = readl(u->membase + AUART_CTRL2); ++ ++ ctrl &= ~AUART_CTRL2_RTS; ++ if (mctrl & TIOCM_RTS) ++ ctrl |= AUART_CTRL2_RTS; ++ s->ctrl = mctrl; ++ writel(ctrl, u->membase + AUART_CTRL2); ++} ++ ++static u32 mxs_auart_get_mctrl(struct uart_port *u) ++{ ++ struct mxs_auart_port *s = to_auart_port(u); ++ u32 stat = readl(u->membase + AUART_STAT); ++ int ctrl2 = readl(u->membase + AUART_CTRL2); ++ u32 mctrl = s->ctrl; ++ ++ mctrl &= ~TIOCM_CTS; ++ if (stat & AUART_STAT_CTS) ++ mctrl |= TIOCM_CTS; ++ ++ if (ctrl2 & AUART_CTRL2_RTS) ++ mctrl |= TIOCM_RTS; ++ ++ return mctrl; ++} ++ ++static void mxs_auart_settermios(struct uart_port *u, ++ struct ktermios *termios, ++ struct ktermios *old) ++{ ++ u32 bm, ctrl, ctrl2, div; ++ unsigned int cflag, baud; ++ ++ cflag = termios->c_cflag; ++ ++ ctrl = AUART_LINECTRL_FEN; ++ ctrl2 = readl(u->membase + AUART_CTRL2); ++ ++ /* byte size */ ++ switch (cflag & CSIZE) { ++ case CS5: ++ bm = 0; ++ break; ++ case CS6: ++ bm = 1; ++ break; ++ case CS7: ++ bm = 2; ++ break; ++ case CS8: ++ bm = 3; ++ break; ++ default: ++ return; ++ } ++ ++ ctrl |= AUART_LINECTRL_WLEN(bm); ++ ++ /* parity */ ++ if (cflag & PARENB) { ++ ctrl |= AUART_LINECTRL_PEN; ++ if ((cflag & PARODD) == 0) ++ ctrl |= AUART_LINECTRL_EPS; ++ } ++ ++ u->read_status_mask = 0; ++ ++ if (termios->c_iflag & INPCK) ++ u->read_status_mask |= AUART_STAT_PERR; ++ if (termios->c_iflag & (BRKINT | PARMRK)) ++ u->read_status_mask |= AUART_STAT_BERR; ++ ++ /* ++ * Characters to ignore ++ */ ++ u->ignore_status_mask = 0; ++ if (termios->c_iflag & IGNPAR) ++ u->ignore_status_mask |= AUART_STAT_PERR; ++ if (termios->c_iflag & IGNBRK) { ++ u->ignore_status_mask |= AUART_STAT_BERR; ++ /* ++ * If we're ignoring parity and break indicators, ++ * ignore overruns too (for real raw support). ++ */ ++ if (termios->c_iflag & IGNPAR) ++ u->ignore_status_mask |= AUART_STAT_OERR; ++ } ++ ++ /* ++ * ignore all characters if CREAD is not set ++ */ ++ if (cflag & CREAD) ++ ctrl2 |= AUART_CTRL2_RXE; ++ else ++ ctrl2 &= ~AUART_CTRL2_RXE; ++ ++ /* figure out the stop bits requested */ ++ if (cflag & CSTOPB) ++ ctrl |= AUART_LINECTRL_STP2; ++ ++ /* figure out the hardware flow control settings */ ++ if (cflag & CRTSCTS) ++ ctrl2 |= AUART_CTRL2_CTSEN; ++ else ++ ctrl2 &= ~AUART_CTRL2_CTSEN; ++ ++ /* set baud rate */ ++ baud = uart_get_baud_rate(u, termios, old, 0, u->uartclk); ++ div = u->uartclk * 32 / baud; ++ ctrl |= AUART_LINECTRL_BAUD_DIVFRAC(div & 0x3F); ++ ctrl |= AUART_LINECTRL_BAUD_DIVINT(div >> 6); ++ ++ writel(ctrl, u->membase + AUART_LINECTRL); ++ writel(ctrl2, u->membase + AUART_CTRL2); ++} ++ ++static irqreturn_t mxs_auart_irq_handle(int irq, void *context) ++{ ++ u32 istatus, istat; ++ struct mxs_auart_port *s = context; ++ u32 stat = readl(s->port.membase + AUART_STAT); ++ ++ istatus = istat = readl(s->port.membase + AUART_INTR); ++ ++ if (istat & AUART_INTR_CTSMIS) { ++ uart_handle_cts_change(&s->port, stat & AUART_STAT_CTS); ++ writel(AUART_INTR_CTSMIS, ++ s->port.membase + AUART_INTR_CLR); ++ istat &= ~AUART_INTR_CTSMIS; ++ } ++ ++ if (istat & (AUART_INTR_RTIS | AUART_INTR_RXIS)) { ++ mxs_auart_rx_chars(s); ++ istat &= ~(AUART_INTR_RTIS | AUART_INTR_RXIS); ++ } ++ ++ if (istat & AUART_INTR_TXIS) { ++ mxs_auart_tx_chars(s); ++ istat &= ~AUART_INTR_TXIS; ++ } ++ ++ writel(istatus & (AUART_INTR_RTIS ++ | AUART_INTR_TXIS ++ | AUART_INTR_RXIS ++ | AUART_INTR_CTSMIS), ++ s->port.membase + AUART_INTR_CLR); ++ ++ return IRQ_HANDLED; ++} ++ ++static void mxs_auart_reset(struct uart_port *u) ++{ ++ int i; ++ unsigned int reg; ++ ++ writel(AUART_CTRL0_SFTRST, u->membase + AUART_CTRL0_CLR); ++ ++ for (i = 0; i < 10000; i++) { ++ reg = readl(u->membase + AUART_CTRL0); ++ if (!(reg & AUART_CTRL0_SFTRST)) ++ break; ++ udelay(3); ++ } ++ writel(AUART_CTRL0_CLKGATE, u->membase + AUART_CTRL0_CLR); ++} ++ ++static int mxs_auart_startup(struct uart_port *u) ++{ ++ struct mxs_auart_port *s = to_auart_port(u); ++ ++ clk_enable(s->clk); ++ ++ writel(AUART_CTRL0_CLKGATE, u->membase + AUART_CTRL0_CLR); ++ ++ writel(AUART_CTRL2_UARTEN, u->membase + AUART_CTRL2_SET); ++ ++ writel(AUART_INTR_RXIEN | AUART_INTR_RTIEN | AUART_INTR_CTSMIEN, ++ u->membase + AUART_INTR); ++ ++ /* ++ * Enable fifo so all four bytes of a DMA word are written to ++ * output (otherwise, only the LSB is written, ie. 1 in 4 bytes) ++ */ ++ writel(AUART_LINECTRL_FEN, u->membase + AUART_LINECTRL_SET); ++ ++ return 0; ++} ++ ++static void mxs_auart_shutdown(struct uart_port *u) ++{ ++ struct mxs_auart_port *s = to_auart_port(u); ++ ++ writel(AUART_CTRL2_UARTEN, u->membase + AUART_CTRL2_CLR); ++ ++ writel(AUART_CTRL0_CLKGATE, u->membase + AUART_CTRL0_SET); ++ ++ writel(AUART_INTR_RXIEN | AUART_INTR_RTIEN | AUART_INTR_CTSMIEN, ++ u->membase + AUART_INTR_CLR); ++ ++ clk_disable(s->clk); ++} ++ ++static unsigned int mxs_auart_tx_empty(struct uart_port *u) ++{ ++ if (readl(u->membase + AUART_STAT) & AUART_STAT_TXFE) ++ return TIOCSER_TEMT; ++ else ++ return 0; ++} ++ ++static void mxs_auart_start_tx(struct uart_port *u) ++{ ++ struct mxs_auart_port *s = to_auart_port(u); ++ ++ /* enable transmitter */ ++ writel(AUART_CTRL2_TXE, u->membase + AUART_CTRL2_SET); ++ ++ mxs_auart_tx_chars(s); ++} ++ ++static void mxs_auart_stop_tx(struct uart_port *u) ++{ ++ writel(AUART_CTRL2_TXE, u->membase + AUART_CTRL2_CLR); ++} ++ ++static void mxs_auart_stop_rx(struct uart_port *u) ++{ ++ writel(AUART_CTRL2_RXE, u->membase + AUART_CTRL2_CLR); ++} ++ ++static void mxs_auart_break_ctl(struct uart_port *u, int ctl) ++{ ++ if (ctl) ++ writel(AUART_LINECTRL_BRK, ++ u->membase + AUART_LINECTRL_SET); ++ else ++ writel(AUART_LINECTRL_BRK, ++ u->membase + AUART_LINECTRL_CLR); ++} ++ ++static void mxs_auart_enable_ms(struct uart_port *port) ++{ ++ /* just empty */ ++} ++ ++static struct uart_ops mxs_auart_ops = { ++ .tx_empty = mxs_auart_tx_empty, ++ .start_tx = mxs_auart_start_tx, ++ .stop_tx = mxs_auart_stop_tx, ++ .stop_rx = mxs_auart_stop_rx, ++ .enable_ms = mxs_auart_enable_ms, ++ .break_ctl = mxs_auart_break_ctl, ++ .set_mctrl = mxs_auart_set_mctrl, ++ .get_mctrl = mxs_auart_get_mctrl, ++ .startup = mxs_auart_startup, ++ .shutdown = mxs_auart_shutdown, ++ .set_termios = mxs_auart_settermios, ++ .type = mxs_auart_type, ++ .release_port = mxs_auart_release_port, ++ .request_port = mxs_auart_request_port, ++ .config_port = mxs_auart_config_port, ++ .verify_port = mxs_auart_verify_port, ++}; ++ ++static struct mxs_auart_port *auart_port[MXS_AUART_PORTS]; ++ ++#ifdef CONFIG_SERIAL_MXS_AUART_CONSOLE ++static void mxs_auart_console_putchar(struct uart_port *port, int ch) ++{ ++ unsigned int to = 1000; ++ ++ while (readl(port->membase + AUART_STAT) & AUART_STAT_TXFF) { ++ if (!to--) ++ break; ++ udelay(1); ++ } ++ ++ writel(ch, port->membase + AUART_DATA); ++} ++ ++static void ++auart_console_write(struct console *co, const char *str, unsigned int count) ++{ ++ struct mxs_auart_port *s; ++ struct uart_port *port; ++ unsigned int old_ctrl0, old_ctrl2; ++ unsigned int to = 1000; ++ ++ if (co->index > MXS_AUART_PORTS || co->index < 0) ++ return; ++ ++ s = auart_port[co->index]; ++ port = &s->port; ++ ++ clk_enable(s->clk); ++ ++ /* First save the CR then disable the interrupts */ ++ old_ctrl2 = readl(port->membase + AUART_CTRL2); ++ old_ctrl0 = readl(port->membase + AUART_CTRL0); ++ ++ writel(AUART_CTRL0_CLKGATE, ++ port->membase + AUART_CTRL0_CLR); ++ writel(AUART_CTRL2_UARTEN | AUART_CTRL2_TXE, ++ port->membase + AUART_CTRL2_SET); ++ ++ uart_console_write(port, str, count, mxs_auart_console_putchar); ++ ++ /* ++ * Finally, wait for transmitter to become empty ++ * and restore the TCR ++ */ ++ while (readl(port->membase + AUART_STAT) & AUART_STAT_BUSY) { ++ if (!to--) ++ break; ++ udelay(1); ++ } ++ ++ writel(old_ctrl0, port->membase + AUART_CTRL0); ++ writel(old_ctrl2, port->membase + AUART_CTRL2); ++ ++ clk_disable(s->clk); ++} ++ ++static void __init ++auart_console_get_options(struct uart_port *port, int *baud, ++ int *parity, int *bits) ++{ ++ unsigned int lcr_h, quot; ++ ++ if (!(readl(port->membase + AUART_CTRL2) & AUART_CTRL2_UARTEN)) ++ return; ++ ++ lcr_h = readl(port->membase + AUART_LINECTRL); ++ ++ *parity = 'n'; ++ if (lcr_h & AUART_LINECTRL_PEN) { ++ if (lcr_h & AUART_LINECTRL_EPS) ++ *parity = 'e'; ++ else ++ *parity = 'o'; ++ } ++ ++ if ((lcr_h & AUART_LINECTRL_WLEN_MASK) == AUART_LINECTRL_WLEN(2)) ++ *bits = 7; ++ else ++ *bits = 8; ++ ++ quot = ((readl(port->membase + AUART_LINECTRL) ++ & AUART_LINECTRL_BAUD_DIVINT_MASK)) ++ >> (AUART_LINECTRL_BAUD_DIVINT_SHIFT - 6); ++ quot |= ((readl(port->membase + AUART_LINECTRL) ++ & AUART_LINECTRL_BAUD_DIVFRAC_MASK)) ++ >> AUART_LINECTRL_BAUD_DIVFRAC_SHIFT; ++ if (quot == 0) ++ quot = 1; ++ ++ *baud = (port->uartclk << 2) / quot; ++} ++ ++static int __init ++auart_console_setup(struct console *co, char *options) ++{ ++ struct mxs_auart_port *s; ++ int baud = 9600; ++ int bits = 8; ++ int parity = 'n'; ++ int flow = 'n'; ++ int ret; ++ ++ /* ++ * Check whether an invalid uart number has been specified, and ++ * if so, search for the first available port that does have ++ * console support. ++ */ ++ if (co->index == -1 || co->index >= ARRAY_SIZE(auart_port)) ++ co->index = 0; ++ s = auart_port[co->index]; ++ if (!s) ++ return -ENODEV; ++ ++ clk_enable(s->clk); ++ ++ if (options) ++ uart_parse_options(options, &baud, &parity, &bits, &flow); ++ else ++ auart_console_get_options(&s->port, &baud, &parity, &bits); ++ ++ ret = uart_set_options(&s->port, co, baud, parity, bits, flow); ++ ++ clk_disable(s->clk); ++ ++ return ret; ++} ++ ++static struct console auart_console = { ++ .name = "ttyAPP", ++ .write = auart_console_write, ++ .device = uart_console_device, ++ .setup = auart_console_setup, ++ .flags = CON_PRINTBUFFER, ++ .index = -1, ++ .data = &auart_driver, ++}; ++#endif ++ ++static struct uart_driver auart_driver = { ++ .owner = THIS_MODULE, ++ .driver_name = "ttyAPP", ++ .dev_name = "ttyAPP", ++ .major = 0, ++ .minor = 0, ++ .nr = MXS_AUART_PORTS, ++#ifdef CONFIG_SERIAL_MXS_AUART_CONSOLE ++ .cons = &auart_console, ++#endif ++}; ++ ++static int __devinit mxs_auart_probe(struct platform_device *pdev) ++{ ++ struct mxs_auart_port *s; ++ u32 version; ++ int ret = 0; ++ struct resource *r; ++ ++ s = kzalloc(sizeof(struct mxs_auart_port), GFP_KERNEL); ++ if (!s) { ++ ret = -ENOMEM; ++ goto out; ++ } ++ ++ s->clk = clk_get(&pdev->dev, NULL); ++ if (IS_ERR(s->clk)) { ++ ret = PTR_ERR(s->clk); ++ goto out_free; ++ } ++ ++ r = platform_get_resource(pdev, IORESOURCE_MEM, 0); ++ if (!r) { ++ ret = -ENXIO; ++ goto out_free_clk; ++ } ++ ++ s->port.mapbase = r->start; ++ s->port.membase = ioremap(r->start, resource_size(r)); ++ s->port.ops = &mxs_auart_ops; ++ s->port.iotype = UPIO_MEM; ++ s->port.line = pdev->id < 0 ? 0 : pdev->id; ++ s->port.fifosize = 16; ++ s->port.uartclk = clk_get_rate(s->clk); ++ s->port.type = PORT_IMX; ++ s->port.dev = s->dev = get_device(&pdev->dev); ++ ++ s->flags = 0; ++ s->ctrl = 0; ++ ++ s->irq = platform_get_irq(pdev, 0); ++ s->port.irq = s->irq; ++ ret = request_irq(s->irq, mxs_auart_irq_handle, 0, dev_name(&pdev->dev), s); ++ if (ret) ++ goto out_free_clk; ++ ++ platform_set_drvdata(pdev, s); ++ ++ auart_port[pdev->id] = s; ++ ++ mxs_auart_reset(&s->port); ++ ++ ret = uart_add_one_port(&auart_driver, &s->port); ++ if (ret) ++ goto out_free_irq; ++ ++ version = readl(s->port.membase + AUART_VERSION); ++ dev_info(&pdev->dev, "Found APPUART %d.%d.%d\n", ++ (version >> 24) & 0xff, ++ (version >> 16) & 0xff, version & 0xffff); ++ ++ return 0; ++ ++out_free_irq: ++ auart_port[pdev->id] = NULL; ++ free_irq(s->irq, s); ++out_free_clk: ++ clk_put(s->clk); ++out_free: ++ kfree(s); ++out: ++ return ret; ++} ++ ++static int __devexit mxs_auart_remove(struct platform_device *pdev) ++{ ++ struct mxs_auart_port *s = platform_get_drvdata(pdev); ++ ++ uart_remove_one_port(&auart_driver, &s->port); ++ ++ auart_port[pdev->id] = NULL; ++ ++ clk_put(s->clk); ++ free_irq(s->irq, s); ++ kfree(s); ++ ++ return 0; ++} ++ ++static struct platform_driver mxs_auart_driver = { ++ .probe = mxs_auart_probe, ++ .remove = __devexit_p(mxs_auart_remove), ++ .driver = { ++ .name = "mxs-auart", ++ .owner = THIS_MODULE, ++ }, ++}; ++ ++static int __init mxs_auart_init(void) ++{ ++ int r; ++ ++ r = uart_register_driver(&auart_driver); ++ if (r) ++ goto out; ++ ++ r = platform_driver_register(&mxs_auart_driver); ++ if (r) ++ goto out_err; ++ ++ return 0; ++out_err: ++ uart_unregister_driver(&auart_driver); ++out: ++ return r; ++} ++ ++static void __exit mxs_auart_exit(void) ++{ ++ platform_driver_unregister(&mxs_auart_driver); ++ uart_unregister_driver(&auart_driver); ++} ++ ++module_init(mxs_auart_init); ++module_exit(mxs_auart_exit); ++MODULE_LICENSE("GPL"); ++MODULE_DESCRIPTION("Freescale MXS application uart driver");