1. Verb结构

function group和widgets都通过verbs来访问parameters和controls。Parameters为function group或widget的能力或配置选项(只读信息),通过GET_xxx verb来获取。Control是用来改变codec的某些行为,大部分是可读写的,可通过独立的verbs来设定或访问各项控制信息。如RESET这样的control是只写的,不能通过verb来读取这项控制信息。

如上图所示:

(1)CAD占4个BIT,0xF的功能为广播,所以一个HDA控制器理论上可以连接15个Codec。

(2)配置HDA Codec是以节点为对象。节点域占了7位,但HDA控制器要求必须有一个节点作为root节点,而且许多节点作为group node,将widget进行分类,所以真正作为widget节点并不会占满128个。

(3)真正的数据是通过verb&Commanddata传入HDA Codec的。

Verb实际数据格式如下:

当verb和NID均为0时,表示verb是无效的,

否则它就是有效的,一定会得到一个回复。

codec收到一个有效的command后必须返回一个回复,回复的格式如下:

2. widget

widget是功能组中最小的可枚举可寻址模块。单个function组可能包含某些widget的多个实例。对于每个widget,都定义了一组标准参数(功能)和控件(命令和状态寄存器)。同样,每个widget由它自己的一组参数(功能)和控件(命令和状态寄存器)定义

2.1音频输出转换器widget

音频输出转换器widget主要是用于模拟转换器的DAC或用于数字转换器的数字样本格式化程序(例如,用于S/PDIF)。它的输入总是连接到HDA link,其输出将在其他widget(如Pin widget)的连接列表中可用。这种widget可能包含一个可选的输出放大器,或者一个由其参数定义的处理节点。

2.2音频输入转换器widget

音频输入转换器widget主要由用于模拟转换器的ADC或用于数字转换器的数字样本格式化程序(例如,用于S/PDIF)组成。其输出始终连接到HDA link,其输入将从其自己的输入连接列表中选择。

2.3 Pin widget

Pin widget为音频和其他功能组提供外部(模拟或数字)连接。Pin widget还包括那些与外部连接直接相关的信号,例如jack sense和Vref控制信号。但是,GPIO Pin不是Pin widget的一部分,而是功能组的一个资源。Pin widget的功能是高度参数化的,定义了以下可选支持:

  1. 输入、输出(或两者),包括放大器的存在和性能
  2. 立体声或单声道(1或2声道),或2个以上声道插头(存在)检测
  3. 附加设备阻抗传感
  4. 支持麦克风的VRef偏置

每个Pin widget必须包含第下面要说的Configuration Default。

在外部输出pin(Pin widget的输入)上播放的频道将从其自己的输入连接列表中选择;外部输入引脚上的通道将在其他widget(如音频输入转换器widget)的连接列表中可用。

2.4混音器(求和放大器)widget

Mixe rwidget提供了任意混合多个频道(源)的功能。它有两个或多个输入和一个输出。每个输入有一个可选的输入放大器(包括一个可选的静音),这是可选的。

2.5选择器(多路复用器)widget

选择器widget提供了一个N选一的信号选择。然而,由于widget的输入通常在需要的地方有一个隐式选择器,所以这个widget可能很少使用。

2.6电源部件

功率widget通过为任意音频widget组提供单点功率状态控制来提供优化音频功能组内的功率管理的方便方法。Powerwidget与其他widget没有连接,但仍然使用其连接列表来指定与之关联并受其控制的widget集。这些关联是在设计时定义的,不是动态的。将电源状态控制写入此widget将有效地将所有关联的widget置于指定的电源状态。然而,在任何情况下,功率widget都不能将任何音频widget置于高于音频功能组的当前功率状态的功率状态。注意,虽然Powerwidget有一个连接列表,但它不包含连接选择器,因为没有到其他widget的直接连接。

7.2.3.7音量旋钮widget

音量旋钮widget提供指定输出引脚的机械音量控制。音量控制的物理性质没有规定——它可以是模拟轮(pot.)、按钮等——但是,它确实具有声明的绝对(例如pot.)或相对(例如按钮)功能。这个widget有一个连接列表,描述哪些其他widget(可能是Pin widget)的音量由音量旋钮widget控制;由于没有形成动态连接,因此没有连接选择器。

音量旋钮可通过软件设置,以直接控制相关的“从属”放大器,或发送未经请求的响应,允许功能驱动器“读取”音量旋钮,然后间接调整相关的“从属”放大器。

7.2.3.8蜂鸣发生器widget

音调或蜂鸣发生器widget是一个选项,用于通过将48 kHz帧标记除以可编程量来生成近似正弦波。当嘟嘟声发生器主动生成音调时,其输出驱动所有引脚部件,这些引脚部件是供应商选择的方法中当前定义的输出引脚,通过将引脚切换到嘟嘟声信号或将音调混合到当前播放流中。此节点从未在任何其他节点的连接列表中列出。

3. Codec Parameters and Controls

function group和widgets都通过verbs来访问parameters和controls。Parameters为function group或widget的能力或配置选项(只读信息),通过GET_xxx verb来获取。Control是用来改变codec的某些行为,大部分是可读写的,可通过独立的verbs来设定或访问各项控制信息。下列为内核中include/sound/hda_verbs.h文件中定义的codec相关的参数和Controls列表。

/*

* GET verbs

*/

#define AC_VERB_GET_STREAM_FORMAT       0x0a00

#define AC_VERB_GET_AMP_GAIN_MUTE       0x0b00

#define AC_VERB_GET_PROC_COEF           0x0c00

。。。

#define AC_VERB_GET_VOLUME_KNOB_CONTROL     0x0f0f

#define AC_VERB_GET_CONFIG_DEFAULT      0x0f1c

/* f20: AFG/MFG */

#define AC_VERB_GET_SUBSYSTEM_ID        0x0f20

#define AC_VERB_GET_CVT_CHAN_COUNT      0x0f2d

#define AC_VERB_GET_HDMI_DIP_SIZE       0x0f2e

。。。

#define AC_VERB_GET_HDMI_CHAN_SLOT      0x0f34

#define AC_VERB_GET_DEVICE_SEL          0xf35

#define AC_VERB_GET_DEVICE_LIST         0xf36

/*

* SET verbs

*/

#define AC_VERB_SET_STREAM_FORMAT       0x200

#define AC_VERB_SET_AMP_GAIN_MUTE       0x300

#define AC_VERB_SET_PROC_COEF           0x400

#define AC_VERB_SET_COEF_INDEX          0x500

#define AC_VERB_SET_CONNECT_SEL         0x701

#define AC_VERB_SET_PROC_STATE          0x703

#define AC_VERB_SET_SDI_SELECT          0x704

#define AC_VERB_SET_POWER_STATE         0x705

#define AC_VERB_SET_CHANNEL_STREAMID        0x706

#define AC_VERB_SET_PIN_WIDGET_CONTROL      0x707

#define AC_VERB_SET_UNSOLICITED_ENABLE      0x708

#define AC_VERB_SET_PIN_SENSE           0x709

#define AC_VERB_SET_CODEC_RESET         0x7ff

。。。

#define AC_VERB_SET_HDMI_DIP_XMIT       0x732

#define AC_VERB_SET_HDMI_CP_CTRL        0x733

#define AC_VERB_SET_HDMI_CHAN_SLOT      0x734

#define AC_VERB_SET_DEVICE_SEL          0x735

/*

* Parameter IDs

*/

#define AC_PAR_VENDOR_ID        0x00

#define AC_PAR_SUBSYSTEM_ID     0x01

#define AC_PAR_REV_ID           0x02

#define AC_PAR_NODE_COUNT       0x04

#define AC_PAR_FUNCTION_TYPE        0x05

#define AC_PAR_AUDIO_FG_CAP     0x08

#define AC_PAR_AUDIO_WIDGET_CAP     0x09

#define AC_PAR_PCM          0x0a

#define AC_PAR_STREAM           0x0b

#define AC_PAR_PIN_CAP          0x0c

#define AC_PAR_AMP_IN_CAP       0x0d

#define AC_PAR_CONNLIST_LEN     0x0e

#define AC_PAR_POWER_STATE      0x0f

#define AC_PAR_PROC_CAP         0x10

#define AC_PAR_GPIO_CAP         0x11

#define AC_PAR_AMP_OUT_CAP      0x12

#define AC_PAR_VOL_KNB_CAP      0x13

#define AC_PAR_DEVLIST_LEN      0x15

#define AC_PAR_HDMI_LPCM_CAP        0x20

3.1 Get Parameters (F00h)

返回payload中指定的parameter的值,可作用于所有node。

parameter的值包括获取codec verdor id、revision id、级联node的个数、Function Group类型、各capability(Volume Knob Capabilities、Processing Capabilities、Amplifier Capabilities、Pin Capabilities、Audio Widget Capabilities、Audio Function Group Capabilities)列表、PCM大小速率、支持的电源管理状态、支持的stream的格式。

3.2 Connection Select Control (F01h/701h)

对于有多个输入的widget来说,Connection Selet用来决定哪一个输入是active的。对于本身硬件上只有一个连接的widget,该verb无效。

3.3 Get Connection List Entry(F02h)

返回payload中指定的index的Connection List Entries。软件可以通过该命令查询widget的完整的connection list。当Connection List Length参数的Long Form位为1时,index的值必须为偶数,收到的回复为两个long form connection list entries。当Long Form位为0时,index的值必须为4的倍数,收到的回复为4个short form connection list entries

3.4 Configuration Default

Configuration Default是每个Pin小部件中所需的32位寄存器。它被软件用来帮助确定连接到codec的插孔和设备的配置。在codec首次通电时,此寄存器内部加载默认值,指示此特定管脚/插孔的典型系统使用。在这个初始加载之后,它完全是codec不透明的,并且它的状态,包括写入寄存器的任何软件,必须在重置事件中保留。它的状态不需要在电源变化时保持不变。下图为Configuration Default结构。

数据结构如下图所示:

端口连接[31:30]表示Pin的外部连接。软件可以使用此值来知道哪些引脚复用连接到插孔、内部设备或根本没有连接。端口连接字段的编码定义下图。

Location [5:0]表示插脚复用连接到的插孔或设备的物理位置。

位置字段分为两个部分,高位[29:28]和低位[27:24]。高位提供一个总位置,例如“外部”(在主系统机箱上,用户可以访问)、“内部”(在主板上,不打开机箱就无法访问)、单独机箱(例如移动箱)或其他。

低位提供几何位置,例如“前”、“左”等,或提供特殊编码来指示位置。

Default Device[23:20]表示插孔或设备的预期用途。这可以指示插孔上的标签或硬接线到端口的设备,如集成扬声器等。编码如下图。

Connection Type[19:16]表示物理连接的类型,例如1/8英寸立体声插孔或光学数字连接器等。软件可以使用此信息向用户提供有用的用户界面描述,或根据codec外部的物理传输功能修改报告的codec功能。连接类型字段的编码如下图。

Color[3:0]表示软件使用的物理插孔的颜色。颜色字段的编码如下图。

Misc[3:0]是一个位字段,用于指示有关插孔的其他信息。目前,只定义了位0。如果设置了位0,则表示插孔没有存在检测功能,因此即使管脚复用表示codec硬件支持插孔上的存在检测功能,外部电路也不能支持该功能。Misc字段的位定义如下图。

Default Association和Sequence将引脚复用(因此也包括插孔)组合成功能块,以支持多通道操作。软件可能假设具有相同关联号的所有插孔都要分组在一起,例如提供六通道模拟输出。软件也可以使用默认关联来在受限的情况下确定资源分配的优先级。对于处理节点或输入输出转换器等资源,较低的默认关联值将具有较高的优先级。请注意,这只是默认关联,如果需要,软件可以覆盖此值,特别是如果用户提供有关特定系统配置的附加信息。0000b的值是保留的,不应使用。软件可能会解释此值,以指示引脚配置数据尚未正确初始化。值1111b是指示关联具有最低优先级的特殊值。多个不同的Pin复合物可以共享这个值,并且每一个都打算作为独立的器件公开。

顺序表示关联组中千斤顶的顺序。关联组中编号最低的插孔应分配流中编号最低的通道等。编号不必在组内按顺序排列,只需顺序即可。一组默认关联中的序列号必须是唯一的。

其它具体定义参考High Definition Audio Specification 7.3节。这里就不再详细描述。

HDA codec相关(2) - verbtable相关相关推荐

  1. HDA codec相关(1) - 基本原理

    1 基本概念 HDA Codec结构将不同的codec functions描述成一系列参数化模块.每个模块(以及模块的组合)为一个addressable node,每个node都可通过一系列只读的ca ...

  2. ML之GB:GB算法相关论文、相关思路、关键步骤、代码实现、配图集合、案例应用之详细攻略

    ML之GB:GB算法相关论文.相关思路.关键步骤.代码实现.配图集合.案例应用之详细攻略 目录 GB算法相关文献.论文 GB算法关键步骤 GB算法代码实现 GB案例应用 1.GB用于回归 2.GB用于 ...

  3. arthas命令整理:基础命令、jvm相关、class相关命令

    基础命令 jvm相关命令 class相关命令

  4. 第十三章 相关方管理 权利利益方格 凸显模式 相关方立方体 相关方登记册 相关方参与评估矩阵

    相关方管理 过程组 相关方管理 启动 识别相关方 规划 规划相关方参与 执行 管理相关方参与 监控 监督相关方参与 总结:从标题就可以看出,相关方管理就管理相关方参与度.相关方期望.相关方的积极度. ...

  5. 与计算机图形学相关的研究论文,计算机图形学相关论文范文数据库,与计算机图形学的相关技术与相关专科毕业论文范文...

    计算机图形学相关论文范文数据库,与计算机图形学的相关技术与相关专科毕业论文范文 关于计算机图形学及计算机及计算机动画方面的免费优秀学术论文范文,计算机图形学相关本科毕业论文,关于计算机图形学的相关技术 ...

  6. 体系结构 各种相关(真相关、反相关、输出相关...)

    数据相关.名称相关.控制相关.写后读相关.读后写相关.写后写相关.真相关.反相关.输出相关-整个人晕掉 都要不认识"相关"这两个字了 <计算机体系结构:量化研究方法 第5版中 ...

  7. 性状的pearson相关与表型相关的差异

    pearson相关是指两个数量性状间的积差相关,其计算公式如下: ρx,y=Cov(x,y)σx∗σy\rho_{x,y}=\frac {Cov(x,y)} {\sigma_x*\sigma_y}ρx ...

  8. 相关性检验(二维列联表相关 协方差 Pearson相关 Spearman相关 相关性检验 相关可视化)

    文章目录 相关 二维列联表相关 协方差 Pearson相关 Spearman相关 相关性检验 相关可视化 相关 二维列联表相关 data <- xtabs(~Treatment+Improved ...

  9. 【组合数学】生成函数 简要介绍 ( 生成函数定义 | 牛顿二项式系数 | 常用的生成函数 | 与常数相关 | 与二项式系数相关 | 与多项式系数相关 )

    文章目录 一. 生成函数 ( 母函数 ) 的定义 1. 生成函数定义 ( 1 ) 生成函数的定义 ( 2 ) 形式幂级数 ( 参考 ) 2. 生成函数 示例 ( 1 ) 生成函数 示例 1 ( an= ...

最新文章

  1. 【Python爬虫学习笔记4】结合Xpath与lxml库解析数据
  2. 为.net中的ListBox控件添加双击事件
  3. 软件开发工程师证书有用吗_bim工程师证书有用吗 含金量怎么样?
  4. 配置审计(Config)配合开启OSS防盗链功能
  5. Permission denied (publickey). fatal: Could not read from remote repository.
  6. Kubernetes集群上的Apache Ignite和Spring第1部分:Spring Boot应用程序
  7. es6新特性之Map
  8. Ubuntu 15.10系统安装后要做的15件事
  9. idea新建一个java项目_创建第一个Java项目(Create First Java Project)
  10. js轮播图片小圆点变化_原生js实现轮播图的示例代码
  11. pandas处理df函数及plt绘图函数(作业总结笔记待补充...)
  12. 微信小程序的登录流程
  13. excel如何晒出重复数据_excel 如何在大量数据中快速筛选出重复数据
  14. ccleaner专业版注册码
  15. ruoyi数据权限设置
  16. 利用LVS(Linux Virtual Server)系统实现Web服务器集群的负载均衡
  17. 微型计算机三部分基本组成,微型计算机的基本组成
  18. 一般信道容量的计算matlab,DMC信道容量迭代计算的matlab实现
  19. 对于PM来说:拥有PMP证书,就拥有更多机会
  20. 多表采集计算机属于什么东西,并行数据采集

热门文章

  1. ChatGPT正式登陆iOS平台
  2. 专题:手把手学习硬件基础------15、TTL和CMOS
  3. java版我的世界地图大小_我的世界:6个值得一玩的地图种子,覆盖各个版本,赶紧开存档吧...
  4. python androidhelper 语音识字_Python实现截图AI文字识字小工具
  5. vue 主题色切换,黑白切换(less,sass)
  6. 虚拟机体验NAS私人云全揭秘:深度揭秘虚拟机体验NAS私人云的原由
  7. 串口服务器跟协议转换器,串口服务器 8路RS232+RS485转TCP/IP YTNP308-CMIX
  8. 浏览器证书过期,你的时钟快了
  9. 盈动电子书包助力教育行业信息化发展
  10. 华为路由器 批量生成NAT映射配置