01
ASoC概述
音频子系统背景 · ASoC设计哲学 · 为什么需要ASoC · 与传统ALSA对比
背景设计哲学
02
ASoC核心数据结构
snd_soc_card · snd_soc_dai_link · snd_soc_pcm_runtime · snd_soc_component
数据结构核心
03
Machine驱动
Machine角色 · snd_soc_card实例化 · dai_link配置 · platform/codec绑定
Machine绑定
04
Codec驱动
Codec抽象层 · snd_soc_dai_driver · snd_soc_codec_driver · 控件与kcontrol注册
Codeckcontrol
05
Platform驱动
Platform职责 · DMA引擎配置 · snd_pcm_ops实现 · 音频数据搬运
PlatformDMA
06
DAI驱动
DAI接口类型 (I2S/PCM/TDM) · snd_soc_dai_driver填充 · 时钟与格式配置
DAII2S
07
DAPM基础
动态音频电源管理概念 · widget与route · DAPM事件处理流程
DAPM电源
08
DAPM高级
自定义widget · supply widget · 混合器与多路复用器 · DAPM调试技巧
高级widget
09
kcontrol机制
标准kcontrol · 自定义kcontrol · SOC_SINGLE/SOC_DOUBLE宏 · 字节控件
kcontrol宏
10
PCM操作集
open/close/hw_params/prepare/trigger/pointer · 硬件参数协商
PCM回调
11
DMA引擎集成
dmaengine PCM · cyclic模式 · 音频缓冲区管理 · 内存屏障使用
DMAcyclic
12
时钟与PLL配置
系统时钟树 · PLL分频计算 · MCLK/BCLK/LRCK关系 · 时钟调试
时钟PLL
13
音频格式与采样率
标准音频格式 · 采样率转换 · 格式约束 · SNDRV_PCM_FMTBIT_*宏
格式采样率
14
链路拓扑
多DAI链路 · 前端与后端 · DPCM基础 · 动态路由
拓扑DPCM
15
DPCM详解
动态PCM原理 · FE/BE配置 · 压缩与解压缩 · pcm_new回调
DPCM动态
16
音频路径管理
混音器路径 · 播放与录音路径 · 路径切换 · 功耗优化
路径功耗
17
中断处理
音频中断类型 · 中断服务例程 · DPCM中的中断 · 调试中断风暴
中断ISR
18
调试与日志
动态调试 · ftrace跟踪 · 寄存器dump · ALSA工具链 (aplay/arecord)
调试日志
19
设备树绑定
设备树节点设计 · 属性解析 · of_match_table · 设备树调试
设备树DT
20
电源管理
系统挂起/恢复 · 运行时PM · DAPM与PM协同 · 功耗测量
电源PM
21
多Codec协同
多Codec拓扑 · 同步问题 · 时钟共享 · I2C地址冲突解决
多Codec同步
22
蓝牙音频集成
蓝牙A2DP · HFP协议 · PCM接口桥接 · SCO链路
蓝牙A2DP
23
USB音频类
UAC1/UAC2 · USB音频驱动 · urb处理 · 同步与异步端点
USBUAC
24
HDMI音频
HDMI音频数据岛 · I2S到HDMI映射 · EDID解析 · 音频时钟恢复
HDMIEDID
25
音频DSP集成
DSP固件加载 · 音频算法卸载 · kcontrol与DSP交互 · 低延迟路径
DSP固件
26
性能优化
缓冲区大小调优 · 中断延迟 · 缓存一致性 · DMA描述符链
性能优化
27
兼容性与回退
多平台兼容 · fallback机制 · quirks处理 · 版本兼容
兼容quirks
28
测试与验证
音频质量测试 · 延迟测试 · 压力测试 · 自动化测试框架
测试验证
29
社区贡献
补丁提交流程 · 编码规范 · review流程 · 邮件列表礼仪
社区补丁
30
综合实战
从零编写I2S Codec驱动 · Machine驱动 · Platform驱动 · 调试与验证
实战I2S