# SPDX-License-Identifier: GPL-2.0-only
config SND_HDA_CORE
	tristate
	select REGMAP

config SND_HDA_DSP_LOADER
	bool

config SND_HDA_ALIGNED_MMIO
	bool

config SND_HDA_COMPONENT
	bool

config SND_HDA_I915
	bool
	select SND_HDA_COMPONENT

config SND_HDA_EXT_CORE
       tristate
       select SND_HDA_CORE

config SND_HDA_PREALLOC_SIZE
	int "Pre-allocated buffer size for HD-audio driver"
	range 0 32768
	default 2048 if SND_DMA_SGBUF
	default 64 if !SND_DMA_SGBUF
	help
	  Specifies the default pre-allocated buffer-size in kB for the
	  HD-audio driver.  A larger buffer (e.g. 2048) is preferred
	  for systems using PulseAudio.  The default 64 is chosen just
	  for compatibility reasons.
	  On x86 systems, the default is 2048 as a reasonable value for
	  most of modern systems.

	  Note that the pre-allocation size can be changed dynamically
	  via a proc file (/proc/asound/card*/pcm*/sub*/prealloc), too.

config SND_INTEL_NHLT
	bool
	# this config should be selected only for Intel ACPI platforms.
	# A fallback is provided so that the code compiles in all cases.

config SND_INTEL_DSP_CONFIG
	tristate
	select SND_INTEL_NHLT if ACPI
	select SND_INTEL_SOUNDWIRE_ACPI if ACPI
	# this config should be selected only for Intel DSP platforms.
	# A fallback is provided so that the code compiles in all cases.

config SND_INTEL_SOUNDWIRE_ACPI
	tristate

config SND_INTEL_BYT_PREFER_SOF
	bool "Prefer SOF driver over SST on BY/CHT platforms"
	depends on SND_SST_ATOM_HIFI2_PLATFORM_ACPI && SND_SOC_SOF_BAYTRAIL
	default n
	help
	  The kernel has 2 drivers for the Low Power Engine audio-block on
	  Bay- and Cherry-Trail SoCs. The old SST driver and the new SOF
	  driver. If both drivers are enabled then the kernel will default
	  to using the old SST driver, unless told otherwise through the
	  snd_intel_dspcfg.dsp_driver module-parameter.

	  Set this option to Y to make the kernel default to the new SOF
	  driver instead.
