Firefly开源社区

123
发表新贴
打印 上一主题 下一主题

持续记录-菜鸟I2S驱动开发之更新

154

积分

2

威望

0

贡献

技术小白

积分
154

持续记录-菜鸟I2S驱动开发之更新

发表于 2016-5-3 16:15:06      浏览:44833 | 回复:20        打印      只看该作者   [复制链接] 楼主
本来打算一个星期搞定的事情,拖到了五一之后,但并不是没有成果,至少见识了3.10内核的强大(这个真的是在黑)
这两周主要在看DTS相关的内容,以及linux声音体系,从ALSA一直看到了ASOC。自己写的一个声卡也能够map成功了,虽然并没有做什么卵用。
下一步就是做录音了,bug还是原来说的那种,而且比较离奇。
bug1:在插上hdmi和耳机的时候使用hdmi放音。这个不能忍,也不知道是哪里的问题,希望有大神指教。
bug2:我使用Firefly-RK3288_Ubuntu14.04_201512031755.img这个固件,烧录git下来最新内核进行编译,如果不选择ES8323的声卡驱动生成的内核就一切ok,能够正常启动,如果选择了在生成内核就直接启动失败,貌似是es8323的驱动有问题吧。
先来回忆下,上一周做的工作。


回复

使用道具 举报

154

积分

2

威望

0

贡献

技术小白

积分
154
发表于 2016-5-3 16:19:17        只看该作者  沙发
上一个帖子中http://developer.t-firefly.com/f ... amp;page=3#pid16437
当时驱动模块加载进去会出错,这个问题的原因还不了解,知道的可以过来指教下。
但是!问题我最后解决掉了。
当然解决的方法也很无聊,就是不使用出厂自带的Ubuntu+Android系统,刷了Firefly-RK3288_Ubuntu14.04_201512031755.img这个固件,再使用git上的kernel进行编译就能够成功了。
Tips:
Ubuntu下给rk3288刷Ubuntu14.04的方法如下:
sudo upgrade_tool uf Firefly-RK3288_Ubuntu14.04_201512031755.img
就可以把整个镜像刷进去了,很方便。
回复

使用道具 举报

154

积分

2

威望

0

贡献

技术小白

积分
154
发表于 2016-5-3 16:27:23        只看该作者  板凳
然后就是写ASOC的驱动了,ASOC驱动分为三个部分machine 和 codec以及platform.
platform就直接使用kernel里面自带的i2s.h了。
那也就是需要写machine 和 codec的驱动了。
但是!相对与2.6的内核3.10引入了DTS概念,也就是没有显式的platform_device了。
也就是需要自己在dts文件中添加node节点。

我在firefly-rk3288_beta.dts文件中添加了ahu-codec节点和rockchip-ahu节点如下:





回复

使用道具 举报

154

积分

2

威望

0

贡献

技术小白

积分
154
发表于 2016-5-3 16:32:09        只看该作者  地板
这些设置完成了之后,编译生成source.img烧写到rk3288上去。
这样每次开机就会自动展开生成rockchip-ahu设备节点和ahu-codec设备节点。
设备节点有了,下一步就可以写对应的平台驱动了。
回复

使用道具 举报

154

积分

2

威望

0

贡献

技术小白

积分
154
发表于 2016-5-3 16:36:21        只看该作者  5#
codec部分如下:

这样把文件编译成ahu_codec.ko时,使用insmod插入到系统时,就会自动调用对应的ahu_codec_probe函数.

回复

使用道具 举报

154

积分

2

威望

0

贡献

技术小白

积分
154
发表于 2016-5-3 16:39:48        只看该作者  6#
machine部分如下:

同样insmod时候就自动运行rockchip_ahu_audio_probe函数
回复

使用道具 举报

154

积分

2

威望

0

贡献

技术小白

积分
154
发表于 2016-5-3 16:47:08        只看该作者  7#
在ahu_codec_probe函数中注册了一个codec



该codec的驱动为:



该codec中的dai(digital audio interface)驱动为



回复

使用道具 举报

154

积分

2

威望

0

贡献

技术小白

积分
154
发表于 2016-5-3 16:48:57        只看该作者  8#
懒得在分析了,打印的log如下:
整个声卡的启动顺序如下:
[  137.068702] Enter ahu_codec_probe--->在codec中平台驱动探针函数
[  140.255786] Enter rockchip_ahu_audio_probe--->在machine中平台驱动探针函数
当codec有了 platform有了 machine有了
就触发了codec中的snd_soc_codec_driver结构体中的probe函数->在这个函数中对codec做一些初始化
[  140.256451] Enter ahu_probe

[  140.256830] Enter rk_ahu_init-->在machine中对machine做一些初始化,例如开启些运放之类的工作
[  140.269018] rockchip-ahu rockchip-ahu.29:  AHU HiFi <-> rockchip-i2s.0 mapping ok--->codec驱动和platform驱动链接成功
然后播放的时候顺序如下:
[  291.605974]   ahu_pcm_startup--->codec中pcm启动要做的一些初始化
[  291.607176] Enter rk_hw_params--->machine中要对codec dai和platform dai做一些初始化操作
[  291.607193] Enter ahu_pcm_hw_params---->codec中要对codec做的一些硬件操作
回复

使用道具 举报

154

积分

2

威望

0

贡献

技术小白

积分
154
发表于 2016-5-3 16:50:37        只看该作者  9#
对咯,还有一个问题,rk3288貌似无论是输出到es8323还是输出到hdmi的编码输出芯片使用的都是i2s_sdo0
这样真的没有影响吗?
回复

使用道具 举报

154

积分

2

威望

0

贡献

技术小白

积分
154
发表于 2016-5-3 16:51:23        只看该作者  10#
还有到底hdmi播放耳机不播放的原因是什么????
回复

使用道具 举报

返回列表
123
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

友情链接 : 爱板网 电子发烧友论坛 云汉电子社区 粤ICP备14022046号-2
快速回复 返回顶部 返回列表