当前位置: 首页 > news >正文

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

http://www.lryc.cn/news/2267.html

相关文章:

  • JDK 8 JVM内存结构详解
  • 黑马程序员 Linux 教程
  • 文件操作 -- IO
  • FPGA解析串口协议帧3.0版本,增加了错误重发功能,提供仿真文件以及源码
  • 365天深度学习训练营 第P6周:好莱坞明星识别
  • 一文读懂 Zebec Chain 的“先行网络” Nautilus 链
  • FuzzyMathematicalModel模糊数学模型-2-多目标模糊综合评价案例分享
  • 单链表--C语言版(从0开始,超详细解析,小白一看就会)
  • cv2-特征点匹配(bf、FLANN)
  • 基于matlab多功能相控阵雷达资源管理的服务质量优化
  • 立创eda专业版学习笔记(6)(pcb板移动节点)
  • Java面试——MyBatis相关知识
  • Cortex-M0编程入门
  • 字符串函数能有什么坏心思?
  • Vue3 组件之间的通信
  • 多路查找树
  • Mybatis——注入执行sql查询、更新、新增以及建表语句
  • 即时通讯系列-4-如何设计写扩散下的同步协议方案
  • tui-swipe-action组件上的按钮点击后有阴影的解决方法
  • 【大数据Hadoop】Hadoop 3.x 新特性总览
  • Python-第三天 Python判断语句
  • 失手删表删库,赶紧跑路?!
  • 技术树基础——16排它平方数(Bigdecimal,int,string,数组的转换)
  • 04动手实践:手把手带你实现gRPC的Hello World
  • 区块链技术与应用1——BTC-密码学原理
  • PyTorch学习笔记:data.WeightedRandomSampler——数据权重概率采样
  • SpringMVC对请求参数的处理
  • 12年老外贸的经验分享
  • 电子电路中的各种接地(接地保护与GND)
  • php实现农历公历日期的相互转换