教学文库网 - 权威文档分享云平台
您的当前位置:首页 > 精品文档 > 实用模板 >

ALSA声卡驱动详解(10)

来源:网络收集 时间:2026-07-01
导读: left_speaker_mixer和right_speaker_mixer来完成,两个widget具备电源属性,所以,当这两个widget在一条有效的音频路径上时,dapm框架可以通过寄存器WM8993_POWER_MANAGEMENT_3的第8位和第9位控制它的电源状态。 第

left_speaker_mixer和right_speaker_mixer来完成,两个widget具备电源属性,所以,当这两个widget在一条有效的音频路径上时,dapm框架可以通过寄存器WM8993_POWER_MANAGEMENT_3的第8位和第9位控制它的电源状态。

第三步,定义这些widget的连接路径: [cpp] view plaincopy

static const struct snd_soc_dapm_route routes[] = { ......

{ \, \, \ }, { \, \, \ }, { \, \, \ }, { \, \, \ },

......

{ \, \, \ }, { \, NULL, \ },

{ \, \, \ }, { \, NULL, \ }, };

通过第一步的定义,我们知道DACL Mux和DACR Mux有两个输入引脚,分别是 Left Right

而SPKL和SPKR有四个输入选择引脚,分别是: Input Switch

IN1LP Switch/IN1RP Switch Output Switch DAC Switch

所以,很显然,上面的路径定义的意思就是: AIFINL连接到DACL Mux的Left输入脚 AIFINR连接到DACL Mux的Right输入脚 AIFINL连接到DACR Mux的Left输入脚 AIFINR连接到DACR Mux的Right输入脚 DACL连接到SPKL的DAC Switch输入脚 DACR连接到SPKR的DAC Switch输入脚

第四步,在codec驱动的probe回调中注册这些widget和路径: [cpp] view plaincopy

static int wm8993_probe(struct snd_soc_codec *codec) {

......

snd_soc_dapm_new_controls(dapm, wm8993_dapm_widgets,

26

ARRAY_SIZE(wm8993_dapm_widgets));

......

snd_soc_dapm_add_routes(dapm, routes, ARRAY_SIZE(routes));

...... }

在machine驱动中,我们可以用同样的方式定义和注册板子特有的widget和路径信息。

1.ALSA声卡驱动中的DAPM详解之四:在驱动程序中初始化并注册widget和route

前几篇文章我们从dapm的数据结构入手,了解了代表音频控件的widget,代表连接路径的route以及用于连接两个widget的path。之前都是一些概念的讲解以及对数据结构中各个字段的说明,从本章开始,我们要从代码入手,分析dapm的详细工作原理: 如何注册widget

如何连接两个widget

一个widget的状态裱画如何传递到整个音频路径中

/*****************************************************************************************************/

声明:本博内容均由http://blog.csdn.net/droidphone原创,转载请注明出处,谢谢!

/*****************************************************************************************************/

dapm context

在讨论widget的注册之前,我们先了解另一个概念:dapm context,直译过来的意思是dapm上下文,这个好像不好理解,其实我们可以这么理解:dapm把整个音频系统,按照功能和偏置电压级别,划分为若干个电源域,每个域包含各自的widget,每个域中的所有widget通常都处于同一个偏置电压级别上,而一个电源域就是一个dapm context,通常会有以下几种dapm context: 属于codec中的widget位于一个dapm context中 属于platform的widget位于一个dapm context中 属于整个声卡的widget位于一个dapm context中

对于音频系统的硬件来说,通常要提供合适的偏置电压才能正常地工作,有了dapm context这种组织方式,我们可以方便地对同一组widget进行统一的偏置电压管理,ASoc用snd_soc_dapm_context结构来表示一个dapm context: [cpp] view plaincopy

27

struct snd_soc_dapm_context {

enum snd_soc_bias_level bias_level;

enum snd_soc_bias_level suspend_bias_level; struct delayed_work delayed_work;

unsigned int idle_bias_off:1; /* Use BIAS_OFF instead of STANDBY */

struct snd_soc_dapm_update *update;

void (*seq_notifier)(struct snd_soc_dapm_context *, enum snd_soc_dapm_type, int);

…… 此处隐藏:417字,全部文档内容请下载后查看。喜欢就下载吧 ……
ALSA声卡驱动详解(10).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.jiaowen.net/wendang/520655.html(转载请注明文章来源)
Copyright © 2020-2025 教文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:78024566 邮箱:78024566@qq.com
苏ICP备19068818号-2
Top
× 游客快捷下载通道(下载后可以自由复制和排版)
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
× 常见问题(客服时间:周一到周五 9:30-18:00)