#
# 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) && \
		   (!SUPERH || SH_CAYMAN) && !M68K && !BLACKFIN
	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
	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_AT32PSIF
	tristate "AVR32 PSIF PS/2 keyboard and mouse controller"
	depends on AVR32
	help
	  Say Y here if you want to use the PSIF peripheral on AVR32 devices
	  and connect a PS/2 keyboard and/or mouse to it.

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

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 || HP300) && SERIO
	default y
	help
	  This option enables support for the "System Device
	  Controller", an i8042 carrying microcode to manage a
	  few miscellaneous 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
	depends on SERIO_I8042 || SERIO_I8042=n
	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.

config SERIO_XILINX_XPS_PS2
	tristate "Xilinx XPS PS/2 Controller Support"
	depends on PPC || MICROBLAZE
	help
	  This driver supports XPS PS/2 IP from the Xilinx EDK on
	  PowerPC platform.

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

config SERIO_ALTERA_PS2
	tristate "Altera UP PS/2 controller"
	help
	  Say Y here if you have Altera University Program PS/2 ports.

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

config SERIO_AMS_DELTA
	tristate "Amstrad Delta (E3) mailboard support"
	depends on MACH_AMS_DELTA
	default y
	---help---
	  Say Y here if you have an E3 and want to use its mailboard,
	  or any standard AT keyboard connected to the mailboard port.

	  When used for the E3 mailboard, a non-standard key table
	  must be loaded from userspace, possibly using udev extras
	  provided keymap helper utility.

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

config SERIO_PS2MULT
	tristate "TQC PS/2 multiplexer"
	help
	  Say Y here if you have the PS/2 line multiplexer like the one
	  present on TQC boads.

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

endif
