问题: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: <bool name="config_voice_capable">true</bool>
2、device/rockchip/common/overlay/frameworks/base/core/res/res/values/config.xml:167: <bool name="config_sms_capable">true</bool>

【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 通话不是标配功能,所以寄存器没有配置;然后修改了一下驱动,配置寄存器:

在kernel\sound\soc\codecs\rt5651.c文件中rt5651_bst3_event函数中添加:

@@ -966,14 +930,21 @@ static 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 in\n");
 +  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 out\n");
    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 usb-fe3c0000.usb-1, high speed
   2 [rkhdmidpsound  ]: rk-hdmi-dp-soun - rk-hdmi-dp-sound
                        rk-hdmi-dp-sound