DAPM、Control、Jack 与 Topology

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
2
3
4
5
6
stream start or control change
-> mark graph dirty
-> discover connected endpoints
-> compute powered widgets
-> sequence PRE_PMU/POST_PMU
-> register update / event callbacks

关闭时按反向安全顺序执行 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
2
3
4
amixer -c 0 contents
alsactl store
cat /sys/kernel/debug/asoc/cards
find /sys/kernel/debug/asoc -maxdepth 3 -type f

DAPM debugfs 可查看 widgets、routes、power,但路径与内核配置相关。

9. 常见静音原因

  • control muted;
  • DAPM route 名称不匹配;
  • endpoint pin disabled;
  • codec bias 未上电;
  • MCLK/regulator 缺失;
  • jack 状态错误;
  • machine driver没有声明 routing;
  • 音频实际走 HDMI 而用户打开模拟 PCM。

文章互动

阅读 --

留言

0 条留言

正在加载留言…