#
# The 8250/16550 serial drivers.  You shouldn't be in this list unless
# you somehow have an implicit or explicit dependency on SERIAL_8250.
#

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 multi serial port driver
	  does not need this driver built in for it 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_DEPRECATED_OPTIONS
	bool "Support 8250_core.* kernel options (DEPRECATED)"
	depends on SERIAL_8250
	default y
	---help---
	  In 3.7 we renamed 8250 to 8250_core by mistake, so now we have to
	  accept kernel parameters in both forms like 8250_core.nr_uarts=4 and
	  8250.nr_uarts=4. We now renamed the module back to 8250, but if
	  anybody noticed in 3.7 and changed their userspace we still have to
	  keep the 8250_core.* options around until they revert the changes
	  they already did.

	  If 8250 is built as a module, this adds 8250_core alias instead. 

	  If you did not notice yet and/or you have userspace from pre-3.7, it
	  is safe (and recommended) to say N here.

config SERIAL_8250_PNP
	bool "8250/16550 PNP device support" if EXPERT
	depends on SERIAL_8250 && PNP
	default y
	---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_FINTEK
	bool "Support for Fintek F81216A LPC to 4 UART RS485 API"
	depends on SERIAL_8250
	---help---
	  Selecting this option will add support for the RS485 capabilities
	  of the Fintek F81216A LPC to 4 UART.

	  If this option is not selected the device will be configured as a
	  standard 16550A serial port.

	  If unsure, say N.

config SERIAL_8250_CONSOLE
	bool "Console on 8250/16550 and compatible serial port"
	depends on SERIAL_8250=y
	select SERIAL_CORE_CONSOLE
	select SERIAL_EARLYCON
	---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 SERIAL_8250_GSC
	tristate
	depends on SERIAL_8250 && GSC
	default SERIAL_8250

config SERIAL_8250_DMA
	bool "DMA support for 16550 compatible UART controllers" if EXPERT
	depends on SERIAL_8250 && DMADEVICES=y
	default SERIAL_8250
	help
	  This builds DMA support that can be used with 8250/16650
	  compatible UART controllers that support DMA signaling.

config SERIAL_8250_PCI
	tristate "8250/16550 PCI device support"
	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.
	  Note that serial ports on NetMos 9835 Multi-I/O cards are handled
	  by the parport_serial driver, enabled with CONFIG_PARPORT_SERIAL.

config SERIAL_8250_EXAR
	tristate "8250/16550 Exar/Commtech PCI/PCIe device support"
	depends on SERIAL_8250_PCI
	default SERIAL_8250
	help
	  This builds support for XR17C1xx, XR17V3xx and some Commtech
	  422x PCIe serial cards that are not covered by the more generic
	  SERIAL_8250_PCI option.

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_MEN_MCB
	tristate "MEN Z125 UART device support"
	depends on MCB && SERIAL_8250
	help
	  This enables support for FPGA based UARTs found on many MEN
	  boards. This driver enables support for the Z125 UARTs.

	  To compile this driver as a module, chose M here: the
	  module will be called 8250_men_mcb.


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_ASPEED_VUART
	tristate "Aspeed Virtual UART"
	depends on SERIAL_8250
	depends on OF
	help
	  If you want to use the virtual UART (VUART) device on Aspeed
	  BMC platforms, enable this option. This enables the 16550A-
	  compatible device on the local LPC bus, giving a UART device
	  with no physical RS232 connections.

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.

#
# Misc. options/drivers.
#

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
	  Say Y here if you have a IODATA RSA-DV II/S ISA card and
	  would like to use its >115kbps speeds.
	  You will need to provide module parameter "probe_rsa", or boot-time
	  parameter 8250.probe_rsa with I/O addresses of this card then.

	  If you don't have such card, or if unsure, say N.

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_BCM2835AUX
	tristate "BCM2835 auxiliar mini UART support"
	depends on ARCH_BCM2835 || COMPILE_TEST
	depends on SERIAL_8250 && SERIAL_8250_SHARE_IRQ
	help
	  Support for the BCM2835 auxiliar mini UART.

	  Features and limitations of the UART are
	    Registers are similar to 16650 registers,
              set bits in the control registers that are unsupported
	      are ignored and read back as 0
	    7/8 bit operation with 1 start and 1 stop bit
	    8 symbols deep fifo for rx and tx
	    SW controlled RTS and SW readable CTS
	    Clock rate derived from system clock
	    Uses 8 times oversampling (compared to 16 times for 16650)
	    Missing break detection (but break generation)
	    Missing framing error detection
	    Missing parity bit
	    Missing receive time-out interrupt
	    Missing DCD, DSR, DTR and RI signals

	  If unsure, say N.

config SERIAL_8250_FSL
	bool
	depends on SERIAL_8250_CONSOLE
	default PPC || ARM || ARM64

config SERIAL_8250_DW
	tristate "Support for Synopsys DesignWare 8250 quirks"
	depends on SERIAL_8250
	help
	  Selecting this option will enable handling of the extra features
	  present in the Synopsys DesignWare APB UART.

config SERIAL_8250_EM
	tristate "Support for Emma Mobile integrated serial port"
	depends on SERIAL_8250 && ARM && HAVE_CLK
	help
	  Selecting this option will add support for the integrated serial
	  port hardware found on the Emma Mobile line of processors.
	  If unsure, say N.

config SERIAL_8250_RT288X
	bool "Ralink RT288x/RT305x/RT3662/RT3883 serial port support"
	depends on SERIAL_8250
	default y if MIPS_ALCHEMY || SOC_RT288X || SOC_RT305X || SOC_RT3883 || SOC_MT7620
	help
	  Selecting this option will add support for the alternate register
	  layout used by Ralink RT288x/RT305x, Alchemy Au1xxx, and some others.
	  If unsure, say N.

config SERIAL_8250_OMAP
	tristate "Support for OMAP internal UART (8250 based driver)"
	depends on SERIAL_8250 && ARCH_OMAP2PLUS
	help
	  If you have a machine based on an Texas Instruments OMAP CPU you
	  can enable its onboard serial ports by enabling this option.

	  This driver uses ttyS instead of ttyO.

config SERIAL_8250_OMAP_TTYO_FIXUP
	bool "Replace ttyO with ttyS"
	depends on SERIAL_8250_OMAP=y && SERIAL_8250_CONSOLE
	default y
	help
	  This option replaces the "console=ttyO" argument with the matching
	  ttyS argument if the user did not specified it on the command line.
	  This ensures that the user can see the kernel output during boot
	  which he wouldn't see otherwise. The getty has still to be configured
	  for ttyS instead of ttyO regardless of this option.
	  This option is intended for people who "automatically" enable this
	  driver without knowing that this driver requires a different console=
	  argument. If you read this, please keep this option disabled and
	  instead update your kernel command line. If you prepare a kernel for a
	  distribution or other kind of larger user base then you probably want
	  to keep this option enabled. Otherwise people might complain about a
	  not booting kernel because the serial console remains silent in case
	  they forgot to update the command line.

config SERIAL_8250_LPC18XX
	tristate "NXP LPC18xx/43xx serial port support"
	depends on SERIAL_8250 && OF && (ARCH_LPC18XX || COMPILE_TEST)
	default ARCH_LPC18XX
	help
	  If you have a LPC18xx/43xx based board and want to use the
	  serial port, say Y to this option. If unsure, say Y.

config SERIAL_8250_MT6577
	tristate "Mediatek serial port support"
	depends on SERIAL_8250 && ARCH_MEDIATEK
	help
	  If you have a Mediatek based board and want to use the
	  serial port, say Y to this option. If unsure, say N.

config SERIAL_8250_UNIPHIER
	tristate "Support for UniPhier on-chip UART"
	depends on SERIAL_8250
	depends on ARCH_UNIPHIER || COMPILE_TEST
	help
	  If you have a UniPhier based board and want to use the on-chip
	  serial ports, say Y to this option. If unsure, say N.

config SERIAL_8250_INGENIC
	tristate "Support for Ingenic SoC serial ports"
	depends on SERIAL_8250
	depends on OF_FLATTREE
	depends on MIPS || COMPILE_TEST
	help
	  If you have a system using an Ingenic SoC and wish to make use of
	  its UARTs, say Y to this option. If unsure, say N.

config SERIAL_8250_LPSS
	tristate "Support for serial ports on Intel LPSS platforms"
	default SERIAL_8250
	depends on SERIAL_8250 && PCI
	depends on X86 || COMPILE_TEST
	select DW_DMAC_CORE if SERIAL_8250_DMA
	select DW_DMAC_PCI if (SERIAL_8250_DMA && X86_INTEL_LPSS)
	select RATIONAL
	help
	  Selecting this option will enable handling of the extra features
	  present on the UART found on various Intel platforms such as:
	    - Intel Baytrail SoC
	    - Intel Braswell SoC
	    - Intel Quark X1000 SoC

config SERIAL_8250_MID
	tristate "Support for serial ports on Intel MID platforms"
	default SERIAL_8250
	depends on SERIAL_8250 && PCI
	depends on X86 || COMPILE_TEST
	select HSU_DMA if SERIAL_8250_DMA
	select HSU_DMA_PCI if (HSU_DMA && X86_INTEL_MID)
	select RATIONAL
	help
	  Selecting this option will enable handling of the extra features
	  present on the UART found on Intel Medfield SOC and various other
	  Intel platforms.

config SERIAL_8250_MOXA
	tristate "MOXA SmartIO MUE support"
	depends on SERIAL_8250 && PCI
	help
	  Say Y here if you have a Moxa SmartIO MUE multiport serial card.
	  If unsure, say N.

	  This driver can also be built as a module. The module will be called
	  8250_moxa. If you want to do that, say M here.

config SERIAL_8250_PXA
	tristate "PXA serial port support"
	depends on SERIAL_8250
	depends on ARCH_PXA || ARCH_MMP
	help
	  If you have a machine based on an Intel XScale PXA2xx CPU you can
	  enable its onboard serial ports by enabling this option. The option is
	  applicable to both devicetree and legacy boards, and early console is
	  part of its support.

config SERIAL_OF_PLATFORM
	tristate "Devicetree based probing for 8250 ports"
	depends on SERIAL_8250 && OF
	help
	  This option is used for all 8250 compatible serial ports that
	  are probed through devicetree, including Open Firmware based
	  PowerPC systems and embedded systems on architectures using the
	  flattened device tree format.
