# SPDX-License-Identifier: GPL-2.0-only
#
# Gameport configuration
#
config GAMEPORT
	tristate "Gameport support"
	depends on !UML
	help
	  Gameport support is for the standard 15-pin PC gameport. If you
	  have a joystick, gamepad, gameport card, a soundcard with a gameport
	  or anything else that uses the gameport, say Y or M here and also to
	  at least one of the hardware specific drivers.

	  For Ensoniq AudioPCI (ES1370), AudioPCI 97 (ES1371), ESS Solo1,
	  S3 SonicVibes, Trident 4DWave, SiS7018, and ALi 5451 gameport
	  support is provided by the sound drivers, so you won't need any
	  from the below listed modules. You still need to say Y here.

	  If unsure, say Y.

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

if GAMEPORT

config GAMEPORT_NS558
	tristate "Classic ISA and PnP gameport support"
	depends on ISA
	help
	  Say Y here if you have an ISA or PnP gameport.

	  If unsure, say Y.

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

config GAMEPORT_L4
	tristate "PDPI Lightning 4 gamecard support"
	depends on ISA
	help
	  Say Y here if you have a PDPI Lightning 4 gamecard.

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

config GAMEPORT_EMU10K1
	tristate "SB Live and Audigy gameport support"
	depends on PCI
	help
	  Say Y here if you have a SoundBlaster Live! or SoundBlaster
	  Audigy card and want to use its gameport.

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

config GAMEPORT_FM801
	tristate "ForteMedia FM801 gameport support"
	depends on PCI && HAS_IOPORT
	help
	  Say Y here if you have ForteMedia FM801 PCI audio controller
	  (Abit AU10, Genius Sound Maker, HP Workstation zx2000,
	  and others), and want to use its gameport.

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

endif
