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

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 关系分析了)。

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

  • 4
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值