RK3399添加支持音频AUDIO功能

进入我们的 音频调试部分,

首先来看我们的原理图,可以知道我们使用的是 rt5640  codec  ,接的是 i2c1 、i2s1

输出我们是喇叭和耳机都有

先来调试喇叭

因为我们使用的是 i2s1 先针对 i2s1 来添加相关时钟的补丁,网盘pl330.c和 simple-card.c

分别与 kernel/drivers/dma/pl330.c    kernel/sound/soc/generic/simple-card.c

进行对比添加修改

接着就是添加我们的 codec 的注册,

  1. 修改添加 dts

参考 网盘 kernel_diff.txt

  1. 确认驱动有编译出来相关 .o 文件

添加 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[] = {

你可能感兴趣的:(RK3399项目调试,音视频,嵌入式硬件,linux,物联网,android)