# 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
	select SND_SOC_CS_AMP_LIB
	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
	select SND_SOC_CS_AMP_LIB
	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
	imply SERIAL_MULTI_INSTANTIATE
	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
	imply SERIAL_MULTI_INSTANTIATE
	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
	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_SENARYTECH
	tristate "Build Senarytech HD-audio codec support"
	select SND_HDA_GENERIC
	select SND_HDA_GENERIC_LEDS
	help
	  Say Y or M here to include Senarytech HD-audio codec support in
	  snd-hda-intel driver, such as SN6186.

comment "Set to Y if you want auto-loading the codec driver"
	depends on SND_HDA=y && SND_HDA_CODEC_SENARYTECH=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
