一、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

linux ALSA 驱动架构相关推荐

  1. linux 音频架构绕过,linux音频驱动架构

    1.linux音频驱动架构分为3部分组成:硬件无关层(核心层ALSA).板级音频数字接口层驱动(McASP.McBSP等).外部codes驱动 sound/soc/davinci/ti81xx-etv ...

  2. Linux网络驱动架构

    转载来自:https://blog.csdn.net/zhoudengqing/article/details/47406821 转 Linux网络驱动架构 2015年08月10日 22:54:39 ...

  3. linux I2C驱动架构解析

    I2C 概述 I2C是philips提出的外设总线. I2C只有两条线,一条串行数据线:SDA,一条是时钟线SCL ,使用SCL,SDA这两根信号线就实现了设备之间的数据交互,它方便了工程师的布线. ...

  4. Linux MMC驱动架构浅析

    Linux MMC驱动架构浅析 MMC驱动模型 Linux内核设计了MMC子系统,用于管理MMC/SD等设备,MMC/SD存储设备是一种典型的块设备.MMC子系统的框架结构如下图所示. 块设备(MMC ...

  5. Linux ALSA驱动框架(一)--ALSA架构简介--声卡的创建

    (1)ALSA简介 (1) Native ALSA Application:tinyplay/tinycap/tinymix,这些用户程序直接调用 alsa 用户库接口来实现放音.录音.控制 ALSA ...

  6. LINUX音频驱动架构

    https://www.jianshu.com/p/0f5fe8f51b66 简介 LINUX下音频驱动开发,要遵循标准的ALSA架构, 下面分别从硬件架构.软件架构.驱动程序,3个方面分析. 硬件架 ...

  7. Linux 音频设备驱动架构及应用编程

    最早出现在Linux上的音频编程接口是OSS(Open Sound System),它由一套完整的内核驱动程序模块组成,可以为绝大多数声卡提供统一的编程接口.OSS出现的历史相对较长,这些内核模块中的 ...

  8. linux网络驱动架构,Linux网络体系架构和网卡驱动设计

    Linux网络体系架构 1.Linux的协议栈层次 2.Linux的网络子系统架构 Linux的协议栈层次 Linux的优点之一在于它丰富而稳定的网络协议栈.其范围从协议无关层(例如通用socket层 ...

  9. linux驱动架构变化,Linux网卡驱动架构分析

    一.网卡驱动架构 由上到下层次依次为:应用程序→系统调用接口→协议无关接口→网络协议栈→设备无关接口→设备驱动. 二.重要数据结构 1.Linux内核中每一个网卡由一个net_device结构来描述. ...

最新文章

  1. LLVM编译器基础架构与DragonEgg示例
  2. [iOS]调和 pop 手势导致 AVPlayer 播放卡顿
  3. 算法 字符串转换为以为数组
  4. 尝试引用已删除的函数_学Excel函数公式,你必须要掌握这些知识
  5. Android UI滑动加载源码
  6. h5页面笔按下默认是拖动_屡屡刷屏的长页面H5原来是这样诞生的
  7. mfc的WM_PAINT笔记
  8. 【Elasticsearch】Curator 从入门到实战
  9. CSS中自适应屏幕分辨率
  10. MyBatis学习笔记(2)-MyBatis入门
  11. 第k小元素——分治法
  12. 基于php046学校固定资产管理系统
  13. 第十二届蓝桥杯模拟赛Python组(第一期)
  14. 什么是人工智能(AI)数据平台?
  15. 类似win7系统泡泡屏保
  16. 经典网络营销软文成功例子
  17. Oracle 实用技巧之不知道密码情况下 dblink 的迁移
  18. arduino 的红外遥控解码
  19. PyTorch-5 自定义 Datasets, DataLoaders 和 Transforms
  20. Android7.0 BatteryStatsService

热门文章

  1. 洛龙区:加快布局大数据产业
  2. 海南楼市充斥着传说 投机者必将自食其果
  3. 伦敦国王学院计算机申请要求,2020年伦敦国王学院高级计算机专业研究生申请条件及世界排名|学费介绍...
  4. 劈开迷雾:蘑菇街搜索架构及搜索排序实践
  5. android蓝牙配对 自动联接,如何实现android蓝牙开发 自动配对连接,并不弹出提示框...
  6. SDP最佳实践丨为室内亲子动物园注入新零售基因
  7. linux进程创建心得体会,Linux系统下计算机C语言编程心得体会
  8. python 法律检索_Python爬虫进阶必备 | 某裁判文书检索网站加密分析与自动登录实现...
  9. JavaScript动态加载效果
  10. 电脑找不到网络许可管理器_许可到网络