# SPDX-License-Identifier: GPL-2.0-only
#
# Gameport configuration
#
config GAMEPORT
	tristate "Gameport support"
	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"
	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"
	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
	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
