#
# Character device configuration
#

menu "Character devices"

config VT
	bool "Virtual terminal" if EMBEDDED
	depends on !S390
	select INPUT
	default y
	---help---
	  If you say Y here, you will get support for terminal devices with
	  display and keyboard devices. These are called "virtual" because you
	  can run several virtual terminals (also called virtual consoles) on
	  one physical terminal. This is rather useful, for example one
	  virtual terminal can collect system messages and warnings, another
	  one can be used for a text-mode user session, and a third could run
	  an X session, all in parallel. Switching between virtual terminals
	  is done with certain key combinations, usually Alt-<function key>.

	  The setterm command ("man setterm") can be used to change the
	  properties (such as colors or beeping) of a virtual terminal. The
	  man page console_codes(4) ("man console_codes") contains the special
	  character sequences that can be used to change those properties
	  directly. The fonts used on virtual terminals can be changed with
	  the setfont ("man setfont") command and the key bindings are defined
	  with the loadkeys ("man loadkeys") command.

	  You need at least one virtual terminal device in order to make use
	  of your keyboard and monitor. Therefore, only people configuring an
	  embedded system would want to say N here in order to save some
	  memory; the only way to log into such a system is then via a serial
	  or network connection.

	  If unsure, say Y, or else you won't be able to do much with your new
	  shiny Linux system :-)

config CONSOLE_TRANSLATIONS
	depends on VT
	default y
	bool "Enable character translations in console" if EMBEDDED
	---help---
	  This enables support for font mapping and Unicode translation
	  on virtual consoles.

config VT_CONSOLE
	bool "Support for console on virtual terminal" if EMBEDDED
	depends on VT
	default y
	---help---
	  The system console is the device which receives all kernel messages
	  and warnings and which allows logins in single user mode. If you
	  answer Y here, a virtual terminal (the device used to interact with
	  a physical terminal) can be used as system console. This is the most
	  common mode of operations, so you should say Y here unless you want
	  the kernel messages be output only to a serial port (in which case
	  you should say Y to "Console on serial port", below).

	  If you do say Y here, by default the currently visible virtual
	  terminal (/dev/tty0) will be used as system console. You can change
	  that with a kernel command line option such as "console=tty3" which
	  would use the third virtual terminal as system console. (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.)

	  If unsure, say Y.

config HW_CONSOLE
	bool
	depends on VT && !S390 && !UML
	default y

config VT_HW_CONSOLE_BINDING
       bool "Support for binding and unbinding console drivers"
       depends on HW_CONSOLE
       default n
       ---help---
         The virtual terminal is the device that interacts with the physical
         terminal through console drivers. On these systems, at least one
         console driver is loaded. In other configurations, additional console
         drivers may be enabled, such as the framebuffer console. If more than
         1 console driver is enabled, setting this to 'y' will allow you to
         select the console driver that will serve as the backend for the
         virtual terminals.

	 See <file:Documentation/console/console.txt> for more
	 information. For framebuffer console users, please refer to
	 <file:Documentation/fb/fbcon.txt>.

config DEVKMEM
	bool "/dev/kmem virtual device support"
	default y
	help
	  Say Y here if you want to support the /dev/kmem device. The
	  /dev/kmem device is rarely used, but can be used for certain
	  kind of kernel debugging operations.
	  When in doubt, say "N".

config BFIN_JTAG_COMM
	tristate "Blackfin JTAG Communication"
	depends on BLACKFIN
	help
	  Add support for emulating a TTY device over the Blackfin JTAG.

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

config BFIN_JTAG_COMM_CONSOLE
	bool "Console on Blackfin JTAG"
	depends on BFIN_JTAG_COMM=y

config SERIAL_NONSTANDARD
	bool "Non-standard serial port support"
	depends on HAS_IOMEM
	---help---
	  Say Y here if you have any non-standard serial boards -- boards
	  which aren't supported using the standard "dumb" serial driver.
	  This includes intelligent serial boards such as Cyclades,
	  Digiboards, etc. These are usually used for systems that need many
	  serial ports because they serve many terminals or dial-in
	  connections.

	  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 non-standard serial boards.

	  Most people can say N here.

config COMPUTONE
	tristate "Computone IntelliPort Plus serial support"
	depends on SERIAL_NONSTANDARD && (ISA || EISA || PCI)
	---help---
	  This driver supports the entire family of Intelliport II/Plus
	  controllers with the exception of the MicroChannel controllers and
	  products previous to the Intelliport II. These are multiport cards,
	  which give you many 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. If you have a card like that, say
	  Y here and read <file:Documentation/serial/computone.txt>.

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

config ROCKETPORT
	tristate "Comtrol RocketPort support"
	depends on SERIAL_NONSTANDARD && (ISA || EISA || PCI)
	help
	  This driver supports Comtrol RocketPort and RocketModem PCI boards.   
          These boards provide 2, 4, 8, 16, or 32 high-speed serial ports or
          modems.  For information about the RocketPort/RocketModem  boards
          and this driver read <file:Documentation/serial/rocket.txt>.

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

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

config CYCLADES
	tristate "Cyclades async mux support"
	depends on SERIAL_NONSTANDARD && (PCI || ISA)
	select FW_LOADER
	---help---
	  This driver supports Cyclades Z and Y multiserial boards.
	  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.

	  For information about the Cyclades-Z card, read
	  <file:Documentation/serial/README.cycladesZ>.

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

	  If you haven't heard about it, it's safe to say N.

config CYZ_INTR
	bool "Cyclades-Z interrupt mode operation (EXPERIMENTAL)"
	depends on EXPERIMENTAL && CYCLADES
	help
	  The Cyclades-Z family of multiport cards allows 2 (two) driver op
	  modes: polling and interrupt. In polling mode, the driver will check
	  the status of the Cyclades-Z ports every certain amount of time
	  (which is called polling cycle and is configurable). In interrupt
	  mode, it will use an interrupt line (IRQ) in order to check the
	  status of the Cyclades-Z ports. The default op mode is polling. If
	  unsure, say N.

config DIGIEPCA
	tristate "Digiboard Intelligent Async Support"
	depends on SERIAL_NONSTANDARD && (ISA || EISA || PCI)
	---help---
	  This is a driver for Digi International's Xx, Xeve, and Xem 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 the original PC (ISA) boards as well as PCI, and EISA. If
	  you have a card like this, say Y here and read the file
	  <file:Documentation/serial/digiepca.txt>.

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

config MOXA_INTELLIO
	tristate "Moxa Intellio support"
	depends on SERIAL_NONSTANDARD && (ISA || EISA || PCI)
	select FW_LOADER
	help
	  Say Y here if you have a Moxa Intellio multiport serial card.

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

config MOXA_SMARTIO
	tristate "Moxa SmartIO support v. 2.0"
	depends on SERIAL_NONSTANDARD && (PCI || EISA || ISA)
	help
	  Say Y here if you have a Moxa SmartIO multiport serial card and/or
	  want to help develop a new version of this driver.

	  This is upgraded (1.9.1) driver from original Moxa drivers with
	  changes finally resulting in PCI probing.

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

config ISI
	tristate "Multi-Tech multiport card support (EXPERIMENTAL)"
	depends on SERIAL_NONSTANDARD && PCI
	select FW_LOADER
	help
	  This is a driver for the Multi-Tech cards which provide several
	  serial ports.  The driver is experimental and can currently only be
	  built as a module. The module will be called isicom.
	  If you want to do that, choose M here.

config SYNCLINK
	tristate "Microgate SyncLink card support"
	depends on SERIAL_NONSTANDARD && PCI && ISA_DMA_API
	help
	  Provides support for the SyncLink ISA and PCI multiprotocol serial
	  adapters. These adapters support asynchronous and HDLC bit
	  synchronous communication up to 10Mbps (PCI adapter).

	  This driver can only be built as a module ( = code which can be
	  inserted in and removed from the running kernel whenever you want).
	  The module will be called synclink.  If you want to do that, say M
	  here.

config SYNCLINKMP
	tristate "SyncLink Multiport support"
	depends on SERIAL_NONSTANDARD && PCI
	help
	  Enable support for the SyncLink Multiport (2 or 4 ports)
	  serial adapter, running asynchronous and HDLC communications up
	  to 2.048Mbps. Each ports is independently selectable for
	  RS-232, V.35, RS-449, RS-530, and X.21

	  This driver may be built as a module ( = code which can be
	  inserted in and removed from the running kernel whenever you want).
	  The module will be called synclinkmp.  If you want to do that, say M
	  here.

config SYNCLINK_GT
	tristate "SyncLink GT/AC support"
	depends on SERIAL_NONSTANDARD && PCI
	help
	  Support for SyncLink GT and SyncLink AC families of
	  synchronous and asynchronous serial adapters
	  manufactured by Microgate Systems, Ltd. (www.microgate.com)

config N_HDLC
	tristate "HDLC line discipline support"
	depends on SERIAL_NONSTANDARD
	help
	  Allows synchronous HDLC communications with tty device drivers that
	  support synchronous HDLC such as the Microgate SyncLink adapter.

	  This driver can be built as a module ( = code which can be
	  inserted in and removed from the running kernel whenever you want).
	  The module will be called n_hdlc. If you want to do that, say M
	  here.

config N_GSM
	tristate "GSM MUX line discipline support (EXPERIMENTAL)"
	depends on EXPERIMENTAL
	depends on NET
	help
	  This line discipline provides support for the GSM MUX protocol and
	  presents the mux as a set of 61 individual tty devices.

config RISCOM8
	tristate "SDL RISCom/8 card support"
	depends on SERIAL_NONSTANDARD
	help
	  This is a driver for the SDL Communications RISCom/8 multiport card,
	  which gives you many 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. If you have a card like that,
	  say Y here and read the file <file:Documentation/serial/riscom8.txt>.

	  Also it's possible to say M here and compile this driver as kernel
	  loadable module; the module will be called riscom8.

config SPECIALIX
	tristate "Specialix IO8+ card support"
	depends on SERIAL_NONSTANDARD
	help
	  This is a driver for the Specialix IO8+ multiport card (both the
	  ISA and the PCI version) which gives you many 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.

	  If you have a card like that, say Y here and read the file
	  <file:Documentation/serial/specialix.txt>. Also it's possible to say
	  M here and compile this driver as kernel loadable module which will be
	  called specialix.

config SX
	tristate "Specialix SX (and SI) card support"
	depends on SERIAL_NONSTANDARD && (PCI || EISA || ISA) && BROKEN
	help
	  This is a driver for the SX and SI multiport serial cards.
	  Please read the file <file:Documentation/serial/sx.txt> for details.

	  This driver can only be built as a module ( = code which can be
	  inserted in and removed from the running kernel whenever you want).
	  The module will be called sx. If you want to do that, say M here.

config RIO
	tristate "Specialix RIO system support"
	depends on SERIAL_NONSTANDARD && BROKEN
	help
	  This is a driver for the Specialix RIO, a smart serial card which
	  drives an outboard box that can support up to 128 ports.  Product
	  information is at <http://www.perle.com/support/documentation.html#multiport>.
	  There are both ISA and PCI versions.

config RIO_OLDPCI
	bool "Support really old RIO/PCI cards"
	depends on RIO
	help
	  Older RIO PCI cards need some initialization-time configuration to
	  determine the IRQ and some control addresses.  If you have a RIO and
	  this doesn't seem to work, try setting this to Y.

config STALDRV
	bool "Stallion multiport serial support"
	depends on SERIAL_NONSTANDARD
	help
	  Stallion cards give you many 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.  If you say Y here,
	  you will be asked for your specific card model in the next
	  questions.  Make sure to read <file:Documentation/serial/stallion.txt>
	  in this case.  If you have never heard about all this, it's safe to
	  say N.

config STALLION
	tristate "Stallion EasyIO or EC8/32 support"
	depends on STALDRV && (ISA || EISA || PCI)
	help
	  If you have an EasyIO or EasyConnection 8/32 multiport Stallion
	  card, then this is for you; say Y.  Make sure to read
	  <file:Documentation/serial/stallion.txt>.

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

config ISTALLION
	tristate "Stallion EC8/64, ONboard, Brumby support"
	depends on STALDRV && (ISA || EISA || PCI)
	help
	  If you have an EasyConnection 8/64, ONboard, Brumby or Stallion
	  serial multiport card, say Y here. Make sure to read
	  <file:Documentation/serial/stallion.txt>.

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

config NOZOMI
	tristate "HSDPA Broadband Wireless Data Card - Globe Trotter"
	depends on PCI && EXPERIMENTAL
	help
	  If you have a HSDPA driver Broadband Wireless Data Card -
	  Globe Trotter PCMCIA card, say Y here.

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

config A2232
	tristate "Commodore A2232 serial support (EXPERIMENTAL)"
	depends on EXPERIMENTAL && ZORRO && BROKEN
	---help---
	  This option supports the 2232 7-port serial card shipped with the
	  Amiga 2000 and other Zorro-bus machines, dating from 1989.  At
	  a max of 19,200 bps, the ports are served by a 6551 ACIA UART chip
	  each, plus a 8520 CIA, and a master 6502 CPU and buffer as well. The
	  ports were connected with 8 pin DIN connectors on the card bracket,
	  for which 8 pin to DB25 adapters were supplied. The card also had
	  jumpers internally to toggle various pinning configurations.

	  This driver can be built as a module; but then "generic_serial"
	  will also be built as a module. This has to be loaded before
	  "ser_a2232". If you want to do this, answer M here.

config SGI_SNSC
	bool "SGI Altix system controller communication support"
	depends on (IA64_SGI_SN2 || IA64_GENERIC)
	help
	  If you have an SGI Altix and you want to enable system
	  controller communication from user space (you want this!),
	  say Y.  Otherwise, say N.

config SGI_TIOCX
       bool "SGI TIO CX driver support"
       depends on (IA64_SGI_SN2 || IA64_GENERIC)
       help
         If you have an SGI Altix and you have fpga devices attached
         to your TIO, say Y here, otherwise say N.

config SGI_MBCS
       tristate "SGI FPGA Core Services driver support"
       depends on SGI_TIOCX
       help
         If you have an SGI Altix with an attached SABrick
         say Y or M here, otherwise say N.

source "drivers/tty/serial/Kconfig"

config UNIX98_PTYS
	bool "Unix98 PTY support" if EMBEDDED
	default y
	---help---
	  A pseudo terminal (PTY) is a software device consisting of two
	  halves: a master and a slave. The slave device behaves identical to
	  a physical terminal; the master device is used by a process to
	  read data from and write data to the slave, thereby emulating a
	  terminal. Typical programs for the master side are telnet servers
	  and xterms.

	  Linux has traditionally used the BSD-like names /dev/ptyxx for
	  masters and /dev/ttyxx for slaves of pseudo terminals. This scheme
	  has a number of problems. The GNU C library glibc 2.1 and later,
	  however, supports the Unix98 naming standard: in order to acquire a
	  pseudo terminal, a process opens /dev/ptmx; the number of the pseudo
	  terminal is then made available to the process and the pseudo
	  terminal slave can be accessed as /dev/pts/<number>. What was
	  traditionally /dev/ttyp2 will then be /dev/pts/2, for example.

	  All modern Linux systems use the Unix98 ptys.  Say Y unless
	  you're on an embedded system and want to conserve memory.

config DEVPTS_MULTIPLE_INSTANCES
	bool "Support multiple instances of devpts"
	depends on UNIX98_PTYS
	default n
	---help---
	  Enable support for multiple instances of devpts filesystem.
	  If you want to have isolated PTY namespaces (eg: in containers),
	  say Y here.  Otherwise, say N. If enabled, each mount of devpts
	  filesystem with the '-o newinstance' option will create an
	  independent PTY namespace.

config LEGACY_PTYS
	bool "Legacy (BSD) PTY support"
	default y
	---help---
	  A pseudo terminal (PTY) is a software device consisting of two
	  halves: a master and a slave. The slave device behaves identical to
	  a physical terminal; the master device is used by a process to
	  read data from and write data to the slave, thereby emulating a
	  terminal. Typical programs for the master side are telnet servers
	  and xterms.

	  Linux has traditionally used the BSD-like names /dev/ptyxx
	  for masters and /dev/ttyxx for slaves of pseudo
	  terminals. This scheme has a number of problems, including
	  security.  This option enables these legacy devices; on most
	  systems, it is safe to say N.


config LEGACY_PTY_COUNT
	int "Maximum number of legacy PTY in use"
	depends on LEGACY_PTYS
	range 0 256
	default "256"
	---help---
	  The maximum number of legacy PTYs that can be used at any one time.
	  The default is 256, and should be more than enough.  Embedded
	  systems may want to reduce this to save memory.

	  When not in use, each legacy PTY occupies 12 bytes on 32-bit
	  architectures and 24 bytes on 64-bit architectures.

config TTY_PRINTK
	bool "TTY driver to output user messages via printk"
	depends on EMBEDDED
	default n
	---help---
	  If you say Y here, the support for writing user messages (i.e.
	  console messages) via printk is available.

	  The feature is useful to inline user messages with kernel
	  messages.
	  In order to use this feature, you should output user messages
	  to /dev/ttyprintk or redirect console to this TTY.

	  If unsure, say N.

config BRIQ_PANEL
	tristate 'Total Impact briQ front panel driver'
	depends on PPC_CHRP
	---help---
	  The briQ is a small footprint CHRP computer with a frontpanel VFD, a
	  tristate led and two switches. It is the size of a CDROM drive.

	  If you have such one and want anything showing on the VFD then you
	  must answer Y here.

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

	  It's safe to say N here.

config BFIN_OTP
	tristate "Blackfin On-Chip OTP Memory Support"
	depends on BLACKFIN && (BF51x || BF52x || BF54x)
	default y
	help
	  If you say Y here, you will get support for a character device
	  interface into the One Time Programmable memory pages that are
	  stored on the Blackfin processor.  This will not get you access
	  to the secure memory pages however.  You will need to write your
	  own secure code and reader for that.

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

	  If unsure, it is safe to say Y.

config BFIN_OTP_WRITE_ENABLE
	bool "Enable writing support of OTP pages"
	depends on BFIN_OTP
	default n
	help
	  If you say Y here, you will enable support for writing of the
	  OTP pages.  This is dangerous by nature as you can only program
	  the pages once, so only enable this option when you actually
	  need it so as to not inadvertently clobber data.

	  If unsure, say N.

config PRINTER
	tristate "Parallel printer support"
	depends on PARPORT
	---help---
	  If you intend to attach a printer to the parallel port of your Linux
	  box (as opposed to using a serial printer; if the connector at the
	  printer has 9 or 25 holes ["female"], then it's serial), say Y.
	  Also read the Printing-HOWTO, available from
	  <http://www.tldp.org/docs.html#howto>.

	  It is possible to share one parallel port among several devices
	  (e.g. printer and ZIP drive) and it is safe to compile the
	  corresponding drivers into the kernel.

	  To compile this driver as a module, choose M here and read
	  <file:Documentation/parport.txt>.  The module will be called lp.

	  If you have several parallel ports, you can specify which ports to
	  use with the "lp" kernel command line option.  (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.)  The syntax of the
	  "lp" command line option can be found in <file:drivers/char/lp.c>.

	  If you have more than 8 printers, you need to increase the LP_NO
	  macro in lp.c and the PARPORT_MAX macro in parport.h.

config LP_CONSOLE
	bool "Support for console on line printer"
	depends on PRINTER
	---help---
	  If you want kernel messages to be printed out as they occur, you
	  can have a console on the printer. This option adds support for
	  doing that; to actually get it to happen you need to pass the
	  option "console=lp0" to the kernel at boot time.

	  If the printer is out of paper (or off, or unplugged, or too
	  busy..) the kernel will stall until the printer is ready again.
	  By defining CONSOLE_LP_STRICT to 0 (at your own risk) you
	  can make the kernel continue when this happens,
	  but it'll lose the kernel messages.

	  If unsure, say N.

config PPDEV
	tristate "Support for user-space parallel port device drivers"
	depends on PARPORT
	---help---
	  Saying Y to this adds support for /dev/parport device nodes.  This
	  is needed for programs that want portable access to the parallel
	  port, for instance deviceid (which displays Plug-and-Play device
	  IDs).

	  This is the parallel port equivalent of SCSI generic support (sg).
	  It is safe to say N to this -- it is not needed for normal printing
	  or parallel port CD-ROM/disk support.

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

	  If unsure, say N.

config HVC_DRIVER
	bool
	help
	  Generic "hypervisor virtual console" infrastructure for various
	  hypervisors (pSeries, iSeries, Xen, lguest).
	  It will automatically be selected if one of the back-end console drivers
	  is selected.

config HVC_IRQ
	bool

config HVC_CONSOLE
	bool "pSeries Hypervisor Virtual Console support"
	depends on PPC_PSERIES
	select HVC_DRIVER
	select HVC_IRQ
	help
	  pSeries machines when partitioned support a hypervisor virtual
	  console. This driver allows each pSeries partition to have a console
	  which is accessed via the HMC.

config HVC_ISERIES
	bool "iSeries Hypervisor Virtual Console support"
	depends on PPC_ISERIES
	default y
	select HVC_DRIVER
	select HVC_IRQ
	select VIOPATH
	help
	  iSeries machines support a hypervisor virtual console.

config HVC_RTAS
	bool "IBM RTAS Console support"
	depends on PPC_RTAS
	select HVC_DRIVER
	help
	  IBM Console device driver which makes use of RTAS

config HVC_BEAT
	bool "Toshiba's Beat Hypervisor Console support"
	depends on PPC_CELLEB
	select HVC_DRIVER
	help
	  Toshiba's Cell Reference Set Beat Console device driver

config HVC_IUCV
	bool "z/VM IUCV Hypervisor console support (VM only)"
	depends on S390
	select HVC_DRIVER
	select IUCV
	default y
	help
	  This driver provides a Hypervisor console (HVC) back-end to access
	  a Linux (console) terminal via a z/VM IUCV communication path.

config HVC_XEN
	bool "Xen Hypervisor Console support"
	depends on XEN
	select HVC_DRIVER
	select HVC_IRQ
	default y
	help
	  Xen virtual console device driver

config HVC_UDBG
       bool "udbg based fake hypervisor console"
       depends on PPC && EXPERIMENTAL
       select HVC_DRIVER
       default n

config HVC_DCC
       bool "ARM JTAG DCC console"
       depends on ARM
       select HVC_DRIVER
       help
         This console uses the JTAG DCC on ARM to create a console under the HVC
	 driver. This console is used through a JTAG only on ARM. If you don't have
	 a JTAG then you probably don't want this option.

config VIRTIO_CONSOLE
	tristate "Virtio console"
	depends on VIRTIO
	select HVC_DRIVER
	help
	  Virtio console for use with lguest and other hypervisors.

	  Also serves as a general-purpose serial device for data
	  transfer between the guest and host.  Character devices at
	  /dev/vportNpn will be created when corresponding ports are
	  found, where N is the device number and n is the port number
	  within that device.  If specified by the host, a sysfs
	  attribute called 'name' will be populated with a name for
	  the port which can be used by udev scripts to create a
	  symlink to the device.

config HVCS
	tristate "IBM Hypervisor Virtual Console Server support"
	depends on PPC_PSERIES && HVC_CONSOLE
	help
	  Partitionable IBM Power5 ppc64 machines allow hosting of
	  firmware virtual consoles from one Linux partition by
	  another Linux partition.  This driver allows console data
	  from Linux partitions to be accessed through TTY device
	  interfaces in the device tree of a Linux partition running
	  this driver.

	  To compile this driver as a module, choose M here: the
	  module will be called hvcs.  Additionally, this module
	  will depend on arch specific APIs exported from hvcserver.ko
	  which will also be compiled when this driver is built as a
	  module.

config IBM_BSR
	tristate "IBM POWER Barrier Synchronization Register support"
	depends on PPC_PSERIES
	help
	  This devices exposes a hardware mechanism for fast synchronization
	  of threads across a large system which avoids bouncing a cacheline
	  between several cores on a system

source "drivers/char/ipmi/Kconfig"

config DS1620
	tristate "NetWinder thermometer support"
	depends on ARCH_NETWINDER
	help
	  Say Y here to include support for the thermal management hardware
	  found in the NetWinder. This driver allows the user to control the
	  temperature set points and to read the current temperature.

	  It is also possible to say M here to build it as a module (ds1620)
	  It is recommended to be used on a NetWinder, but it is not a
	  necessity.

config NWBUTTON
	tristate "NetWinder Button"
	depends on ARCH_NETWINDER
	---help---
	  If you say Y here and create a character device node /dev/nwbutton
	  with major and minor numbers 10 and 158 ("man mknod"), then every
	  time the orange button is pressed a number of times, the number of
	  times the button was pressed will be written to that device.

	  This is most useful for applications, as yet unwritten, which
	  perform actions based on how many times the button is pressed in a
	  row.

	  Do not hold the button down for too long, as the driver does not
	  alter the behaviour of the hardware reset circuitry attached to the
	  button; it will still execute a hard reset if the button is held
	  down for longer than approximately five seconds.

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

	  Most people will answer Y to this question and "Reboot Using Button"
	  below to be able to initiate a system shutdown from the button.

config NWBUTTON_REBOOT
	bool "Reboot Using Button"
	depends on NWBUTTON
	help
	  If you say Y here, then you will be able to initiate a system
	  shutdown and reboot by pressing the orange button a number of times.
	  The number of presses to initiate the shutdown is two by default,
	  but this can be altered by modifying the value of NUM_PRESSES_REBOOT
	  in nwbutton.h and recompiling the driver or, if you compile the
	  driver as a module, you can specify the number of presses at load
	  time with "insmod button reboot_count=<something>".

config NWFLASH
	tristate "NetWinder flash support"
	depends on ARCH_NETWINDER
	---help---
	  If you say Y here and create a character device /dev/flash with
	  major 10 and minor 160 you can manipulate the flash ROM containing
	  the NetWinder firmware. Be careful as accidentally overwriting the
	  flash contents can render your computer unbootable. On no account
	  allow random users access to this device. :-)

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

	  If you're not sure, say N.

source "drivers/char/hw_random/Kconfig"

config NVRAM
	tristate "/dev/nvram support"
	depends on ATARI || X86 || (ARM && RTC_DRV_CMOS) || GENERIC_NVRAM
	---help---
	  If you say Y here and create a character special file /dev/nvram
	  with major number 10 and minor number 144 using mknod ("man mknod"),
	  you get read and write access to the extra bytes of non-volatile
	  memory in the real time clock (RTC), which is contained in every PC
	  and most Ataris.  The actual number of bytes varies, depending on the
	  nvram in the system, but is usually 114 (128-14 for the RTC).

	  This memory is conventionally called "CMOS RAM" on PCs and "NVRAM"
	  on Ataris. /dev/nvram may be used to view settings there, or to
	  change them (with some utility). It could also be used to frequently
	  save a few bits of very important data that may not be lost over
	  power-off and for which writing to disk is too insecure. Note
	  however that most NVRAM space in a PC belongs to the BIOS and you
	  should NEVER idly tamper with it. See Ralf Brown's interrupt list
	  for a guide to the use of CMOS bytes by your BIOS.

	  On Atari machines, /dev/nvram is always configured and does not need
	  to be selected.

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

#
# These legacy RTC drivers just cause too many conflicts with the generic
# RTC framework ... let's not even try to coexist any more.
#
if RTC_LIB=n

config RTC
	tristate "Enhanced Real Time Clock Support (legacy PC RTC driver)"
	depends on !PPC && !PARISC && !IA64 && !M68K && !SPARC && !FRV \
			&& !ARM && !SUPERH && !S390 && !AVR32 && !BLACKFIN
	---help---
	  If you say Y here and create a character special file /dev/rtc with
	  major number 10 and minor number 135 using mknod ("man mknod"), you
	  will get access to the real time clock (or hardware clock) built
	  into your computer.

	  Every PC has such a clock built in. It can be used to generate
	  signals from as low as 1Hz up to 8192Hz, and can also be used
	  as a 24 hour alarm. It reports status information via the file
	  /proc/driver/rtc and its behaviour is set by various ioctls on
	  /dev/rtc.

	  If you run Linux on a multiprocessor machine and said Y to
	  "Symmetric Multi Processing" above, you should say Y here to read
	  and set the RTC in an SMP compatible fashion.

	  If you think you have a use for such a device (such as periodic data
	  sampling), then say Y here, and read <file:Documentation/rtc.txt>
	  for details.

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

config JS_RTC
	tristate "Enhanced Real Time Clock Support"
	depends on SPARC32 && PCI
	---help---
	  If you say Y here and create a character special file /dev/rtc with
	  major number 10 and minor number 135 using mknod ("man mknod"), you
	  will get access to the real time clock (or hardware clock) built
	  into your computer.

	  Every PC has such a clock built in. It can be used to generate
	  signals from as low as 1Hz up to 8192Hz, and can also be used
	  as a 24 hour alarm. It reports status information via the file
	  /proc/driver/rtc and its behaviour is set by various ioctls on
	  /dev/rtc.

	  If you think you have a use for such a device (such as periodic data
	  sampling), then say Y here, and read <file:Documentation/rtc.txt>
	  for details.

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

config GEN_RTC
	tristate "Generic /dev/rtc emulation"
	depends on RTC!=y && !IA64 && !ARM && !M32R && !MIPS && !SPARC && !FRV && !S390 && !SUPERH && !AVR32 && !BLACKFIN
	---help---
	  If you say Y here and create a character special file /dev/rtc with
	  major number 10 and minor number 135 using mknod ("man mknod"), you
	  will get access to the real time clock (or hardware clock) built
	  into your computer.

	  It reports status information via the file /proc/driver/rtc and its
	  behaviour is set by various ioctls on /dev/rtc. If you enable the
	  "extended RTC operation" below it will also provide an emulation
	  for RTC_UIE which is required by some programs and may improve
	  precision in some cases.

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

config GEN_RTC_X
	bool "Extended RTC operation"
	depends on GEN_RTC
	help
	  Provides an emulation for RTC_UIE which is required by some programs
	  and may improve precision of the generic RTC support in some cases.

config EFI_RTC
	bool "EFI Real Time Clock Services"
	depends on IA64

config DS1302
	tristate "DS1302 RTC support"
	depends on M32R && (PLAT_M32700UT || PLAT_OPSPUT)
	help
	  If you say Y here and create a character special file /dev/rtc with
	  major number 121 and minor number 0 using mknod ("man mknod"), you
	  will get access to the real time clock (or hardware clock) built
	  into your computer.

endif # RTC_LIB

config DTLK
	tristate "Double Talk PC internal speech card support"
	depends on ISA
	help
	  This driver is for the DoubleTalk PC, a speech synthesizer
	  manufactured by RC Systems (<http://www.rcsys.com/>).  It is also
	  called the `internal DoubleTalk'.

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

config XILINX_HWICAP
	tristate "Xilinx HWICAP Support"
	depends on XILINX_VIRTEX || MICROBLAZE
	help
	  This option enables support for Xilinx Internal Configuration
	  Access Port (ICAP) driver.  The ICAP is used on Xilinx Virtex
	  FPGA platforms to partially reconfigure the FPGA at runtime.

	  If unsure, say N.

config R3964
	tristate "Siemens R3964 line discipline"
	---help---
	  This driver allows synchronous communication with devices using the
	  Siemens R3964 packet protocol. Unless you are dealing with special
	  hardware like PLCs, you are unlikely to need this.

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

	  If unsure, say N.

config APPLICOM
	tristate "Applicom intelligent fieldbus card support"
	depends on PCI
	---help---
	  This driver provides the kernel-side support for the intelligent
	  fieldbus cards made by Applicom International. More information
	  about these cards can be found on the WWW at the address
	  <http://www.applicom-int.com/>, or by email from David Woodhouse
	  <dwmw2@infradead.org>.

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

	  If unsure, say N.

config SONYPI
	tristate "Sony Vaio Programmable I/O Control Device support (EXPERIMENTAL)"
	depends on EXPERIMENTAL && X86 && PCI && INPUT && !64BIT
	---help---
	  This driver enables access to the Sony Programmable I/O Control
	  Device which can be found in many (all ?) Sony Vaio laptops.

	  If you have one of those laptops, read
	  <file:Documentation/laptops/sonypi.txt>, and say Y or M here.

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

config GPIO_TB0219
	tristate "TANBAC TB0219 GPIO support"
	depends on TANBAC_TB022X
	select GPIO_VR41XX

source "drivers/char/pcmcia/Kconfig"

config MWAVE
	tristate "ACP Modem (Mwave) support"
	depends on X86
	select SERIAL_8250
	---help---
	  The ACP modem (Mwave) for Linux is a WinModem. It is composed of a
	  kernel driver and a user level application. Together these components
	  support direct attachment to public switched telephone networks (PSTNs)
	  and support selected world wide countries.

	  This version of the ACP Modem driver supports the IBM Thinkpad 600E,
	  600, and 770 that include on board ACP modem hardware.

	  The modem also supports the standard communications port interface
	  (ttySx) and is compatible with the Hayes AT Command Set.

	  The user level application needed to use this driver can be found at
	  the IBM Linux Technology Center (LTC) web site:
	  <http://www.ibm.com/linux/ltc/>.

	  If you own one of the above IBM Thinkpads which has the Mwave chipset
	  in it, say Y.

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

config SCx200_GPIO
	tristate "NatSemi SCx200 GPIO Support"
	depends on SCx200
	select NSC_GPIO
	help
	  Give userspace access to the GPIO pins on the National
	  Semiconductor SCx200 processors.

	  If compiled as a module, it will be called scx200_gpio.

config PC8736x_GPIO
	tristate "NatSemi PC8736x GPIO Support"
	depends on X86_32
	default SCx200_GPIO	# mostly N
	select NSC_GPIO		# needed for support routines
	help
	  Give userspace access to the GPIO pins on the National
	  Semiconductor PC-8736x (x=[03456]) SuperIO chip.  The chip
	  has multiple functional units, inc several managed by
	  hwmon/pc87360 driver.  Tested with PC-87366

	  If compiled as a module, it will be called pc8736x_gpio.

config NSC_GPIO
	tristate "NatSemi Base GPIO Support"
	depends on X86_32
	# selected by SCx200_GPIO and PC8736x_GPIO
	# what about 2 selectors differing: m != y
	help
	  Common support used (and needed) by scx200_gpio and
	  pc8736x_gpio drivers.  If those drivers are built as
	  modules, this one will be too, named nsc_gpio

config RAW_DRIVER
	tristate "RAW driver (/dev/raw/rawN)"
	depends on BLOCK
	help
	  The raw driver permits block devices to be bound to /dev/raw/rawN.
	  Once bound, I/O against /dev/raw/rawN uses efficient zero-copy I/O.
	  See the raw(8) manpage for more details.

          Applications should preferably open the device (eg /dev/hda1)
          with the O_DIRECT flag.

config MAX_RAW_DEVS
	int "Maximum number of RAW devices to support (1-8192)"
	depends on RAW_DRIVER
	default "256"
	help
	  The maximum number of RAW devices that are supported.
	  Default is 256. Increase this number in case you need lots of
	  raw devices.

config HPET
	bool "HPET - High Precision Event Timer" if (X86 || IA64)
	default n
	depends on ACPI
	help
	  If you say Y here, you will have a miscdevice named "/dev/hpet/".  Each
	  open selects one of the timers supported by the HPET.  The timers are
	  non-periodic and/or periodic.

config HPET_MMAP
	bool "Allow mmap of HPET"
	default y
	depends on HPET
	help
	  If you say Y here, user applications will be able to mmap
	  the HPET registers.

	  In some hardware implementations, the page containing HPET
	  registers may also contain other things that shouldn't be
	  exposed to the user.  If this applies to your hardware,
	  say N here.

config HANGCHECK_TIMER
	tristate "Hangcheck timer"
	depends on X86 || IA64 || PPC64 || S390
	help
	  The hangcheck-timer module detects when the system has gone
	  out to lunch past a certain margin.  It can reboot the system
	  or merely print a warning.

config MMTIMER
	tristate "MMTIMER Memory mapped RTC for SGI Altix"
	depends on IA64_GENERIC || IA64_SGI_SN2
	default y
	help
	  The mmtimer device allows direct userspace access to the
	  Altix system timer.

config UV_MMTIMER
	tristate "UV_MMTIMER Memory mapped RTC for SGI UV"
	depends on X86_UV
	default m
	help
	  The uv_mmtimer device allows direct userspace access to the
	  UV system timer.

source "drivers/char/tpm/Kconfig"

config TELCLOCK
	tristate "Telecom clock driver for ATCA SBC"
	depends on EXPERIMENTAL && X86
	default n
	help
	  The telecom clock device is specific to the MPCBL0010 and MPCBL0050
	  ATCA computers and allows direct userspace access to the
	  configuration of the telecom clock configuration settings.  This
	  device is used for hardware synchronization across the ATCA backplane
	  fabric.  Upon loading, the driver exports a sysfs directory,
	  /sys/devices/platform/telco_clock, with a number of files for
	  controlling the behavior of this hardware.

config DEVPORT
	bool
	depends on !M68K
	depends on ISA || PCI
	default y

source "drivers/s390/char/Kconfig"

config RAMOOPS
	tristate "Log panic/oops to a RAM buffer"
	depends on HAS_IOMEM
	default n
	help
	  This enables panic and oops messages to be logged to a circular
	  buffer in RAM where it can be read back at some later point.

endmenu

