#
# 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.


# Yes, SOUND_GAMEPORT looks a bit odd. Yes, it ends up being turned on
# in every .config. Please don't touch it. It is here to handle an
# unusual dependency between GAMEPORT and sound drivers.
#
# Some sound drivers call gameport functions. If GAMEPORT is
# not selected, empty stubs are provided for the functions and all is
# well.
# If GAMEPORT is built in, everything is fine.
# If GAMEPORT is a module, however, it would need to be loaded for the
# sound driver to be able to link properly. Therefore, the sound
# driver must be a module as well in that case. Since there's no way
# to express that directly in Kconfig, we use SOUND_GAMEPORT to
# express it. SOUND_GAMEPORT boils down to "if GAMEPORT is 'm',
# anything that depends on SOUND_GAMEPORT must be 'm' as well. if
# GAMEPORT is 'y' or 'n', it can be anything".
config SOUND_GAMEPORT
	tristate
	default y if GAMEPORT!=m
	default m if GAMEPORT=m

config GAMEPORT_NS558
	tristate "Classic ISA and PnP gameport support"
	depends on GAMEPORT
	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 GAMEPORT
	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 GAMEPORT
	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_VORTEX
	tristate "Aureal Vortex, Vortex 2 gameport support"
	depends on GAMEPORT
	help
	  Say Y here if you have an Aureal Vortex 1 or 2  card and want
	  to use its gameport.

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

config GAMEPORT_FM801
	tristate "ForteMedia FM801 gameport support"
	depends on GAMEPORT

config GAMEPORT_CS461X
	tristate "Crystal SoundFusion gameport support"
	depends on GAMEPORT

