DAPM、Control、Jack 与 Topology
1. ALSA Control
core/control.c 管理 snd_kcontrol:
- integer/boolean/enum/bytes/IEC958;
info/get/put;- card control device;
- change notification;
- TLV dB scale。
amixer/alsactl 操作 control,不直接操作 PCM 数据流。
2. ASoC controls
soc-ops.c 提供 SOC_SINGLE/SOC_ENUM/SOC_DAPM 等宏对应的通用 get/put,通常通过 regmap 访问 codec/控制器寄存器。put 应只在值变化时返回 1,以便发送通知。
3. DAPM 图
Widget 类型:
- input/output;
- ADC/DAC;
- mixer/mux;
- PGA;
- supply/regulator/clock;
- AIF in/out;
- MICBIAS;
- PRE/POST。
Route 表示 source -> sink,并可受 mixer switch/mux selection 控制。
4. 电源计算
1 | stream start or control change |
关闭时按反向安全顺序执行 PRE_PMD/POST_PMD。DAPM 不只是省电,也控制模拟 pop 和必要时钟。
5. Bias level
Codec bias 常见:
- OFF
- STANDBY
- PREPARE
- ON
machine/codec 可覆盖 set_bias_level。错误 regulator/MCLK 顺序会造成爆音、寄存器访问失败或待机功耗。
6. Jack
soc-jack.c / core/jack.c:
- headphone/microphone/button bits;
- GPIO/extcon/codec IRQ;
- debounce;
- ALSA control/input event;
- DAPM pin enable/disable。
RK machine driver可能使用 extcon 获取 Type-C/HDMI 或耳机状态。
7. Topology
soc-topology.c 加载用户态 topology firmware,动态建立:
- controls;
- widgets/routes;
- DAIs/links;
- private data。
主要用于 DSP/复杂平台。固件 parser 处理不可信长度时必须严格校验;版本需与驱动匹配。
8. 调试
1 | amixer -c 0 contents |
DAPM debugfs 可查看 widgets、routes、power,但路径与内核配置相关。
9. 常见静音原因
- control muted;
- DAPM route 名称不匹配;
- endpoint pin disabled;
- codec bias 未上电;
- MCLK/regulator 缺失;
- jack 状态错误;
- machine driver没有声明 routing;
- 音频实际走 HDMI 而用户打开模拟 PCM。
正在加载留言…