版权声明:本文为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之间的关系相关推荐

  1. Linux ALSA声卡驱动之三:Platform之Cpu_dai

    ALSA声卡驱动: 1.Linux ALSA声卡驱动之一:ALSA架构简介和ASOC架构简介 2.Linux ALSA声卡驱动之二:Platform 3. Linux ALSA声卡驱动之三:Platf ...

  2. Linux ALSA声卡驱动之三:PCM设备的创建

    1. PCM是什么 PCM 是英文Pulse-code modulation的缩写,中文译名是脉冲编码调制.我们知道在现实生活中,人耳听到的声音是模拟信号,PCM就是要把声音从模拟转换成数字信号的一种 ...

  3. linux 声卡设备文件夹,Linux ALSA声卡驱动之三:PCM设备的创建

    4. 设备文件节点的建立(dev/snd/pcmCxxDxxp.pcmCxxDxxc)本文引用地址:http://www.eepw.com.cn/article/201612/341593.htm 4 ...

  4. Linux ALSA声卡驱动之四:Codec 以及Codec_dai

    ALSA声卡驱动: 1.Linux ALSA声卡驱动之一:ALSA架构简介和ASOC架构简介 2.Linux ALSA声卡驱动之二:Platform 3. Linux ALSA声卡驱动之三:Platf ...

  5. Linux ALSA声卡驱动之二:Platform

    ALSA声卡驱动: 1.Linux ALSA声卡驱动之一:ALSA架构简介和ASOC架构简介 2.Linux ALSA声卡驱动之二:Platform 3. Linux ALSA声卡驱动之三:Platf ...

  6. Linux ALSA声卡驱动之五:Machine 以及ALSA声卡的注册

    ALSA声卡驱动: 1.Linux ALSA声卡驱动之一:ALSA架构简介和ASOC架构简介 2.Linux ALSA声卡驱动之二:Platform 3. Linux ALSA声卡驱动之三:Platf ...

  7. Linux ALSA声卡驱动之七:录音(Capture) 调用流程

    ALSA声卡驱动: 1.Linux ALSA声卡驱动之一:ALSA架构简介和ASOC架构简介 2.Linux ALSA声卡驱动之二:Platform 3. Linux ALSA声卡驱动之三:Platf ...

  8. Linux ALSA声卡驱动之一:ALSA架构简介和ASOC架构简介

    ALSA声卡驱动: 1.Linux ALSA声卡驱动之一:ALSA架构简介和ASOC架构简介 2.Linux ALSA声卡驱动之二:Platform 3. Linux ALSA声卡驱动之三:Platf ...

  9. Linux ALSA声卡驱动之八:ASoC架构中的Platform

    1.  Platform驱动在ASoC中的作用 前面几章内容已经说过,ASoC被分为Machine,Platform和Codec三大部件,Platform驱动的主要作用是完成音频数据的管理,最终通过C ...

最新文章

  1. 【OpenCV 4开发详解】图像膨胀
  2. 海量数据处理:如何从10亿个数中,找出最大的10000个数?(top K问题)
  3. 运动控制卡的基类函数与实现例子
  4. ArcGIS中的投影和坐标转换
  5. oracle 几个字段中某个字段大于0其他字段不再进行统计?_如何深入理解MySQL 8.0直方图?...
  6. unix到底有啥用_汽车后挡风玻璃上的“横线”到底有啥用?不懂就别说自己会开车了...
  7. 蓝桥杯日期填空问题:高斯日记/星系炸弹
  8. 01.学习笔记-linux操作系统常用命令
  9. 论模式在领域驱动设计中的重要性
  10. 计算机通信发展史,通信技术发展史
  11. Powerbuilder webform,webservices 倍力文档在线查看
  12. 【企业安全实战】开源HIDS OSSEC部署与扩展使用
  13. 大神的傅里叶变换,一定要看看
  14. 我为什么还坚持做公众号?(二)
  15. sap采购申请自动转采购订单
  16. 《编译原理》(三)词法分析
  17. mysql笔记(一):Navicat for MySQL远程连接mysql服务报错的解决方法(1130、2509)
  18. 如果你已经这样了,那你必须要跳槽了。
  19. Java数据结构单向循环链表实现约瑟夫问题(丢手绢)
  20. 磊科nw705p虚拟服务器设置,教你如何设置磊科nw705p无线路由器的详细步骤【图文】...

热门文章

  1. 如何应对量化策略的失效
  2. 学生用计算机玩游戏怎么按OK键,玩电脑游戏是怎么切换桌面
  3. EMC存储 CLARiiON or VNX 恢复登录密码
  4. liunx c语言制作 微型web服务器 300行代码
  5. Ngrinder脚本开发各细节锦集(groovy)
  6. 2023最新可用的代挂网系统源码/一键安装+对接的LoginSystem
  7. 家用电器用户行为分析与事件识别
  8. IT运维——系统监控软件简介
  9. Tomcat集群同步原理
  10. 前端:实现各样的验证码