ASoC 框架与 DAPM 机制与实现详解

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 es8388hdmi-codec
Machine 描述 dai_link、GPIO、DAPM 路由 rockchip_multicodecs

避免把板级细节写进每个 DAI 驱动,便于 IP 复用。


二、核心对象

snd_soc_cardsnd_soc_dai_linkcpu_dai componentcodec component
  • snd_soc_component:绑定 platform_devicei2c_client,含 DAI 与 DAPM
  • snd_soc_dai:数字音频接口实例(playbackcapture 能力)
  • 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

  • 使用 dmaengine API 在内存与 I2S FIFO 间传输
  • dma_chanperiod_bytesbuffer_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

文章互动

阅读 --

留言

0 条留言

正在加载留言…