ALC5640
本文档以 Realtek ALC5640 为例,说明其在NG4520 平台上的驱动适配、设备树配置、内核配置、系统加载及常用测试方法。
Audio 架构与名词解释
| Module | Component |
|---|---|
| I2S | I2S 接口,用于数字音频数据的传输,用于连接外部音频设备。 |
| DSPK | 数字扬声器接口,用于连接和控制数字扬声器,支持数字扬声器。 |
| DMIC | 数字麦克风控制器,用于管理和处理数字麦克风输入,支持数字麦克风。 |
| Mixer | 混音器,用于将多个音频信号混合成一个输出信号。 |
| AMX | 音频多路复用器,用于将多个音频信号复用到一个输出通道。 |
| ADX | 音频解复用器,用于将一个音频信号分离成多个通道。 |
| SFC | 采样频率转换器,用于将音频信号转换到不同的采样频率。 |
| MVC | 主音量控制器,用于调节音频信号的主音量。 |
| ADMA | 音频直接内存访问,用于高效传输音频数据,支持 32 通道。 |
| ADMAIF | AHUB DMA 接口,用于音频硬件单元与内存之间的数据传输,支持 20 个 TX/RX 通道,专为 Jetson 设计,支持多通道音频数据传输。 |
| XBAR | 交叉开关(音频路由),用于在多个音频信号源和目标之间动态 路由音频数据,是音频数据路由的核心模块,支持动态音频路径配置。 |
| APE | NVIDIA Jetson 设备中的独立硬件模块,专门用于音频处理,具有低功耗和高性能的特点。 |
| AHUB | APE 的核心组件,负责音频数据的路由和处理,包含多个 NVIDIA 独有的硬件模块。 |
Audio 软件架构说明
- ALSA ASoC(Audio System on Chip)为主线 Linux 音频子系统,管理嵌入式音频硬件。
- ASoC 架构包含三大核心组件:
- Codec 驱动:管理 ALC5640 寄存器及音频路径
- 平台驱动:处理 Tegra DMA、I2S 接口
- 机器驱动:绑定硬件、定义音频路由
- NVIDIA 独有特性:APE、AHUB(含 XBAR 动态路由和 ADMAIF 多通道 DMA)

ALC5640 驱动适配流程
前置条件
-
确认Codec ALC5640芯片 i2c地址
-
根据数据手册获取ALC5640模式(主/从模式)、时钟(如MCLK/BCLK/LRCK)

设备树配置
在设备树中Linux_for_Tegra/source/hardware/nvidia/t23x/nv-public/nv-platform/tegra234-NG45XX-p3768-0000+p3767-0000-common.dts完成下述配置
-
i2c节点配置,添加codec芯片配置,参考如下:
i2c@3160000 {
status = "okay";
rt5640: audio-codec@1c {
status = "okay";
compatible = "realtek,rt5640";
reg = <0x1c>;
interrupt-parent = <&gpio>;
interrupts = <TEGRA234_MAIN_GPIO(P, 6) 0>;
clocks = <&bpmp TEGRA234_CLK_AUD_MCLK>;
clock-names = "mclk";
realtek,dmic1-data-pin = <RT5640_DMIC1_DATA_PIN_NONE>;
realtek,dmic2-data-pin = <RT5640_DMIC2_DATA_PIN_NONE>;
realtek,jack-detect-source = <RT5640_JD_SRC_HDA_HEADER>;
sound-name-prefix = "CVB-RT";
sel_jd_source = <3>;
port {
rt5640_ep: endpoint {
remote-endpoint = <&i2s4_dap>;
mclk-fs = <256>;
};
};
};
};