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