Platform: ROCKCHIP
Chip: RK3288
OS: Android7.1.2
Kernel: 4.4.143
背景:
之前平台用的RT5640, 由于此IC将要停产,所以需要替换为ES8396,RT5640和ES8396在硬件上兼容,只是芯片换了。
音频开发指南
一个声卡包含cpu_dai, codec_dai, 以及dai_link组成,分别对应cpu dai的dirver,比如I2S driver, spdif driver;codec driver, 比如rt5640 codec driver;dai_link driver,也就是machine driver, 比如sound/soc/rockchip/rockchip_rt5640.c。
4.4的内核中支持两种方式创建声卡,一种是通用的simple-card framework,一种是传统的编写自定义的machine driver来创建
硬件原理图
数据走I2S0通道
控制走I2C2通道
输出走HPLOUT/HPROUT SPKROUTP/SPKLOUTP
打开对应的宏
/kernel/arch/arm/configs/rockchip_defconfig
+CONFIG_SND_SOC_ES8396=y
修改dts文件
/kernel/arch/arm/boot/dts/rk3288-android.dtsi
原本的是rt5640,修改后的是es8396
+#if 0
+ hdmi_analog_sound: hdmi-analog-sound {
+ status = "okay";
+ compatible = "rockchip,rk3288-hdmi-analog",
+ "rockchip,rk3368-hdmi-analog";
+ rockchip,model = "rockchip,rt5640-codec";
+ rockchip,cpu = <&i2s>;
+ rockchip,codec = <&rt5640>, <&hdmi>;
+ rockchip,widgets =
+ "Microphone", "Microphone Jack",
+ "Headphone", "Headphone Jack";
+ rockchip,routing =
+ "MIC1", "Microphone Jack",
+ "MIC2", "Microphone Jack",
+ "Microphone Jack", "micbias1",
+ "Headphone Jack", "HPOL",
+ "Headphone Jack", "HPOR";
+ };
+#else
+ hdmi_analog_sound: hdmi-analog-sound {
+ status = "okay";
+ compatible = "rockchip,rk3288-hdmi-analog",
+ "rockchip,rk3368-hdmi-analog";
+ rockchip,model = "rockchip,es8396-codec";
+ rockchip,cpu = <&i2s>;
+ rockchip,codec = <&es8396>, <&hdmi>;
+ rockchip,widgets =
+ "Microphone", "Microphone Jack",
+ "Line", "Microphone Headset",
+ "Headphone", "Headphone Jack"