linux ALSA 驱动架构

一、kernel Audio驱动架构主流有两大类,一类是SOC Machine架构,另一类是simple-card架构。

MTK、QCom主要采用machine架构,rockchip采用simple card架构。

二、Machine架构驱动介绍

machine 架构每家平台实现并不完全相同,machine driver和platform driver都有平台厂商提供,codec driver无特殊要求,符合ALSA SOC-codec driver标准即可

(1)驱动组成

machine driver:主要负责注册card,并且注册dai-link下的codec(包括cpu dai和codec dai)dai-link一般在C文件中配置 

platform driver:即cpu dai的驱动,包括DMA配置和I2S配置

codec driver:即外部codec的驱动,如ak4642、rt5644等

DTSI也分为三个部分:

sound:对应machine driver

i2s:对应platform driver

codec:对应外部codec ic driver

(2)platform driver和codec driver注册流程

两者原理一样,都是通过devm_snd_soc_register_component向SOC Core中注册两个component。

所有注册的component都保存在soc-core.c的component_list中。

(3)Machine driver流程

首先配置dai-link,然后通过devm_snd_soc_register_card 调用snd_soc_register_card注册card并且解析dai-link,

调用snd_soc_card_probe调用platform driver的dai_probe函数

调用soc_probe_link_components最终调用components的 codec probe函数

同时注册codec中的kconctrl和dpam 

三、simple架构

(1)驱动组成

simple-card Driver: kernel\sound\soc\generic\simple-card.c  ,标准Linux驱动,各平台通用

SOC-I2S Driver:

codec Driver:

DTSI:

大致和machine 架构类似,都分为三个部分,主要差异在simple-card架构DTSI可以配置dai-link和route

如:

	rt5640-sound {
		compatible = "simple-audio-card";
		simple-audio-card,name = "rockchip,rt5640-codec";
		simple-audio-card,format = "i2s";
		simple-audio-card,mclk-fs = <256>;
		simple-audio-card,widgets =
			"Microphone", "Mic Jack",
			"Headphone", "Headphone Jack";
		simple-audio-card,routing =
			"Mic Jack", "MICBIAS1",
			"IN1P", "Mic Jack",
			"Headphone Jack", "HPOL",
			"Headphone Jack", "HPOR";

		simple-audio-card,cpu {
			sound-dai = <&i2s1>;
		};

		simple-audio-card,codec {
			sound-dai = <&rt5640>;
		};
	};

各Driver Probe流程和machine相同,都是调用 devm_snd_soc_register_card和devm_snd_soc_register_component两个函数。

以上函数是基于kernel5的,低版本接口类似,只是codec结构体名字变了。

四:其他

DTSI类似simple-card(支持dai-link)的machine driver

kernel\sound\soc\samsung\snow.c

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Free飝Fly

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值