#
# 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_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.
