Linux 音频驱动(二) ASoC音频驱动之Platform驱动_cpu_dai含义-程序员宅基地

技术标签: 驱动程序  alsa  linux  dma  pcm  Linux Audio  

1. 简介

前面提到,ASoC音频驱动由三部分构成:platform,codec,machine。本文重点介绍platform驱动。

Platform驱动程序包括音频DMA引擎驱动程序(PCM DMA),数字音频接口(CPU DAI)驱动程序(例如I2S,AC97,PCM)以及该平台的任何音频DSP驱动程序。其中常用的是CPU DAI和PCM DMA驱动。

CPU DAI:在嵌入式系统里面通常指CPU的I2S、PCM总线控制器。对于playback,负责将音频数据从I2S TX FIFO搬运到CODEC(Capture则方向相反)。cpu_dai通过snd_soc_register_dai()来注册。

PCM DMA:对于playback,负责将dma buffer中的音频数据搬运到I2S TX FIFO(Capture则方向相反)。音频dma驱动通过snd_soc_register_platform()来注册。

2. 源码分析

Kernel 版本:3.10

2.1. CPU DAI
2.1.1. 数据结构struct snd_soc_dai_driver

通过struct snd_soc_dai_driver结构体来定义一个cpu_dai。struct snd_soc_dai_driver结构体如下:

struct snd_soc_dai_driver {
   
    
	/* DAI description */
	const char *name;
	unsigned int id;
	int ac97_control;
	unsigned int base;

	/* DAI driver callbacks */
	int (*probe)(struct snd_soc_dai *dai);
	int (*remove)(struct snd_soc_dai *dai);
	int (*suspend)(struct snd_soc_dai *dai);
	int (*resume)(struct snd_soc_dai *dai);
	/* compress dai */
	bool compress_dai;

	/* ops */
	const struct snd_soc_dai_ops *ops;

	/* DAI capabilities */
	struct snd_soc_pcm_stream capture;
	struct snd_soc_pcm_stream playback;
	unsigned int symmetric_rates:1;

	/* probe ordering - for components with runtime dependencies */
	int probe_order;
	int remove_order;
};

name:cpu_dai的名称标识,machine中的dai_link通过cpu_dai_name来匹配cpu_dai;
probe:cpu_dai的probe函数,由snd_soc_instantiate_card()回调;
playback:回放数据流性能描述信息,如所支持的声道数、采样率、音频格式;
capture:录制数据流性能描述信息,如所支持声道数、采样率、音频格式;
ops:指向cpu_dai的操作函数集,这些函数集非常重要,它定义了DAI的时钟配置、格式配置、数字静音、PCM音频接口、FIFO延迟报告等回调。

2.1.2. 注册CPU DAI:snd_soc_register_dai()

严格来说,注册cpu_dai是通过snd_soc_register_component()->snd_soc_register_dai()
当注册多个cpu_dai时,通过snd_soc_register_component()->snd_soc_register_dais()。为了讲解简单,我们此处介绍snd_soc_register_dai()。

/**
 * snd_soc_register_dai - Register a DAI with the ASoC core
 *
 * @dai: DAI to register
 */
static int snd_soc_register_dai(struct device *dev,
		struct snd_soc_dai_driver *dai_drv)
{
   
    
	struct snd_soc_codec *codec;
	struct snd_soc_dai *dai;

	dev_dbg(dev, "ASoC: dai register %s\n", dev_name(dev));
	dai = kzalloc(sizeof(struct snd_soc_dai), GFP_KERNEL);
	if 
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/yangjizhen1533/article/details/114084566

智能推荐

STM32芯片--FSMC外设扩展外部SRAM-程序员宅基地

文章浏览阅读7.4k次,点赞6次,收藏49次。这里写自定义目录标题为什么要扩展外部SRAM(一)什么是SRAM简介存储器型号容量引脚配置通讯方式读写特性读取数据时序图读取数据的时序要求写入数据时序图写入数据的时序要求(二)什么是FSMC外设简介功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建..._外部sram

新手用qt控件显示本地图片_qt实现拉取一个控件显示一张照片-程序员宅基地

文章浏览阅读6.8k次,点赞4次,收藏17次。QT显示图片的方法(部分源码)这个方法太简单网上已经泛滥了,不过我还是写一下吧,无聊。1 首先,新建一个项目,使用界面文件(可以不使用,不过人生苦短,没事我就不麻烦自己了)2使用qt设计器,在界面拖入一个label(我修改其objectname为screen)与一个button。3 转到button的槽,书写相应的程序。 程序如下 需要使用并添加的头文件部分#include#_qt实现拉取一个控件显示一张照片

【YOLOv4探讨 之三】mosaic数据增强_yolo mosaic-程序员宅基地

文章浏览阅读1w次,点赞17次,收藏51次。最近太忙,久未更新,对不住大家。进入正题,我们聊一聊YOLOv4中使用的mosaic数据增强。关于mosaic数据增强相关文章不少,三个月前这个方面的学习开了个头,那时候各路诸侯都是以TensorFlow框架为主,我这里依然坚持分析研究darknet框架下的数据增强。mosaic数据增强原理YOLOv4中在载入图片数据时同步进行mosaic数据增强。mosaic数据增强基本原理就是在训练集中随机选择若干个(一般是4个)图像,经过裁剪拼接形成新的训练集元素,可以缓解训练集元素少或者增强识别能力,是cut_yolo mosaic

vue 实现主题换肤(element-ui)_--el-select-input-focus-border-color-程序员宅基地

文章浏览阅读1.4k次。vue 实现主题换肤(element-ui)一. 插件安装npm i webpack-theme-color-replacer -D二. 项目使用vue.config.jsconst webpack = require('webpack')const ThemeColorReplacer = require('webpack-theme-color-replacer')const forElementUI = require('webpack-theme-color-replacer/for_--el-select-input-focus-border-color

JVM-从熟悉到精通_jvm 精通 技术学习-程序员宅基地

文章浏览阅读600次。JVM、JMM、GC、三色标记、常见调优参数_jvm 精通 技术学习

低成本挖出电商API接口-程序员要注意那些事项-技术分享_pvwd-程序员宅基地

文章浏览阅读914次。通过了解API接口的相关信息后,您可以根据需求进行开发,从而获取天猫的购物车API接口数据,实现自己的电商平台的功能需求。在注册阿里云后,了解天猫购物车API接口的相关信息是必须的。参数校验:接口参数是影响接口调用结果的重要因素,我们需要在接口调用前对参数进行校验,确保参数合法、规范、完整。接口性能:电商业务接口需要承受巨大的访问量,所以我们需要保证接口的性能。总之,无论选择哪种方式,都需要您投入精力和时间,但是从长远考虑,低成本获取天猫购物车API接口可以为您的电商平台节约不少资金,提升您的竞争优势。_pvwd

随便推点

案例-做一个酒店预定小程序用的日期选择案例_小程序订酒店日历选择-程序员宅基地

文章浏览阅读6.6k次,点赞3次,收藏39次。做一个酒店预定用的日期选择案例不多说,先上效果图设计思路:根据年份和月份构建最近6个月的日历,获取每个月的第一天是星期几,空白用空对象填充,每个月需要的格子数 = 每月1号的星期数 + 每月对应的天数。在HTML中遍历日期数据,根据条件判断高亮显示入住时间、离店时间以及两者之间的时间。一下是全部代码(优化在最后). <!-- html代码 --> <view..._小程序订酒店日历选择

lol佐伊美图-程序员宅基地

文章浏览阅读1.6k次。  心血来潮,分享一波从各个网站上搜集到的佐伊美图,持续更新!(最近更新日期:2019/07/01)  本页面图片较多,若无法全部加载请反复刷新页面,点击图片可查看原始大图!Section1 暮光星灵2018/11/162019/02/152019/03/172019/07/01Section2 ...

(基础入门)web安全|渗透测试|网络安全------附带 子域名挖掘,exe后门程序生成之Quasar,抓包wsexplorerv,逆向工具漏了个大洞-程序员宅基地

文章浏览阅读2.7k次,点赞9次,收藏12次。(基础入门)web安全|渗透测试|网络安全------附带 子域名挖掘,exe后门程序生成之Quasar,抓包wsexplorerv,逆向工具漏了个大洞

typeAliases标签和package标签_type-aliases-package: com.hcr.account.model.entity-程序员宅基地

文章浏览阅读442次。https://blog.csdn.net/weixin_42727032/article/details/104327048?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonec_type-aliases-package: com.hcr.account.model.entity

php正则preg_match,PHP正则表达式preg_match的具体使用规则介绍-程序员宅基地

文章浏览阅读853次。PHP对于初学者来说,最难理解的内容要属于正则表达式的应用。今天我们就向大家具体介绍有关PHP正则表达式preg_match的使用规则,希望初学者们能通过本文介绍的内容对正则表达式有一个深刻的认识。PHP正则表达式preg_match的使用:利用 preg_match(),我们可以完成字符串的规则匹配。如果找到一个匹配,preg_match() 函数返回 1,否则返回 0。还有一个可选的第三参数可..._if(preg_match("/[a-za-z0-9]/",$var)){ die("nope,this is level 5"); }

Android教程-01 Android Studio创建第一个项目_android studio创建第一个项目,并写布局-程序员宅基地

文章浏览阅读2k次,点赞2次,收藏3次。最近一直使用Android Studio 简单把Android Studio介绍下1. 首先介绍下 Android Studio的快捷键映射到Eclipse_android studio创建第一个项目,并写布局