HDMI/DP 音频与 DRM 协同
1. 跨子系统
HDMI/DP 音频不是 sound/ 单目录闭环:
1 | ALSA PCM |
显示驱动负责 hotplug、EDID/ELD 和链路状态;音频驱动负责 PCM/DAI。
2. 相关代码
soc/codecs/hdmi-codec.c:通用 HDMI codec;soc/rockchip/rockchip_hdmi.c:Rockchip HDMI machine;core/pcm_drm_eld.c:ELD 辅助;- DRM 侧 HDMI/DP controller/bridge。
rockchip_hdmi_dp.c、rockchip_cdndp.c 等文件没有进入本分支 sound/soc/rockchip/Makefile,不属于 RK3588 可构建的活跃路径。
3. ELD
ELD 从 sink EDID 音频能力生成,包含:
- supported rates;
- channels;
- coding types;
- speaker allocation;
- monitor identity。
ALSA hw constraints 应与当前 sink 能力求交。热插拔后能力可变化。
4. hw_params
HDMI codec 配置:
- sample rate;
- sample width;
- channels;
- IEC channel allocation;
- audio infoframe;
- N/CTS 或等效时钟参数。
同时 CPU DAI 必须产生匹配 I2S/SPDIF 数据。
5. Hotplug
拔线或 mode set 期间可能:
- jack 状态变化;
- ELD invalid;
- PCM disconnect/stop;
- 音频静音;
- 重新配置 display clock。
应用应处理设备暂时不可用,不能假设 card number 与 sink 能力永久固定。
6. DP
DP 音频通过 SDP 等机制承载,依赖 DP link training 与 DRM connector。驱动文件存在不代表当前 RK3588 板级 DP controller/bridge 已启用。
本树常见 RK3588 连接是:
1 | DP0: rockchip,hdmi machine -> spdif_tx2 -> dp0 codec DAI |
板级 DTS 常配置 mclk-fs = <512>。HDMI0/1 通常改走 I2S5/I2S6,并常见 mclk-fs = <128>;这些数值是本树板级配置,不是所有 HDMI/DP 硬件的通用常量。
7. eARC
ARC/eARC 是电视回传音频,与普通 SoC 向显示器发送 HDMI playback 不同。是否支持取决于 HDMI controller、PHY、codec/machine 和 DTS;不能由 rockchip_hdmi.c 单独推断。
8. 常见故障
| 现象 | 定位 |
|---|---|
| 无 HDMI card | ASoC machine、hdmi-codec、DRM component |
| card 有但无声 | sink ELD、mixer、I2S route、infoframe |
| 只支持 2ch | ELD 或 machine constraints |
| 插拔后失败 | DRM hotplug、ELD 更新、应用重开 |
| 切分辨率断音 | mode set/clock 重配 |
| 多 HDMI 口选错 | connector 与 dai_link 映射 |
9. 观测
1 | cat /proc/asound/cards |
正在加载留言…