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

一、 调试大纲

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

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

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 @@
     <ctl name="Voip Evrc Min Max Rate Config" id="1" value="4" />
     <ctl name="Voip Dtx Mode" value="0" />
     <ctl name="TTY Mode" value="Off" />
+    <ctl name="Ext_Inpput_Control" value="Off" />
     <ctl name="HPHL Volume" value="9" />
     <ctl name="HPHR Volume" value="9" />
     <ctl name="RX1 Digital Volume" value="84" />
@@ -113,6 +114,10 @@
     <ctl name="INTERNAL_BT_SCO_RX Audio Mixer MultiMedia5" value="0" />
     <ctl name="MultiMedia1 Mixer TERT_MI2S_TX" value="0" />
     <ctl name="MultiMedia5 Mixer TERT_MI2S_TX" value="0" />
+    <ctl name="MultiMedia8 Mixer TERT_MI2S_TX" value="0" />
+    <ctl name="MultiMedia1 Mixer QUAT_MI2S_TX" value="0" />
+    <ctl name="MultiMedia5 Mixer QUAT_MI2S_TX" value="0" />
+    <ctl name="MultiMedia8 Mixer QUAT_MI2S_TX" value="0" />
     <ctl name="MultiMedia1 Mixer INTERNAL_BT_SCO_TX" value="0" />
     <ctl name="PRI_MI2S_RX_Voice Mixer CSVoice" value="0" />
     <ctl name="Voice_Tx Mixer TERT_MI2S_TX_Voice" value="0" />
@@ -422,7 +427,7 @@
     </path>
 
     <path name="audio-record">
-        <ctl name="MultiMedia1 Mixer TERT_MI2S_TX" value="1" />
+        <ctl name="MultiMedia1 Mixer QUAT_MI2S_TX" value="1" />
     </path>
 
     <path name="audio-record bt-sco">
@@ -442,7 +447,7 @@
         <ctl name="MultiMedia1 Mixer INTERNAL_FM_TX" value="1" />
     </path>
     <path name="audio-record-compress">
-        <ctl name="MultiMedia8 Mixer TERT_MI2S_TX" value="1" />
+        <ctl name="MultiMedia8 Mixer QUAT_MI2S_TX" value="1" />
     </path>
 
     <path name="audio-record-compress bt-sco">
@@ -459,7 +464,7 @@
     </path>
 
     <path name="low-latency-record">
-        <ctl name="MultiMedia5 Mixer TERT_MI2S_TX" value="1" />
+        <ctl name="MultiMedia5 Mixer QUAT_MI2S_TX" value="1" />
     </path>
 
     <path name="low-latency-record bt-sco">
@@ -910,7 +915,7 @@
     </path>
 
     <path name="handset-mic">
-        <ctl name="DEC1 MUX" value="ADC1" />
+        <path name="adc1" />
     </path>
 
     <path name="noise-mic">
@@ -1026,9 +1031,7 @@
     <!-- Dual MIC devices -->
     <path name="speaker-dmic-endfire">
         <ctl name="MI2S_TX Channels" value="Two" />
-        <ctl name="DEC1 MUX" value="ADC1" />
-        <ctl name="DEC2 MUX" value="ADC2" />
-        <ctl name="ADC2 MUX" value="INP3" />
+        <ctl name="Ext_Inpput_Control" value="On" />
     </path>
 
     <path name="dmic-endfire">
@@ -1056,7 +1059,7 @@
     </path>
 
     <path name="handset-stereo-dmic-ef">
-        <path name="speaker-dmic-endfire" />
+       <path name="dmic-endfire" />
     </path>
 
     <path name="speaker-stereo-dmic-ef">

六、 音效优化

这一点要先测试,由于高通平台音效的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

 

  • 7
    点赞
  • 62
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值