# SPDX-License-Identifier: GPL-2.0-only
#
# Mouse driver configuration
#
menuconfig INPUT_MOUSE
	bool "Mice"
	default y
	help
	  Say Y here, and a list of supported mice will be displayed.
	  This option doesn't affect the kernel.

	  If unsure, say Y.

if INPUT_MOUSE

config MOUSE_PS2
	tristate "PS/2 mouse"
	default y
	select SERIO
	select SERIO_LIBPS2
	select SERIO_I8042 if ARCH_MIGHT_HAVE_PC_SERIO
	select SERIO_GSCPS2 if GSC
	help
	  Say Y here if you have a PS/2 mouse connected to your system. This
	  includes the standard 2 or 3-button PS/2 mouse, as well as PS/2
	  mice with wheels and extra buttons, Microsoft, Logitech or Genius
	  compatible.

	  Synaptics, ALPS or Elantech TouchPad users might be interested
	  in a specialized Xorg/XFree86 driver at:
		<http://w1.894.telia.com/~u89404340/touchpad/index.html>
	  and a new version of GPM at:
		<http://www.geocities.com/dt_or/gpm/gpm.html>
		<http://xorg.freedesktop.org/archive/individual/driver/>
	  to take advantage of the advanced features of the touchpad.

	  If unsure, say Y.

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

config MOUSE_PS2_ALPS
	bool "ALPS PS/2 mouse protocol extension" if EXPERT
	default y
	depends on MOUSE_PS2
	help
	  Say Y here if you have an ALPS PS/2 touchpad connected to
	  your system.

	  If unsure, say Y.

config MOUSE_PS2_BYD
	bool "BYD PS/2 mouse protocol extension" if EXPERT
	default y
	depends on MOUSE_PS2
	help
	  Say Y here if you have a BYD PS/2 touchpad connected to
	  your system.

	  If unsure, say Y.

config MOUSE_PS2_LOGIPS2PP
	bool "Logitech PS/2++ mouse protocol extension" if EXPERT
	default y
	depends on MOUSE_PS2
	help
	  Say Y here if you have a Logitech PS/2++ mouse connected to
	  your system.

	  If unsure, say Y.

config MOUSE_PS2_SYNAPTICS
	bool "Synaptics PS/2 mouse protocol extension" if EXPERT
	default y
	depends on MOUSE_PS2
	help
	  Say Y here if you have a Synaptics PS/2 TouchPad connected to
	  your system.

	  If unsure, say Y.

config MOUSE_PS2_SYNAPTICS_SMBUS
	bool "Synaptics PS/2 SMbus companion" if EXPERT
	default y
	depends on MOUSE_PS2
	depends on I2C=y || I2C=MOUSE_PS2
	select MOUSE_PS2_SMBUS
	help
	  Say Y here if you have a Synaptics RMI4 touchpad connected to
	  to an SMBus, but enumerated through PS/2.

	  If unsure, say Y.

config MOUSE_PS2_CYPRESS
	bool "Cypress PS/2 mouse protocol extension" if EXPERT
	default y
	depends on MOUSE_PS2
	help
	  Say Y here if you have a Cypress PS/2 Trackpad connected to
	  your system.

	  If unsure, say Y.

config MOUSE_PS2_LIFEBOOK
	bool "Fujitsu Lifebook PS/2 mouse protocol extension" if EXPERT
	default y
	depends on MOUSE_PS2 && X86 && DMI
	help
	  Say Y here if you have a Fujitsu B-series Lifebook PS/2
	  TouchScreen connected to your system.

	  If unsure, say Y.

config MOUSE_PS2_TRACKPOINT
	bool "IBM Trackpoint PS/2 mouse protocol extension" if EXPERT
	default y
	depends on MOUSE_PS2
	help
	  Say Y here if you have an IBM Trackpoint PS/2 mouse connected
	  to your system.

	  If unsure, say Y.

config MOUSE_PS2_ELANTECH
	bool "Elantech PS/2 protocol extension"
	depends on MOUSE_PS2
	help
	  Say Y here if you have an Elantech PS/2 touchpad connected
	  to your system.

	  This driver exposes some configuration registers via sysfs
	  entries. For further information,
	  see <file:Documentation/input/devices/elantech.rst>.

	  If unsure, say N.

config MOUSE_PS2_ELANTECH_SMBUS
	bool "Elantech PS/2 SMbus companion" if EXPERT
	default y
	depends on MOUSE_PS2 && MOUSE_PS2_ELANTECH
	depends on I2C=y || I2C=MOUSE_PS2
	select MOUSE_PS2_SMBUS
	help
	  Say Y here if you have a Elantech touchpad connected to
	  to an SMBus, but enumerated through PS/2.

	  If unsure, say Y.

config MOUSE_PS2_SENTELIC
	bool "Sentelic Finger Sensing Pad PS/2 protocol extension"
	depends on MOUSE_PS2
	help
	  Say Y here if you have a laptop (such as MSI WIND Netbook)
	  with Sentelic Finger Sensing Pad touchpad.

	  If unsure, say N.

config MOUSE_PS2_TOUCHKIT
	bool "eGalax TouchKit PS/2 protocol extension"
	depends on MOUSE_PS2
	help
	  Say Y here if you have an eGalax TouchKit PS/2 touchscreen
	  connected to your system.

	  If unsure, say N.

config MOUSE_PS2_OLPC
	bool "OLPC PS/2 mouse protocol extension"
	depends on MOUSE_PS2 && OLPC
	help
	  Say Y here if you have an OLPC XO-1 laptop (with built-in
	  PS/2 touchpad/tablet device).  The manufacturer calls the
	  touchpad an HGPK.

	  If unsure, say N.

config MOUSE_PS2_FOCALTECH
	bool "FocalTech PS/2 mouse protocol extension" if EXPERT
	default y
	depends on MOUSE_PS2
	help
	  Say Y here if you have a FocalTech PS/2 TouchPad connected to
	  your system.

	  If unsure, say Y.

config MOUSE_PS2_VMMOUSE
	bool "Virtual mouse (vmmouse)"
	depends on MOUSE_PS2 && X86 && HYPERVISOR_GUEST
	help
	  Say Y here if you are running under control of VMware hypervisor
	  (ESXi, Workstation or Fusion). Also make sure that when you enable
	  this option, you remove the xf86-input-vmmouse user-space driver
	  or upgrade it to at least xf86-input-vmmouse 13.1.0, which doesn't
	  load in the presence of an in-kernel vmmouse driver.

	  If unsure, say N.

config MOUSE_PS2_SMBUS
	bool
	depends on MOUSE_PS2

config MOUSE_SERIAL
	tristate "Serial mouse"
	select SERIO
	help
	  Say Y here if you have a serial (RS-232, COM port) mouse connected
	  to your system. This includes Sun, MouseSystems, Microsoft,
	  Logitech and all other compatible serial mice.

	  If unsure, say N.

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

config MOUSE_APPLETOUCH
	tristate "Apple USB Touchpad support"
	depends on USB_ARCH_HAS_HCD
	select USB
	help
	  Say Y here if you want to use an Apple USB Touchpad.

	  These are the touchpads that can be found on post-February 2005
	  Apple Powerbooks (prior models have a Synaptics touchpad connected
	  to the ADB bus).

	  This driver provides a basic mouse driver but can be interfaced
	  with the synaptics X11 driver to provide acceleration and
	  scrolling in X11.

	  For further information, see
	  <file:Documentation/input/devices/appletouch.rst>.

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

config MOUSE_BCM5974
	tristate "Apple USB BCM5974 Multitouch trackpad support"
	depends on USB_ARCH_HAS_HCD
	select USB
	help
	  Say Y here if you have an Apple USB BCM5974 Multitouch
	  trackpad.

	  The BCM5974 is the multitouch trackpad found in the Macbook
	  Air (JAN2008) and Macbook Pro Penryn (FEB2008) laptops.

	  It is also found in the IPhone (2007) and Ipod Touch (2008).

	  This driver provides multitouch functionality together with
	  the synaptics X11 driver.

	  The interface is currently identical to the appletouch interface,
	  for further information, see
	  <file:Documentation/input/devices/appletouch.rst>.

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

config MOUSE_CYAPA
	tristate "Cypress APA I2C Trackpad support"
	depends on I2C
	select CRC_ITU_T
	help
	  This driver adds support for Cypress All Points Addressable (APA)
	  I2C Trackpads, including the ones used in 2012 Samsung Chromebooks.

	  Say Y here if you have a Cypress APA I2C Trackpad.

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

config MOUSE_ELAN_I2C
	tristate "ELAN I2C Touchpad support"
	depends on I2C
	help
	  This driver adds support for Elan I2C/SMbus Trackpads.

	  Say Y here if you have a ELAN I2C/SMbus Touchpad.

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

config MOUSE_ELAN_I2C_I2C
	bool "Enable I2C support"
	depends on MOUSE_ELAN_I2C
	default y
	help
	   Say Y here if Elan Touchpad in your system is connected to
	   a standard I2C controller.

	   If unsure, say Y.

config MOUSE_ELAN_I2C_SMBUS
	bool "Enable SMbus support"
	depends on MOUSE_ELAN_I2C
	help
	   Say Y here if Elan Touchpad in your system is connected to
	   a SMbus adapter.

	   If unsure, say Y.

config MOUSE_INPORT
	tristate "InPort/MS/ATIXL busmouse"
	depends on ISA
	help
	  Say Y here if you have an InPort, Microsoft or ATI XL busmouse.
	  They are rather rare these days.

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

config MOUSE_ATIXL
	bool "ATI XL variant"
	depends on MOUSE_INPORT
	help
	  Say Y here if your mouse is of the ATI XL variety.

config MOUSE_LOGIBM
	tristate "Logitech busmouse"
	depends on ISA
	help
	  Say Y here if you have a Logitech busmouse.
	  They are rather rare these days.

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

config MOUSE_PC110PAD
	tristate "IBM PC110 touchpad"
	depends on ISA
	help
	  Say Y if you have the IBM PC-110 micro-notebook and want its
	  touchpad supported.

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

config MOUSE_AMIGA
	tristate "Amiga mouse"
	depends on AMIGA
	help
	  Say Y here if you have an Amiga and want its native mouse
	  supported by the kernel.

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

config MOUSE_ATARI
	tristate "Atari mouse"
	depends on ATARI
	select ATARI_KBD_CORE
	help
	  Say Y here if you have an Atari and want its native mouse
	  supported by the kernel.

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

config MOUSE_RISCPC
	tristate "Acorn RiscPC mouse"
	depends on ARCH_ACORN
	help
	  Say Y here if you have the Acorn RiscPC computer and want its
	  native mouse supported.

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

config MOUSE_VSXXXAA
	tristate "DEC VSXXX-AA/GA mouse and VSXXX-AB tablet"
	select SERIO
	help
	  Say Y (or M) if you want to use a DEC VSXXX-AA (hockey
	  puck) or a VSXXX-GA (rectangular) mouse. Theses mice are
	  typically used on DECstations or VAXstations, but can also
	  be used on any box capable of RS232 (with some adaptor
	  described in the source file). This driver also works with the
	  digitizer (VSXXX-AB) DEC produced.

config MOUSE_GPIO
	tristate "GPIO mouse"
	depends on GPIOLIB || COMPILE_TEST
	help
	  This driver simulates a mouse on GPIO lines of various CPUs (and some
	  other chips).

	  Say Y here if your device has buttons or a simple joystick connected
	  directly to GPIO lines. Your board-specific setup logic must also
	  provide a platform device and platform data saying which GPIOs are
	  used.

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

config MOUSE_PXA930_TRKBALL
	tristate "PXA930 Trackball mouse"
	depends on CPU_PXA930 || CPU_PXA935
	help
	  Say Y here to support PXA930 Trackball mouse.

config MOUSE_MAPLE
	tristate "Maple mouse (for the Dreamcast)"
	depends on MAPLE
	help
	  This driver supports the Maple mouse on the SEGA Dreamcast.

	  Most Dreamcast users, who have a mouse, will say Y here.

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

config MOUSE_SYNAPTICS_I2C
	tristate "Synaptics I2C Touchpad support"
	depends on I2C
	help
	  This driver supports Synaptics I2C touchpad controller on eXeda
	  mobile device.
	  The device will not work the synaptics X11 driver because
	  (i) it  reports only relative coordinates and has no capabilities
	  to report absolute coordinates
	  (ii) the eXeda device itself uses Xfbdev as X Server and it does
	  not allow using xf86-input-* drivers.

	  Say y here if you have eXeda device and want to use a Synaptics
	  I2C Touchpad.

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

config MOUSE_SYNAPTICS_USB
	tristate "Synaptics USB device support"
	depends on USB_ARCH_HAS_HCD
	select USB
	help
	  Say Y here if you want to use a Synaptics USB touchpad or pointing
	  stick.

	  While these devices emulate an USB mouse by default and can be used
	  with standard usbhid driver, this driver, together with its X.Org
	  counterpart, allows you to fully utilize capabilities of the device.
	  More information can be found at:
	  <http://jan-steinhoff.de/linux/synaptics-usb.html>

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

config MOUSE_NAVPOINT_PXA27x
	tristate "Synaptics NavPoint (PXA27x SSP/SPI)"
	depends on PXA27x && PXA_SSP
	help
	  This driver adds support for the Synaptics NavPoint touchpad connected
	  to a PXA27x SSP port in SPI slave mode. The device emulates a mouse;
	  a tap or tap-and-a-half drag gesture emulates the left mouse button.
	  For example, use the xf86-input-evdev driver for an X pointing device.

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

endif
