# SPDX-License-Identifier: GPL-2.0-only
#
# Joystick driver configuration
#
menuconfig INPUT_JOYSTICK
	bool "Joysticks/Gamepads"
	depends on !UML
	help
	  If you have a joystick, 6dof controller, gamepad, steering wheel,
	  weapon control system or something like that you can say Y here
	  and the list of supported devices will be displayed. This option
	  doesn't affect the kernel.

	  Please read the file <file:Documentation/input/joydev/joystick.rst> which
	  contains more information.

if INPUT_JOYSTICK

config JOYSTICK_ANALOG
	tristate "Classic PC analog joysticks and gamepads"
	select GAMEPORT
	help
	  Say Y here if you have a joystick that connects to the PC
	  gameport. In addition to the usual PC analog joystick, this driver
	  supports many extensions, including joysticks with throttle control,
	  with rudders, additional hats and buttons compatible with CH
	  Flightstick Pro, ThrustMaster FCS, 6 and 8 button gamepads, or
	  Saitek Cyborg joysticks.

	  Please read the file <file:Documentation/input/joydev/joystick.rst> which
	  contains more information.

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

config JOYSTICK_A3D
	tristate "Assassin 3D and MadCatz Panther devices"
	select GAMEPORT
	help
	  Say Y here if you have an FPGaming or MadCatz controller using the
	  A3D protocol over the PC gameport.

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

config JOYSTICK_ADC
	tristate "Simple joystick connected over ADC"
	depends on IIO
	select IIO_BUFFER
	select IIO_BUFFER_CB
	help
	  Say Y here if you have a simple joystick connected over ADC.

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

config JOYSTICK_ADI
	tristate "Logitech ADI digital joysticks and gamepads"
	select GAMEPORT
	depends on ADI!=m # avoid module name conflict
	help
	  Say Y here if you have a Logitech controller using the ADI
	  protocol over the PC gameport.

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

config JOYSTICK_COBRA
	tristate "Creative Labs Blaster Cobra gamepad"
	select GAMEPORT
	help
	  Say Y here if you have a Creative Labs Blaster Cobra gamepad.

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

config JOYSTICK_GF2K
	tristate "Genius Flight2000 Digital joysticks and gamepads"
	select GAMEPORT
	help
	  Say Y here if you have a Genius Flight2000 or MaxFighter digitally
	  communicating joystick or gamepad.

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

config JOYSTICK_GRIP
	tristate "Gravis GrIP joysticks and gamepads"
	select GAMEPORT
	help
	  Say Y here if you have a Gravis controller using the GrIP protocol
	  over the PC gameport.

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

config JOYSTICK_GRIP_MP
	tristate "Gravis GrIP MultiPort"
	select GAMEPORT
	help
	  Say Y here if you have the original Gravis GrIP MultiPort, a hub
	  that connects to the gameport and you connect gamepads to it.

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

config JOYSTICK_GUILLEMOT
	tristate "Guillemot joysticks and gamepads"
	select GAMEPORT
	help
	  Say Y here if you have a Guillemot joystick using a digital
	  protocol over the PC gameport.

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

config JOYSTICK_INTERACT
	tristate "InterAct digital joysticks and gamepads"
	select GAMEPORT
	help
	  Say Y here if you have an InterAct gameport or joystick
	  communicating digitally over the gameport.

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

config JOYSTICK_SIDEWINDER
	tristate "Microsoft SideWinder digital joysticks and gamepads"
	select GAMEPORT
	help
	  Say Y here if you have a Microsoft controller using the Digital
	  Overdrive protocol over PC gameport.

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

config JOYSTICK_TMDC
	tristate "ThrustMaster DirectConnect joysticks and gamepads"
	select GAMEPORT
	help
	  Say Y here if you have a ThrustMaster controller using the
	  DirectConnect (BSP) protocol over the PC gameport.

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

source "drivers/input/joystick/iforce/Kconfig"

config JOYSTICK_WARRIOR
	tristate "Logitech WingMan Warrior joystick"
	select SERIO
	help
	  Say Y here if you have a Logitech WingMan Warrior joystick connected
	  to your computer's serial port.

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

config JOYSTICK_MAGELLAN
	tristate "LogiCad3d Magellan/SpaceMouse 6dof controllers"
	select SERIO
	help
	  Say Y here if you have a Magellan or Space Mouse 6DOF controller
	  connected to your computer's serial port.

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

config JOYSTICK_SPACEORB
	tristate "SpaceTec SpaceOrb/Avenger 6dof controllers"
	select SERIO
	help
	  Say Y here if you have a SpaceOrb 360 or SpaceBall Avenger 6DOF
	  controller connected to your computer's serial port.

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

config JOYSTICK_SPACEBALL
	tristate "SpaceTec SpaceBall 6dof controllers"
	select SERIO
	help
	  Say Y here if you have a SpaceTec SpaceBall 2003/3003/4000 FLX
	  controller connected to your computer's serial port. For the
	  SpaceBall 4000 USB model, use the USB HID driver.

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

config JOYSTICK_STINGER
	tristate "Gravis Stinger gamepad"
	select SERIO
	help
	  Say Y here if you have a Gravis Stinger connected to one of your
	  serial ports.

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

config JOYSTICK_TWIDJOY
	tristate "Twiddler as a joystick"
	select SERIO
	help
	  Say Y here if you have a Handykey Twiddler connected to your
	  computer's serial port and want to use it as a joystick.

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

config JOYSTICK_ZHENHUA
	tristate "5-byte Zhenhua RC transmitter"
	select SERIO
	select BITREVERSE
	help
	  Say Y here if you have a Zhen Hua PPM-4CH transmitter which is
	  supplied with a ready to fly micro electric indoor helicopters
	  such as EasyCopter, Lama, MiniCopter, DragonFly or Jabo and want
	  to use it via serial cable as a joystick.

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

config JOYSTICK_DB9
	tristate "Multisystem, Sega Genesis, Saturn joysticks and gamepads"
	depends on PARPORT
	help
	  Say Y here if you have a Sega Master System gamepad, Sega Genesis
	  gamepad, Sega Saturn gamepad, or a Multisystem -- Atari, Amiga,
	  Commodore, Amstrad CPC joystick connected to your parallel port.
	  For more information on how to use the driver please read
	  <file:Documentation/input/devices/joystick-parport.rst>.

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

config JOYSTICK_GAMECON
	tristate "Multisystem, NES, SNES, N64, PSX joysticks and gamepads"
	depends on PARPORT
	select INPUT_FF_MEMLESS
	help
	  Say Y here if you have a Nintendo Entertainment System gamepad,
	  Super Nintendo Entertainment System gamepad, Nintendo 64 gamepad,
	  Sony PlayStation gamepad or a Multisystem -- Atari, Amiga,
	  Commodore, Amstrad CPC joystick connected to your parallel port.
	  For more information on how to use the driver please read
	  <file:Documentation/input/devices/joystick-parport.rst>.

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

config JOYSTICK_TURBOGRAFX
	tristate "Multisystem joysticks via TurboGraFX device"
	depends on PARPORT
	help
	  Say Y here if you have the TurboGraFX interface by Steffen Schwenke,
	  and want to use it with Multisystem -- Atari, Amiga, Commodore,
	  Amstrad CPC joystick. For more information on how to use the driver
	  please read <file:Documentation/input/devices/joystick-parport.rst>.

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

config JOYSTICK_AMIGA
	tristate "Amiga joysticks"
	depends on AMIGA
	help
	  Say Y here if you have an Amiga with a digital joystick connected
	  to it.

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

config JOYSTICK_AS5011
	tristate "Austria Microsystem AS5011 joystick"
	depends on I2C
	help
	  Say Y here if you have an AS5011 digital joystick connected to your
	  system.

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

config JOYSTICK_JOYDUMP
	tristate "Gameport data dumper"
	select GAMEPORT
	help
	  Say Y here if you want to dump data from your joystick into the system
	  log for debugging purposes. Say N if you are making a production
	  configuration or aren't sure.

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

config JOYSTICK_XPAD
	tristate "Xbox gamepad support"
	depends on USB_ARCH_HAS_HCD
	select USB
	help
	  Say Y here if you want to use Xbox pads with your computer.
	  Make sure to say Y to "Joystick support" (CONFIG_INPUT_JOYDEV)
	  and/or "Event interface support" (CONFIG_INPUT_EVDEV) as well.

	  For information about how to connect the Xbox pad to USB, see
	  <file:Documentation/input/devices/xpad.rst>.

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

config JOYSTICK_XPAD_FF
	bool "Xbox gamepad rumble support"
	depends on JOYSTICK_XPAD && INPUT
	select INPUT_FF_MEMLESS
	help
	  Say Y here if you want to take advantage of Xbox 360 rumble features.

config JOYSTICK_XPAD_LEDS
	bool "LED Support for the Xbox 360 controller Guide button"
	depends on JOYSTICK_XPAD && (LEDS_CLASS=y || LEDS_CLASS=JOYSTICK_XPAD)
	help
	  This option enables support for the LED which surrounds the Big X on
	  Xbox 360 controllers.

config JOYSTICK_WALKERA0701
	tristate "Walkera WK-0701 RC transmitter"
	depends on HIGH_RES_TIMERS && PARPORT
	help
	  Say Y or M here if you have a Walkera WK-0701 transmitter which is
	  supplied with a ready to fly Walkera helicopters such as HM36,
	  HM37, HM60 and want to use it via parport as a joystick. More
	  information is available: <file:Documentation/input/devices/walkera0701.rst>

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

config JOYSTICK_MAPLE
	tristate "Dreamcast control pad"
	depends on MAPLE
	help
	  Say Y here if you have a SEGA Dreamcast and want to use your
	  controller as a joystick.

	  Most Dreamcast users will say Y.

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

config JOYSTICK_PSXPAD_SPI
	tristate "PlayStation 1/2 joypads via SPI interface"
	depends on SPI
	help
	  Say Y here if you wish to connect PlayStation 1/2 joypads
	  via SPI interface.

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

config JOYSTICK_PSXPAD_SPI_FF
	bool "PlayStation 1/2 joypads force feedback (rumble) support"
	depends on JOYSTICK_PSXPAD_SPI
	select INPUT_FF_MEMLESS
	help
	  Say Y here if you want to take advantage of PlayStation 1/2
	  joypads rumble features.

	  To drive rumble motor a dedicated power supply is required.

config JOYSTICK_PXRC
	tristate "PhoenixRC Flight Controller Adapter"
	depends on USB_ARCH_HAS_HCD
	select USB
	help
	  Say Y here if you want to use the PhoenixRC Flight Controller Adapter.

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

config JOYSTICK_QWIIC
	tristate "SparkFun Qwiic Joystick"
	depends on I2C
	help
	  Say Y here if you want to use the SparkFun Qwiic Joystick.

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

config JOYSTICK_FSIA6B
	tristate "FlySky FS-iA6B RC Receiver"
	select SERIO
	help
	  Say Y here if you use a FlySky FS-i6 RC remote control along with the
	  FS-iA6B RC receiver as a joystick input device.

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

config JOYSTICK_N64
	bool "N64 controller"
	depends on MACH_NINTENDO64
	help
	  Say Y here if you want enable support for the four
	  built-in controller ports on the Nintendo 64 console.

config JOYSTICK_SENSEHAT
	tristate "Raspberry Pi Sense HAT joystick"
	depends on INPUT && I2C
	depends on HAS_IOMEM
	select MFD_SIMPLE_MFD_I2C
	help
	  Say Y here if you want to enable the driver for the
	  the Raspberry Pi Sense HAT.

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

config JOYSTICK_SEESAW
	tristate "Adafruit Mini I2C Gamepad with Seesaw"
	depends on I2C
	select INPUT_SPARSEKMAP
	help
	  Say Y here if you want to use the Adafruit Mini I2C Gamepad.

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

endif
