先说明,在openwrt和lede项目未合并之前,也就是在openwrt15.05版本,内核3.18.29,是集成wm8960驱动补丁的,当时合并之后lede17.01(内核版本4.4.124)去除了wm8960驱动补丁,所以得折腾把它加回去。widora发布的openwrt版本,内核3.18.29,是对wm8960的驱动做了小小的优化,所以选择采用widora所包含的驱动补丁进行移植。
默认mt7628/mt7688 refclk提供12MHZ MCLK,wm8960使用主机模式,i2s数据格式
1.先把widora下载并编译一次,从内核提取驱动:
位置:
build_dir/target-mipsel_24kec+dsp_uClibc-0.9.33.2/linux-ramips_mt7688/linux-3.18.29/sound/soc/mtk
build_dir/target-mipsel_24kec+dsp_uClibc-0.9.33.2/linux-ramips_mt7688/linux-3.18.29/sound/soc/codecs/wm8960.c
build_dir/target-mipsel_24kec+dsp_uClibc-0.9.33.2/linux-ramips_mt7688/linux-3.18.29/sound/soc/codecs/wm8960.h
build_dir/target-mipsel_24kec+dsp_uClibc-0.9.33.2/linux-ramips_mt7688/linux-3.18.29/include/sound/wm8960.h
2.下载lede17.01先编译一次,再把上述驱动cp到内核对应位置,并修改上层Makefile和Kconfig
Makefile 添加obj-$(CONFIG_SND_SOC) += mtk /
Kconfig 添加source "sound/soc/mtk/Kconfig"
3.修改target/linux/ramips/dts/MT7628.dts,使其支持wm8960驱动(一定要使能i2c并注意i2s的io复用)
refclk {
ralink,group = "refclk";
ralink,function = "gpio";
}; //注意位置
i2s {
ralink,group = "i2s";
ralink,function = "i2s";
}; //注意位置
&i2c {
status = "okay";
}; //注意位置
4.修改相应接口,使其支持Linux4.4.124,修改后的驱动包已上传点击打开链接
5.make kernel_menuconfig 添加wm8960驱动 和 make menuconfig 添加alsa库和alsa命令工具
make kernel_menuconfig
make menuconfig