# Helper to resolve issues with configs that have SPI enabled but I2C
# modular, meaning we can't build the codec driver in with I2C support.
# We use an ordered list of conditional defaults to pick the appropriate
# setting - SPI can't be modular so that case doesn't need to be covered.
config SND_SOC_I2C_AND_SPI
	tristate
	default m if I2C=m
	default y if I2C=y
	default y if SPI_MASTER=y

config SND_SOC_ALL_CODECS
	tristate "Build all ASoC CODEC drivers"
	select SND_SOC_88PM860X if MFD_88PM860X
	select SND_SOC_L3
	select SND_SOC_AC97_CODEC if SND_SOC_AC97_BUS
	select SND_SOC_AD1836 if SPI_MASTER
	select SND_SOC_AD193X if SND_SOC_I2C_AND_SPI
	select SND_SOC_AD1980 if SND_SOC_AC97_BUS
	select SND_SOC_ADS117X
	select SND_SOC_AD73311 if I2C
	select SND_SOC_ADAV803 if I2C
	select SND_SOC_AMBARELLA_A2AUC
	select SND_SOC_AMBARELLA_DUMMY
	select SND_SOC_AK4104 if SPI_MASTER
	select SND_SOC_AK4535 if I2C
	select SND_SOC_AK4642 if I2C
	select SND_SOC_AK4642_AMB if I2C
	select SND_SOC_AK4671 if I2C
	select SND_SOC_ALC5623 if I2C
	select SND_SOC_CQ0093VC if MFD_DAVINCI_VOICECODEC
	select SND_SOC_CS42L51 if I2C
	select SND_SOC_CS4270 if I2C
	select SND_SOC_CX20442
	select SND_SOC_DA7210 if I2C
	select SND_SOC_ES8328 if I2C
	select SND_SOC_JZ4740_CODEC if SOC_JZ4740
	select SND_SOC_MAX98088 if I2C
	select SND_SOC_MAX9877 if I2C
	select SND_SOC_PCM3008
	select SND_SOC_SPDIF
	select SND_SOC_SSM2602 if I2C
	select SND_SOC_STAC9766 if SND_SOC_AC97_BUS
	select SND_SOC_TLV320AIC23 if I2C
	select SND_SOC_TLV320AIC26 if SPI_MASTER
	select SND_SOC_TLV320AIC3X if I2C
	select SND_SOC_TPA6130A2 if I2C
	select SND_SOC_TLV320DAC33 if I2C
	select SND_SOC_TLV320DAC31 if I2C
	select SND_SOC_TWL4030 if TWL4030_CORE
	select SND_SOC_TWL6040 if TWL4030_CORE
	select SND_SOC_UDA134X
	select SND_SOC_UDA1380 if I2C
	select SND_SOC_WL1273 if RADIO_WL1273
	select SND_SOC_WM2000 if I2C
	select SND_SOC_WM8350 if MFD_WM8350
	select SND_SOC_WM8400 if MFD_WM8400
	select SND_SOC_WM8510 if SND_SOC_I2C_AND_SPI
	select SND_SOC_WM8523 if I2C
	select SND_SOC_WM8580 if I2C
	select SND_SOC_WM8711 if SND_SOC_I2C_AND_SPI
	select SND_SOC_WM8727
	select SND_SOC_WM8728 if SND_SOC_I2C_AND_SPI
	select SND_SOC_WM8731 if SND_SOC_I2C_AND_SPI
	select SND_SOC_WM8737 if SND_SOC_I2C_AND_SPI
	select SND_SOC_WM8741 if SND_SOC_I2C_AND_SPI
	select SND_SOC_WM8750 if SND_SOC_I2C_AND_SPI
	select SND_SOC_WM8753 if SND_SOC_I2C_AND_SPI
	select SND_SOC_WM8770 if SPI_MASTER
	select SND_SOC_WM8776 if SND_SOC_I2C_AND_SPI
	select SND_SOC_WM8804 if SND_SOC_I2C_AND_SPI
	select SND_SOC_WM8900 if I2C
	select SND_SOC_WM8903 if I2C
	select SND_SOC_WM8904 if I2C
	select SND_SOC_WM8940 if I2C
	select SND_SOC_WM8955 if I2C
	select SND_SOC_WM8960 if I2C
	select SND_SOC_WM8961 if I2C
	select SND_SOC_WM8962 if I2C
	select SND_SOC_WM8971 if I2C
	select SND_SOC_WM8974 if I2C
	select SND_SOC_WM8978 if I2C
	select SND_SOC_WM8985 if SND_SOC_I2C_AND_SPI
	select SND_SOC_WM8988 if SND_SOC_I2C_AND_SPI
	select SND_SOC_WM8990 if I2C
	select SND_SOC_WM8993 if I2C
	select SND_SOC_WM8994 if MFD_WM8994
	select SND_SOC_WM8995 if SND_SOC_I2C_AND_SPI
	select SND_SOC_WM9081 if I2C
	select SND_SOC_WM9090 if I2C
	select SND_SOC_WM9705 if SND_SOC_AC97_BUS
	select SND_SOC_WM9712 if SND_SOC_AC97_BUS
	select SND_SOC_WM9713 if SND_SOC_AC97_BUS
        help
          Normally ASoC codec drivers are only built if a machine driver which
          uses them is also built since they are only usable with a machine
          driver.  Selecting this option will allow these drivers to be built
          without an explicit machine driver for test and development purposes.

	  Support for the bus types used to access the codecs to be built must
	  be selected separately.

          If unsure select "N".

config SND_SOC_88PM860X
	tristate

config SND_SOC_WM_HUBS
	tristate
	default y if SND_SOC_WM8993=y || SND_SOC_WM8994=y
	default m if SND_SOC_WM8993=m || SND_SOC_WM8994=m

config SND_SOC_AC97_CODEC
	tristate
	select SND_AC97_CODEC

config SND_SOC_AD1836
	tristate

config SND_SOC_AD193X
	tristate

config SND_SOC_AD1980
	tristate

config SND_SOC_AD73311
	tristate

config SND_SOC_ADS117X
	tristate

config SND_SOC_ADAV803
	tristate

config SND_SOC_AMBARELLA_A2AUC
	tristate

config SND_SOC_AMBARELLA_DUMMY
	tristate

config SND_SOC_AK4104
	tristate

config SND_SOC_AK4535
	tristate

config SND_SOC_AK4642
	tristate

config SND_SOC_AK4642_AMB
	tristate

config SND_SOC_AK4671
	tristate

config SND_SOC_ALC5623
       tristate

config SND_SOC_CQ0093VC
	tristate

config SND_SOC_CS42L51
	tristate

# Cirrus Logic CS4270 Codec
config SND_SOC_CS4270
	tristate

# Cirrus Logic CS4270 Codec VD = 3.3V Errata
# Select if you are affected by the errata where the part will not function
# if MCLK divide-by-1.5 is selected and VD is set to 3.3V.  The driver will
# not select any sample rates that require MCLK to be divided by 1.5.
config SND_SOC_CS4270_VD33_ERRATA
	bool
	depends on SND_SOC_CS4270

config SND_SOC_CX20442
	tristate

config SND_SOC_JZ4740_CODEC
	tristate

config SND_SOC_L3
       tristate

config SND_SOC_DA7210
        tristate

config SND_SOC_DMIC
	tristate

config SND_SOC_ES8328
	tristate

config SND_SOC_MAX98088
       tristate

config SND_SOC_PCM3008
       tristate

config SND_SOC_SPDIF
	tristate

config SND_SOC_SSM2602
	tristate

config SND_SOC_STAC9766
	tristate

config SND_SOC_TLV320AIC23
	tristate

config SND_SOC_TLV320AIC26
	tristate "TI TLV320AIC26 Codec support" if SND_SOC_OF_SIMPLE
	depends on SPI

config SND_SOC_TLV320AIC3X
	tristate

config SND_SOC_TLV320DAC33
	tristate

config SND_SOC_TLV320DAC31
	tristate

config SND_SOC_TWL4030
	select TWL4030_CODEC
	tristate

config SND_SOC_TWL6040
	tristate

config SND_SOC_UDA134X
       tristate

config SND_SOC_UDA1380
        tristate

config SND_SOC_WL1273
	tristate

config SND_SOC_WM8350
	tristate

config SND_SOC_WM8400
	tristate

config SND_SOC_WM8510
	tristate

config SND_SOC_WM8523
	tristate

config SND_SOC_WM8580
	tristate

config SND_SOC_WM8711
	tristate

config SND_SOC_WM8727
	tristate

config SND_SOC_WM8728
	tristate

config SND_SOC_WM8731
	tristate

config SND_SOC_WM8737
	tristate

config SND_SOC_WM8741
	tristate

config SND_SOC_WM8750
	tristate

config SND_SOC_WM8753
	tristate

config SND_SOC_WM8770
	tristate

config SND_SOC_WM8776
	tristate

config SND_SOC_WM8804
	tristate

config SND_SOC_WM8900
	tristate

config SND_SOC_WM8903
	tristate

config SND_SOC_WM8904
	tristate

config SND_SOC_WM8940
        tristate

config SND_SOC_WM8955
	tristate

config SND_SOC_WM8960
	tristate

config SND_SOC_WM8961
	tristate

config SND_SOC_WM8962
	tristate

config SND_SOC_WM8971
	tristate

config SND_SOC_WM8974
	tristate

config SND_SOC_WM8978
	tristate

config SND_SOC_WM8985
	tristate

config SND_SOC_WM8988
	tristate

config SND_SOC_WM8990
	tristate

config SND_SOC_WM8993
	tristate

config SND_SOC_WM8994
	tristate

config SND_SOC_WM8995
	tristate

config SND_SOC_WM9081
	tristate

config SND_SOC_WM9705
	tristate

config SND_SOC_WM9712
	tristate

config SND_SOC_WM9713
	tristate

# Amp
config SND_SOC_MAX9877
	tristate

config SND_SOC_TPA6130A2
	tristate

config SND_SOC_WM2000
	tristate

config SND_SOC_WM9090
	tristate

# tlv320aic3262
config SND_SOC_TLV320AIC326x
	tristate

config SND_SOC_WM8974_AMB
	tristate
