跳到主要内容
极客日志极客日志面向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/9/1082 浏览
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
 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-es8326-objs := es8326.o
 snd-soc-es8328-objs := es8328.o
 snd-soc-es8328-i2c-objs := es8328-i2c.o
 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_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
@@ -94,6 +94,7 @@
+snd-soc-es8389-objs := es8389.o
@@ -424,6 +425,7 @@
+obj-$(CONFIG_SND_SOC_ES8389)+= snd-soc-es8389.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 驱动加载成功。 实测:喇叭、耳机、麦克风功能正常,验证通过。

更多推荐文章

查看全部
  • IDS-Agent:基于大模型的物联网可解释入侵检测系统
  • Visual Studio 代码推送到 Gitee 完整指南
  • Stable Diffusion 云端部署:电商商用场景与成本透明化
  • .NET 集成 GoView 低代码可视化大屏实战指南
  • Proxmox VE (PVE) 下载和安装 Kali Linux 教程
  • Ubuntu 安装 Anaconda 环境配置与常见问题处理
  • C/C++ 项目开发流程与构建指南
  • 飞算 JavaAI 插件安装与 Spring Boot 项目生成实战
  • Rust 与 WebAssembly 实战:在浏览器与 Node.js 运行高性能代码
  • 基于 YOLO26 的无人机视角河道水面垃圾检测系统
  • 冯诺依曼架构与操作系统设计基础
  • DeepSeek 深度使用指南:提示词工程与本地知识库搭建
  • 2026 年 TypeScript 与 JavaScript 的共生终局:霸权已定,但非唯一
  • 程序员接外包私活平台推荐:主流接单网站盘点与避坑指南
  • 网络安全红队与蓝队概念及技能解析
  • 无人机 RemoteID 合规指南:ArduRemoteID 开源方案详解
  • 找到字符串中所有字母异位词 (LeetCode 438)
  • Python 从入门到实践:零基础学习指南与实战项目解析
  • HarmonyOS 6.0 Camera Kit 微距状态监听详解
  • C++ 哈希表原理与 STL 实现解析

相关免费在线工具

  • 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