Platform: ROCKCHIP
Chip: RK3288
OS: Android7.1.2
Kernel: 4.4.143
背景:
之前平台用的RT5640, 由于此IC将要停产,所以需要替换为ES8396,RT5640和ES8396在硬件上兼容,只是芯片换了;但是目前芯片有rt5640和es8396,如果每款芯片要去找对应的代码就会给工厂那边增加工作量,所以在代码处做处理
思路
1.dts里将两款芯片均使能,到对应的驱动的时候,检测设备是否在线(I2C),如果不在线则退出并将dts对应的节点设为"disabled"
2.soc-core对应的名字要匹配上
dts修改
1./kernel/arch/arm/boot/dts/rk3288-android.dtsi
hdmi_analog_sound: hdmi-analog-sound {
status = "disabled";
compatible = "rockchip,rk3288-hdmi-analog",
"rockchip,rk3368-hdmi-analog";
- rockchip,model = "rockchip,rt5640-codec";
+ rockchip,model ="rockchip,rt5640-codec", "rockchip,es8396-codec";
rockchip,cpu = <&i2s>;
- rockchip,codec = <&rt5640>, <&hdmi>;
+ rockchip,codec = <&rt5640>,<&es8396>, <&hdmi>;
rockchip,widgets =
"Microphone", "Microphone Jack",
+ "Line", "Microphone Headset",
"Headphone", "Headphone Jack";
rockchip,routing =
- "MIC1", "Microphone Jack",
- "MIC2", "Microphone Jack",
- "Microphone Jack", "micbias1",
- "Headphone Jack", "HPOL",
- "Headphone Jack", "HPOR";
+ "MIC", "Microphone Jack",
+ "DMIC", "Microphone Headset",
+ "Headphone Jack", "LOUTP",
+ "Headphone Jack", "ROUTN";
};
+
};
2./kernel/arch/arm/boot/dts/rk3288-evb.dtsi
- sound: sound {
- status = "disabled";
+ es8396-sound {
+ status = "okay";
compatible = "simple-audio-card";
simple-audio-card,format = "i2s";
- simple-audio-card,name = "rockchip,rt5640-codec";
+ simple-audio-card,name = "rockchip,rt5640-codec","rockchip,es8396-codec";
simple-audio-card,mclk-fs = <512>;
simple-audio-card,widgets =
"Microphone", "