ASoC 框架与 DAPM 机制与实现详解
源码路径:
rk3588/kernel-6.1/sound/soc/soc-*.c
文档目录:linuxDoc/sound/
目录
一、原理
ASoC(ALSA System on Chip) 将声卡拆为三类驱动:
| 类型 | 角色 | RK 示例 |
|---|---|---|
| CPU DAI | SoC 侧数字音频接口 | rockchip_i2s_tdm |
| Codec DAI | 外置/总线 Codec | es8388、hdmi-codec |
| Machine | 描述 dai_link、GPIO、DAPM 路由 | rockchip_multicodecs |
避免把板级细节写进每个 DAI 驱动,便于 IP 复用。
二、核心对象
snd_soc_component:绑定platform_device或i2c_client,含 DAI 与 DAPMsnd_soc_dai:数字音频接口实例(playback、capture能力)snd_soc_pcm_runtime:一条 link 的运行时(rtd)
注册入口:devm_snd_soc_register_card() / snd_soc_register_card()。
三、核心文件
| 文件 | 职责 |
|---|---|
soc-core.c |
组件列表、绑定/解绑、PM、pmdown_time |
soc-dai.c |
snd_soc_dai_ops:startup/shutdown/set_fmt |
soc-pcm.c |
PCM 操作桥接到 ALSA Core |
soc-link.c |
link 管理 |
soc-card.c |
card 实例化 |
soc-component.c |
component 驱动模型 |
soc-ops.c |
通用 ops 辅助 |
设备树:常用 of_graph 解析 sound-dai 端点;也支持 snd_soc_of_parse_card_name。
四、DAPM
soc-dapm.c — Dynamic Audio Power Management:
| 概念 | 说明 |
|---|---|
| widget | 输入/输出/混音/供应/时钟等节点 |
| route | widget 连接关系 |
| event | stream 开始/结束时上电顺序 |
作用:降低空闲功耗、减轻 pop 声(pmdown_time 默认 5000ms 延迟下电)。
Machine/codec 驱动通过 snd_soc_dapm_route 数组定义耳机、扬声器等路径。
五、DMA PCM
soc-generic-dmaengine-pcm.c:
- 使用
dmaengineAPI 在内存与 I2S FIFO 间传输 dma_chan、period_bytes、buffer_bytes由 DT 或驱动指定
Rockchip I2S/TDM、PDM、SPDIF 驱动通常调用 devm_snd_dmaengine_pcm_register() 注册通用 DMAengine PCM;DAI 提供 FIFO 地址、bus width、maxburst 等 DMA data。
附录
| 头文件 | 内容 |
|---|---|
sound/soc.h |
公共 API |
sound/soc-dapm.h |
DAPM 宏 |
相关:03 RK DAI
正在加载留言…