针对 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 驱动加载成功。
实测:喇叭、耳机、麦克风功能正常,验证通过。

