#
# Character device configuration
#

menu "Character devices"

config VT
	bool "Virtual terminal" if EXPERT
	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 EXPERT
	---help---
	  This enables support for font mapping and Unicode translation
	  on virtual consoles.

config VT_CONSOLE
	bool "Support for console on virtual terminal" if EXPERT
	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 EXPERT
	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 EXPERT
	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 HVC_BFIN_JTAG
	bool "Blackfin JTAG console"
	depends on BLACKFIN
	select HVC_DRIVER
	help
	 This console uses the Blackfin JTAG to create a console under the
	 the HVC driver.  If you don't have 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

