#
# Input core configuration
#
config SERIO
	tristate "Serial I/O support" if EMBEDDED || !X86
	default y
	---help---
	  Say Yes here if you have any input device that uses serial I/O to
	  communicate with the system. This includes the
	  		* standard AT keyboard and PS/2 mouse *
	  as well as serial mice, Sun keyboards, some joysticks and 6dof
	  devices and more.

	  If unsure, say Y.

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

if SERIO

config SERIO_I8042
	tristate "i8042 PC Keyboard controller" if EMBEDDED || !X86
	default y
	depends on !PARISC && (!ARM || ARCH_SHARK || FOOTBRIDGE_HOST) && !M68K
	---help---
	  i8042 is the chip over which the standard AT keyboard and PS/2
	  mouse are connected to the computer. If you use these devices,
	  you'll need to say Y here.

	  If unsure, say Y.

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

config SERIO_SERPORT
	tristate "Serial port line discipline"
	default y
	---help---
	  Say Y here if you plan to use an input device (mouse, joystick,
	  tablet, 6dof) that communicates over the RS232 serial (COM) port.

	  More information is available: <file:Documentation/input/input.txt>

	  If unsure, say Y.

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

config SERIO_CT82C710
	tristate "ct82c710 Aux port controller"
	depends on X86
	---help---
	  Say Y here if you have a Texas Instruments TravelMate notebook
	  equipped with the ct82c710 chip and want to use a mouse connected
	  to the "QuickPort".

	  If unsure, say N.

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

config SERIO_Q40KBD
	tristate "Q40 keyboard controller"
	depends on Q40

config SERIO_PARKBD
	tristate "Parallel port keyboard adapter"
	depends on PARPORT
	---help---
	  Say Y here if you built a simple parallel port adapter to attach
	  an additional AT keyboard, XT keyboard or PS/2 mouse.

	  More information is available: <file:Documentation/input/input.txt>

	  If unsure, say N.

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

config SERIO_RPCKBD
	tristate "Acorn RiscPC keyboard controller"
	depends on ARCH_ACORN || ARCH_CLPS7500
	default y
	help
	  Say Y here if you have the Acorn RiscPC and want to use an AT
	  keyboard connected to its keyboard controller.

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

config SERIO_AMBAKMI
	tristate "AMBA KMI keyboard controller"
	depends on ARM_AMBA

config SERIO_SA1111
	tristate "Intel SA1111 keyboard controller"
	depends on SA1111

config SERIO_GSCPS2
	tristate "HP GSC PS/2 keyboard and PS/2 mouse controller"
	depends on GSC
	default y
	help
	  This driver provides support for the PS/2 ports on PA-RISC machines
	  over which HP PS/2 keyboards and PS/2 mice may be connected.
	  If you use these devices, you'll need to say Y here.

	  It's safe to enable this driver, so if unsure, say Y.

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

config HP_SDC
	tristate "HP System Device Controller i8042 Support"
	depends on GSC && SERIO
	default y
	---help---
	  This option enables supports for the the "System Device
	  Controller", an i8042 carrying microcode to manage a
	  few miscellanous devices on some Hewlett Packard systems.
	  The SDC itself contains a 10ms resolution timer/clock capable
	  of delivering interrupts on a periodic and one-shot basis.
	  The SDC may also be connected to a battery-backed real-time
	  clock, a basic audio waveform generator, and an HP-HIL Master
	  Link Controller serving up to seven input devices.

	  By itself this option is rather useless, but enabling it will
	  enable selection of drivers for the abovementioned devices.
	  It is, however, incompatible with the old, reliable HIL keyboard
	  driver, and the new HIL driver is experimental, so if you plan
	  to use a HIL keyboard as your primary keyboard, you may wish
	  to keep using that driver until the new HIL drivers have had
	  more testing.

config HIL_MLC
	tristate "HIL MLC Support (needed for HIL input devices)"
	depends on HP_SDC

config SERIO_PCIPS2
	tristate "PCI PS/2 keyboard and PS/2 mouse controller"
	depends on PCI
	help
	  Say Y here if you have a Mobility Docking station with PS/2
	  keyboard and mice ports.

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

config SERIO_MACEPS2
	tristate "SGI O2 MACE PS/2 controller"
	depends on SGI_IP32
	help
	  Say Y here if you have SGI O2 workstation and want to use its
	  PS/2 ports.

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

config SERIO_LIBPS2
	tristate "PS/2 driver library" if EMBEDDED
	help
	  Say Y here if you are using a driver for device connected
	  to a PS/2 port, such as PS/2 mouse or standard AT keyboard.

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

config SERIO_RAW
	tristate "Raw access to serio ports"
	help
	  Say Y here if you want to have raw access to serio ports, such as
	  AUX ports on i8042 keyboard controller. Each serio port that is
	  bound to this driver will be accessible via a char device with
	  major 10 and dynamically allocated minor. The driver will try
	  allocating minor 1 (that historically corresponds to /dev/psaux)
	  first. To bind this driver to a serio port use sysfs interface:

	      echo -n "serio_raw" > /sys/bus/serio/devices/serioX/drvctl

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

endif
