Merge remote-tracking branches 'asoc/topic/da7213', 'asoc/topic/da732x', 'asoc/topic...
authorMark Brown <broonie@linaro.org>
Wed, 12 Mar 2014 23:04:22 +0000 (23:04 +0000)
committerMark Brown <broonie@linaro.org>
Wed, 12 Mar 2014 23:04:22 +0000 (23:04 +0000)
1  2  3  4  5  6  7  8  9 
sound/soc/cirrus/Kconfig
sound/soc/codecs/Kconfig
sound/soc/codecs/Makefile
sound/soc/codecs/da732x.c
sound/soc/codecs/tlv320aic23.c
sound/soc/fsl/Kconfig
sound/soc/fsl/fsl_esai.c
sound/soc/fsl/fsl_spdif.c
sound/soc/samsung/Kconfig

diff --combined sound/soc/cirrus/Kconfig
index c872dacbab98e448890041024f31e7e594cca733,06f938deda15bd0d888e7e6140d54f10ec9331b5,06f938deda15bd0d888e7e6140d54f10ec9331b5,06f938deda15bd0d888e7e6140d54f10ec9331b5,06f938deda15bd0d888e7e6140d54f10ec9331b5,a0bf4a6103971f2cabe6fe6a9ce26d89c98a886e,06f938deda15bd0d888e7e6140d54f10ec9331b5,06f938deda15bd0d888e7e6140d54f10ec9331b5,06f938deda15bd0d888e7e6140d54f10ec9331b5..5477c54759230e7783af1fd6df7bb1a20bcfb122
@@@@@@@@@@ -1,6 -1,6 -1,6 -1,6 -1,6 -1,6 -1,6 -1,6 -1,6 +1,6 @@@@@@@@@@
         config SND_EP93XX_SOC
                tristate "SoC Audio support for the Cirrus Logic EP93xx series"
 --------       depends on (ARCH_EP93XX || COMPILE_TEST) && SND_SOC
 ++++++++       depends on ARCH_EP93XX || COMPILE_TEST
                select SND_SOC_GENERIC_DMAENGINE_PCM
                help
                  Say Y or M if you want to add support for codecs attached to
@@@@@@@@@@ -18,7 -18,7 -18,7 -18,7 -18,7 -18,7 -18,7 -18,7 -18,7 +18,7 @@@@@@@@@@ config SND_EP93XX_SOC_SNAPPERCL1
                 tristate "SoC Audio support for Bluewater Systems Snapper CL15 module"
                 depends on SND_EP93XX_SOC && MACH_SNAPPER_CL15
                 select SND_EP93XX_SOC_I2S
----- ---        select SND_SOC_TLV320AIC23
+++++ +++        select SND_SOC_TLV320AIC23_I2C
                 help
                   Say Y or M here if you want to add support for I2S audio on the
                   Bluewater Systems Snapper CL15 module.
diff --combined sound/soc/codecs/Kconfig
index 9a6b98de4e299fb43ed458f9995727873f9c4d9f,983d087aa92aa83125903dc18cd420f57c2009eb,983d087aa92aa83125903dc18cd420f57c2009eb,983d087aa92aa83125903dc18cd420f57c2009eb,983d087aa92aa83125903dc18cd420f57c2009eb,5e4fc048d42aee069ae488e51622d80fa21412ac,983d087aa92aa83125903dc18cd420f57c2009eb,983d087aa92aa83125903dc18cd420f57c2009eb,983d087aa92aa83125903dc18cd420f57c2009eb..cf7f169adb124439172fbf91109f7bf597907f63
@@@@@@@@@@ -8,8 -8,6 -8,6 -8,6 -8,6 -8,6 -8,6 -8,6 -8,6 +8,8 @@@@@@@@@@ config SND_SOC_I2C_AND_SP
                default y if I2C=y
                default y if SPI_MASTER=y
         
 ++++++++menu "CODEC drivers"
 ++++++++
         config SND_SOC_ALL_CODECS
                tristate "Build all ASoC CODEC drivers"
                depends on COMPILE_TEST
                select SND_SOC_AB8500_CODEC if ABX500_CORE
                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_AD193X_SPI if SPI_MASTER
 ++++++++       select SND_SOC_AD193X_I2C if I2C
                select SND_SOC_AD1980 if SND_SOC_AC97_BUS
                select SND_SOC_AD73311
                select SND_SOC_ADAU1373 if I2C
 --------       select SND_SOC_ADAV80X if SND_SOC_I2C_AND_SPI
 ++++++++       select SND_SOC_ADAV801 if SPI_MASTER
 ++++++++       select SND_SOC_ADAV803 if I2C
 ++++++++       select SND_SOC_ADAU1977_SPI if SPI_MASTER
 ++++++++       select SND_SOC_ADAU1977_I2C if I2C
                select SND_SOC_ADAU1701 if I2C
                select SND_SOC_ADS117X
                select SND_SOC_AK4104 if SPI_MASTER
                select SND_SOC_AK4535 if I2C
 ++++++++       select SND_SOC_AK4554
                select SND_SOC_AK4641 if I2C
                select SND_SOC_AK4642 if I2C
                select SND_SOC_AK4671 if I2C
                select SND_SOC_PCM1681 if I2C
                select SND_SOC_PCM1792A if SPI_MASTER
                select SND_SOC_PCM3008
 ++++++++       select SND_SOC_PCM512x_I2C if I2C
 ++++++++       select SND_SOC_PCM512x_SPI if SPI_MASTER
                select SND_SOC_RT5631 if I2C
                select SND_SOC_RT5640 if I2C
                select SND_SOC_SGTL5000 if I2C
                select SND_SOC_STA529 if I2C
                select SND_SOC_STAC9766 if SND_SOC_AC97_BUS
                select SND_SOC_TAS5086 if I2C
----- ---       select SND_SOC_TLV320AIC23 if I2C
+++++ +++       select SND_SOC_TLV320AIC23_I2C if I2C
+++++ +++       select SND_SOC_TLV320AIC23_SPI if SPI_MASTER
                select SND_SOC_TLV320AIC26 if SPI_MASTER
                select SND_SOC_TLV320AIC32X4 if I2C
                select SND_SOC_TLV320AIC3X if I2C
@@@@@@@@@@ -191,14 -182,6 -182,6 -182,6 -182,6 -183,6 -182,6 -182,6 -182,6 +192,14 @@@@@@@@@@ config SND_SOC_AD183
         config SND_SOC_AD193X
                tristate
         
 ++++++++config SND_SOC_AD193X_SPI
 ++++++++       tristate
 ++++++++       select SND_SOC_AD193X
 ++++++++
 ++++++++config SND_SOC_AD193X_I2C
 ++++++++       tristate
 ++++++++       select SND_SOC_AD193X
 ++++++++
         config SND_SOC_AD1980
                tristate
         
@@@@@@@@@@ -206,66 -189,41 -189,41 -189,41 -189,41 -190,41 -189,41 -189,41 -189,41 +207,66 @@@@@@@@@@ config SND_SOC_AD7331
                tristate
         
         config SND_SOC_ADAU1701
 ++++++++       tristate "Analog Devices ADAU1701 CODEC"
 ++++++++       depends on I2C
                select SND_SOC_SIGMADSP
 --------       tristate
         
         config SND_SOC_ADAU1373
                tristate
         
 ++++++++config SND_SOC_ADAU1977
 ++++++++       tristate
 ++++++++
 ++++++++config SND_SOC_ADAU1977_SPI
 ++++++++       tristate
 ++++++++       select SND_SOC_ADAU1977
 ++++++++       select REGMAP_SPI
 ++++++++
 ++++++++config SND_SOC_ADAU1977_I2C
 ++++++++       tristate
 ++++++++       select SND_SOC_ADAU1977
 ++++++++       select REGMAP_I2C
 ++++++++
         config SND_SOC_ADAV80X
                tristate
         
 ++++++++config SND_SOC_ADAV801
 ++++++++       tristate
 ++++++++       select SND_SOC_ADAV80X
 ++++++++
 ++++++++config SND_SOC_ADAV803
 ++++++++       tristate
 ++++++++       select SND_SOC_ADAV80X
 ++++++++
         config SND_SOC_ADS117X
                tristate
         
         config SND_SOC_AK4104
 --------       tristate
 ++++++++       tristate "AKM AK4104 CODEC"
 ++++++++       depends on SPI_MASTER
         
         config SND_SOC_AK4535
                tristate
         
         config SND_SOC_AK4554
 --------       tristate
 ++++++++       tristate "AKM AK4554 CODEC"
         
         config SND_SOC_AK4641
                tristate
         
         config SND_SOC_AK4642
 --------       tristate
 ++++++++       tristate "AKM AK4642 CODEC"
 ++++++++       depends on I2C
         
         config SND_SOC_AK4671
                tristate
         
         config SND_SOC_AK5386
 --------       tristate
 ++++++++       tristate "AKM AK5638 CODEC"
         
         config SND_SOC_ALC5623
                tristate
 ++++++++
         config SND_SOC_ALC5632
                tristate
         
@@@@@@@@@@ -276,17 -234,14 -234,14 -234,14 -234,14 -235,14 -234,14 -234,14 -234,14 +277,17 @@@@@@@@@@ config SND_SOC_CS42L5
                tristate
         
         config SND_SOC_CS42L52
 --------       tristate
 ++++++++       tristate "Cirrus Logic CS42L52 CODEC"
 ++++++++       depends on I2C
         
         config SND_SOC_CS42L73
 --------       tristate
 ++++++++       tristate "Cirrus Logic CS42L73 CODEC"
 ++++++++       depends on I2C
         
         # Cirrus Logic CS4270 Codec
         config SND_SOC_CS4270
 --------       tristate
 ++++++++       tristate "Cirrus Logic CS4270 CODEC"
 ++++++++       depends on I2C
         
         # Cirrus Logic CS4270 Codec VD = 3.3V Errata
         # Select if you are affected by the errata where the part will not function
@@@@@@@@@@ -297,8 -252,7 -252,7 -252,7 -252,7 -253,7 -252,7 -252,7 -252,7 +298,8 @@@@@@@@@@ config SND_SOC_CS4270_VD33_ERRAT
                depends on SND_SOC_CS4270
         
         config SND_SOC_CS4271
 --------       tristate
 ++++++++       tristate "Cirrus Logic CS4271 CODEC"
 ++++++++       depends on SND_SOC_I2C_AND_SPI
         
         config SND_SOC_CX20442
                tristate
@@@@@@@@@@ -329,9 -283,6 -283,6 -283,6 -283,6 -284,6 -283,6 -283,6 -283,6 +330,9 @@@@@@@@@@ config SND_SOC_BT_SC
         config SND_SOC_DMIC
                tristate
         
 ++++++++config SND_SOC_HDMI_CODEC
 ++++++++       tristate "HDMI stub CODEC"
 ++++++++
         config SND_SOC_ISABELLE
                 tristate
         
@@@@@@@@@@ -350,32 -301,18 -301,18 -301,18 -301,18 -302,18 -301,18 -301,18 -301,18 +351,32 @@@@@@@@@@ config SND_SOC_MAX9809
         config SND_SOC_MAX9850
                tristate
         
 --------config SND_SOC_HDMI_CODEC
 --------       tristate
 --------
         config SND_SOC_PCM1681
 --------       tristate
 ++++++++       tristate "Texas Instruments PCM1681 CODEC"
 ++++++++       depends on I2C
         
         config SND_SOC_PCM1792A
 --------       tristate
 ++++++++       tristate "Texas Instruments PCM1792A CODEC"
 ++++++++       depends on SPI_MASTER
         
         config SND_SOC_PCM3008
                tristate
         
 ++++++++config SND_SOC_PCM512x
 ++++++++       tristate
 ++++++++
 ++++++++config SND_SOC_PCM512x_I2C
 ++++++++       tristate "Texas Instruments PCM512x CODECs - I2C"
 ++++++++       depends on I2C
 ++++++++       select SND_SOC_PCM512x
 ++++++++       select REGMAP_I2C
 ++++++++
 ++++++++config SND_SOC_PCM512x_SPI
 ++++++++       tristate "Texas Instruments PCM512x CODECs - SPI"
 ++++++++       depends on SPI_MASTER
 ++++++++       select SND_SOC_PCM512x
 ++++++++       select REGMAP_SPI
 ++++++++
         config SND_SOC_RT5631
                tristate
         
@@@@@@@@@@ -384,8 -321,7 -321,7 -321,7 -321,7 -322,7 -321,7 -321,7 -321,7 +385,8 @@@@@@@@@@ config SND_SOC_RT564
         
         #Freescale sgtl5000 codec
         config SND_SOC_SGTL5000
 --------       tristate
 ++++++++       tristate "Freescale SGTL5000 CODEC"
 ++++++++       depends on I2C
         
         config SND_SOC_SI476X
                tristate
@@@@@@@@@@ -398,7 -334,7 -334,7 -334,7 -334,7 -335,7 -334,7 -334,7 -334,7 +399,7 @@@@@@@@@@ config SND_SOC_SN9503
                tristate
         
         config SND_SOC_SPDIF
 --------       tristate
 ++++++++       tristate "S/PDIF CODEC"
         
         config SND_SOC_SSM2518
                tristate
@@@@@@@@@@ -416,12 -352,11 -352,11 -352,11 -352,11 -353,19 -352,11 -352,11 -352,11 +417,20 @@@@@@@@@@ config SND_SOC_STAC976
                tristate
         
         config SND_SOC_TAS5086
 --------       tristate
 ++++++++       tristate "Texas Instruments TAS5086 speaker amplifier"
 ++++++++       depends on I2C
         
         config SND_SOC_TLV320AIC23
                tristate
         
+++++ +++config SND_SOC_TLV320AIC23_I2C
+++++ +++       tristate
+++++ +++       select SND_SOC_TLV320AIC23
+++++ +++
+++++ +++config SND_SOC_TLV320AIC23_SPI
+++++ +++       tristate
+++++ +++       select SND_SOC_TLV320AIC23
+++++ +++
         config SND_SOC_TLV320AIC26
                tristate
                depends on SPI
@@@@@@@@@@ -430,8 -365,7 -365,7 -365,7 -365,7 -374,7 -365,7 -365,7 -365,7 +439,8 @@@@@@@@@@ config SND_SOC_TLV320AIC32X
                tristate
         
         config SND_SOC_TLV320AIC3X
 --------       tristate
 ++++++++       tristate "Texas Instruments TLV320AIC3x CODECs"
 ++++++++       depends on I2C
         
         config SND_SOC_TLV320DAC33
                tristate
@@@@@@@@@@ -480,69 -414,55 -414,55 -414,55 -414,55 -423,55 -414,55 -414,55 -414,55 +489,69 @@@@@@@@@@ config SND_SOC_WM840
                tristate
         
         config SND_SOC_WM8510
 --------       tristate
 ++++++++       tristate "Wolfson Microelectronics WM8510 CODEC"
 ++++++++       depends on SND_SOC_I2C_AND_SPI
         
         config SND_SOC_WM8523
 --------       tristate
 ++++++++       tristate "Wolfson Microelectronics WM8523 DAC"
 ++++++++       depends on I2C
         
         config SND_SOC_WM8580
 --------       tristate
 ++++++++       tristate "Wolfson Microelectronics WM8523 CODEC"
 ++++++++       depends on I2C
         
         config SND_SOC_WM8711
 --------       tristate
 ++++++++       tristate "Wolfson Microelectronics WM8711 CODEC"
 ++++++++       depends on SND_SOC_I2C_AND_SPI
         
         config SND_SOC_WM8727
                tristate
         
         config SND_SOC_WM8728
 --------       tristate
 ++++++++       tristate "Wolfson Microelectronics WM8728 DAC"
 ++++++++       depends on SND_SOC_I2C_AND_SPI
         
         config SND_SOC_WM8731
 --------       tristate
 ++++++++       tristate "Wolfson Microelectronics WM8731 CODEC"
 ++++++++       depends on SND_SOC_I2C_AND_SPI
         
         config SND_SOC_WM8737
 --------       tristate
 ++++++++       tristate "Wolfson Microelectronics WM8737 ADC"
 ++++++++       depends on SND_SOC_I2C_AND_SPI
         
         config SND_SOC_WM8741
 --------       tristate
 ++++++++       tristate "Wolfson Microelectronics WM8737 DAC"
 ++++++++       depends on SND_SOC_I2C_AND_SPI
         
         config SND_SOC_WM8750
 --------       tristate
 ++++++++       tristate "Wolfson Microelectronics WM8750 CODEC"
 ++++++++       depends on SND_SOC_I2C_AND_SPI
         
         config SND_SOC_WM8753
 --------       tristate
 ++++++++       tristate "Wolfson Microelectronics WM8753 CODEC"
 ++++++++       depends on SND_SOC_I2C_AND_SPI
         
         config SND_SOC_WM8770
 --------       tristate
 ++++++++       tristate "Wolfson Microelectronics WM8770 CODEC"
 ++++++++       depends on SPI_MASTER
         
         config SND_SOC_WM8776
 --------       tristate
 ++++++++       tristate "Wolfson Microelectronics WM8776 CODEC"
 ++++++++       depends on SND_SOC_I2C_AND_SPI
         
         config SND_SOC_WM8782
                tristate
         
         config SND_SOC_WM8804
 --------       tristate
 ++++++++       tristate "Wolfson Microelectronics WM8804 S/PDIF transceiver"
 ++++++++       depends on SND_SOC_I2C_AND_SPI
         
         config SND_SOC_WM8900
                tristate
         
         config SND_SOC_WM8903
 --------       tristate
 ++++++++       tristate "Wolfson Microelectronics WM8903 CODEC"
 ++++++++       depends on I2C
         
         config SND_SOC_WM8904
                tristate
@@@@@@@@@@ -560,8 -480,7 -480,7 -480,7 -480,7 -489,7 -480,7 -480,7 -480,7 +569,8 @@@@@@@@@@ config SND_SOC_WM896
                tristate
         
         config SND_SOC_WM8962
 --------       tristate
 ++++++++       tristate "Wolfson Microelectronics WM8962 CODEC"
 ++++++++       depends on I2C
         
         config SND_SOC_WM8971
                tristate
@@@@@@@@@@ -634,7 -553,4 -553,4 -553,4 -553,4 -562,4 -553,4 -553,4 -553,4 +643,7 @@@@@@@@@@ config SND_SOC_ML2612
                tristate
         
         config SND_SOC_TPA6130A2
 --------       tristate
 ++++++++       tristate "Texas Instruments TPA6130A2 headphone amplifier"
 ++++++++       depends on I2C
 ++++++++
 ++++++++endmenu
index 2a773b855572b3863319a60c17672241882c3c01,bc126764a44d02cb38b50f3ae74900a9ce490da2,bc126764a44d02cb38b50f3ae74900a9ce490da2,bc126764a44d02cb38b50f3ae74900a9ce490da2,bc126764a44d02cb38b50f3ae74900a9ce490da2,ed1fd8925e43985e368ef6138104e93fc4085578,bc126764a44d02cb38b50f3ae74900a9ce490da2,bc126764a44d02cb38b50f3ae74900a9ce490da2,bc126764a44d02cb38b50f3ae74900a9ce490da2..08540dae0090fe821bfa7deb83d06b98a24261e9
@@@@@@@@@@ -3,18 -3,11 -3,11 -3,11 -3,11 -3,11 -3,11 -3,11 -3,11 +3,18 @@@@@@@@@@ snd-soc-ab8500-codec-objs := ab8500-cod
         snd-soc-ac97-objs := ac97.o
         snd-soc-ad1836-objs := ad1836.o
         snd-soc-ad193x-objs := ad193x.o
 ++++++++snd-soc-ad193x-spi-objs := ad193x-spi.o
 ++++++++snd-soc-ad193x-i2c-objs := ad193x-i2c.o
         snd-soc-ad1980-objs := ad1980.o
         snd-soc-ad73311-objs := ad73311.o
         snd-soc-adau1701-objs := adau1701.o
         snd-soc-adau1373-objs := adau1373.o
 ++++++++snd-soc-adau1977-objs := adau1977.o
 ++++++++snd-soc-adau1977-spi-objs := adau1977-spi.o
 ++++++++snd-soc-adau1977-i2c-objs := adau1977-i2c.o
         snd-soc-adav80x-objs := adav80x.o
 ++++++++snd-soc-adav801-objs := adav801.o
 ++++++++snd-soc-adav803-objs := adav803.o
         snd-soc-ads117x-objs := ads117x.o
         snd-soc-ak4104-objs := ak4104.o
         snd-soc-ak4535-objs := ak4535.o
@@@@@@@@@@ -53,9 -46,6 -46,6 -46,6 -46,6 -46,6 -46,6 -46,6 -46,6 +53,9 @@@@@@@@@@ snd-soc-hdmi-codec-objs := hdmi.
         snd-soc-pcm1681-objs := pcm1681.o
         snd-soc-pcm1792a-codec-objs := pcm1792a.o
         snd-soc-pcm3008-objs := pcm3008.o
 ++++++++snd-soc-pcm512x-objs := pcm512x.o
 ++++++++snd-soc-pcm512x-i2c-objs := pcm512x-i2c.o
 ++++++++snd-soc-pcm512x-spi-objs := pcm512x-spi.o
         snd-soc-rt5631-objs := rt5631.o
         snd-soc-rt5640-objs := rt5640.o
         snd-soc-sgtl5000-objs := sgtl5000.o
@@@@@@@@@@ -73,6 -63,6 -63,6 -63,6 -63,6 -63,8 -63,6 -63,6 -63,6 +73,8 @@@@@@@@@@ snd-soc-sta529-objs := sta529.
         snd-soc-stac9766-objs := stac9766.o
         snd-soc-tas5086-objs := tas5086.o
         snd-soc-tlv320aic23-objs := tlv320aic23.o
+++++ +++snd-soc-tlv320aic23-i2c-objs := tlv320aic23-i2c.o
+++++ +++snd-soc-tlv320aic23-spi-objs := tlv320aic23-spi.o
         snd-soc-tlv320aic26-objs := tlv320aic26.o
         snd-soc-tlv320aic3x-objs := tlv320aic3x.o
         snd-soc-tlv320aic32x4-objs := tlv320aic32x4.o
@@@@@@@@@@ -144,18 -134,11 -134,11 -134,11 -134,11 -136,11 -134,11 -134,11 -134,11 +146,18 @@@@@@@@@@ obj-$(CONFIG_SND_SOC_AB8500_CODEC)        += s
         obj-$(CONFIG_SND_SOC_AC97_CODEC)       += snd-soc-ac97.o
         obj-$(CONFIG_SND_SOC_AD1836)   += snd-soc-ad1836.o
         obj-$(CONFIG_SND_SOC_AD193X)   += snd-soc-ad193x.o
 ++++++++obj-$(CONFIG_SND_SOC_AD193X_SPI)       += snd-soc-ad193x-spi.o
 ++++++++obj-$(CONFIG_SND_SOC_AD193X_I2C)       += snd-soc-ad193x-i2c.o
         obj-$(CONFIG_SND_SOC_AD1980)   += snd-soc-ad1980.o
         obj-$(CONFIG_SND_SOC_AD73311) += snd-soc-ad73311.o
         obj-$(CONFIG_SND_SOC_ADAU1373) += snd-soc-adau1373.o
 ++++++++obj-$(CONFIG_SND_SOC_ADAU1977)         += snd-soc-adau1977.o
 ++++++++obj-$(CONFIG_SND_SOC_ADAU1977_SPI)     += snd-soc-adau1977-spi.o
 ++++++++obj-$(CONFIG_SND_SOC_ADAU1977_I2C)     += snd-soc-adau1977-i2c.o
         obj-$(CONFIG_SND_SOC_ADAU1701)  += snd-soc-adau1701.o
         obj-$(CONFIG_SND_SOC_ADAV80X)  += snd-soc-adav80x.o
 ++++++++obj-$(CONFIG_SND_SOC_ADAV801)  += snd-soc-adav801.o
 ++++++++obj-$(CONFIG_SND_SOC_ADAV803)  += snd-soc-adav803.o
         obj-$(CONFIG_SND_SOC_ADS117X)  += snd-soc-ads117x.o
         obj-$(CONFIG_SND_SOC_AK4104)   += snd-soc-ak4104.o
         obj-$(CONFIG_SND_SOC_AK4535)   += snd-soc-ak4535.o
@@@@@@@@@@ -196,9 -179,6 -179,6 -179,6 -179,6 -181,6 -179,6 -179,6 -179,6 +198,9 @@@@@@@@@@ obj-$(CONFIG_SND_SOC_HDMI_CODEC) += snd
         obj-$(CONFIG_SND_SOC_PCM1681)  += snd-soc-pcm1681.o
         obj-$(CONFIG_SND_SOC_PCM1792A) += snd-soc-pcm1792a-codec.o
         obj-$(CONFIG_SND_SOC_PCM3008)  += snd-soc-pcm3008.o
 ++++++++obj-$(CONFIG_SND_SOC_PCM512x)  += snd-soc-pcm512x.o
 ++++++++obj-$(CONFIG_SND_SOC_PCM512x_I2C)      += snd-soc-pcm512x-i2c.o
 ++++++++obj-$(CONFIG_SND_SOC_PCM512x_SPI)      += snd-soc-pcm512x-spi.o
         obj-$(CONFIG_SND_SOC_RT5631)   += snd-soc-rt5631.o
         obj-$(CONFIG_SND_SOC_RT5640)   += snd-soc-rt5640.o
         obj-$(CONFIG_SND_SOC_SGTL5000)  += snd-soc-sgtl5000.o
@@@@@@@@@@ -213,6 -193,6 -193,6 -193,6 -193,6 -195,8 -193,6 -193,6 -193,6 +215,8 @@@@@@@@@@ obj-$(CONFIG_SND_SOC_STA529)   += snd-s
         obj-$(CONFIG_SND_SOC_STAC9766) += snd-soc-stac9766.o
         obj-$(CONFIG_SND_SOC_TAS5086)  += snd-soc-tas5086.o
         obj-$(CONFIG_SND_SOC_TLV320AIC23)      += snd-soc-tlv320aic23.o
+++++ +++obj-$(CONFIG_SND_SOC_TLV320AIC23_I2C)  += snd-soc-tlv320aic23-i2c.o
+++++ +++obj-$(CONFIG_SND_SOC_TLV320AIC23_SPI)  += snd-soc-tlv320aic23-spi.o
         obj-$(CONFIG_SND_SOC_TLV320AIC26)      += snd-soc-tlv320aic26.o
         obj-$(CONFIG_SND_SOC_TLV320AIC3X)      += snd-soc-tlv320aic3x.o
         obj-$(CONFIG_SND_SOC_TLV320AIC32X4)     += snd-soc-tlv320aic32x4.o
index f4d965ebc29e8320469becd09a3ac58a2668e8de,f295b65699105897743fad1ecbc4439a71e58f0e,cf9b15472c853b1962b987e54c8275d160a43eba,f295b65699105897743fad1ecbc4439a71e58f0e,f295b65699105897743fad1ecbc4439a71e58f0e,f295b65699105897743fad1ecbc4439a71e58f0e,f295b65699105897743fad1ecbc4439a71e58f0e,f295b65699105897743fad1ecbc4439a71e58f0e,f295b65699105897743fad1ecbc4439a71e58f0e..4d1c302f5a76edc06e4c1efa4fff4d3ba96818e7
@@@@@@@@@@ -269,81 -269,81 -269,65 -269,81 -269,81 -269,81 -269,81 -269,81 -269,81 +269,65 @@@@@@@@@@ static const char *da732x_hpf_voice[] 
                "150Hz", "200Hz", "300Hz", "400Hz"
         };
         
-- ------static const struct soc_enum da732x_dac1_hpf_mode_enum[] = {
-- ------       SOC_ENUM_SINGLE(DA732X_REG_DAC1_HPF, DA732X_HPF_MODE_SHIFT,
-                               DA732X_HPF_MODE_MAX, da732x_hpf_mode)
-        };
-        
-        static const struct soc_enum da732x_dac2_hpf_mode_enum[] = {
-               SOC_ENUM_SINGLE(DA732X_REG_DAC2_HPF, DA732X_HPF_MODE_SHIFT,
-- ------                       DA732X_HPF_MODE_MAX, da732x_hpf_mode)
-- ------};
++ ++++++static SOC_ENUM_SINGLE_DECL(da732x_dac1_hpf_mode_enum,
++ ++++++                           DA732X_REG_DAC1_HPF, DA732X_HPF_MODE_SHIFT,
++ ++++++                           da732x_hpf_mode);
         
-        static const struct soc_enum da732x_dac3_hpf_mode_enum[] = {
-               SOC_ENUM_SINGLE(DA732X_REG_DAC3_HPF, DA732X_HPF_MODE_SHIFT,
 - ------static const struct soc_enum da732x_dac2_hpf_mode_enum[] = {
 - ------       SOC_ENUM_SINGLE(DA732X_REG_DAC2_HPF, DA732X_HPF_MODE_SHIFT,
-- ------                       DA732X_HPF_MODE_MAX, da732x_hpf_mode)
-- ------};
++ ++++++static SOC_ENUM_SINGLE_DECL(da732x_dac2_hpf_mode_enum,
++ ++++++                           DA732X_REG_DAC2_HPF, DA732X_HPF_MODE_SHIFT,
++ ++++++                           da732x_hpf_mode);
         
-        static const struct soc_enum da732x_adc1_hpf_mode_enum[] = {
-               SOC_ENUM_SINGLE(DA732X_REG_ADC1_HPF, DA732X_HPF_MODE_SHIFT,
 - ------static const struct soc_enum da732x_dac3_hpf_mode_enum[] = {
 - ------       SOC_ENUM_SINGLE(DA732X_REG_DAC3_HPF, DA732X_HPF_MODE_SHIFT,
-- ------                       DA732X_HPF_MODE_MAX, da732x_hpf_mode)
-- ------};
++ ++++++static SOC_ENUM_SINGLE_DECL(da732x_dac3_hpf_mode_enum,
++ ++++++                           DA732X_REG_DAC3_HPF, DA732X_HPF_MODE_SHIFT,
++ ++++++                           da732x_hpf_mode);
         
-        static const struct soc_enum da732x_adc2_hpf_mode_enum[] = {
-               SOC_ENUM_SINGLE(DA732X_REG_ADC2_HPF, DA732X_HPF_MODE_SHIFT,
 - ------static const struct soc_enum da732x_adc1_hpf_mode_enum[] = {
 - ------       SOC_ENUM_SINGLE(DA732X_REG_ADC1_HPF, DA732X_HPF_MODE_SHIFT,
-- ------                       DA732X_HPF_MODE_MAX, da732x_hpf_mode)
-- ------};
++ ++++++static SOC_ENUM_SINGLE_DECL(da732x_adc1_hpf_mode_enum,
++ ++++++                           DA732X_REG_ADC1_HPF, DA732X_HPF_MODE_SHIFT,
++ ++++++                           da732x_hpf_mode);
         
-        static const struct soc_enum da732x_dac1_hp_filter_enum[] = {
-               SOC_ENUM_SINGLE(DA732X_REG_DAC1_HPF, DA732X_HPF_MUSIC_SHIFT,
-                               DA732X_HPF_MUSIC_MAX, da732x_hpf_music)
 - ------static const struct soc_enum da732x_adc2_hpf_mode_enum[] = {
 - ------       SOC_ENUM_SINGLE(DA732X_REG_ADC2_HPF, DA732X_HPF_MODE_SHIFT,
 - ------                       DA732X_HPF_MODE_MAX, da732x_hpf_mode)
-- ------};
++ ++++++static SOC_ENUM_SINGLE_DECL(da732x_adc2_hpf_mode_enum,
++ ++++++                           DA732X_REG_ADC2_HPF, DA732X_HPF_MODE_SHIFT,
++ ++++++                           da732x_hpf_mode);
         
-        static const struct soc_enum da732x_dac2_hp_filter_enum[] = {
-               SOC_ENUM_SINGLE(DA732X_REG_DAC2_HPF, DA732X_HPF_MUSIC_SHIFT,
 - ------static const struct soc_enum da732x_dac1_hp_filter_enum[] = {
 - ------       SOC_ENUM_SINGLE(DA732X_REG_DAC1_HPF, DA732X_HPF_MUSIC_SHIFT,
-- ------                       DA732X_HPF_MUSIC_MAX, da732x_hpf_music)
-- ------};
++ ++++++static SOC_ENUM_SINGLE_DECL(da732x_dac1_hp_filter_enum,
++ ++++++                           DA732X_REG_DAC1_HPF, DA732X_HPF_MUSIC_SHIFT,
++ ++++++                           da732x_hpf_music);
         
-        static const struct soc_enum da732x_dac3_hp_filter_enum[] = {
-               SOC_ENUM_SINGLE(DA732X_REG_DAC3_HPF, DA732X_HPF_MUSIC_SHIFT,
 - ------static const struct soc_enum da732x_dac2_hp_filter_enum[] = {
 - ------       SOC_ENUM_SINGLE(DA732X_REG_DAC2_HPF, DA732X_HPF_MUSIC_SHIFT,
-- ------                       DA732X_HPF_MUSIC_MAX, da732x_hpf_music)
-- ------};
++ ++++++static SOC_ENUM_SINGLE_DECL(da732x_dac2_hp_filter_enum,
++ ++++++                           DA732X_REG_DAC2_HPF, DA732X_HPF_MUSIC_SHIFT,
++ ++++++                           da732x_hpf_music);
         
-        static const struct soc_enum da732x_adc1_hp_filter_enum[] = {
-               SOC_ENUM_SINGLE(DA732X_REG_ADC1_HPF, DA732X_HPF_MUSIC_SHIFT,
 - ------static const struct soc_enum da732x_dac3_hp_filter_enum[] = {
 - ------       SOC_ENUM_SINGLE(DA732X_REG_DAC3_HPF, DA732X_HPF_MUSIC_SHIFT,
-- ------                       DA732X_HPF_MUSIC_MAX, da732x_hpf_music)
-- ------};
++ ++++++static SOC_ENUM_SINGLE_DECL(da732x_dac3_hp_filter_enum,
++ ++++++                           DA732X_REG_DAC3_HPF, DA732X_HPF_MUSIC_SHIFT,
++ ++++++                           da732x_hpf_music);
         
-        static const struct soc_enum da732x_adc2_hp_filter_enum[] = {
-               SOC_ENUM_SINGLE(DA732X_REG_ADC2_HPF, DA732X_HPF_MUSIC_SHIFT,
 - ------static const struct soc_enum da732x_adc1_hp_filter_enum[] = {
 - ------       SOC_ENUM_SINGLE(DA732X_REG_ADC1_HPF, DA732X_HPF_MUSIC_SHIFT,
-- ------                       DA732X_HPF_MUSIC_MAX, da732x_hpf_music)
-- ------};
++ ++++++static SOC_ENUM_SINGLE_DECL(da732x_adc1_hp_filter_enum,
++ ++++++                           DA732X_REG_ADC1_HPF, DA732X_HPF_MUSIC_SHIFT,
++ ++++++                           da732x_hpf_music);
         
-        static const struct soc_enum da732x_dac1_voice_filter_enum[] = {
-               SOC_ENUM_SINGLE(DA732X_REG_DAC1_HPF, DA732X_HPF_VOICE_SHIFT,
-                               DA732X_HPF_VOICE_MAX, da732x_hpf_voice)
 - ------static const struct soc_enum da732x_adc2_hp_filter_enum[] = {
 - ------       SOC_ENUM_SINGLE(DA732X_REG_ADC2_HPF, DA732X_HPF_MUSIC_SHIFT,
 - ------                       DA732X_HPF_MUSIC_MAX, da732x_hpf_music)
-- ------};
++ ++++++static SOC_ENUM_SINGLE_DECL(da732x_adc2_hp_filter_enum,
++ ++++++                           DA732X_REG_ADC2_HPF, DA732X_HPF_MUSIC_SHIFT,
++ ++++++                           da732x_hpf_music);
         
-        static const struct soc_enum da732x_dac2_voice_filter_enum[] = {
-               SOC_ENUM_SINGLE(DA732X_REG_DAC2_HPF, DA732X_HPF_VOICE_SHIFT,
 - ------static const struct soc_enum da732x_dac1_voice_filter_enum[] = {
 - ------       SOC_ENUM_SINGLE(DA732X_REG_DAC1_HPF, DA732X_HPF_VOICE_SHIFT,
-- ------                       DA732X_HPF_VOICE_MAX, da732x_hpf_voice)
-- ------};
++ ++++++static SOC_ENUM_SINGLE_DECL(da732x_dac1_voice_filter_enum,
++ ++++++                           DA732X_REG_DAC1_HPF, DA732X_HPF_VOICE_SHIFT,
++ ++++++                           da732x_hpf_voice);
         
-        static const struct soc_enum da732x_dac3_voice_filter_enum[] = {
-               SOC_ENUM_SINGLE(DA732X_REG_DAC3_HPF, DA732X_HPF_VOICE_SHIFT,
 - ------static const struct soc_enum da732x_dac2_voice_filter_enum[] = {
 - ------       SOC_ENUM_SINGLE(DA732X_REG_DAC2_HPF, DA732X_HPF_VOICE_SHIFT,
-- ------                       DA732X_HPF_VOICE_MAX, da732x_hpf_voice)
-- ------};
++ ++++++static SOC_ENUM_SINGLE_DECL(da732x_dac2_voice_filter_enum,
++ ++++++                           DA732X_REG_DAC2_HPF, DA732X_HPF_VOICE_SHIFT,
++ ++++++                           da732x_hpf_voice);
         
-        static const struct soc_enum da732x_adc1_voice_filter_enum[] = {
-               SOC_ENUM_SINGLE(DA732X_REG_ADC1_HPF, DA732X_HPF_VOICE_SHIFT,
 - ------static const struct soc_enum da732x_dac3_voice_filter_enum[] = {
 - ------       SOC_ENUM_SINGLE(DA732X_REG_DAC3_HPF, DA732X_HPF_VOICE_SHIFT,
-- ------                       DA732X_HPF_VOICE_MAX, da732x_hpf_voice)
-- ------};
++ ++++++static SOC_ENUM_SINGLE_DECL(da732x_dac3_voice_filter_enum,
++ ++++++                           DA732X_REG_DAC3_HPF, DA732X_HPF_VOICE_SHIFT,
++ ++++++                           da732x_hpf_voice);
         
 - ------static const struct soc_enum da732x_adc1_voice_filter_enum[] = {
 - ------       SOC_ENUM_SINGLE(DA732X_REG_ADC1_HPF, DA732X_HPF_VOICE_SHIFT,
 - ------                       DA732X_HPF_VOICE_MAX, da732x_hpf_voice)
 - ------};
 - ------
-- ------static const struct soc_enum da732x_adc2_voice_filter_enum[] = {
-- ------       SOC_ENUM_SINGLE(DA732X_REG_ADC2_HPF, DA732X_HPF_VOICE_SHIFT,
-- ------                       DA732X_HPF_VOICE_MAX, da732x_hpf_voice)
-- ------};
++ ++++++static SOC_ENUM_SINGLE_DECL(da732x_adc1_voice_filter_enum,
++ ++++++                           DA732X_REG_ADC1_HPF, DA732X_HPF_VOICE_SHIFT,
++ ++++++                           da732x_hpf_voice);
         
++ ++++++static SOC_ENUM_SINGLE_DECL(da732x_adc2_voice_filter_enum,
++ ++++++                           DA732X_REG_ADC2_HPF, DA732X_HPF_VOICE_SHIFT,
++ ++++++                           da732x_hpf_voice);
         
         static int da732x_hpf_set(struct snd_kcontrol *kcontrol,
                                  struct snd_ctl_elem_value *ucontrol)
@@@@@@@@@@ -714,65 -714,65 -698,65 -714,65 -714,65 -714,65 -714,65 -714,65 -714,65 +698,65 @@@@@@@@@@ static const char *enable_text[] = 
         };
         
         /* ADC1LMUX */
-- ------static const struct soc_enum adc1l_enum =
-- ------       SOC_ENUM_SINGLE(DA732X_REG_INP_MUX, DA732X_ADC1L_MUX_SEL_SHIFT,
-- ------                       DA732X_ADCL_MUX_MAX, adcl_text);
++ ++++++static SOC_ENUM_SINGLE_DECL(adc1l_enum,
++ ++++++                           DA732X_REG_INP_MUX, DA732X_ADC1L_MUX_SEL_SHIFT,
++ ++++++                           adcl_text);
         static const struct snd_kcontrol_new adc1l_mux =
                SOC_DAPM_ENUM("ADC Route", adc1l_enum);
         
         /* ADC1RMUX */
-- ------static const struct soc_enum adc1r_enum =
-- ------       SOC_ENUM_SINGLE(DA732X_REG_INP_MUX, DA732X_ADC1R_MUX_SEL_SHIFT,
-- ------                       DA732X_ADCR_MUX_MAX, adcr_text);
++ ++++++static SOC_ENUM_SINGLE_DECL(adc1r_enum,
++ ++++++                           DA732X_REG_INP_MUX, DA732X_ADC1R_MUX_SEL_SHIFT,
++ ++++++                           adcr_text);
         static const struct snd_kcontrol_new adc1r_mux =
                SOC_DAPM_ENUM("ADC Route", adc1r_enum);
         
         /* ADC2LMUX */
-- ------static const struct soc_enum adc2l_enum =
-- ------       SOC_ENUM_SINGLE(DA732X_REG_INP_MUX, DA732X_ADC2L_MUX_SEL_SHIFT,
-- ------                       DA732X_ADCL_MUX_MAX, adcl_text);
++ ++++++static SOC_ENUM_SINGLE_DECL(adc2l_enum,
++ ++++++                           DA732X_REG_INP_MUX, DA732X_ADC2L_MUX_SEL_SHIFT,
++ ++++++                           adcl_text);
         static const struct snd_kcontrol_new adc2l_mux =
                SOC_DAPM_ENUM("ADC Route", adc2l_enum);
         
         /* ADC2RMUX */
-- ------static const struct soc_enum adc2r_enum =
-- ------       SOC_ENUM_SINGLE(DA732X_REG_INP_MUX, DA732X_ADC2R_MUX_SEL_SHIFT,
-- ------                       DA732X_ADCR_MUX_MAX, adcr_text);
++ ++++++static SOC_ENUM_SINGLE_DECL(adc2r_enum,
++ ++++++                           DA732X_REG_INP_MUX, DA732X_ADC2R_MUX_SEL_SHIFT,
++ ++++++                           adcr_text);
         
         static const struct snd_kcontrol_new adc2r_mux =
                SOC_DAPM_ENUM("ADC Route", adc2r_enum);
         
-- ------static const struct soc_enum da732x_hp_left_output =
-- ------       SOC_ENUM_SINGLE(DA732X_REG_HPL, DA732X_HP_OUT_DAC_EN_SHIFT,
-- ------                       DA732X_DAC_EN_MAX, enable_text);
++ ++++++static SOC_ENUM_SINGLE_DECL(da732x_hp_left_output,
++ ++++++                           DA732X_REG_HPL, DA732X_HP_OUT_DAC_EN_SHIFT,
++ ++++++                           enable_text);
         
         static const struct snd_kcontrol_new hpl_mux =
                SOC_DAPM_ENUM("HPL Switch", da732x_hp_left_output);
         
-- ------static const struct soc_enum da732x_hp_right_output =
-- ------       SOC_ENUM_SINGLE(DA732X_REG_HPR, DA732X_HP_OUT_DAC_EN_SHIFT,
-- ------                       DA732X_DAC_EN_MAX, enable_text);
++ ++++++static SOC_ENUM_SINGLE_DECL(da732x_hp_right_output,
++ ++++++                           DA732X_REG_HPR, DA732X_HP_OUT_DAC_EN_SHIFT,
++ ++++++                           enable_text);
         
         static const struct snd_kcontrol_new hpr_mux =
                SOC_DAPM_ENUM("HPR Switch", da732x_hp_right_output);
         
-- ------static const struct soc_enum da732x_speaker_output =
-- ------       SOC_ENUM_SINGLE(DA732X_REG_LIN3, DA732X_LOUT_DAC_EN_SHIFT,
-- ------                       DA732X_DAC_EN_MAX, enable_text);
++ ++++++static SOC_ENUM_SINGLE_DECL(da732x_speaker_output,
++ ++++++                           DA732X_REG_LIN3, DA732X_LOUT_DAC_EN_SHIFT,
++ ++++++                           enable_text);
         
         static const struct snd_kcontrol_new spk_mux =
                SOC_DAPM_ENUM("SPK Switch", da732x_speaker_output);
         
-- ------static const struct soc_enum da732x_lout4_output =
-- ------       SOC_ENUM_SINGLE(DA732X_REG_LIN4, DA732X_LOUT_DAC_EN_SHIFT,
-- ------                       DA732X_DAC_EN_MAX, enable_text);
++ ++++++static SOC_ENUM_SINGLE_DECL(da732x_lout4_output,
++ ++++++                           DA732X_REG_LIN4, DA732X_LOUT_DAC_EN_SHIFT,
++ ++++++                           enable_text);
         
         static const struct snd_kcontrol_new lout4_mux =
                SOC_DAPM_ENUM("LOUT4 Switch", da732x_lout4_output);
         
-- ------static const struct soc_enum da732x_lout2_output =
-- ------       SOC_ENUM_SINGLE(DA732X_REG_LIN2, DA732X_LOUT_DAC_EN_SHIFT,
-- ------                       DA732X_DAC_EN_MAX, enable_text);
++ ++++++static SOC_ENUM_SINGLE_DECL(da732x_lout2_output,
++ ++++++                           DA732X_REG_LIN2, DA732X_LOUT_DAC_EN_SHIFT,
++ ++++++                           enable_text);
         
         static const struct snd_kcontrol_new lout2_mux =
                SOC_DAPM_ENUM("LOUT2 Switch", da732x_lout2_output);
@@@@@@@@@@ -1268,23 -1268,11 -1252,11 -1268,11 -1268,11 -1268,11 -1268,11 -1268,11 -1268,11 +1252,23 @@@@@@@@@@ static struct snd_soc_dai_driver da732x
                },
         };
         
 ++++++++static bool da732x_volatile(struct device *dev, unsigned int reg)
 ++++++++{
 ++++++++       switch (reg) {
 ++++++++       case DA732X_REG_HPL_DAC_OFF_CNTL:
 ++++++++       case DA732X_REG_HPR_DAC_OFF_CNTL:
 ++++++++               return true;
 ++++++++       default:
 ++++++++               return false;
 ++++++++       }
 ++++++++}
 ++++++++
         static const struct regmap_config da732x_regmap = {
                .reg_bits               = 8,
                .val_bits               = 8,
         
                .max_register           = DA732X_MAX_REG,
 ++++++++       .volatile_reg           = da732x_volatile,
                .reg_defaults           = da732x_reg_cache,
                .num_reg_defaults       = ARRAY_SIZE(da732x_reg_cache),
                .cache_type             = REGCACHE_RBTREE,
@@@@@@@@@@ -1499,8 -1487,8 -1471,8 -1487,8 -1487,8 -1487,8 -1487,8 -1487,8 -1487,8 +1483,8 @@@@@@@@@@ static int da732x_set_bias_level(struc
         
                                da732x_hp_dc_offset_cancellation(codec);
         
-- ------                       regcache_cache_only(codec->control_data, false);
-- ------                       regcache_sync(codec->control_data);
++ ++++++                       regcache_cache_only(da732x->regmap, false);
++ ++++++                       regcache_sync(da732x->regmap);
                        } else {
                                snd_soc_update_bits(codec, DA732X_REG_BIAS_EN,
                                                    DA732X_BIAS_BOOST_MASK,
                        }
                        break;
                case SND_SOC_BIAS_OFF:
-- ------               regcache_cache_only(codec->control_data, true);
++ ++++++               regcache_cache_only(da732x->regmap, true);
                        da732x_set_charge_pump(codec, DA732X_DISABLE_CP);
                        snd_soc_update_bits(codec, DA732X_REG_BIAS_EN, DA732X_BIAS_EN,
                                            DA732X_BIAS_DIS);
@@@@@@@@@@ -1566,7 -1554,7 -1538,6 -1554,7 -1554,7 -1554,7 -1554,7 -1554,7 -1554,7 +1550,6 @@@@@@@@@@ static struct snd_soc_codec_driver soc_
                .dapm_routes            = da732x_dapm_routes,
                .num_dapm_routes        = ARRAY_SIZE(da732x_dapm_routes),
                .set_pll                = da732x_set_dai_pll,
-- ------       .reg_cache_size         = ARRAY_SIZE(da732x_reg_cache),
         };
         
         static int da732x_i2c_probe(struct i2c_client *i2c,
index 458a6aed203eda6641a46c4e85929a063b8b91ea,5d430cc56f51d42397c3190bf3bfb55b7f850dae,5d430cc56f51d42397c3190bf3bfb55b7f850dae,5d430cc56f51d42397c3190bf3bfb55b7f850dae,5d430cc56f51d42397c3190bf3bfb55b7f850dae,ab369ae76b8c6638b1a94016e246c604ebfb0bc7,5d430cc56f51d42397c3190bf3bfb55b7f850dae,5d430cc56f51d42397c3190bf3bfb55b7f850dae,5d430cc56f51d42397c3190bf3bfb55b7f850dae..27261e4b27c788fd1232388366def9c9abe91bca
         #include <linux/init.h>
         #include <linux/delay.h>
         #include <linux/pm.h>
----- ---#include <linux/i2c.h>
         #include <linux/regmap.h>
         #include <linux/slab.h>
         #include <sound/core.h>
@@@@@@@@@@ -51,7 -51,7 -51,7 -51,7 -51,7 -50,7 -51,7 -51,7 -51,7 +50,7 @@@@@@@@@@ static const struct reg_default tlv320a
                {  9, 0x0000 },
         };
         
----- ---static const struct regmap_config tlv320aic23_regmap = {
+++++ +++const struct regmap_config tlv320aic23_regmap = {
                .reg_bits = 7,
                .val_bits = 9,
         
         static const char *rec_src_text[] = { "Line", "Mic" };
         static const char *deemph_text[] = {"None", "32Khz", "44.1Khz", "48Khz"};
         
----- ---static const struct soc_enum rec_src_enum =
----- ---       SOC_ENUM_SINGLE(TLV320AIC23_ANLG, 2, 2, rec_src_text);
+++++ +++static SOC_ENUM_SINGLE_DECL(rec_src_enum,
+++++ +++                           TLV320AIC23_ANLG, 2, rec_src_text);
         
         static const struct snd_kcontrol_new tlv320aic23_rec_src_mux_controls =
         SOC_DAPM_ENUM("Input Select", rec_src_enum);
         
----- ---static const struct soc_enum tlv320aic23_rec_src =
----- ---       SOC_ENUM_SINGLE(TLV320AIC23_ANLG, 2, 2, rec_src_text);
----- ---static const struct soc_enum tlv320aic23_deemph =
----- ---       SOC_ENUM_SINGLE(TLV320AIC23_DIGT, 1, 4, deemph_text);
+++++ +++static SOC_ENUM_SINGLE_DECL(tlv320aic23_rec_src,
+++++ +++                           TLV320AIC23_ANLG, 2, rec_src_text);
+++++ +++static SOC_ENUM_SINGLE_DECL(tlv320aic23_deemph,
+++++ +++                           TLV320AIC23_DIGT, 1, deemph_text);
         
         static const DECLARE_TLV_DB_SCALE(out_gain_tlv, -12100, 100, 0);
         static const DECLARE_TLV_DB_SCALE(input_gain_tlv, -1725, 75, 0);
@@@@@@@@@@ -400,7 -400,7 -400,7 -400,7 -400,7 -399,7 -400,7 -400,7 -400,7 +399,7 @@@@@@@@@@ static void tlv320aic23_shutdown(struc
                struct aic23 *aic23 = snd_soc_codec_get_drvdata(codec);
         
                /* deactivate */
 --------       if (!codec->active) {
 ++++++++       if (!snd_soc_codec_is_active(codec)) {
                        udelay(50);
                        snd_soc_write(codec, TLV320AIC23_ACTIVE, 0x0);
                }
@@@@@@@@@@ -557,7 -557,7 -557,7 -557,7 -557,7 -556,7 -557,7 -557,7 -557,7 +556,7 @@@@@@@@@@ static int tlv320aic23_resume(struct sn
                return 0;
         }
         
----- ---static int tlv320aic23_probe(struct snd_soc_codec *codec)
+++++ +++static int tlv320aic23_codec_probe(struct snd_soc_codec *codec)
         {
                int ret;
         
@@@@@@@@@@ -604,7 -604,7 -604,7 -604,7 -604,7 -603,7 -604,7 -604,7 -604,7 +603,7 @@@@@@@@@@ static int tlv320aic23_remove(struct sn
         }
         
         static struct snd_soc_codec_driver soc_codec_dev_tlv320aic23 = {
----- ---       .probe = tlv320aic23_probe,
+++++ +++       .probe = tlv320aic23_codec_probe,
                .remove = tlv320aic23_remove,
                .suspend = tlv320aic23_suspend,
                .resume = tlv320aic23_resume,
                .num_dapm_routes = ARRAY_SIZE(tlv320aic23_intercon),
         };
         
----- ---/*
----- --- * If the i2c layer weren't so broken, we could pass this kind of data
----- --- * around
----- --- */
----- ---static int tlv320aic23_codec_probe(struct i2c_client *i2c,
----- ---                                  const struct i2c_device_id *i2c_id)
+++++ +++int tlv320aic23_probe(struct device *dev, struct regmap *regmap)
         {
                struct aic23 *aic23;
----- ---       int ret;
         
----- ---       if (!i2c_check_functionality(i2c->adapter, I2C_FUNC_SMBUS_BYTE_DATA))
----- ---               return -EINVAL;
+++++ +++       if (IS_ERR(regmap))
+++++ +++               return PTR_ERR(regmap);
         
----- ---       aic23 = devm_kzalloc(&i2c->dev, sizeof(struct aic23), GFP_KERNEL);
+++++ +++       aic23 = devm_kzalloc(dev, sizeof(struct aic23), GFP_KERNEL);
                if (aic23 == NULL)
                        return -ENOMEM;
         
----- ---       aic23->regmap = devm_regmap_init_i2c(i2c, &tlv320aic23_regmap);
----- ---       if (IS_ERR(aic23->regmap))
----- ---               return PTR_ERR(aic23->regmap);
+++++ +++       aic23->regmap = regmap;
         
----- ---       i2c_set_clientdata(i2c, aic23);
+++++ +++       dev_set_drvdata(dev, aic23);
         
----- ---       ret =  snd_soc_register_codec(&i2c->dev,
----- ---                       &soc_codec_dev_tlv320aic23, &tlv320aic23_dai, 1);
----- ---       return ret;
----- ---}
----- ---static int __exit tlv320aic23_i2c_remove(struct i2c_client *i2c)
----- ---{
----- ---       snd_soc_unregister_codec(&i2c->dev);
----- ---       return 0;
+++++ +++       return snd_soc_register_codec(dev, &soc_codec_dev_tlv320aic23,
+++++ +++                                     &tlv320aic23_dai, 1);
         }
         
----- ---static const struct i2c_device_id tlv320aic23_id[] = {
----- ---       {"tlv320aic23", 0},
----- ---       {}
----- ---};
----- ---
----- ---MODULE_DEVICE_TABLE(i2c, tlv320aic23_id);
----- ---
----- ---static struct i2c_driver tlv320aic23_i2c_driver = {
----- ---       .driver = {
----- ---                  .name = "tlv320aic23-codec",
----- ---                  },
----- ---       .probe = tlv320aic23_codec_probe,
----- ---       .remove = __exit_p(tlv320aic23_i2c_remove),
----- ---       .id_table = tlv320aic23_id,
----- ---};
----- ---
----- ---module_i2c_driver(tlv320aic23_i2c_driver);
----- ---
         MODULE_DESCRIPTION("ASoC TLV320AIC23 codec driver");
         MODULE_AUTHOR("Arun KS <arunks@mistralsolutions.com>");
         MODULE_LICENSE("GPL");
diff --combined sound/soc/fsl/Kconfig
index 07f8f141727d99c19403f2994ac42ce63ff6f23a,07f8f141727d99c19403f2994ac42ce63ff6f23a,07f8f141727d99c19403f2994ac42ce63ff6f23a,07f8f141727d99c19403f2994ac42ce63ff6f23a,324988dea4bd31bd8ad8f6d416c701c2f874966f,269cb7e8164cc5301683785d695be920b744d397,07f8f141727d99c19403f2994ac42ce63ff6f23a,d0914c065a74b99481d06335ac8f68a319ed800b,07f8f141727d99c19403f2994ac42ce63ff6f23a..597962ec28fa9ffed74714cee6a36df883954105
@@@@@@@@@@ -1,5 -1,5 -1,5 -1,5 -1,5 -1,5 -1,5 -1,6 -1,5 +1,6 @@@@@@@@@@
         config SND_SOC_FSL_SAI
                tristate
+++++++ +       select REGMAP_MMIO
                select SND_SOC_GENERIC_DMAENGINE_PCM
         
         config SND_SOC_FSL_SSI
@@@@@@@@@@ -7,9 -7,9 -7,9 -7,9 -7,9 -7,9 -7,9 -8,11 -7,9 +8,11 @@@@@@@@@@
         
         config SND_SOC_FSL_SPDIF
                tristate
+++++++ +       select REGMAP_MMIO
         
         config SND_SOC_FSL_ESAI
                tristate
+++++++ +       select REGMAP_MMIO
         
         config SND_SOC_FSL_UTILS
                tristate
@@@@@@@@@@ -168,12 -168,12 -168,12 -168,12 -168,12 -168,14 -168,12 -171,12 -168,12 +171,14 @@@@@@@@@@ config SND_SOC_EUKREA_TLV32
                depends on MACH_EUKREA_MBIMX27_BASEBOARD \
                        || MACH_EUKREA_MBIMXSD25_BASEBOARD \
                        || MACH_EUKREA_MBIMXSD35_BASEBOARD \
----- ---               || MACH_EUKREA_MBIMXSD51_BASEBOARD
+++++ +++               || MACH_EUKREA_MBIMXSD51_BASEBOARD \
+++++ +++               || (OF && ARM)
                depends on I2C
----- ---       select SND_SOC_TLV320AIC23
----- ---       select SND_SOC_IMX_PCM_FIQ
+++++ +++       select SND_SOC_TLV320AIC23_I2C
                select SND_SOC_IMX_AUDMUX
                select SND_SOC_IMX_SSI
+++++ +++       select SND_SOC_FSL_SSI
+++++ +++       select SND_SOC_IMX_PCM_DMA
                help
                  Enable I2S based access to the TLV320AIC23B codec attached
                  to the SSI interface
@@@@@@@@@@ -204,7 -204,7 -204,7 -204,7 -204,7 -206,7 -204,7 -207,6 -204,7 +209,6 @@@@@@@@@@ config SND_SOC_IMX_SPDI
                tristate "SoC Audio support for i.MX boards with S/PDIF"
                select SND_SOC_IMX_PCM_DMA
                select SND_SOC_FSL_SPDIF
------- -       select REGMAP_MMIO
                help
                  SoC Audio support for i.MX boards with S/PDIF
                  Say Y if you want to add support for SoC audio on an i.MX board with
         
         config SND_SOC_IMX_MC13783
                tristate "SoC Audio support for I.MX boards with mc13783"
    -           depends on MFD_MC13783 && ARM
    +           depends on MFD_MC13XXX && ARM
                select SND_SOC_IMX_SSI
                select SND_SOC_IMX_AUDMUX
                select SND_SOC_MC13783
diff --combined sound/soc/fsl/fsl_esai.c
index c84026c991347f99014dad7df74c57731b789e24,d0c72ed261e74c37f9d2b7cde738b34aab303ad4,d0c72ed261e74c37f9d2b7cde738b34aab303ad4,d0c72ed261e74c37f9d2b7cde738b34aab303ad4,d0c72ed261e74c37f9d2b7cde738b34aab303ad4,d0c72ed261e74c37f9d2b7cde738b34aab303ad4,d8e13abd1bcabb3e5ceefca28f26cb820591a27e,d0c72ed261e74c37f9d2b7cde738b34aab303ad4,d0c72ed261e74c37f9d2b7cde738b34aab303ad4..0ba37005ab046dbd3ac2cf17bf3fe6c92c96e2c3
@@@@@@@@@@ -326,7 -326,7 -326,7 -326,7 -326,7 -326,7 -326,7 -326,7 -326,7 +326,7 @@@@@@@@@@ static int fsl_esai_set_dai_tdm_slot(st
                regmap_update_bits(esai_priv->regmap, REG_ESAI_TSMA,
                                   ESAI_xSMA_xS_MASK, ESAI_xSMA_xS(tx_mask));
                regmap_update_bits(esai_priv->regmap, REG_ESAI_TSMB,
 --------                          ESAI_xSMA_xS_MASK, ESAI_xSMB_xS(tx_mask));
 ++++++++                          ESAI_xSMB_xS_MASK, ESAI_xSMB_xS(tx_mask));
         
                regmap_update_bits(esai_priv->regmap, REG_ESAI_RCCR,
                                   ESAI_xCCR_xDC_MASK, ESAI_xCCR_xDC(slots));
                regmap_update_bits(esai_priv->regmap, REG_ESAI_RSMA,
                                   ESAI_xSMA_xS_MASK, ESAI_xSMA_xS(rx_mask));
                regmap_update_bits(esai_priv->regmap, REG_ESAI_RSMB,
 --------                          ESAI_xSMA_xS_MASK, ESAI_xSMB_xS(rx_mask));
 ++++++++                          ESAI_xSMB_xS_MASK, ESAI_xSMB_xS(rx_mask));
         
                esai_priv->slot_width = slot_width;
         
@@@@@@@@@@ -431,17 -431,17 -431,17 -431,17 -431,17 -431,17 -431,26 -431,17 -431,17 +431,26 @@@@@@@@@@ static int fsl_esai_set_dai_fmt(struct 
         static int fsl_esai_startup(struct snd_pcm_substream *substream,
                                    struct snd_soc_dai *dai)
         {
++++++ ++       int ret;
                struct fsl_esai *esai_priv = snd_soc_dai_get_drvdata(dai);
         
                /*
                 * Some platforms might use the same bit to gate all three or two of
                 * clocks, so keep all clocks open/close at the same time for safety
                 */
------ --       clk_prepare_enable(esai_priv->coreclk);
------ --       if (!IS_ERR(esai_priv->extalclk))
------ --               clk_prepare_enable(esai_priv->extalclk);
------ --       if (!IS_ERR(esai_priv->fsysclk))
------ --               clk_prepare_enable(esai_priv->fsysclk);
++++++ ++       ret = clk_prepare_enable(esai_priv->coreclk);
++++++ ++       if (ret)
++++++ ++               return ret;
++++++ ++       if (!IS_ERR(esai_priv->extalclk)) {
++++++ ++               ret = clk_prepare_enable(esai_priv->extalclk);
++++++ ++               if (ret)
++++++ ++                       goto err_extalck;
++++++ ++       }
++++++ ++       if (!IS_ERR(esai_priv->fsysclk)) {
++++++ ++               ret = clk_prepare_enable(esai_priv->fsysclk);
++++++ ++               if (ret)
++++++ ++                       goto err_fsysclk;
++++++ ++       }
         
                if (!dai->active) {
                        /* Reset Port C */
                }
         
                return 0;
++++++ ++
++++++ ++err_fsysclk:
++++++ ++       if (!IS_ERR(esai_priv->extalclk))
++++++ ++               clk_disable_unprepare(esai_priv->extalclk);
++++++ ++err_extalck:
++++++ ++       clk_disable_unprepare(esai_priv->coreclk);
++++++ ++
++++++ ++       return ret;
         }
         
         static int fsl_esai_hw_params(struct snd_pcm_substream *substream,
@@@@@@@@@@ -661,7 -661,7 -661,7 -661,7 -661,7 -661,7 -678,7 -661,7 -661,7 +678,7 @@@@@@@@@@ static bool fsl_esai_writeable_reg(stru
                }
         }
         
------ --static const struct regmap_config fsl_esai_regmap_config = {
++++++ ++static struct regmap_config fsl_esai_regmap_config = {
                .reg_bits = 32,
                .reg_stride = 4,
                .val_bits = 32,
@@@@@@@@@@ -687,6 -687,6 -687,6 -687,6 -687,6 -687,6 -704,9 -687,6 -687,6 +704,9 @@@@@@@@@@ static int fsl_esai_probe(struct platfo
                esai_priv->pdev = pdev;
                strcpy(esai_priv->name, np->name);
         
++++++ ++       if (of_property_read_bool(np, "big-endian"))
++++++ ++               fsl_esai_regmap_config.val_format_endian = REGMAP_ENDIAN_BIG;
++++++ ++
                /* Get the addresses and IRQ */
                res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
                regs = devm_ioremap_resource(&pdev->dev, res);
index 4d075f1abe7803387bb01dbb39a2d66a0eac4c59,4d075f1abe7803387bb01dbb39a2d66a0eac4c59,4d075f1abe7803387bb01dbb39a2d66a0eac4c59,4d075f1abe7803387bb01dbb39a2d66a0eac4c59,4d075f1abe7803387bb01dbb39a2d66a0eac4c59,8f36f49395dd467d33597d160007f9b5ad99b981,4d075f1abe7803387bb01dbb39a2d66a0eac4c59,4d075f1abe7803387bb01dbb39a2d66a0eac4c59,73ceb2f9b90d7eee7d148a70369871604e2b894e..6452ca83d8893eb35cdc842b8991366c4684c6e2
@@@@@@@@@@ -911,8 -911,8 -911,8 -911,8 -911,8 -911,8 -911,8 -911,8 -911,8 +911,8 @@@@@@@@@@ static int fsl_spdif_dai_probe(struct s
         {
                struct fsl_spdif_priv *spdif_private = snd_soc_dai_get_drvdata(dai);
         
----- ---       dai->playback_dma_data = &spdif_private->dma_params_tx;
----- ---       dai->capture_dma_data = &spdif_private->dma_params_rx;
+++++ +++       snd_soc_dai_init_dma_data(dai, &spdif_private->dma_params_tx,
+++++ +++                                 &spdif_private->dma_params_rx);
         
                snd_soc_add_dai_controls(dai, fsl_spdif_ctrls, ARRAY_SIZE(fsl_spdif_ctrls));
         
@@@@@@@@@@ -985,7 -985,7 -985,7 -985,7 -985,7 -985,7 -985,7 -985,7 -985,7 +985,7 @@@@@@@@@@ static bool fsl_spdif_writeable_reg(str
                }
         }
         
-------- static const struct regmap_config fsl_spdif_regmap_config = {
++++++++ static struct regmap_config fsl_spdif_regmap_config = {
                .reg_bits = 32,
                .reg_stride = 4,
                .val_bits = 32,
@@@@@@@@@@ -1105,6 -1105,6 -1105,6 -1105,6 -1105,6 -1105,6 -1105,6 -1105,6 -1105,9 +1105,9 @@@@@@@@@@ static int fsl_spdif_probe(struct platf
                memcpy(&spdif_priv->cpu_dai_drv, &fsl_spdif_dai, sizeof(fsl_spdif_dai));
                spdif_priv->cpu_dai_drv.name = spdif_priv->name;
         
++++++++        if (of_property_read_bool(np, "big-endian"))
++++++++                fsl_spdif_regmap_config.val_format_endian = REGMAP_ENDIAN_BIG;
++++++++ 
                /* Get the addresses and IRQ */
                res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
                regs = devm_ioremap_resource(&pdev->dev, res);
index 3507574003913b5023f66853a50bec809d6187bf,454f41cfc82847e98a6297b2db5822db35d717a6,454f41cfc82847e98a6297b2db5822db35d717a6,454f41cfc82847e98a6297b2db5822db35d717a6,27930fc432dcfe4b750ba3a9f2ff70bf50d78f1e,47a7a1b633aeebdddefdc0a9ff32b5c15b34e14f,454f41cfc82847e98a6297b2db5822db35d717a6,454f41cfc82847e98a6297b2db5822db35d717a6,454f41cfc82847e98a6297b2db5822db35d717a6..f2e289180e466ef0a9d673eea33f7ab0aaca1bd3
@@@@@@@@@@ -19,7 -19,7 -19,7 -19,7 -19,7 -19,7 -19,7 -19,7 -19,7 +19,7 @@@@@@@@@@ config SND_S3C_DMA_LEGAC
         
         config SND_S3C24XX_I2S
                tristate
    -           select S3C2410_DMA
    +           select S3C24XX_DMA
         
         config SND_S3C_I2SV2_SOC
                tristate
@@@@@@@@@@ -59,7 -59,7 -59,7 -59,7 -59,7 -59,7 -59,7 -59,7 -59,7 +59,7 @@@@@@@@@@ config SND_SOC_SAMSUNG_JIVE_WM875
                select SND_SOC_WM8750
                select SND_S3C2412_SOC_I2S
                help
 --------         Sat Y if you want to add support for SoC audio on the Jive.
 ++++++++         Say Y if you want to add support for SoC audio on the Jive.
         
         config SND_SOC_SAMSUNG_SMDK_WM8580
                tristate "SoC I2S Audio support for WM8580 on SMDK"
@@@@@@@@@@ -117,7 -117,7 -117,7 -117,7 -117,7 -117,7 -117,7 -117,7 -117,7 +117,7 @@@@@@@@@@ config SND_SOC_SAMSUNG_SIMTEC_TLV320AIC
                tristate "SoC I2S Audio support for TLV320AIC23 on Simtec boards"
                depends on SND_SOC_SAMSUNG && ARCH_S3C24XX
                select SND_S3C24XX_I2S
----- ---       select SND_SOC_TLV320AIC23
+++++ +++       select SND_SOC_TLV320AIC23_I2C
                select SND_SOC_SAMSUNG_SIMTEC
         
         config SND_SOC_SAMSUNG_SIMTEC_HERMES
@@@@@@@@@@ -145,11 -145,11 -145,11 -145,11 -145,11 -145,11 -145,11 -145,11 -145,11 +145,11 @@@@@@@@@@ config SND_SOC_SAMSUNG_RX1950_UDA138
         
         config SND_SOC_SAMSUNG_SMDK_WM9713
                tristate "SoC AC97 Audio support for SMDK with WM9713"
 --------       depends on SND_SOC_SAMSUNG && (MACH_SMDK6410 || MACH_SMDKC100 || MACH_SMDKV210 || MACH_SMDKC110 || MACH_SMDKV310 || MACH_SMDKC210)
 ++++++++       depends on SND_SOC_SAMSUNG && (MACH_SMDK6410 || MACH_SMDKC100 || MACH_SMDKV210 || MACH_SMDKC110)
                select SND_SOC_WM9713
                select SND_SAMSUNG_AC97
                help
 --------         Sat Y if you want to add support for SoC audio on the SMDK.
 ++++++++         Say Y if you want to add support for SoC audio on the SMDK.
         
         config SND_SOC_SMARTQ
                tristate "SoC I2S Audio support for SmartQ board"
@@@@@@@@@@ -210,7 -210,7 -210,7 -210,7 -210,7 -210,7 -210,7 -210,7 -210,7 +210,7 @@@@@@@@@@ config SND_SOC_TOBERMOR
         
         config SND_SOC_BELLS
                tristate "Audio support for Wolfson Bells"
    -           depends on SND_SOC_SAMSUNG && MACH_WLF_CRAGG_6410
    +           depends on SND_SOC_SAMSUNG && MACH_WLF_CRAGG_6410 && MFD_ARIZONA
                select SND_SAMSUNG_I2S
                select SND_SOC_WM5102
                select SND_SOC_WM5110