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

config SERIO_I8042
	tristate "i8042 PC Keyboard controller" if EMBEDDED || !X86
	default y
	select SERIO
	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
	depends on SERIO
	---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 SERIO
	depends on !PARISC
	---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 && SERIO

config SERIO_PARKBD
	tristate "Parallel port keyboard adapter"
	depends on SERIO && 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) && SERIO
	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 && SERIO

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

config SERIO_GSCPS2
	tristate "HP GSC PS/2 keyboard and PS/2 mouse controller"
	depends on GSC && SERIO
	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 SERIO_PCIPS2
	tristate "PCI PS/2 keyboard and PS/2 mouse controller"
	depends on PCI && SERIO
	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 && SERIO
	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
	depends on SERIO
	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"
	depends on SERIO
	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/driver

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