# 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_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 "X-Box gamepad support"
	depends on USB_ARCH_HAS_HCD
	select USB
	help
	  Say Y here if you want to use the X-Box pad 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 X-Box 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 "X-Box 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 Xbox360 controller 'BigX' LED"
	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 controller.

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.

endif
