问题:3399是配ACL5651,系统声音和录音都正常的,现在是要调4G模块通话和蓝牙语音
3288是配5640,
【1】把以下2个APK编译出来
Dialer
Messaging
4G模块通话问题:
在RK3399 7.1平台我们把系统里面的Dialer、Messaging及google服务都编译出来了进行了测试;
Dialer拨号之后就退到了联系人收藏界面;
Messaging发送短信也提示"短信功能已暂停";
【2】下面的属性设置了没?
1、device/rockchip/common/overlay/frameworks/base/core/res/res/values/config.xml:23:
true
2、device/rockchip/common/overlay/frameworks/base/core/res/res/values/config.xml:167:
true
【3】RK原厂提供的补丁打上去两端都没有声音;
(1) 通过adb 打印寄存器:cat d/regmap/1-001a/registers 查看 将打印信息发给codec原厂工程师分析;
(2) 拨通电话后,通过 adb shell logcat -s alsa_route 查看耳机是通过route 1传输声音的,但在const struct config_control rt5651_speaker_normal_controls[] 并没有添加这个通道:
{ //add by begin
.ctl_name = "DAC MIXL INF1 Switch",
.int_val = {on},
},
{
.ctl_name = "DAC MIXR INF1 Switch",
.int_val = {on},
},//add by end
编译相关库之后,烧录后发现对方可以听到RK3399主板发出的声音,但接听方说话,主拨方无法听到声音;
【4】 把相关log打印出来,CODEC原厂工程师分析是4G 通话不是标配功能,所以寄存器没有配置;然后修改了一下驱动,配置寄存器:
在kernelsoundsoccodecsrt5651.c文件中rt5651_bst3_event函数中添加:
@@ -966,14 +930,21 @@ sta
tic int rt5651_bst3_event(struct snd_soc_dapm_widget *w,
struct snd_soc_codec *codec = snd_soc_dapm_to_codec(w->dapm);
switch (event) {
+
case SND_SOC_DAPM_POST_PMU:
+ printk("-------libing----4G acl5651 audio inn");
+ snd_soc_update_bits(codec, RT5651_D_MISC,
+ RT5651_CLK_DET_EN, RT5651_CLK_DET_EN);
snd_soc_update_bits(codec, RT5651_PWR_ANLG2,
RT5651_PWR_BST3_OP2, RT5651_PWR_BST3_OP2);
break;
case SND_SOC_DAPM_PRE_PMD:
+ printk("-------libing----4G acl5651 audio outn");
snd_soc_update_bits(codec, RT5651_PWR_ANLG2,
RT5651_PWR_BST3_OP2, 0);
+ snd_soc_update_bits(codec, RT5651_D_MISC,
+ RT5651_CLK_DET_EN, 0);
break;
编译烧录测试,双方接听都正常了!
【5】测试发现,短信应用没有显示出来:
需要到/packages/apps/Messaging 目录下面 mm -B ;如果之前已经./mkimage.sh ota 进行打包的话,需要先./mkimage.sh一下,然后再./mkimage.sh ota 这样的话,Messaging就会显示出来
【6】蓝牙电话
下行: 蓝牙模块 通过codec的 I2S2--LOUT 送到 4G模块 然后4G发射出去,
上行:4G模块古来的数据 通过codec MIC----I2S2 ---蓝牙模块
【7】
新板子可实现功能,播电话时可测得信号,但有杂音
1、MCLK频率是12.28Mhz
2、PCM_CLK的时钟为512K;
3、PCM_SYNC 为8K;
【8】正常调试打印:
(1) 通过adb 打印寄存器:cat d/regmap/1-001a/registers 查看 将打印信息发给codec原厂工程师分析;
(2) 拨通电话后,通过 adb shell logcat -s alsa_route 查看耳机是通过哪个route 传输声音的
【9】杂音问题解析:
(1)CPU出来的MCLK在播放本地音视频文件有12.28MHz,属于正常状态;但拔通4G电话后切换到了蓝牙模式,这时用示波器量MCLK是没有的,所以切换到蓝牙模式后MCLK被disabled了;
(2)codec原厂工程师通过调试寄存器分析:杂音问题是因为默认使用了rt5651内部时钟导致的,原理上要使用CPU供出来的MCLK;
(3)跟RK原厂沟通后,把拔通蓝牙电话CPU出来的MCLK配置为常有,这样就触决了杂音问题;
(4)经过测试发现:从rt5651出来的声音对方听上去有回音,这个是rt5651芯片本身不带消音功能导致的,如果客户需要此功能要跟客户说明清楚;
(5)还有一个问题(目前还需要跟RK对接):断电开机拔通蓝牙电话无法跑rt5651_bluetooth_incall_controls,需要多拔打2-3次就可以切换到rt5651_bluetooth_incall_controls;
【10】现在蓝牙4G通话调通了
但还有一个问题:每次断电开机拔通蓝牙电话无法跑rt5651_bluetooth_incall_controls,需要多拔打2-3次就可以切换到rt5651_bluetooth_incall_controls
解决:
diff --git a/tinyalsa_hal/audio_hw.c b/tinyalsa_hal/audio_hw.c
index a2d18ac..5957a76 100755
--- a/tinyalsa_hal/audio_hw.c
+++ b/tinyalsa_hal/audio_hw.c
@@ -298,8 +298,8 @@ static void start_call(struct audio_device *adev)
goto err_call_in;
}
- pcm_start(adev->pcm_hfp_out);
- pcm_start(adev->pcm_hfp_in);
+ pcm_start(adev->pcm_call_out);
+ pcm_start(adev->pcm_call_in);
return;
【11】查看声卡:cat /proc/asound/cards
0 [realtekrt5651co]: realtekrt5651co - realtekrt5651codec_hdmiin
realtekrt5651codec_hdmiin
1 [C920 ]: USB-Audio - HD Pro Webcam C920
HD Pro Webcam C920 at u***-fe3c0000.u***-1, high speed
2 [rkhdmidpsound ]: rk-hdmi-dp-soun - rk-hdmi-dp-sound
rk-hdmi-dp-sound
原作者:Haidern