[转] Linux ALSA声卡驱动之三:component、dai、codec以及platform之间的关系
版权声明:本文为CSDN博主「MOON20704」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/moonlinux20704/article/details/88417361
一、背景概述
上节说到platform_device加载,触发mt76xx_i2s_driver、soc_driver、mt76xx_pcm_driver驱动程序的probe,这里面做了哪些工作,如下图
二、snd_soc_component与snd_soc_dai的关系
1、mt76xx_i2s_drv_probe的实现
在mt76xx_i2s_driver的probe函数里,执行了snd_soc_register_component这个函数,这里面即初始化struct snd_soc_dai *dai和struct snd_soc_component component的结构体,并建立联系,如下图
dai->list挂载在以component->dai_list为头部的链表里,即可通过component的地址反推出dai的地址,component->name="mt76xx-i2s",dai->driver指向component->dai_drv,即指向&mt76xx_i2s_dai,注意mt76xx_i2s_dai很重要,如下图
mt76xx_i2s_dai主要功能即设置采样率、采样bit位数、信道数量,以及数据传输的控制等,总之配置寄存器都在CPU端,因此,后面把这块内容归类到cpu_dai里面。最后component->list挂载到以&component_list为头的链表上,这个很重要,后面会详细说明。
2、wm8960_i2c_probe的实现
在wm8960_i2c_driver的probe函数里,执行了snd_soc_register_codec这个函数,这里面即初始化struct snd_soc_dai *dai、struct snd_soc_component component和struct snd_soc_codec *codec的结构体,并建立联系,如下图
dai->list挂载在以component->dai_list为头部的链表里,即可通过component的地址反推出dai的地址,dai->component=component,dai->codec=codec,即只要知道dai,就知道另外两个结构体,此外codec->list也挂载在codec_list为头的链表上(详细内容下节解释),component->name="wm8960-hifi",dai->driver指向component->dai_drv,即指向&wm8960_dai,wm8960_dai很如下图
wm8960_dai主要功能即设置wm8960的采样率、采样bit位数、stream的数量,以及声卡音量、增益等控制等(前面mt76xx_i2s_dai功能是设置i2s的采样率、采样bit以及数据传输,主要是在cpu端,wm8960主要是在codec端,两端都要设置),该codec主要是通过i2c进行配置,因此,后面把这块内容归类到codec_dai里面。最后component->list挂载到以&component_list为头的链表上,跟前面的i2s相关的component挂载在同一个链表上。
3、mt76xx_platform_drv_probe的实现
在mt76xx_pcm_driver的probe函数里,执行了snd_soc_register_platform这个函数,这里面即初始化struct snd_soc_platform *platform和struct snd_soc_component component的结构体,并建立联系,如下图
platform->list挂载在以platform_list为头部的链表里,platform->component=component,component->name="mt76xx-pcm",platform->driver=&mt76xx_soc_platform,mt76xx_soc_platform如下图
mt76xx_soc_platform主要功能即协调应用层和底层控制,按照一定规则有序的录制或者播放PCM格式的音频数据,包括建立环形缓冲、指针同步、mmap映射等,因此,后面把这块内容归类到platform里面。最后component->list挂载到以&component_list为头的链表上,跟前面的i2s相关的component挂载在同一个链表上。
三、整体关系架构图
由图可见,三个不同的component都挂载在component_list为头的链表上,后面使用的时候只需在链表上搜索与其相对应的name,就可以直接搜索到相应的component和dai,进行操作,后面会详细解释如何调用、匹配。
————————————————
版权声明:本文为CSDN博主「MOON20704」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/moonlinux20704/article/details/88417361
[转] Linux ALSA声卡驱动之三:component、dai、codec以及platform之间的关系相关推荐
- Linux ALSA声卡驱动之三:Platform之Cpu_dai
ALSA声卡驱动: 1.Linux ALSA声卡驱动之一:ALSA架构简介和ASOC架构简介 2.Linux ALSA声卡驱动之二:Platform 3. Linux ALSA声卡驱动之三:Platf ...
- Linux ALSA声卡驱动之三:PCM设备的创建
1. PCM是什么 PCM 是英文Pulse-code modulation的缩写,中文译名是脉冲编码调制.我们知道在现实生活中,人耳听到的声音是模拟信号,PCM就是要把声音从模拟转换成数字信号的一种 ...
- linux 声卡设备文件夹,Linux ALSA声卡驱动之三:PCM设备的创建
4. 设备文件节点的建立(dev/snd/pcmCxxDxxp.pcmCxxDxxc)本文引用地址:http://www.eepw.com.cn/article/201612/341593.htm 4 ...
- Linux ALSA声卡驱动之四:Codec 以及Codec_dai
ALSA声卡驱动: 1.Linux ALSA声卡驱动之一:ALSA架构简介和ASOC架构简介 2.Linux ALSA声卡驱动之二:Platform 3. Linux ALSA声卡驱动之三:Platf ...
- Linux ALSA声卡驱动之二:Platform
ALSA声卡驱动: 1.Linux ALSA声卡驱动之一:ALSA架构简介和ASOC架构简介 2.Linux ALSA声卡驱动之二:Platform 3. Linux ALSA声卡驱动之三:Platf ...
- Linux ALSA声卡驱动之五:Machine 以及ALSA声卡的注册
ALSA声卡驱动: 1.Linux ALSA声卡驱动之一:ALSA架构简介和ASOC架构简介 2.Linux ALSA声卡驱动之二:Platform 3. Linux ALSA声卡驱动之三:Platf ...
- Linux ALSA声卡驱动之七:录音(Capture) 调用流程
ALSA声卡驱动: 1.Linux ALSA声卡驱动之一:ALSA架构简介和ASOC架构简介 2.Linux ALSA声卡驱动之二:Platform 3. Linux ALSA声卡驱动之三:Platf ...
- Linux ALSA声卡驱动之一:ALSA架构简介和ASOC架构简介
ALSA声卡驱动: 1.Linux ALSA声卡驱动之一:ALSA架构简介和ASOC架构简介 2.Linux ALSA声卡驱动之二:Platform 3. Linux ALSA声卡驱动之三:Platf ...
- Linux ALSA声卡驱动之八:ASoC架构中的Platform
1. Platform驱动在ASoC中的作用 前面几章内容已经说过,ASoC被分为Machine,Platform和Codec三大部件,Platform驱动的主要作用是完成音频数据的管理,最终通过C ...
最新文章
- 【OpenCV 4开发详解】图像膨胀
- 海量数据处理:如何从10亿个数中,找出最大的10000个数?(top K问题)
- 运动控制卡的基类函数与实现例子
- ArcGIS中的投影和坐标转换
- oracle 几个字段中某个字段大于0其他字段不再进行统计?_如何深入理解MySQL 8.0直方图?...
- unix到底有啥用_汽车后挡风玻璃上的“横线”到底有啥用?不懂就别说自己会开车了...
- 蓝桥杯日期填空问题:高斯日记/星系炸弹
- 01.学习笔记-linux操作系统常用命令
- 论模式在领域驱动设计中的重要性
- 计算机通信发展史,通信技术发展史
- Powerbuilder webform,webservices 倍力文档在线查看
- 【企业安全实战】开源HIDS OSSEC部署与扩展使用
- 大神的傅里叶变换,一定要看看
- 我为什么还坚持做公众号?(二)
- sap采购申请自动转采购订单
- 《编译原理》(三)词法分析
- mysql笔记(一):Navicat for MySQL远程连接mysql服务报错的解决方法(1130、2509)
- 如果你已经这样了,那你必须要跳槽了。
- Java数据结构单向循环链表实现约瑟夫问题(丢手绢)
- 磊科nw705p虚拟服务器设置,教你如何设置磊科nw705p无线路由器的详细步骤【图文】...