我是靠谱客的博主 繁荣画笔,这篇文章主要介绍rk3399调试alc5651(audio模块)之simple-card framework机制分析,现在分享给大家,希望可以做个参考。

版权声明:本文为博主原创文章,转载请注明出处:https://blog.csdn.net/huang_165/article/details/85340002

这是“rk3399调试alc5651”的第二篇,这篇以源码分析simple-card framework机制。

      在《rk3399调试alc5651之操作方法》讲述了如何移植alc5651,现在我们分析从源码simple-card framework框架。
本篇博文不展示asoc调用过程(因为笔记内容有点多),如想获取其asoc调用过程请从这里下载本人的笔记。


环境:
硬件:realtek alc5651
内核:Linux4.4

      分析一个复杂的子系统代码需要找到入口,明确自己想要的东西。
先抓住主要的函数调用流,理清思路。为日后深入分析打下基础。现在有了设备树之后,我们可以从设备树上开始我们的研究。

参考文档:
Documentation/devicetree/bindings/sound/rockchip-rt5645.txt
Documentation/devicetree/bindings/sound/rockchip-i2s.txt

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
rt5651-sound { //machine 匹配层的驱动节点。 status = "okay"; //默认打开 compatible = "simple-audio-card"; //simple-card framework框架 simple-audio-card,format = "i2s"; simple-audio-card,name = "realtek,rt5651-codec"; simple-audio-card,mclk-fs = <256>; //主控供给编解码芯片用的时钟 simple-audio-card,widgets = //指定相关组件 "Microphone", "Mic Jack", //mic "Headphone", "Headphone Jack"; //耳机 simple-audio-card,routing = //音频路径,如mic输入、耳机输出走那些通路。 "Mic Jack", "MICBIAS1", "IN1P", "Mic Jack", "Headphone Jack", "HPOL", "Headphone Jack", "HPOR"; simple-audio-card,cpu { sound-dai = <&i2s0>; //指定cpu接入音频编解码的dai(数字化接口) }; simple-audio-card,codec { sound-dai = <&rt5651>; //指定编解码音频接入cpu的dai(数字化接口) }; }; rt5651: rt5651@1a { #sound-dai-cells = <0>; compatible = "rockchip,rt5651"; reg = <0x1a>; //控制音频芯片i2c通道的设备地址 clocks = <&cru SCLK_I2S_8CH_OUT>; clock-names = "mclk"; pinctrl-names = "default"; pinctrl-0 = <&i2s_8ch_mclk>; spk-con-gpio = <&gpio0 11 GPIO_ACTIVE_HIGH>; hp-det-gpio = <&gpio4 28 GPIO_ACTIVE_LOW>; }; i2s0: i2s@ff880000 { compatible = "rockchip,rk3399-i2s", "rockchip,rk3066-i2s"; reg = <0x0 0xff880000 0x0 0x1000>; rockchip,grf = <&grf>; interrupts = <0 39 4 0>; dmas = <&dmac_bus 0>, <&dmac_bus 1>; dma-names = "tx", "rx"; clock-names = "i2s_clk", "i2s_hclk"; clocks = <&cru 86>, <&cru 468>; pinctrl-names = "default"; pinctrl-0 = <&i2s0_8ch_bus>; power-domains = <&power 28>; status = "disabled"; };

我们看一下simple-card 和asoc结合的框架

我们直接分析sound/soc/generic/simple-card.c

      可以看得出,simple-card framework框架在machine driver上封装了薄薄的一层。
它起到一个收集信息、将信息组织起来并注册到asoc系统的作用,统一管理声卡设备的加入、退出。

      结论:
当 simple-card framework成功调用devm_snd_soc_register_card后
就向asoc系统提交一个machine driver,这样就回到传统的asoc(machine  platform  codec 关系分析了)。

想验证结论,获取本人的笔记。

最后

以上就是繁荣画笔最近收集整理的关于rk3399调试alc5651(audio模块)之simple-card framework机制分析的全部内容,更多相关rk3399调试alc5651(audio模块)之simple-card内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(60)

评论列表共有 0 条评论

立即
投稿
返回
顶部