跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客我的书AI学习GitHub 精选镜像AI工具UI配色美学关于
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
C

RK3588 Linux 平台 ES8390 替换 ES8388 驱动移植实例

介绍在 RK3588 Linux 平台上将 Everest Semi ES8388 音频芯片替换为 ES8390 的驱动移植过程。由于两者内核驱动共用且封装兼容,主要修改包括内核配置(defconfig)、Kconfig、Makefile 及设备树(DTS)设置。在统信桌面操作系统 V20 环境下完成编译与加载,经测试声卡注册成功,喇叭、耳机及麦克风功能正常。

奶糖兔发布于 2026/3/30更新于 2026/10/26120 浏览
RK3588 Linux 平台 ES8390 替换 ES8388 驱动移植实例

针对 Everest Semi 的 ES8388 芯片即将停产的情况,我们在 RK3588 Linux 平台上成功替换了对应的替代型号 ES8390,并成功移植了相关驱动。

据悉,ES8390 与 ES8389 属于同一芯片 IC,共用同一套内核驱动,区别在于 ES8390 的封装设计可以 P2P 即将停产的 ES8388,因此如果原硬件设计是 ES8388 的用户,可以使用 ES8390 直接替代。

若是新产品设计,建议后续使用 ES8389 的封装设计,其性价比会更高。

1. 硬件平台 基于 RK3588J HCD810 主板,进行 ES8388 芯片替换验证。

2. 软件环境 软件环境为:统信桌面操作系统 V20。

3. 驱动移植 (1) 内核声卡部分的改动如下:

diff --git a/arch/arm64/configs/rockchip_linux_defconfig b/arch/arm64/configs/rockchip_linux_defconfig
index e28855a67310..002657675d53  100644
--- a/arch/arm64/configs/rockchip_linux_defconfig
+++ b/arch/arm64/configs/rockchip_linux_defconfig
@@ -417,6 +417,7 @@ CONFIG_SND_SOC_ES7243E=y
 CONFIG_SND_SOC_ES8311=y
 CONFIG_SND_SOC_ES8316=y
 CONFIG_SND_SOC_ES8323=y
+CONFIG_SND_SOC_ES8389=y
 CONFIG_SND_SOC_ES8326=y
 CONFIG_SND_SOC_RK3308=y
 CONFIG_SND_SOC_RK3328=y
diff --git a/sound/soc/codecs/Kconfig b/sound/soc/codecs/Kconfig
index a51cffbb2611..07d1348a553  100644
--- a/sound/soc/codecs/Kconfig
+++ b/sound/soc/codecs/Kconfig
@@ -93,6 +93,7 @@ config SND_SOC_ALL_CODECS
 imply SND_SOC_ES8156
 imply SND_SOC_ES8316
 imply SND_SOC_ES8323
+imply SND_SOC_ES8389
 imply SND_SOC_ES8326
 imply SND_SOC_ES8328_SPI
 imply SND_SOC_ES8328_I2C
@@ -839,6 +840,10 @@ config SND_SOC_ES8323
 tristate "Everest Semi ES8323 CODEC"
 depends on I2C
+config SND_SOC_ES8389
+tristate "Everest Semi ES8389 CODEC"
+depends on I2C
+
 config SND_SOC_ES8326
 tristate "Everest Semi ES8326 CODEC"
 depends on I2C
diff --git a/sound/soc/codecs/Makefile b/sound/soc/codecs/Makefile
index 07d1f3b4eeb7..22b32aa3f3  100644
--- a/sound/soc/codecs/Makefile
+++ b/sound/soc/codecs/Makefile
@@ -94,6 +94,7 @@ snd-soc-es8156-objs := es8156.o
 snd-soc-es8311-objs := es8311.o
 snd-soc-es8316-objs := es8316.o
 snd-soc-es8323-objs := es8323.o
+snd-soc-es8389-objs := es8389.o
 snd-soc-es8326-objs := es8326.o
 snd-soc-es8328-objs := es8328.o
 snd-soc-es8328-i2c-objs := es8328-i2c.o
@@ -424,6 +425,7 @@ obj-$(CONFIG_SND_SOC_ES8156)+= snd-soc-es8156.o
 obj-$(CONFIG_SND_SOC_ES8311)+= snd-soc-es8311.o
 obj-$(CONFIG_SND_SOC_ES8316)+= snd-soc-es8316.o
 obj-$(CONFIG_SND_SOC_ES8323)+= snd-soc-es8323.o
+obj-$(CONFIG_SND_SOC_ES8389)+= snd-soc-es8389.o
 obj-$(CONFIG_SND_SOC_ES8326)+= snd-soc-es8326.o
 obj-$(CONFIG_SND_SOC_ES8328)+= snd-soc-es8328.o
 obj-$(CONFIG_SND_SOC_ES8328_I2C)+= snd-soc-es8328-i2c.o

(2) DTS 设备树的主要核心配置如下:

es8389_sound: es8389-sound {
	status = "okay";
	compatible = "rockchip,multicodecs-card";
	rockchip,card-name = "rockchip-es8389";
	hp-det-gpio = <&gpio1 RK_PD5 GPIO_ACTIVE_LOW>;
	io-channels = <&saradc 3>;
	io-channel-names = "adc-detect";
	keyup-threshold-microvolt = <1800000>;
	poll-interval = <100>;
	spk-con-gpio = <&gpio3 RK_PA7 GPIO_ACTIVE_HIGH>;
	hp-con-gpio = <&gpio4 RK_PA5 GPIO_ACTIVE_HIGH>;
	rockchip,pre-power-on-delay-ms = <30>;
	rockchip,post-power-down-delay-ms = <40>;
	rockchip,format = "i2s";
	rockchip,mclk-fs = <256>;
	rockchip,cpu = <&i2s0_8ch>;
	rockchip,codec = <&es8389>;
	rockchip,audio-routing = "Headphone","HPOL","Headphone","HPOR",
		"Speaker","HPOL","Speaker","HPOR",
		"Headphone","Headphone Power","Headphone","Headphone Power",
		"Speaker","Speaker Power","Speaker","Speaker Power",
		"INPUT2","Main Mic","INPUT2","Main Mic",
		"INPUT1","Headset Mic","INPUT1","Headset Mic";
	pinctrl-names = "default";
	pinctrl-0 = <&hp_det>;
	play-pause-key {
		label = "playpause";
		linux,code = <KEY_PLAYPAUSE>;
		press-threshold-microvolt = <2000>;
	};
};

&i2c7 {
	status = "okay";
	es8389: es8389@11 {
		status = "okay";
		#sound-dai-cells = <0>;
		compatible = "everest,es8389";
		reg = <0x11>;
		clocks = <&mclkout_i2s0>;
		clock-names = "mclk";
		assigned-clocks = <&mclkout_i2s0>;
		assigned-clock-rates = <12288000>;
		pinctrl-names = "default";
		pinctrl-0 = <&i2s0_mclk>;
	};
};

4. 测试验证 查看声卡列表 cat /proc/asound/cards 可以发现有 ES8389 设备注册,同时内核 log 信息也显示 ES8389 驱动加载成功。 实测:喇叭、耳机、麦克风功能正常,验证通过。

更多推荐文章

查看全部
  • Trae IDE 配置 Java 项目全局 Maven 与 JDK
  • 基于 AI 辅助开发的学生成绩综合统计分析系统
  • 中国人工智能大模型技术白皮书核心内容解析
  • 生产环境避坑:哪些 SQL 操作会导致数据库宕机
  • Java 高级工程师高频核心面试题
  • 双延迟深度确定性策略梯度算法 (TD3) 详解
  • IntelliJ IDEA 配置 AI 插件实现 Java 俄罗斯方块游戏开发
  • 基于FPGA的电机控制开源项目实践指南
  • 低空安全综合管理服务平台建设方案
  • 企业电子招投标采购系统功能简介
  • Git 密码修改实战:HTTPS、SSH 与 Token 配置全解
  • 数据库 SQL 防火墙:拦截率 99.99% 及恶意 SQL 防护
  • Xilinx FPGA 实现 RISC-V 五级流水线 CPU 设计实战
  • OpenClaw Windows 安装配置教程:Node.js 22、Kimi 模型与飞书机器人集成
  • 国产大模型盘点:发布速度趋缓,医学垂直领域居多
  • 基于昇腾 NPU 部署 Mistral-7B-Instruct-v0.2 模型实战
  • 本体论入门:RDF、RDFS 和 OWL 指南
  • React Native Android 集成虹软 ArcFace 人脸识别方案
  • Windows 11 本地部署 llama.cpp 运行 Qwen3.5 量化模型实测
  • Python 零基础转行指南:技术路线、工具配置与面试准备

相关免费在线工具

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online

  • Markdown转HTML

    将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online

  • HTML转Markdown

    将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online

  • JSON 压缩

    通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online

  • JSON美化和格式化

    将JSON字符串修饰为友好的可读格式。 在线工具,JSON美化和格式化在线工具,online