Merge commit 'v2.6.38-rc4' into imx-for-2.6.39
authorSascha Hauer <s.hauer@pengutronix.de>
Fri, 11 Feb 2011 07:32:18 +0000 (08:32 +0100)
committerSascha Hauer <s.hauer@pengutronix.de>
Fri, 11 Feb 2011 07:33:14 +0000 (08:33 +0100)
Conflicts:
arch/arm/mach-mxs/clock-mx28.c

Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
1  2 
arch/arm/mach-imx/mach-mx25_3ds.c
arch/arm/mach-mxs/clock-mx28.c
arch/arm/mach-mxs/gpio.c
arch/arm/plat-mxc/include/mach/uncompress.h
drivers/tty/serial/Kconfig
drivers/tty/serial/Makefile
drivers/tty/serial/mxs-auart.c

Simple merge
index c9d7951e8bfb39c44f33092dc2e1bc5d9a8bd374,fd1c4c54b8e510d76ddbb0b157fc1a9cb5655ac8..febd787f054f7661c2ead686e6bc80733a3e81a8
@@@ -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("fec.0", 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("rtc", NULL, rtc_clk)
        _REGISTER_CLOCK("pll2", NULL, pll2_clk)
        _REGISTER_CLOCK(NULL, "hclk", hbus_clk)
Simple merge
index 0000000000000000000000000000000000000000,2b8334601c8b586b957168906f7eb490c1ee8f57..5c4b3475621fb34eb2b4eb383032bc3df8868d02
mode 000000,100644..100644
--- /dev/null
@@@ -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 <http://www.tldp.org/docs.html#howto>), 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 <http://www.tldp.org/docs.html#howto>
+         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 <file:Documentation/arm/SA1100/serial_UART> 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
index 0000000000000000000000000000000000000000,8ea92e9c73b046cb66cb43ee3d6daa9ddd3049ab..c8550719de5ac26f27635241e1046a6ae84fbb98
mode 000000,100644..100644
--- /dev/null
@@@ -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
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..6d01ac9681032201c41f435176a4357d938a1c65
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,799 @@@
++/*
++ * Freescale STMP37XX/STMP378X Application UART driver
++ *
++ * Author: dmitry pervushin <dimka@embeddedalley.com>
++ *
++ * 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 <linux/kernel.h>
++#include <linux/device.h>
++#include <linux/errno.h>
++#include <linux/init.h>
++#include <linux/console.h>
++#include <linux/interrupt.h>
++#include <linux/module.h>
++#include <linux/slab.h>
++#include <linux/wait.h>
++#include <linux/tty.h>
++#include <linux/tty_driver.h>
++#include <linux/tty_flip.h>
++#include <linux/serial.h>
++#include <linux/serial_core.h>
++#include <linux/platform_device.h>
++#include <linux/device.h>
++#include <linux/clk.h>
++#include <linux/delay.h>
++#include <linux/io.h>
++
++#include <asm/cacheflush.h>
++
++#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");