# SPDX-License-Identifier: GPL-2.0
#
# Serial device configuration
#

if TTY

menu "Serial drivers"
	depends on HAS_IOMEM

config SERIAL_EARLYCON
	bool
	depends on SERIAL_CORE
	help
	  Support for early consoles with the earlycon parameter. This enables
	  the console before standard serial driver is probed. The console is
	  enabled when early_param is processed.

source "drivers/tty/serial/8250/Kconfig"

comment "Non-8250 serial port support"

config SERIAL_AMBA_PL010
	tristate "ARM AMBA PL010 serial port support"
	depends on ARM_AMBA
	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
	select SERIAL_EARLYCON
	---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_EARLYCON_ARM_SEMIHOST
	bool "Early console using ARM semihosting"
	depends on ARM64 || ARM
	select SERIAL_CORE
	select SERIAL_CORE_CONSOLE
	select SERIAL_EARLYCON
	help
	  Support for early debug console using ARM semihosting. This enables
	  the console before standard serial driver is probed. This is enabled
	  with "earlycon=smh" on the kernel command line. The console is
	  enabled when early_param is processed.

config SERIAL_EARLYCON_RISCV_SBI
	bool "Early console using RISC-V SBI"
	depends on RISCV
	select SERIAL_CORE
	select SERIAL_CORE_CONSOLE
	select SERIAL_EARLYCON
	help
	  Support for early debug console using RISC-V SBI. This enables
	  the console before standard serial driver is probed. This is enabled
	  with "earlycon=sbi" on the kernel command line. The console is
	  enabled when early_param is processed.

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 on-chip serial port support"
	depends on ARCH_AT91 || COMPILE_TEST
	select SERIAL_CORE
	select SERIAL_MCTRL_GPIO if GPIOLIB
	select MFD_AT91_USART
	help
	  This enables the driver for the on-chip UARTs of the Atmel
	  AT91 processors.

config SERIAL_ATMEL_CONSOLE
	bool "Support for console on AT91 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 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 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 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 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_KGDB_NMI
	bool "Serial console over KGDB NMI debugger port"
	depends on KGDB_SERIAL_CONSOLE
	help
	  This special driver allows you to temporary use NMI debugger port
	  as a normal console (assuming that the port is attached to KGDB).

	  Unlike KDB's disable_nmi command, with this driver you are always
	  able to go back to the debugger using KGDB escape sequence ($3#33).
	  This is because this console driver processes the input in NMI
	  context, and thus is able to intercept the magic sequence.

	  Note that since the console interprets input and uses polling
	  communication methods, for things like PPP you still must fully
	  detach debugger port from the KGDB NMI (i.e. disable_nmi), and
	  use raw console.

	  If unsure, say N.

config SERIAL_MESON
	tristate "Meson serial port support"
	depends on ARCH_MESON
	select SERIAL_CORE
	help
	  This enables the driver for the on-chip UARTs of the Amlogic
	  MesonX processors.

config SERIAL_MESON_CONSOLE
	bool "Support for console on meson"
	depends on SERIAL_MESON=y
	select SERIAL_CORE_CONSOLE
	select SERIAL_EARLYCON
	help
	  Say Y here if you wish to use a Amlogic MesonX 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) as /dev/ttyAMLx.

config SERIAL_CLPS711X
	tristate "CLPS711X serial port support"
	depends on ARCH_CLPS711X || COMPILE_TEST
	select SERIAL_CORE
	select SERIAL_MCTRL_GPIO if GPIOLIB
	help
	  This enables the driver for the on-chip UARTs of the Cirrus
	  Logic EP711x/EP721x/EP731x processors.

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".

config SERIAL_SAMSUNG
	tristate "Samsung SoC serial support"
	depends on PLAT_SAMSUNG || ARCH_EXYNOS
	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 SERIAL_SAMSUNG
	default y if !(CPU_S3C2410 || CPU_S3C2412 || CPU_S3C2440 || CPU_S3C2442)
	help
	  Internal node for the common case of 4 Samsung compatible UARTs

config SERIAL_SAMSUNG_UARTS
	int
	depends on SERIAL_SAMSUNG
	default 4 if SERIAL_SAMSUNG_UARTS_4 || CPU_S3C2416
	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
	select SERIAL_EARLYCON
	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_SIRFSOC
        tristate "SiRF SoC Platform Serial port support"
        depends on ARCH_SIRF
        select SERIAL_CORE
        help
          Support for the on-chip UART on the CSR SiRFprimaII series,
          providing /dev/ttySiRF0, 1 and 2 (note, some machines may not
          provide all of these ports, depending on how the serial port
          pins are configured).

config SERIAL_SIRFSOC_CONSOLE
        bool "Support for console on SiRF SoC serial port"
        depends on SERIAL_SIRFSOC=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=ttySiRFx". (Try "man bootparam" or see the documentation of
          your boot loader about how to pass options to the kernel at
          boot time.)

config SERIAL_TEGRA
	tristate "NVIDIA Tegra20/30 SoC serial controller"
	depends on ARCH_TEGRA && TEGRA20_APB_DMA
	select SERIAL_CORE
	help
	  Support for the on-chip UARTs on the NVIDIA Tegra series SOCs
	  providing /dev/ttyTHS0, 1, 2, 3 and 4 (note, some machines may not
	  provide all of these ports, depending on how the serial port
	  are enabled). This driver uses the APB DMA to achieve higher baudrate
	  and better performance.

config SERIAL_TEGRA_TCU
	tristate "NVIDIA Tegra Combined UART"
	depends on ARCH_TEGRA && TEGRA_HSP_MBOX
	select SERIAL_CORE
	help
	  Support for the mailbox-based TCU (Tegra Combined UART) serial port.
	  TCU is a virtual serial port that allows multiplexing multiple data
	  streams into a single hardware serial port.

config SERIAL_TEGRA_TCU_CONSOLE
	bool "Support for console on a Tegra TCU serial port"
	depends on SERIAL_TEGRA_TCU=y
	select SERIAL_CORE_CONSOLE
	default y
	---help---
	  If you say Y here, it will be possible to use a the Tegra TCU 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_MAX3100
	tristate "MAX3100 support"
	depends on SPI
	select SERIAL_CORE
	help
	  MAX3100 chip support

config SERIAL_MAX310X
	tristate "MAX310X support"
	depends on SPI_MASTER
	select SERIAL_CORE
	select REGMAP_SPI if SPI_MASTER
	select REGMAP_I2C if I2C
	help
	  This selects support for an advanced UART from Maxim (Dallas).
	  Supported ICs are MAX3107, MAX3108, MAX3109, MAX14830.
	  Each IC contains 128 words each of receive and transmit FIFO
	  that can be controlled through I2C or high-speed SPI.

	  Say Y here if you want to support this ICs.

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 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_PXA
	bool "PXA serial port support (DEPRECATED)"
	depends on ARCH_PXA || ARCH_MMP
	select SERIAL_CORE
	select SERIAL_8250_PXA if SERIAL_8250=y
	select SERIAL_PXA_NON8250 if !SERIAL_8250=y
	help
	  If you have a machine based on an Intel XScale PXA2xx CPU you
	  can enable its onboard serial ports by enabling this option.

	  Unless you have a specific need, you should use SERIAL_8250_PXA
	  instead of this.

config SERIAL_PXA_NON8250
	bool
	depends on !SERIAL_8250

config SERIAL_PXA_CONSOLE
	bool "Console on PXA serial port (DEPRECATED)"
	depends on SERIAL_PXA
	select SERIAL_CORE_CONSOLE
	select SERIAL_8250_CONSOLE if SERIAL_8250=y
	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.)

	  Unless you have a specific need, you should use SERIAL_8250_PXA
	  and SERIAL_8250_CONSOLE instead of this.

config SERIAL_SA1100
	bool "SA1100 serial port support"
	depends on ARCH_SA1100
	select SERIAL_CORE
	select SERIAL_MCTRL_GPIO if GPIOLIB
	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.rst> 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_IMX
	tristate "IMX serial port support"
	depends on ARCH_MXC || COMPILE_TEST
	select SERIAL_CORE
	select RATIONAL
	select SERIAL_MCTRL_GPIO if GPIOLIB
	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=y
	select SERIAL_CORE_CONSOLE
	select SERIAL_EARLYCON if OF
	help
	  If you have enabled the serial port on the Freescale 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=ttymxc0". (Try "man bootparam" or see the documentation of
	  your bootloader about how to pass options to the kernel at boot time.)

config SERIAL_UARTLITE
	tristate "Xilinx uartlite serial port support"
	depends on HAS_IOMEM
	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
	select SERIAL_EARLYCON
	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_UARTLITE_NR_UARTS
	int "Maximum number of uartlite serial ports"
	depends on SERIAL_UARTLITE
	range 1 256
	default 1
	help
	  Set this to the number of uartlites in your system, or the number
	  you think you might implement.

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
	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 completed 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 SUPERH || ARCH_RENESAS || H8300 || COMPILE_TEST
	select SERIAL_CORE
	select SERIAL_MCTRL_GPIO if GPIOLIB

config SERIAL_SH_SCI_NR_UARTS
	int "Maximum number of SCI(F) serial ports" if EXPERT
	range 1 64 if 64BIT
	range 1 32 if !64BIT
	depends on SERIAL_SH_SCI
	default "3" if H8300
	default "10" if SUPERH
	default "18" if ARCH_RENESAS
	default "2"

config SERIAL_SH_SCI_CONSOLE
	bool "Support for console on SuperH SCI(F)" if EXPERT
	depends on SERIAL_SH_SCI=y
	select SERIAL_CORE_CONSOLE
	default y

config SERIAL_SH_SCI_EARLYCON
	bool "Support for early console on SuperH SCI(F)" if EXPERT
	depends on SERIAL_SH_SCI=y
	select SERIAL_CORE_CONSOLE
	select SERIAL_EARLYCON
	default ARCH_RENESAS || H8300

config SERIAL_SH_SCI_DMA
	bool "DMA support" if EXPERT
	depends on SERIAL_SH_SCI && DMA_ENGINE
	default ARCH_RENESAS

config SERIAL_PNX8XXX
	bool "Enable PNX8XXX SoCs' UART Support"
	depends on SOC_PNX833X
	select SERIAL_CORE
	help
	  If you have a MIPS-based Philips SoC such as 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 PNX8330 and you want
	  to use serial console, say Y. Otherwise, say N.

config SERIAL_HS_LPC32XX
	tristate "LPC32XX high speed serial port support"
	depends on ARCH_LPC32XX || COMPILE_TEST
	depends on OF
	select SERIAL_CORE
	help
	  Support for the LPC32XX high speed serial ports (up to 900kbps).
	  Those are UARTs completely different from the Standard UARTs on the
	  LPC32XX SoC.
	  Choose M or Y here to build this driver.

config SERIAL_HS_LPC32XX_CONSOLE
	bool "Enable LPC32XX high speed UART serial console"
	depends on SERIAL_HS_LPC32XX=y
	select SERIAL_CORE_CONSOLE
	help
	  If you would like to be able to use one of the high speed serial
	  ports on the LPC32XX as the console, you can do so by answering
	  Y to this option.

config SERIAL_CORE
	tristate

config SERIAL_CORE_CONSOLE
	bool

config CONSOLE_POLL
	bool

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_PMACZILOG
	tristate "Mac or PowerMac z85c30 ESCC support"
	depends on (M68K && MAC) || 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_CPM
	tristate "CPM SCC/SMC serial port support"
	depends on CPM2 || CPM1
	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_PIC32
	tristate "Microchip PIC32 serial support"
	depends on MACH_PIC32
	select SERIAL_CORE
	help
	  If you have a PIC32, this driver supports the serial ports.

	  Say Y or M to use PIC32 serial ports, otherwise say N. Note that
	  to use a serial port as a console, this must be included in kernel and
	  not as a module.

config SERIAL_PIC32_CONSOLE
	bool "PIC32 serial console support"
	depends on SERIAL_PIC32
	select SERIAL_CORE_CONSOLE
	help
	  If you have a PIC32, this driver supports the putting a console on one
	  of the serial ports.

	  Say Y to use the PIC32 console, 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_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_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 and Classic PCI Support"
	depends on PCI
	select SERIAL_CORE
	help
	  This is a driver for Digi International's Neo and Classic 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_MSM
	tristate "MSM on-chip serial port support"
	depends on ARCH_QCOM
	select SERIAL_CORE

config SERIAL_MSM_CONSOLE
	bool "MSM serial console support"
	depends on SERIAL_MSM=y
	select SERIAL_CORE_CONSOLE
	select SERIAL_EARLYCON

config SERIAL_QCOM_GENI
	tristate "QCOM on-chip GENI based serial port support"
	depends on ARCH_QCOM || COMPILE_TEST
	depends on QCOM_GENI_SE
	select SERIAL_CORE

config SERIAL_QCOM_GENI_CONSOLE
	bool "QCOM GENI Serial Console support"
	depends on SERIAL_QCOM_GENI=y
	select SERIAL_CORE_CONSOLE
	select SERIAL_EARLYCON
	help
	  Serial console driver for Qualcomm Technologies Inc's GENI based
	  QUP hardware.

config SERIAL_VT8500
	bool "VIA VT8500 on-chip serial port support"
	depends on 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_OMAP
	tristate "OMAP serial port support"
	depends on ARCH_OMAP2PLUS
	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=y
	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_SIFIVE
	tristate "SiFive UART support"
	depends on OF
	select SERIAL_CORE
	help
	  Select this option if you are building a kernel for a device that
	  contains a SiFive UART IP block.  This type of UART is present on
	  SiFive FU540 SoCs, among others.

config SERIAL_SIFIVE_CONSOLE
	bool "Console on SiFive UART"
	depends on SERIAL_SIFIVE=y
	select SERIAL_CORE_CONSOLE
	select SERIAL_EARLYCON
	help
	  Select this option if you would like to use a SiFive UART as the
	  system 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=ttySIFx". (Try "man bootparam" or see the documentation of
	  your boot loader about how to pass options to the kernel at
	  boot time.)

config SERIAL_LANTIQ
	bool "Lantiq serial driver"
	depends on LANTIQ
	select SERIAL_CORE
	select SERIAL_CORE_CONSOLE
	select SERIAL_EARLYCON
	help
	  Support for console and UART on Lantiq SoCs.

config SERIAL_QE
	tristate "Freescale QUICC Engine serial port support"
	depends on QUICC_ENGINE
	select SERIAL_CORE
	select FW_LOADER
	help
	  This driver supports the QE serial ports on Freescale embedded
	  PowerPC that contain a QUICC Engine.

config SERIAL_SCCNXP
	tristate "SCCNXP serial port support"
	select SERIAL_CORE
	help
	  This selects support for an advanced UART from NXP (Philips).
	  Supported ICs are SCC2681, SCC2691, SCC2692, SC28L91, SC28L92,
	  SC28L202, SCC68681 and SCC68692.

config SERIAL_SCCNXP_CONSOLE
	bool "Console on SCCNXP serial port"
	depends on SERIAL_SCCNXP=y
	select SERIAL_CORE_CONSOLE
	help
	  Support for console on SCCNXP serial ports.

config SERIAL_SC16IS7XX_CORE
        tristate

config SERIAL_SC16IS7XX
        tristate "SC16IS7xx serial support"
        select SERIAL_CORE
        depends on (SPI_MASTER && !I2C) || I2C
        help
          This selects support for SC16IS7xx serial ports.
          Supported ICs are SC16IS740, SC16IS741, SC16IS750, SC16IS752,
          SC16IS760 and SC16IS762. Select supported buses using options below.

config SERIAL_SC16IS7XX_I2C
        bool "SC16IS7xx for I2C interface"
        depends on SERIAL_SC16IS7XX
        depends on I2C
        select SERIAL_SC16IS7XX_CORE if SERIAL_SC16IS7XX
        select REGMAP_I2C if I2C
        default y
        help
          Enable SC16IS7xx driver on I2C bus,
          If required say y, and say n to i2c if not required,
          Enabled by default to support oldconfig.
          You must select at least one bus for the driver to be built.

config SERIAL_SC16IS7XX_SPI
        bool "SC16IS7xx for spi interface"
        depends on SERIAL_SC16IS7XX
        depends on SPI_MASTER
        select SERIAL_SC16IS7XX_CORE if SERIAL_SC16IS7XX
        select REGMAP_SPI if SPI_MASTER
        help
          Enable SC16IS7xx driver on SPI bus,
          If required say y, and say n to spi if not required,
          This is additional support to exsisting driver.
          You must select at least one bus for the driver to be built.

config SERIAL_TIMBERDALE
	tristate "Support for timberdale UART"
	select SERIAL_CORE
	depends on X86_32 || COMPILE_TEST
	---help---
	Add support for UART controller on timberdale.

config SERIAL_BCM63XX
	tristate "Broadcom BCM63xx/BCM33xx UART support"
	select SERIAL_CORE
	depends on MIPS || ARM || COMPILE_TEST
	help
	  This enables the driver for the onchip UART core found on
	  the following chipsets:

	    BCM33xx (cable modem)
	    BCM63xx/BCM63xxx (DSL)
	    BCM68xx (PON)
	    BCM7xxx (STB) - DOCSIS console

config SERIAL_BCM63XX_CONSOLE
	bool "Console on BCM63xx serial port"
	depends on SERIAL_BCM63XX=y
	select SERIAL_CORE_CONSOLE
	select SERIAL_EARLYCON
	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 && SPARC
	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
	select SERIAL_EARLYCON
	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
	select SERIAL_EARLYCON
	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 || COMPILE_TEST
	depends on SPI && HAS_DMA
	help
	  Support for the IFX6x60 modem devices on Intel MID platforms.

config SERIAL_PCH_UART
	tristate "Intel EG20T PCH/LAPIS Semicon IOH(ML7213/ML7223/ML7831) UART"
	depends on PCI && (X86_32 || MIPS ||  COMPILE_TEST)
	select SERIAL_CORE
	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.

	  This driver also can be used for LAPIS Semiconductor IOH(Input/
	  Output Hub), ML7213, ML7223 and ML7831.
	  ML7213 IOH is for IVI(In-Vehicle Infotainment) use, ML7223 IOH is
	  for MP(Media Phone) use and ML7831 IOH is for general purpose use.
	  ML7213/ML7223/ML7831 is companion chip for Intel Atom E6xx series.
	  ML7213/ML7223/ML7831 is completely compatible for Intel EG20T PCH.

config SERIAL_PCH_UART_CONSOLE
	bool "Support for console on Intel EG20T PCH UART/OKI SEMICONDUCTOR ML7213 IOH"
	depends on SERIAL_PCH_UART=y
	select SERIAL_CORE_CONSOLE
	help
	  Say Y here if you wish to use the PCH 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_MXS_AUART
	tristate "MXS AUART support"
	depends on ARCH_MXS || MACH_ASM9260 || COMPILE_TEST
	select SERIAL_CORE
	select SERIAL_MCTRL_GPIO if GPIOLIB
	help
	  This driver supports the MXS and Alphascale ASM9260 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.

config SERIAL_XILINX_PS_UART
	tristate "Cadence (Xilinx Zynq) UART support"
	depends on OF
	select SERIAL_CORE
	help
	  This driver supports the Cadence UART. It is found e.g. in Xilinx
	  Zynq.

config SERIAL_XILINX_PS_UART_CONSOLE
	bool "Cadence UART console support"
	depends on SERIAL_XILINX_PS_UART=y
	select SERIAL_CORE_CONSOLE
	select SERIAL_EARLYCON
	help
	  Enable a Cadence UART port to be the system console.

config SERIAL_AR933X
	tristate "AR933X serial port support"
	depends on HAVE_CLK && ATH79
	select SERIAL_CORE
	help
	  If you have an Atheros AR933X SOC based board and want to use the
	  built-in UART of the SoC, say Y to this option.

	  To compile this driver as a module, choose M here: the
	  module will be called ar933x_uart.

config SERIAL_AR933X_CONSOLE
	bool "Console on AR933X serial port"
	depends on SERIAL_AR933X=y
	select SERIAL_CORE_CONSOLE
	help
	  Enable a built-in UART port of the AR933X to be the system console.

config SERIAL_AR933X_NR_UARTS
	int "Maximum number of AR933X serial ports"
	depends on SERIAL_AR933X
	default "2"
	help
	  Set this to the number of serial ports you want the driver
	  to support.

config SERIAL_EFM32_UART
	tristate "EFM32 UART/USART port"
	depends on ARM && (ARCH_EFM32 || COMPILE_TEST)
	select SERIAL_CORE
	help
	  This driver support the USART and UART ports on
	  Energy Micro's efm32 SoCs.

config SERIAL_MPS2_UART_CONSOLE
	bool "MPS2 UART console support"
	depends on SERIAL_MPS2_UART
	select SERIAL_CORE_CONSOLE
	select SERIAL_EARLYCON

config SERIAL_MPS2_UART
	bool "MPS2 UART port"
	depends on ARCH_MPS2 || COMPILE_TEST
	select SERIAL_CORE
	help
	  This driver support the UART ports on ARM MPS2.

config SERIAL_EFM32_UART_CONSOLE
	bool "EFM32 UART/USART console support"
	depends on SERIAL_EFM32_UART=y
	select SERIAL_CORE_CONSOLE

config SERIAL_ARC
	tristate "ARC UART driver support"
	select SERIAL_CORE
	help
	  Driver for on-chip UART for ARC(Synopsys) for the legacy
	  FPGA Boards (ML50x/ARCAngel4)

config SERIAL_ARC_CONSOLE
	bool "Console on ARC UART"
	depends on SERIAL_ARC=y
	select SERIAL_CORE_CONSOLE
	select SERIAL_EARLYCON
	help
	  Enable system Console on ARC UART

config SERIAL_ARC_NR_PORTS
	int "Number of ARC UART ports"
	depends on SERIAL_ARC
	range 1 3
	default "1"
	help
	  Set this to the number of serial ports you want the driver
	  to support.

config SERIAL_RP2
	tristate "Comtrol RocketPort EXPRESS/INFINITY support"
	depends on PCI
	select SERIAL_CORE
	help
	  This driver supports the Comtrol RocketPort EXPRESS and
	  RocketPort INFINITY families of PCI/PCIe multiport serial adapters.
	  These adapters use a "RocketPort 2" ASIC that is not compatible
	  with the original RocketPort driver (CONFIG_ROCKETPORT).

	  To compile this driver as a module, choose M here: the
	  module will be called rp2.

	  If you want to compile this driver into the kernel, say Y here.  If
	  you don't have a suitable RocketPort card installed, say N.

config SERIAL_RP2_NR_UARTS
	int "Maximum number of RocketPort EXPRESS/INFINITY ports"
	depends on SERIAL_RP2
	default "32"
	help
	  If multiple cards are present, the default limit of 32 ports may
	  need to be increased.

config SERIAL_FSL_LPUART
	tristate "Freescale lpuart serial port support"
	depends on HAS_DMA
	select SERIAL_CORE
	help
	  Support for the on-chip lpuart on some Freescale SOCs.

config SERIAL_FSL_LPUART_CONSOLE
	bool "Console on Freescale lpuart serial port"
	depends on SERIAL_FSL_LPUART=y
	select SERIAL_CORE_CONSOLE
	select SERIAL_EARLYCON
	help
	  If you have enabled the lpuart serial port on the Freescale SoCs,
	  you can make it the console by answering Y to this option.

config SERIAL_FSL_LINFLEXUART
	tristate "Freescale linflexuart serial port support"
	depends on PRINTK
	select SERIAL_CORE
	help
	  Support for the on-chip linflexuart on some Freescale SOCs.

config SERIAL_FSL_LINFLEXUART_CONSOLE
	bool "Console on Freescale linflexuart serial port"
	depends on SERIAL_FSL_LINFLEXUART=y
	select SERIAL_CORE_CONSOLE
	select SERIAL_EARLYCON
	help
	  If you have enabled the linflexuart serial port on the Freescale
	  SoCs, you can make it the console by answering Y to this option.

config SERIAL_CONEXANT_DIGICOLOR
	tristate "Conexant Digicolor CX92xxx USART serial port support"
	depends on OF
	select SERIAL_CORE
	help
	  Support for the on-chip USART on Conexant Digicolor SoCs.

config SERIAL_CONEXANT_DIGICOLOR_CONSOLE
	bool "Console on Conexant Digicolor serial port"
	depends on SERIAL_CONEXANT_DIGICOLOR=y
	select SERIAL_CORE_CONSOLE
	help
	  If you have enabled the USART serial port on Conexant Digicolor
	  SoCs, you can make it the console by answering Y to this option.

config SERIAL_ST_ASC
	tristate "ST ASC serial port support"
	select SERIAL_CORE
	depends on ARM || COMPILE_TEST
	help
	  This driver is for the on-chip Asychronous Serial Controller on
	  STMicroelectronics STi SoCs.
	  ASC is embedded in ST COMMS IP block. It supports Rx & Tx functionality.
	  It support all industry standard baud rates.

	  If unsure, say N.

config SERIAL_ST_ASC_CONSOLE
	bool "Support for console on ST ASC"
	depends on SERIAL_ST_ASC=y
	select SERIAL_CORE_CONSOLE

config SERIAL_MEN_Z135
	tristate "MEN 16z135 Support"
	select SERIAL_CORE
	depends on MCB
	help
	  Say yes here to enable support for the MEN 16z135 High Speed UART IP-Core
	  on a MCB carrier.

	  This driver can also be build as a module. If so, the module will be called
	  men_z135_uart.ko

config SERIAL_SPRD
	tristate "Support for Spreadtrum serial"
	depends on ARCH_SPRD
	select SERIAL_CORE
	help
	  This enables the driver for the Spreadtrum's serial.

config SERIAL_SPRD_CONSOLE
	bool "Spreadtrum UART console support"
	depends on SERIAL_SPRD=y
	select SERIAL_CORE_CONSOLE
	select SERIAL_EARLYCON
	help
	  Support for early debug console using Spreadtrum's serial. This enables
	  the console before standard serial driver is probed. This is enabled
	  with "earlycon" on the kernel command line. The console is
	  enabled when early_param is processed.

config SERIAL_STM32
	tristate "STMicroelectronics STM32 serial port support"
	select SERIAL_CORE
	depends on ARCH_STM32 || COMPILE_TEST
	help
	  This driver is for the on-chip Serial Controller on
	  STMicroelectronics STM32 MCUs.
	  USART supports Rx & Tx functionality.
	  It support all industry standard baud rates.

	  If unsure, say N.

config SERIAL_STM32_CONSOLE
	bool "Support for console on STM32"
	depends on SERIAL_STM32=y
	select SERIAL_CORE_CONSOLE

config SERIAL_MVEBU_UART
	bool "Marvell EBU serial port support"
	depends on ARCH_MVEBU || COMPILE_TEST
	select SERIAL_CORE
	help
	  This driver is for Marvell EBU SoC's UART. If you have a machine
	  based on the Armada-3700 SoC and wish to use the on-board serial
	  port,
	  say 'Y' here.
	  Otherwise, say 'N'.

config SERIAL_MVEBU_CONSOLE
	bool "Console on Marvell EBU serial port"
	depends on SERIAL_MVEBU_UART
	select SERIAL_CORE_CONSOLE
	select SERIAL_EARLYCON
	default y
	help
	  Say 'Y' here if you wish to use Armada-3700 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)
	  Otherwise, say 'N'.

config SERIAL_OWL
	tristate "Actions Semi Owl serial port support"
	depends on ARCH_ACTIONS || COMPILE_TEST
	select SERIAL_CORE
	help
	  This driver is for Actions Semiconductor S500/S900 SoC's UART.
	  Say 'Y' here if you wish to use the on-board serial port.
	  Otherwise, say 'N'.

config SERIAL_OWL_CONSOLE
	bool "Console on Actions Semi Owl serial port"
	depends on SERIAL_OWL=y
	select SERIAL_CORE_CONSOLE
	select SERIAL_EARLYCON
	default y
	help
	  Say 'Y' here if you wish to use Actions Semiconductor S500/S900 UART
	  as the system console.

config SERIAL_RDA
	bool "RDA Micro serial port support"
	depends on ARCH_RDA || COMPILE_TEST
	select SERIAL_CORE
	help
	  This driver is for RDA8810PL SoC's UART.
	  Say 'Y' here if you wish to use the on-board serial port.
	  Otherwise, say 'N'.

config SERIAL_RDA_CONSOLE
	bool "Console on RDA Micro serial port"
	depends on SERIAL_RDA=y
	select SERIAL_CORE_CONSOLE
	select SERIAL_EARLYCON
	default y
	help
	  Say 'Y' here if you wish to use the RDA8810PL UART as the system
	  console. Only earlycon is implemented currently.

config SERIAL_MILBEAUT_USIO
	tristate "Milbeaut USIO/UART serial port support"
	depends on ARCH_MILBEAUT || (COMPILE_TEST && OF)
	default ARCH_MILBEAUT
	select SERIAL_CORE
	help
	  This selects the USIO/UART IP found in Socionext Milbeaut SoCs.

config SERIAL_MILBEAUT_USIO_PORTS
	int "Maximum number of CSIO/UART ports (1-8)"
	range 1 8
	depends on SERIAL_MILBEAUT_USIO
	default "4"

config SERIAL_MILBEAUT_USIO_CONSOLE
	bool "Support for console on MILBEAUT USIO/UART serial port"
	depends on SERIAL_MILBEAUT_USIO=y
	default y
	select SERIAL_CORE_CONSOLE
	select SERIAL_EARLYCON
	help
	  Say 'Y' here if you wish to use a USIO/UART of Socionext Milbeaut
	  SoCs 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).

endmenu

config SERIAL_MCTRL_GPIO
	tristate

endif # TTY
