# SPDX-License-Identifier: GPL-2.0-only
#
# Input core configuration
#
config SERIO
	tristate "Serial I/O support"
	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 ARCH_MIGHT_HAVE_PC_SERIO
	bool
	help
	  Select this config option from the architecture Kconfig if
	  the architecture might use a PC serio device (i8042) to
	  communicate with keyboard, mouse, etc.

if SERIO

config SERIO_I8042
	tristate "i8042 PC Keyboard controller"
	default y
	depends on ARCH_MIGHT_HAVE_PC_SERIO
	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 TTY
	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.rst>

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

	  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_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
	depends on HAS_IOPORT
	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_SGI_IOC3
	tristate "SGI IOC3 PS/2 controller"
	depends on SGI_MFD_IOC3
	help
	  Say Y here if you have an SGI Onyx2, SGI Octane or IOC3 PCI card
	  and you want to attach and use a keyboard, mouse, or both.

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

config SERIO_LIBPS2
	tristate "PS/2 driver library"
	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"
	depends on HAS_IOMEM
	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 boards.

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

config SERIO_ARC_PS2
	tristate "ARC PS/2 support"
	depends on HAS_IOMEM
	help
	  Say Y here if you have an ARC FPGA platform with a PS/2
	  controller in it.

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

config SERIO_APBPS2
	tristate "GRLIB APBPS2 PS/2 keyboard/mouse controller"
	depends on OF && HAS_IOMEM
	help
	  Say Y here if you want support for GRLIB APBPS2 peripherals used
	  to connect to PS/2 keyboard and/or mouse.

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

config SERIO_OLPC_APSP
	tristate "OLPC AP-SP input support"
	depends on ARCH_MMP || COMPILE_TEST
	help
	  Say Y here if you want support for the keyboard and touchpad included
	  in the OLPC XO-1.75 and XO-4 laptops.

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

config HYPERV_KEYBOARD
	tristate "Microsoft Synthetic Keyboard driver"
	depends on HYPERV
	default HYPERV
	help
	  Select this option to enable the Hyper-V Keyboard driver.

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

config SERIO_SUN4I_PS2
	tristate "Allwinner A10 PS/2 controller support"
	depends on ARCH_SUNXI || COMPILE_TEST
	help
	  This selects support for the PS/2 Host Controller on
	  Allwinner A10.

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

config SERIO_GPIO_PS2
	tristate "GPIO PS/2 bit banging driver"
	depends on GPIOLIB
	help
	  Say Y here if you want PS/2 bit banging support via GPIO.

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

	  If you are unsure, say N.

config USERIO
	tristate "User space serio port driver support"
	help
	  Say Y here if you want to support user level drivers for serio
	  subsystem accessible under char device 10:240 - /dev/userio. Using
	  this facility userspace programs can implement serio ports that
	  will be used by the standard in-kernel serio consumer drivers,
	  such as psmouse and atkbd.

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

	  If you are unsure, say N.

endif
