# SPDX-License-Identifier: GPL-2.0-only
menu "HD-Audio"

config SND_HDA
	tristate
	select SND_PCM
	select SND_VMASTER
	select SND_JACK
	select SND_HDA_CORE

config SND_HDA_GENERIC_LEDS
       bool

config SND_HDA_INTEL
	tristate "HD Audio PCI"
	depends on SND_PCI
	select SND_HDA
	select SND_INTEL_DSP_CONFIG
	help
	  Say Y here to include support for Intel "High Definition
	  Audio" (Azalia) and its compatible devices.

	  This option enables the HD-audio controller.  Don't forget
	  to choose the appropriate codec options below.

	  To compile this driver as a module, choose M here: the module
	  will be called snd-hda-intel.

config SND_HDA_TEGRA
	tristate "NVIDIA Tegra HD Audio"
	depends on ARCH_TEGRA
	select SND_HDA
	select SND_HDA_ALIGNED_MMIO
	help
	  Say Y here to support the HDA controller present in NVIDIA
	  Tegra SoCs

	  This options enables support for the HD Audio controller
	  present in some NVIDIA Tegra SoCs, used to communicate audio
	  to the HDMI output.

	  To compile this driver as a module, choose M here: the module
	  will be called snd-hda-tegra.

if SND_HDA

config SND_HDA_HWDEP
	bool "Build hwdep interface for HD-audio driver"
	select SND_HWDEP
	help
	  Say Y here to build a hwdep interface for HD-audio driver.
	  This interface can be used for out-of-band communication
	  with codecs for debugging purposes.

config SND_HDA_RECONFIG
	bool "Allow dynamic codec reconfiguration"
	help
	  Say Y here to enable the HD-audio codec re-configuration feature.
	  It allows user to clear the whole codec configuration, change the
	  codec setup, add extra verbs, and re-configure the codec dynamically.

	  Note that this item alone doesn't provide the sysfs interface, but
	  enables the feature just for the patch loader below.
	  If you need the traditional sysfs entries for the manual interaction,
	  turn on CONFIG_SND_HDA_HWDEP as well.

config SND_HDA_INPUT_BEEP
	bool "Support digital beep via input layer"
	depends on INPUT=y || INPUT=SND_HDA
	help
	  Say Y here to build a digital beep interface for HD-audio
	  driver. This interface is used to generate digital beeps.

config SND_HDA_INPUT_BEEP_MODE
	int "Digital beep registration mode (0=off, 1=on)"
	depends on SND_HDA_INPUT_BEEP=y
	default "1"
	range 0 1
	help
	  Set 0 to disable the digital beep interface for HD-audio by default.
	  Set 1 to always enable the digital beep interface for HD-audio by
	  default.

config SND_HDA_PATCH_LOADER
	bool "Support initialization patch loading for HD-audio"
	select FW_LOADER
	select SND_HDA_RECONFIG
	help
	  Say Y here to allow the HD-audio driver to load a pseudo
	  firmware file ("patch") for overriding the BIOS setup at
	  start up.  The "patch" file can be specified via patch module
	  option, such as patch=hda-init.

config SND_HDA_CIRRUS_SCODEC
	tristate

config SND_HDA_CIRRUS_SCODEC_KUNIT_TEST
	tristate "KUnit test for Cirrus side-codec library" if !KUNIT_ALL_TESTS
	select SND_HDA_CIRRUS_SCODEC
	select GPIOLIB
	depends on KUNIT
	default KUNIT_ALL_TESTS
	help
	  This builds KUnit tests for the cirrus side-codec library.
	  For more information on KUnit and unit tests in general,
	  please refer to the KUnit documentation in
	  Documentation/dev-tools/kunit/.
	  If in doubt, say "N".

config SND_HDA_SCODEC_CS35L41
	tristate
	select SND_HDA_GENERIC
	select REGMAP_IRQ

config SND_HDA_CS_DSP_CONTROLS
	tristate
	select FW_CS_DSP

config SND_HDA_SCODEC_COMPONENT
	tristate

config SND_HDA_SCODEC_CS35L41_I2C
	tristate "Build CS35L41 HD-audio side codec support for I2C Bus"
	depends on I2C
	depends on ACPI
	depends on EFI
	depends on SND_SOC
	select SND_SOC_CS35L41_LIB
	select SND_HDA_SCODEC_CS35L41
	select SND_HDA_CS_DSP_CONTROLS
	help
	  Say Y or M here to include CS35L41 I2C HD-audio side codec support
	  in snd-hda-intel driver, such as ALC287.

comment "Set to Y if you want auto-loading the side codec driver"
	depends on SND_HDA=y && SND_HDA_SCODEC_CS35L41_I2C=m

config SND_HDA_SCODEC_CS35L41_SPI
	tristate "Build CS35L41 HD-audio codec support for SPI Bus"
	depends on SPI_MASTER
	depends on ACPI
	depends on EFI
	depends on SND_SOC
	select SND_SOC_CS35L41_LIB
	select SND_HDA_SCODEC_CS35L41
	select SND_HDA_CS_DSP_CONTROLS
	help
	  Say Y or M here to include CS35L41 SPI HD-audio side codec support
	  in snd-hda-intel driver, such as ALC287.

comment "Set to Y if you want auto-loading the side codec driver"
	depends on SND_HDA=y && SND_HDA_SCODEC_CS35L41_SPI=m

config SND_HDA_SCODEC_CS35L56
	tristate

config SND_HDA_SCODEC_CS35L56_I2C
	tristate "Build CS35L56 HD-audio side codec support for I2C Bus"
	depends on I2C
	depends on ACPI || COMPILE_TEST
	depends on SND_SOC
	select FW_CS_DSP
	select SND_HDA_GENERIC
	select SND_SOC_CS35L56_SHARED
	select SND_HDA_SCODEC_CS35L56
	select SND_HDA_CIRRUS_SCODEC
	select SND_HDA_CS_DSP_CONTROLS
	select SND_SOC_CS_AMP_LIB
	help
	  Say Y or M here to include CS35L56 amplifier support with
	  I2C control.

config SND_HDA_SCODEC_CS35L56_SPI
	tristate "Build CS35L56 HD-audio side codec support for SPI Bus"
	depends on SPI_MASTER
	depends on ACPI || COMPILE_TEST
	depends on SND_SOC
	select FW_CS_DSP
	select SND_HDA_GENERIC
	select SND_SOC_CS35L56_SHARED
	select SND_HDA_SCODEC_CS35L56
	select SND_HDA_CIRRUS_SCODEC
	select SND_HDA_CS_DSP_CONTROLS
	select SND_SOC_CS_AMP_LIB
	help
	  Say Y or M here to include CS35L56 amplifier support with
	  SPI control.

config SND_HDA_SCODEC_TAS2781_I2C
	tristate "Build TAS2781 HD-audio side codec support for I2C Bus"
	depends on I2C
	depends on ACPI
	depends on EFI
	depends on SND_SOC
	select SND_SOC_TAS2781_COMLIB
	select SND_SOC_TAS2781_FMWLIB
	select CRC32_SARWATE
	help
	  Say Y or M here to include TAS2781 I2C HD-audio side codec support
	  in snd-hda-intel driver, such as ALC287.

comment "Set to Y if you want auto-loading the side codec driver"
	depends on SND_HDA=y && SND_HDA_SCODEC_TAS2781_I2C=m

config SND_HDA_CODEC_REALTEK
	tristate "Build Realtek HD-audio codec support"
	select SND_HDA_GENERIC
	select SND_HDA_GENERIC_LEDS
	select SND_HDA_SCODEC_COMPONENT
	help
	  Say Y or M here to include Realtek HD-audio codec support in
	  snd-hda-intel driver, such as ALC880.

comment "Set to Y if you want auto-loading the codec driver"
	depends on SND_HDA=y && SND_HDA_CODEC_REALTEK=m

config SND_HDA_CODEC_ANALOG
	tristate "Build Analog Devices HD-audio codec support"
	select SND_HDA_GENERIC
	help
	  Say Y or M here to include Analog Devices HD-audio codec support in
	  snd-hda-intel driver, such as AD1986A.

comment "Set to Y if you want auto-loading the codec driver"
	depends on SND_HDA=y && SND_HDA_CODEC_ANALOG=m

config SND_HDA_CODEC_SIGMATEL
	tristate "Build IDT/Sigmatel HD-audio codec support"
	select SND_HDA_GENERIC
	select SND_HDA_GENERIC_LEDS
	help
	  Say Y or M here to include IDT (Sigmatel) HD-audio codec support in
	  snd-hda-intel driver, such as STAC9200.

comment "Set to Y if you want auto-loading the codec driver"
	depends on SND_HDA=y && SND_HDA_CODEC_SIGMATEL=m

config SND_HDA_CODEC_VIA
	tristate "Build VIA HD-audio codec support"
	select SND_HDA_GENERIC
	help
	  Say Y or M here to include VIA HD-audio codec support in
	  snd-hda-intel driver, such as VT1708.

comment "Set to Y if you want auto-loading the codec driver"
	depends on SND_HDA=y && SND_HDA_CODEC_VIA=m

config SND_HDA_CODEC_HDMI
	tristate "Build HDMI/DisplayPort HD-audio codec support"
	select SND_DYNAMIC_MINORS
	help
	  Say Y or M here to include HDMI and DisplayPort HD-audio codec
	  support in snd-hda-intel driver.  This includes all AMD/ATI,
	  Intel and Nvidia HDMI/DisplayPort codecs.

	  Note that this option mandatorily enables CONFIG_SND_DYNAMIC_MINORS
	  to assure the multiple streams for DP-MST support.

comment "Set to Y if you want auto-loading the codec driver"
	depends on SND_HDA=y && SND_HDA_CODEC_HDMI=m

config SND_HDA_CODEC_CIRRUS
	tristate "Build Cirrus Logic codec support"
	select SND_HDA_GENERIC
	help
	  Say Y or M here to include Cirrus Logic codec support in
	  snd-hda-intel driver, such as CS4206.

comment "Set to Y if you want auto-loading the codec driver"
	depends on SND_HDA=y && SND_HDA_CODEC_CIRRUS=m

config SND_HDA_CODEC_CS8409
	tristate "Build Cirrus Logic HDA bridge support"
	select SND_HDA_GENERIC
	help
	  Say Y or M here to include Cirrus Logic HDA bridge support in
	  snd-hda-intel driver, such as CS8409.

comment "Set to Y if you want auto-loading the codec driver"
	depends on SND_HDA=y && SND_HDA_CODEC_CS8409=m

config SND_HDA_CODEC_CONEXANT
	tristate "Build Conexant HD-audio codec support"
	select SND_HDA_GENERIC
	select SND_HDA_GENERIC_LEDS
	help
	  Say Y or M here to include Conexant HD-audio codec support in
	  snd-hda-intel driver, such as CX20549.

comment "Set to Y if you want auto-loading the codec driver"
	depends on SND_HDA=y && SND_HDA_CODEC_CONEXANT=m

config SND_HDA_CODEC_CA0110
	tristate "Build Creative CA0110-IBG codec support"
	select SND_HDA_GENERIC
	help
	  Say Y or M here to include Creative CA0110-IBG codec support in
	  snd-hda-intel driver, found on some Creative X-Fi cards.

comment "Set to Y if you want auto-loading the codec driver"
	depends on SND_HDA=y && SND_HDA_CODEC_CA0110=m

config SND_HDA_CODEC_CA0132
	tristate "Build Creative CA0132 codec support"
	help
	  Say Y or M here to include Creative CA0132 codec support in
	  snd-hda-intel driver.

comment "Set to Y if you want auto-loading the codec driver"
	depends on SND_HDA=y && SND_HDA_CODEC_CA0132=m

config SND_HDA_CODEC_CA0132_DSP
	bool "Support new DSP code for CA0132 codec"
	depends on SND_HDA_CODEC_CA0132
	default y
	select SND_HDA_DSP_LOADER
	select FW_LOADER
	help
	  Say Y here to enable the DSP for Creative CA0132 for extended
	  features like equalizer or echo cancellation.

	  Note that this option requires the external firmware file
	  (ctefx.bin).

config SND_HDA_CODEC_CMEDIA
	tristate "Build C-Media HD-audio codec support"
	select SND_HDA_GENERIC
	help
	  Say Y or M here to include C-Media HD-audio codec support in
	  snd-hda-intel driver, such as CMI9880.

comment "Set to Y if you want auto-loading the codec driver"
	depends on SND_HDA=y && SND_HDA_CODEC_CMEDIA=m

config SND_HDA_CODEC_SI3054
	tristate "Build Silicon Labs 3054 HD-modem codec support"
	help
	  Say Y or M here to include Silicon Labs 3054 HD-modem codec
	  (and compatibles) support in snd-hda-intel driver.

comment "Set to Y if you want auto-loading the codec driver"
	depends on SND_HDA=y && SND_HDA_CODEC_SI3054=m

config SND_HDA_GENERIC
	tristate "Enable generic HD-audio codec parser"
	select SND_CTL_LED if SND_HDA_GENERIC_LEDS
	select LEDS_CLASS if SND_HDA_GENERIC_LEDS
	help
	  Say Y or M here to enable the generic HD-audio codec parser
	  in snd-hda-intel driver.

comment "Set to Y if you want auto-loading the codec driver"
	depends on SND_HDA=y && SND_HDA_GENERIC=m

config SND_HDA_POWER_SAVE_DEFAULT
	int "Default time-out for HD-audio power-save mode"
	depends on PM
	default 0
	help
	  The default time-out value in seconds for HD-audio automatic
	  power-save mode.  0 means to disable the power-save mode.

config SND_HDA_INTEL_HDMI_SILENT_STREAM
	bool "Enable Silent Stream always for HDMI"
	depends on SND_HDA_INTEL
	help
	  Say Y to enable HD-Audio Keep Alive (KAE) aka Silent Stream
	  for HDMI on hardware that supports the feature.

	  When enabled, the HDMI/DisplayPort codec will continue to provide
	  a continuous clock and a valid but silent data stream to
	  any connected external receiver. This allows to avoid gaps
	  at start of playback. Many receivers require multiple seconds
	  to start playing audio after the clock has been stopped.
	  This feature can impact power consumption as resources
	  are kept reserved both at transmitter and receiver.

config SND_HDA_CTL_DEV_ID
	bool "Use the device identifier field for controls"
	depends on SND_HDA_INTEL
	help
	  Say Y to use the device identifier field for (mixer)
	  controls (old behaviour until this option is available).

	  When enabled, the multiple HDA codecs may set the device
	  field in control (mixer) element identifiers. The use
	  of this field is not recommended and defined for mixer controls.

	  The old behaviour (Y) is obsolete and will be removed. Consider
	  to not enable this option.

endif

endmenu
