[Feature][ZXW-67]Support codec ES8311 REF version for audio playback.

Only Configure:No
Affected branch:master
Affected module:codec
Is it affected on both ZXIC and MTK:only ZXIC
Self-test:Yes
Doc Update:Yes

Change-Id: I525c833913dcbde2014b59c359ba6e790d500c84
diff --git a/cap/zx297520v3/sources/meta-zxic/recipes-kernel/linux/files/zx297520v3/linux-5_10-vehicle_dc_ref-normal-defconfig b/cap/zx297520v3/sources/meta-zxic/recipes-kernel/linux/files/zx297520v3/linux-5_10-vehicle_dc_ref-normal-defconfig
index ce51bab..324925d 100755
--- a/cap/zx297520v3/sources/meta-zxic/recipes-kernel/linux/files/zx297520v3/linux-5_10-vehicle_dc_ref-normal-defconfig
+++ b/cap/zx297520v3/sources/meta-zxic/recipes-kernel/linux/files/zx297520v3/linux-5_10-vehicle_dc_ref-normal-defconfig
@@ -1973,13 +1973,14 @@
 # CONFIG_ZX_TDM is not set
 CONFIG_SND_SOC_SANECHIPS=y
 # CONFIG_SND_SOC_ZX29_TI3100 is not set
-CONFIG_SND_SOC_ZX29_NAU8810=y
+# CONFIG_SND_SOC_ZX29_NAU8810 is not set
 # CONFIG_SND_SOC_ZX29_TI3104 is not set
 # CONFIG_SND_SOC_ZX29_ES8374 is not set
 # CONFIG_SND_SOC_ZX29_ES8312 is not set
 # CONFIG_SND_SOC_ZX29_AK4940 is not set
 # CONFIG_SND_SOC_ZX29_MAX9867 is not set
 # CONFIG_SND_SOC_ZX29_ES8311 is not set
+CONFIG_SND_SOC_ZX29_ES8311=y
 CONFIG_SND_SOC_ZX_VOICE=y
 CONFIG_SND_SOC_ZX297520V3=y
 CONFIG_SND_SOC_ZX_I2S=y
@@ -1989,6 +1990,7 @@
 # CONFIG_SND_SOC_TLV320AIC3X is not set
 # CONFIG_SND_SOC_MAX9867 is not set
 # CONFIG_SND_SOC_ES8311 is not set
+CONFIG_SND_SOC_ES8311=y
 CONFIG_SND_EXTRA_CTRL=y
 CONFIG_USE_TOP_I2S0=y
 # CONFIG_USE_TOP_I2S1 is not set
diff --git a/cap/zx297520v3/zxic_code/zxic_source/linux-5.10/arch/arm/boot/dts/zx297520v3-vehicle_dc_ref.dts b/cap/zx297520v3/zxic_code/zxic_source/linux-5.10/arch/arm/boot/dts/zx297520v3-vehicle_dc_ref.dts
index 7d0c6aa..ff55fb9 100755
--- a/cap/zx297520v3/zxic_code/zxic_source/linux-5.10/arch/arm/boot/dts/zx297520v3-vehicle_dc_ref.dts
+++ b/cap/zx297520v3/zxic_code/zxic_source/linux-5.10/arch/arm/boot/dts/zx297520v3-vehicle_dc_ref.dts
@@ -141,7 +141,7 @@
 };	
 &zx29_nau8810 {
 	pinctrl-0 = <&i2s0_pins>;
-	status = "okay";
+//	status = "okay";
 };
 &zx29_dummycodec{
 	pinctrl-0 = <&i2s1_pins>;
@@ -155,11 +155,11 @@
 //	status = "okay";
 };
 &codec_es8311 {
-//	status = "okay";
+	status = "okay";
 };	
 &zx29_es8311 {
 	pinctrl-0 = <&i2s0_pins>;
-//	status = "okay";
+	status = "okay";
 };
 &gmac {
     port-nums = <1>;
diff --git a/cap/zx297520v3/zxic_code/zxic_source/linux-5.10/arch/arm/boot/dts/zx297520v3.dtsi b/cap/zx297520v3/zxic_code/zxic_source/linux-5.10/arch/arm/boot/dts/zx297520v3.dtsi
index 53f21ab..d573a33 100755
--- a/cap/zx297520v3/zxic_code/zxic_source/linux-5.10/arch/arm/boot/dts/zx297520v3.dtsi
+++ b/cap/zx297520v3/zxic_code/zxic_source/linux-5.10/arch/arm/boot/dts/zx297520v3.dtsi
@@ -476,11 +476,11 @@
 			};	
 			codec_es8311: codec_es8311@18 {         
 				compatible = "everest,es8311";
-				reg = <0x1A>;		
+				reg = <0x18>;
 				//reset-gpios = <&bgpio 122 GPIO_ACTIVE_HIGH>;/*RST*/
-				clock-names = "clk_out";	
+				clock-names = "clk_out2";
 				clocks = <&clkc CLKOUT2_CLK>;		
-				pinctrl-names = "clk_out";			
+				pinctrl-names = "clk_out2";
 				pinctrl-0 = <&clk2_func_pins>;				
 				status = "disabled";
 			};			
@@ -809,7 +809,7 @@
 			reg-names = "soc_sys";
 
 			zxic,i2s-controller = <&i2s0>;
-			zxic,audio-codec = <&codec_nau8810>;
+                        zxic,audio-codec = <&codec_es8311>;
 			status = "disabled";
 		};		
 		softwdt: softwdt@1301000 {
diff --git a/cap/zx297520v3/zxic_code/zxic_source/linux-5.10/sound/soc/codecs/Kconfig b/cap/zx297520v3/zxic_code/zxic_source/linux-5.10/sound/soc/codecs/Kconfig
index 97e4bc5..74d24c8 100755
--- a/cap/zx297520v3/zxic_code/zxic_source/linux-5.10/sound/soc/codecs/Kconfig
+++ b/cap/zx297520v3/zxic_code/zxic_source/linux-5.10/sound/soc/codecs/Kconfig
@@ -799,6 +799,7 @@
 config SND_SOC_ES8311
 	tristate "Everest Semi ES8311 CODEC"
 	depends on I2C
+       tristate
 	
 config SND_SOC_GTM601
 	tristate 'GTM601 UMTS modem audio codec'
@@ -1395,6 +1396,7 @@
 config SND_SOC_TLV320AIC3X
 	tristate "Texas Instruments TLV320AIC3x CODECs"
 	depends on I2C
+       select REGMAP_I2C
 
 config SND_SOC_TLV320DAC33
 	tristate
diff --git a/cap/zx297520v3/zxic_code/zxic_source/linux-5.10/sound/soc/codecs/es8311.c b/cap/zx297520v3/zxic_code/zxic_source/linux-5.10/sound/soc/codecs/es8311.c
index b68ee46..e5e7d25 100755
--- a/cap/zx297520v3/zxic_code/zxic_source/linux-5.10/sound/soc/codecs/es8311.c
+++ b/cap/zx297520v3/zxic_code/zxic_source/linux-5.10/sound/soc/codecs/es8311.c
@@ -37,6 +37,7 @@
 struct	es8311_private {

 	struct snd_soc_component *component;

 	struct regmap *regmap;

+        struct device *dev;
 	struct clk *mclk;

 	unsigned int mclk_rate;

 	int mastermode;

@@ -1050,7 +1051,8 @@
 	 * 1. sclk/bclk is used as mclk

 	 * 2. mclk is controled by soc I2S

 	 */

-	if (es8311->mclk_src == ES8311_MCLK_PIN) {

+	//if (es8311->mclk_src == ES8311_MCLK_PIN) {

+	if(0) {
 		es8311->mclk = devm_clk_get(component->dev, "mclk");

 		if (IS_ERR(es8311->mclk)) {

 			dev_err(component->dev, "%s,unable to get mclk\n", __func__);

@@ -1129,6 +1131,10 @@
 	snd_soc_component_write(component, ES8311_DAC_REG37, 0x48);

 	snd_soc_component_write(component, ES8311_ADC_REG17, 0xBF);

 	snd_soc_component_write(component, ES8311_DAC_REG32, 0xBF);

+	snd_soc_component_write(component, ES8311_CLK_MANAGER_REG02, 0x98);
+	snd_soc_component_write(component, ES8311_CLK_MANAGER_REG03, 0x1b);
+	snd_soc_component_write(component, ES8311_CLK_MANAGER_REG04, 0x1b);
+	snd_soc_component_write(component, ES8311_CLK_MANAGER_REG05, 0xbb);
 	msleep(100);

 	es8311_set_bias_level(component, SND_SOC_BIAS_STANDBY);

 

@@ -1149,6 +1155,16 @@
 	struct es8311_private *info = dev_get_drvdata(dev);

 	struct device_node *np = dev->of_node;

 

+	unsigned tmp;
+
+	#if 1
+        void __iomem 	*reg_base;
+        reg_base = ioremap(0x13B000+0x94 ,4);
+        tmp  = ioread32(reg_base);
+        tmp |= (1<<0)|(1<<2);
+	iowrite32(tmp,reg_base);
+	#endif
+
 	dev_info(dev, "%s:start!\n", __func__);

 

 	if(dev == NULL){

@@ -1166,7 +1182,7 @@
 	}

 

 

-	state0 = pinctrl_lookup_state(pctrl, "clk_out");

+	state0 = pinctrl_lookup_state(pctrl, "clk_out2");

 	if (IS_ERR(state0)) {

 		devm_pinctrl_put(pctrl);

 		dev_err(dev, "missing clk_out\n");

@@ -1188,7 +1204,7 @@
 

 

 	

-	clk = of_clk_get_by_name(np, "clk_out");	

+	clk = of_clk_get_by_name(np, "clk_out2");

 	if (IS_ERR(clk)) {

 		dev_err(dev, "Could not get clk_out\n");

 		ret = PTR_ERR(clk);

@@ -1459,6 +1475,8 @@
 	if (ret)

 		pr_err("failed to create attr group\n");

 

+        printk("%s end\n", __func__);
+
 	return ret;

 }

 

diff --git a/cap/zx297520v3/zxic_code/zxic_source/linux-5.10/sound/soc/codecs/es8311.h b/cap/zx297520v3/zxic_code/zxic_source/linux-5.10/sound/soc/codecs/es8311.h
index 6ffc3d9..5acb206 100755
--- a/cap/zx297520v3/zxic_code/zxic_source/linux-5.10/sound/soc/codecs/es8311.h
+++ b/cap/zx297520v3/zxic_code/zxic_source/linux-5.10/sound/soc/codecs/es8311.h
@@ -73,7 +73,8 @@
 /* The VMIDLEVEL is different for 1.8V AVDD */

 #define ES8311_3V3 0

 #define ES8311_1V8 1

-#define ES8311_AVDD ES8311_3V3

+//#define ES8311_AVDD ES8311_3V3

+#define ES8311_AVDD ES8311_1V8

 

 #define ES8311_MCLK_PIN	0

 #define ES8311_BCLK_PIN 1

diff --git a/cap/zx297520v3/zxic_code/zxic_source/linux-5.10/sound/soc/sanechips/zx29_es83xx.c b/cap/zx297520v3/zxic_code/zxic_source/linux-5.10/sound/soc/sanechips/zx29_es83xx.c
index 2a0a3c8..050a0f8 100755
--- a/cap/zx297520v3/zxic_code/zxic_source/linux-5.10/sound/soc/sanechips/zx29_es83xx.c
+++ b/cap/zx297520v3/zxic_code/zxic_source/linux-5.10/sound/soc/sanechips/zx29_es83xx.c
@@ -556,7 +556,7 @@
 
 #if defined(CONFIG_SND_SOC_ZX29_ES8311)
 SND_SOC_DAILINK_DEF(codec, \
-		DAILINK_COMP_ARRAY(COMP_CODEC("es8311.1-001a", "es8311-hifi")));
+		DAILINK_COMP_ARRAY(COMP_CODEC("es8311.1-0018", "ES8311 HiFi")));
 
 #elif defined(CONFIG_SND_SOC_ZX29_ES8374)
 
@@ -680,7 +680,8 @@
 	.owner = THIS_MODULE,
 	.dai_link = zx29_dai_link,
 	.num_links = ARRAY_SIZE(zx29_dai_link),
-#ifdef USE_ALSA_VOICE_FUNC
+//#ifdef USE_ALSA_VOICE_FUNC
+#if 0
 	 .controls = vp_snd_controls,
 	 .num_controls = ARRAY_SIZE(vp_snd_controls),
 #endif