进入我们的 音频调试部分,
首先来看我们的原理图,可以知道我们使用的是 rt5640 codec ,接的是 i2c1 、i2s1
输出我们是喇叭和耳机都有
先来调试喇叭
因为我们使用的是 i2s1 先针对 i2s1 来添加相关时钟的补丁,网盘pl330.c和 simple-card.c
分别与 kernel/drivers/dma/pl330.c kernel/sound/soc/generic/simple-card.c
进行对比添加修改
接着就是添加我们的 codec 的注册,
参考 网盘 kernel_diff.txt
添加 patch 和注册上声卡之后,kernel就会注册上相关的声卡,注意这里需要 支持 spdif 音频接口
就会有下面的声卡, 0 和 1 就是我们声音必须的, 2 就是hdmi的
ALSA device list:
[ 1.656193] #0: rockchip,rt5640-codec
[ 1.656198] #1: ROCKCHIP,SPDIF
[ 1.656201] #2: rk-hdmi-dp-sound
[ 1.598744] asoc-simple-card rt5640-sound: rt5640-aif1 <-> ff880000.i2s mapping ok
[ 1.606128] asoc-simple-card spdif-sound: dit-hifi <-> ff870000.spdif mapping ok
3.
然后hal 查看路由是否已经存在
rk3399_daluotuo:/ # logcat -s alsa_route
logcat -s alsa_route
--------- beginning of main
--------- beginning of system
05-15 15:08:28.877 241 241 D alsa_route: Get route table for sound card0 rockchiprt5640c
05-15 15:08:37.073 241 322 D alsa_route: route_info->sound_card 0, route_info->devices 0
05-15 15:08:37.073 241 322 D alsa_route: route_set_controls() set route 0
05-15 15:08:41.689 241 322 D alsa_route: route_set_controls() set route 24
接着就可以 使用tinyalsa 的 tinymix 调试 路由,要是到这路由没出来的话,就说明驱动没好,需要重新确认驱动配置
我提前弄好了,只需要控制图中几个路由即可,因为我们现在调试的是 spk 的,所以大家在不知道怎么下手的情况,就抓住 spk相关的字眼,还有MIX 的字眼来打开,打开之后,再去排除不需要打开的即可!
当然,你要一直播放着声音来进行调试!
发现音质不对,就需要通 codec 的FAE 联系,修改寄存器,使用网盘的 rt5640.c 和rt5640.h
与 kernel/sound/soc/codecs/rt5640.c 和 kernel/sound/soc/codecs/rt5640.h 对比
这是因为一些计算的问题
查看寄存器,然后结合 datasheet,最好是和5640 FAE 来进行沟通
播放音乐,单个写寄存器,直到声音正常,然后添加代码里面去,当然这个 patch 和 修改什么寄存器是和原厂直接沟通的,不然那你自己去琢磨一份 datasheet 就很花时间了!
最后,我们把调好的路由给加到 config 中去
二、
接着就是看耳机的,使用的 ADC 检测
然后就是 确认路由的了,这个我就不带大家来进行一步一步调试了,我也是直接上我的修改,添加到 config 中去,然后 push 库进去即可
三、
录音也是一样的呢,你也可以先使用 tinycap 来调试,我呢为了更直观,直接使用系统的录音软件边录音边调试路由,但是发现还要先去掉
{
.ctl_name = "ADC IF2 Data Switch",
.str_val = "right copy to left",
},
这个配置
然后就是使用 tinymix 来调试路由
成功之后,添加到代码,编译,push 库进去即可
至于 tinymix 的路由是什么意思,大家需要看驱动来进行理解
static const struct snd_soc_dapm_route rt5640_dapm_routes[] = {