【Qualcomm高通音频】外部Codec调试流程_ES7243E

一、 调试大纲

调试正式开始之前,想办法获取以下信息:硬件设计原理图/Codec参考驱动代码/FAE联系方式。

1. 从硬件设计原理图,我们要获取到Codec芯片和CPU通过什么接口连接,包括数据传输接口、控制接口、reset和power引脚。

【Qualcomm高通音频】外部Codec调试流程_ES7243E_第1张图片

2. Codec参考驱动代码,一般正规的厂商都会提供的,至少也提供对应场景的寄存器配置。

接下来开始正式调试,大致分为以下流程:

a. 数据总线配置

b. codec驱动集成

c. 把codec挂载到声卡上

d. 音频空间封装以及调用

e. 音效优化

 

二、数据总线配置

第三方Codec芯片一般是I2S总线/PCM总线进行数据传输,配置方法基本相同。

这一步是脱离Codec芯片,至于CPU侧有关系。

当配置完成后,可以通过以下指令进行测试总线属性,以I2S为例:

a. 先向设备导入一首测试音频test.wav

b.执行以下指令进行测试

tinymix "QUAT_MI2S_RX Audio Mixer MultiMedia1" "1"

tinyplay /sdcard/test.wav -D 0 -d 0 &

c. 这个时候就可以使用示波器测量QUAT_MI2S对应GPIO,进而测得当前的位时钟、采样率和位深度配置。

 

三、Codec驱动集成

这一步主要比较基础但也至关重要,需要多和厂商FAE沟通。

 

四、Codec挂载到声卡

修改文件:kernel/msm-3.18/sound/soc/msm/msm8952.c

修改内容:

@@ -2357,8 +2388,8 @@ static struct snd_soc_dai_link msm8952_dai[] = {
 		.stream_name = "Quaternary MI2S Capture",
 		.cpu_dai_name = "msm-dai-q6-mi2s.3",
 		.platform_name = "msm-pcm-routing",
-		.codec_dai_name = "snd-soc-dummy-dai",
-		.codec_name = "snd-soc-dummy",
+		.codec_dai_name = "ES7243E HiFi 0",
+		.codec_name = "es7243e.5-0010",
 		.no_pcm = 1,
 		.dpcm_capture = 1,
 		.be_id = MSM_BACKEND_DAI_QUATERNARY_MI2S_TX,
-- 

 

五、音频空间封装以及调用

这里指提供下封装部分的代码diff,可以参考下。

+//kernel/msm-3.18/sound/soc/msm/msm8952.c
+extern void es7243e_amic_enable(void);
+extern void es7243e_amic_disable(void);
+static const char *const ext_codec_es7243e_function[] = { "Off", "On" };
+static int ext_codec_es7243e_control = 0;
+static int ext_codec_es7243e_get(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)
+{
+	ucontrol->value.integer.value[0] = ext_codec_es7243e_control;
+	pr_err("%s: ext_codec_es7243e_control = %d\n", __func__, ext_codec_es7243e_control);
+	return 0;
+}
+
+static int ext_codec_es7243e_put(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)
+{
+	if(ucontrol->value.integer.value[0] == ext_codec_es7243e_control)
+		return 1;//avoid repeat operation
+
+	ext_codec_es7243e_control = ucontrol->value.integer.value[0];
+
+	if(ucontrol->value.integer.value[0]) {
+		es7243e_amic_enable();
+	} else {
+		es7243e_amic_disable();
+	}
+	pr_err("%s: value.integer.value = %ld\n", __func__, ucontrol->value.integer.value[0]);
+	return 0;
+}


@@ -1032,6 +1063,8 @@ static const struct soc_enum msm_snd_enum[] = {
 				vi_feed_ch_text),
 	SOC_ENUM_SINGLE_EXT(ARRAY_SIZE(mi2s_rx_sample_rate_text),
 				mi2s_rx_sample_rate_text),
+	SOC_ENUM_SINGLE_EXT(ARRAY_SIZE(ext_codec_es7243e_function),
+				ext_codec_es7243e_function),
 };
 
 static const struct snd_kcontrol_new msm_snd_controls[] = {
@@ -1051,6 +1084,9 @@ static const struct snd_kcontrol_new msm_snd_controls[] = {
 			msm_vi_feed_tx_ch_get, msm_vi_feed_tx_ch_put),
 	SOC_ENUM_EXT("MI2S_RX SampleRate", msm_snd_enum[6],
 			mi2s_rx_sample_rate_get, mi2s_rx_sample_rate_put),
+	SOC_ENUM_EXT("Ext_Inpput_Control", msm_snd_enum[7],
+			ext_codec_es7243e_get, ext_codec_es7243e_put),
+	
 };

具体调用的修改文件是:hardware/qcom/audio/configs/msm8953/mixer_paths_qrd_sku3.xml
 

diff --git a/hardware/qcom/audio/configs/msm8953/mixer_paths_qrd_sku3.xml b/hardware/qcom/audio/configs/msm8953/mixer_paths_qrd_sku3.xml
index c6a3906..d05b9ee 100755
--- a/hardware/qcom/audio/configs/msm8953/mixer_paths_qrd_sku3.xml
+++ b/hardware/qcom/audio/configs/msm8953/mixer_paths_qrd_sku3.xml
@@ -49,6 +49,7 @@
     
     
     
+    
     
     
     
@@ -113,6 +114,10 @@
     
     
     
+    
+    
+    
+    
     
     
     
@@ -422,7 +427,7 @@
     
 
     
-        
+        
     
 
     
@@ -442,7 +447,7 @@
         
     
     
-        
+        
     
 
     
@@ -459,7 +464,7 @@
     
 
     
-        
+        
     
 
     
@@ -910,7 +915,7 @@
     
 
     
-        
+        
     
 
     
@@ -1026,9 +1031,7 @@
     
     
         
-        
-        
-        
+        
     
 
     
@@ -1056,7 +1059,7 @@
     
 
     
-        
+       
     
 
     

六、 音效优化

这一点要先测试,由于高通平台音效的DSP可以继续使用,因此使用外部Codec上的双麦克风时,同时选择加载双麦克风音效会更好。因此调整双麦克风属性配置如下:

diff --git a/hardware/qcom/audio/configs/msm8953/msm8953.mk b/hardware/qcom/audio/configs/msm8953/msm8953.mk
index ec5d0a1..5483e1e 100755
--- a/hardware/qcom/audio/configs/msm8953/msm8953.mk
+++ b/hardware/qcom/audio/configs/msm8953/msm8953.mk
@@ -112,10 +112,10 @@ audio_hal.period_size=192
 ##fluencetype can be "fluence" or "fluencepro" or "none"
 ##modified by kuangjincheng @20170225 for SLM758 bugzilla 6705
 PRODUCT_PROPERTY_OVERRIDES += \
-ro.qc.sdk.audio.fluencetype=none\
+ro.qc.sdk.audio.fluencetype=fluence\
 persist.audio.fluence.voicecall=false\
 persist.audio.fluence.voicerec=false\
-persist.audio.fluence.audiorec=false\
+persist.audio.fluence.audiorec=true\
 persist.audio.fluence.speaker=false

 

你可能感兴趣的:(子类_ADUIO)