# 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_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_AK4104 if SPI_MASTER
	select SND_SOC_AK4535 if I2C
	select SND_SOC_AK4642 if I2C
	select SND_SOC_AK4671 if I2C
	select SND_SOC_CQ0093VC if MFD_DAVINCI_VOICECODEC
	select SND_SOC_CS4270 if I2C
	select SND_SOC_MAX9877 if I2C
	select SND_SOC_DA7210 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_TWL4030 if TWL4030_CORE
	select SND_SOC_TWL6040 if TWL4030_CORE
	select SND_SOC_UDA134X
	select SND_SOC_UDA1380 if I2C
	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_WM8750 if SND_SOC_I2C_AND_SPI
	select SND_SOC_WM8753 if SND_SOC_I2C_AND_SPI
	select SND_SOC_WM8776 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_WM8971 if I2C
	select SND_SOC_WM8974 if I2C
	select SND_SOC_WM8978 if I2C
	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_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_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_AK4104
	tristate

config SND_SOC_AK4535
	tristate

config SND_SOC_AK4642
	tristate

config SND_SOC_AK4671
	tristate

config SND_SOC_CQ0093VC
	tristate

# Cirrus Logic CS4270 Codec
config SND_SOC_CS4270
	tristate

config SND_SOC_DA7210
        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_L3
       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_TWL4030
	select TWL4030_CODEC
	tristate

config SND_SOC_TWL6040
	tristate

config SND_SOC_UDA134X
       tristate

config SND_SOC_UDA1380
        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_WM8750
	tristate

config SND_SOC_WM8753
	tristate

config SND_SOC_WM8776
	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_WM8971
	tristate

config SND_SOC_WM8974
	tristate

config SND_SOC_WM8978
	tristate

config SND_SOC_WM8988
	tristate

config SND_SOC_WM8990
	tristate

config SND_SOC_WM8993
	tristate

config SND_SOC_WM8994
	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
