# SPDX-License-Identifier: GPL-2.0-only
config DMASOUND_ATARI
	tristate "Atari DMA sound support"
	depends on ATARI && SOUND
	select DMASOUND
	help
	  If you want to use the internal audio of your Atari in Linux, answer
	  Y to this question. This will provide a Sun-like /dev/audio,
	  compatible with the Linux/i386 sound system. Otherwise, say N.

	  This driver is also available as a module ( = code which can be
	  inserted in and removed from the running kernel whenever you
	  want). If you want to compile it as a module, say M here and read
	  <file:Documentation/kbuild/modules.rst>.

config DMASOUND_PAULA
	tristate "Amiga DMA sound support"
	depends on AMIGA && SOUND
	select DMASOUND
	help
	  If you want to use the internal audio of your Amiga in Linux, answer
	  Y to this question. This will provide a Sun-like /dev/audio,
	  compatible with the Linux/i386 sound system. Otherwise, say N.

	  This driver is also available as a module ( = code which can be
	  inserted in and removed from the running kernel whenever you
	  want). If you want to compile it as a module, say M here and read
	  <file:Documentation/kbuild/modules.rst>.

config DMASOUND_Q40
	tristate "Q40 sound support"
	depends on Q40 && SOUND
	select DMASOUND
	help
	  If you want to use the internal audio of your Q40 in Linux, answer
	  Y to this question. This will provide a Sun-like /dev/audio,
	  compatible with the Linux/i386 sound system. Otherwise, say N.

	  This driver is also available as a module ( = code which can be
	  inserted in and removed from the running kernel whenever you
	  want). If you want to compile it as a module, say M here and read
	  <file:Documentation/kbuild/modules.rst>.

config DMASOUND
	tristate
	select SOUND_OSS_CORE
