#
# 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
	select SERIAL_MCTRL_GPIO if GPIOLIB
	---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" if EXPERT
	depends on SERIAL_8250 && PCI
	default SERIAL_8250
	select RATIONAL
	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_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.

#
# 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_MID
	tristate "Support for serial ports on Intel MID platforms" if EXPERT
	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_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.
