--- /dev/null
+ #
+ # 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
--- /dev/null
--- /dev/null
++/*
++ * 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");