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