2024年3月19日发(作者:龚意蕴)
Application
Note
移植WM8960
基于A6G2C/M6G2C核心板
AN01010101 V1.00 Date: 2017/07/25
产品应用笔记
类别
关键词
摘要
内容
WM8960、移植
基于A6G2C/M6G2C核心板移植WM8960驱动
广州致远电子有限公司
广州致远电子有限公司
移植WM8960
基于A6G2C/M6G2C核心板
修订历史
版本
V1.00
日期
2017/07/25
原因
创建文档
产品应用笔记
©2017 Guangzhou ZHIYUAN Electronics Co., Ltd.
i
广州致远电子有限公司
移植WM8960
基于A6G2C/M6G2C核心板
目 录
第1章 适用范围 .......................................................................................................... 1
第2章 开发环境 .......................................................................................................... 2
第3章 技术实现 .......................................................................................................... 3
3.1 硬件连接 .................................................................................................................... 3
3.2 解压内核源码 ............................................................................................................ 3
3.3 调整设备树 ................................................................................................................ 3
3.3.1 更新sound结点 ............................................................................................... 4
3.3.2 修改sai2结点 .................................................................................................. 5
3.3.3 增加codec结点 ............................................................................................... 6
3.4 编译WM8960 ........................................................................................................... 6
3.5 增加系统补丁 ............................................................................................................ 7
第4章 免责声明 .......................................................................................................... 8
产品应用笔记
©2017 Guangzhou ZHIYUAN Electronics Co., Ltd.
i
广州致远电子有限公司
移植WM8960
基于A6G2C/M6G2C核心板
第1章 适用范围
本文主要介绍在EPC-6G2C-L(M6G2C)上,移植WM8960驱动。其应用原理及移植步骤,
也适用于A6GxC系列其他产品。
产品应用笔记
©2017 Guangzhou ZHIYUAN Electronics Co., Ltd.
1
广州致远电子有限公司
移植WM8960
基于A6G2C/M6G2C核心板
第2章 开发环境
开发主机环境:Ubuntu 12.04(64 位)、gcc-linaro-arm-linux-gnueabihf-4.9-2014.09
系列交叉工具链。
硬件清单:A6G2C/M6G2C核心板+带WM8960芯片的底板(底板其它配置与
EPC-6G2C-L一致)。
软件资源:光盘EPC_IoT_M6GxC_A6GxC内核源码包:
(或者更高版本光盘资料提供的内核源码包)。
产品应用笔记
©2017 Guangzhou ZHIYUAN Electronics Co., Ltd.
2
广州致远电子有限公司
移植WM8960
基于A6G2C/M6G2C核心板
第3章 技术实现
注意:在开始进行下面的操作之前,请首先确认 ubuntu 主机的开发环境已经搭建好。
如需了解这方面的内容,请参考产品光盘资料中的《嵌入式Linux开发教程 (上册) —— 基
于》,第6章 嵌入式Linux开发环境构建。
3.1 硬件连接
WM8960需要与CPU的任意一路SAI接口以及I2C接口连接。
如WM8960与CPU的SAI2接口连接,则对应的引脚连接应该是:
WM8960
DACLRC(引脚:13)
BCLK(引脚:12)
ADCDAT(引脚:16)
DACDAT(引脚:14)
MCLK(引脚:11)
CPU
JTAG_TDO(功能:SAI2_SYNC)
JTAG_TDI(功能:SAI2_BCLK)
JTAG_TCK(功能:SAI2_RXD)
JTAG_nTRST(功能:SAI2_TXD)
JTAG_TMS(功能:SAI2_MCLK)
具体的硬件电路可参考《wm8960电路.xps》。
请注意:A6G2C核心板上的SAI2的引脚有外接电容,这个会影响波形产生,因此如果
使用SAI2时需要去除核心板上SAI2相关的电容。同样的,Iot-6G2C-L及EPC-6G2C-L底
板的SAI2的引脚也有外接电容,也需要去除。
3.2 解压内核源码
将EPC_IoT_M6GxC_A6GxC V1.03光盘中的源码包,复制到
ubuntu系统home下自建的目录中,将其解压得到linux-src目录,参考命令如下:
vmuser@Linux-host:~/A7-kernel$ tar zxvf
进入解压之后的目录,修改“”脚本。
vmuser@Linux-host:~/A7-kernel$ cd linux-src/
vmuser@Linux-host:~/A7-kernel/linux-src$ vi
选择需要的配置文件,保存并退出。我们选择epc_m6g2c_defconfig配置,作为举例
#!/bin/sh
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- distclean &&
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- epc_m6g2c_defconfig &&
#make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- epc_m6g2c_mfg_defconfig &&
#make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- epc_m6g2c_no_encrypt_defconfig &&
#make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- epc_m6g2c_wifi_defconfig &&
#make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- epc_m6g2c_wifi_no_encrypt_defconfig &&
#make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- dcp_1000l_defconfig && make ARCH=arm
CROSS_COMPILE=arm-linux-gnueabihf- menuconfig
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- all -j8
3.3 调整设备树
A6G2C/M6G2C均不带WM8960芯片,因此其设备树中并未配置WM8960对应结点。
故移植WM8960,需要在设备树中增加WM8960的结点。
产品应用笔记
©2017 Guangzhou ZHIYUAN Electronics Co., Ltd.
3
广州致远电子有限公司
移植WM8960
基于A6G2C/M6G2C核心板
A6G2C/M6G2C默认使用的是CPU内部自带的MQS编解码器,如图3.1所示为对应设
备树 (/) 中的sound-mqs结点。
图3.1 sound-mqs结点
3.3.1 更新sound结点
移植WM8960,需要在设备树中增加WM8960的结点,因此需要将设备树中的
sound(sound-mqs)结点更新:
sound {
compatible = "fsl,imx6ul-evk-wm8960",
"fsl,imx-audio-wm8960";
model = "wm8960-audio";
cpu-dai = <&sai2>;
audio-codec = <&codec>;
asrc-controller = <&asrc>;
codec-master;
gpr = <&gpr>;
/*
* hp-det =
* hp-det-pin: JD1 JD2 or JD3
* hp-det-polarity = 0: hp detect high for headphone
* hp-det-polarity = 1: hp detect high for speaker
*/
hp-det = <3 0>;
hp-det-gpios = <&gpio5 4 0>;
mic-det-gpios = <&gpio5 4 0>;
audio-routing =
"Headphone Jack", "HP_L",
"Headphone Jack", "HP_R",
"Ext Spk", "SPK_LP",
"Ext Spk", "SPK_LN",
"Ext Spk", "SPK_RP",
"Ext Spk", "SPK_RN",
"LINPUT2", "Mic Jack",
"LINPUT3", "Mic Jack",
"RINPUT1", "Main MIC",
"RINPUT2", "Main MIC",
"Mic Jack", "MICB",
产品应用笔记
©2017 Guangzhou ZHIYUAN Electronics Co., Ltd.
4
广州致远电子有限公司
移植WM8960
基于A6G2C/M6G2C核心板
"Main MIC", "MICB",
"CPU-Playback", "ASRC-Playback",
"Playback", "CPU-Playback",
"ASRC-Capture", "CPU-Capture",
"CPU-Capture", "Capture";
};
上述结点中,
cpu-dai = <&sai2>; 表示的是使用哪路sai接口,需要根据硬件连接填写。由于sai2默认
在设备树中仅进行配置,并未启动,因此还需要修改sai2结点。见3.3.2节。如果连接
的是其他sai接口,请参考sai2进行修改;
audio-codec = <&codec>; 表示的是使用的编解码器,这里应该是指定使用wm8960编码
器,并且该编码器需要挂到I2C结点下,具体的codec结点见3.3.3 节;
hp-det = <3 0>; 表示的是使用的JACK DETECT引脚。WM8960硬件上可以使用JD2(引
脚2)或者JD3(引脚7)作为JACK DETECT引脚,则填入对应的JD值即可;
hp-det-gpios = <&gpio5 4 0>; mic-det-gpios = <&gpio5 4 0>; 表示WM8960的
ADCLRC(引脚15)与CPU连接的引脚号(GPIO5_IO04),0表示低电平有效;
其他属性不建议修改,具体结点内容参考内核源码arch/arm/boot/dts/
文件,或参考内核源码中Documentation/devicetree/bindings/sound/。
3.3.2 修改sai2结点
sai2结点的配置已在中进行配置,但其中的状态为”disabled”,也即该
结点并未工作,因此需要在设备树中对sai2结点修改。
可在设备树文件(/)中的&mqs结点前面,增加
sai2的结点,结点内容如下:
&sai2 {
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_sai2>;
assigned-clocks = <&clks IMX6UL_CLK_SAI2_SEL>,
<&clks IMX6UL_CLK_SAI2>;
assigned-clock-parents = <&clks IMX6UL_CLK_PLL4_AUDIO_DIV>;
assigned-clock-rates = <0>, <12288000>;
status = "okay";
};
在sai2结点中,需要使用到pinctrl_sai2结点,因此需要配置sai2的结点。
在&iomuxc结点下,增加pinctrl_sai2结点:
pinctrl_sai2: sai2grp {
fsl,pins = <
MX6UL_PAD_JTAG_TDI__SAI2_TX_BCLK 0x17088
MX6UL_PAD_JTAG_TDO__SAI2_TX_SYNC 0x17088
MX6UL_PAD_JTAG_TRST_B__SAI2_TX_DATA 0x11088
MX6UL_PAD_JTAG_TCK__SAI2_RX_DATA 0x11088
MX6UL_PAD_JTAG_TMS__SAI2_MCLK 0x17088
产品应用笔记
©2017 Guangzhou ZHIYUAN Electronics Co., Ltd.
5
广州致远电子有限公司
移植WM8960
基于A6G2C/M6G2C核心板
MX6UL_PAD_SNVS_TAMPER4__GPIO5_IO04 0x17059
>;
};
由于一个引脚在同一时刻只能为一个状态,因此在将sai2相关的引脚配置成sai接口时,
需要保证这些引脚不会被配置成其他模式,否则会造成sai2工作不正常。同样的,配置其
他sai接口时,也需要注意该问题。
3.3.3 增加codec结点
WM8960是使用I2C进行控制的,因此需要将WM8960结点增加到I2C结点下。而对
应的I2C结点,需要以实际的硬件接入的I2C为准。
这里假设接入的是GPIO模拟的I2C(对应的I2C引脚要接入GPIO5_7、GPIO5_8),则
要将codec结点放置到i2c_gpio结点内。增加codec结点:
codec: wm8960@1a {
compatible = "wlf,wm8960";
reg = <0x1a>;
clocks = <&clks IMX6UL_CLK_SAI2>;
clock-names = "mclk";
wlf,shared-lrclk;
};
上述codec结点中,
reg = <0x1a>; 这个值是由WM8960芯片决定的,该芯片的I2C从机地址是0x1a。
clocks = <&clks IMX6UL_CLK_SAI2>; 这个是由于WM8960使用的是sai2接口,如果
使用其他接口,请更换成对应的时钟。
3.4 编译WM8960
内核源码中,已经自带WM8960源码,对应代码路径是sound/soc/codecs/wm8960.c。
设备树增加完成后,需要让内核编码WM8960源码,因此需要将WM8960对应的宏配
置。
在编译服务器上进入内核源码,并配置好编译环境后,输入:
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig
并依次进入” Device Drivers” “Sound card support” “Advanced Linux Sound
Architecture” “ALSA for SoC audio support” “SoC Audio for Freescale CPUs”。
选中” SoC Audio support for boards with wm8960”;
如图3.2所示,取消选中” SoC Audio support for boards with MQS”。
产品应用笔记
©2017 Guangzhou ZHIYUAN Electronics Co., Ltd.
6
广州致远电子有限公司
移植WM8960
基于A6G2C/M6G2C核心板
图3.2 配置wm8960
保存配置并推出menuconfig界面,重新编译:
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- all -j8
最后根据相关的烧录文档重新烧录内核镜像和设备树dtb文件。
3.5 增加系统补丁
出厂的文件系统,并未对wm8960芯片进行支持,因此就算是硬件制作完成,也无法正
常播放,因此需要为文件系统打上补丁文件(rootfs_)。
可将补丁文件放置到板子系统中,之后执行命令:
[root@IoT-A6G2C ~]# wr tar -xvf rootfs_ –C /
然后再重启板子进入系统即可。
产品应用笔记
©2017 Guangzhou ZHIYUAN Electronics Co., Ltd.
7
广州致远电子有限公司
移植WM8960
基于A6G2C/M6G2C核心板
第4章 免责声明
广州致远电子有限公司所提供的所有服务内容旨在协助客户加速产品的研发进度,在服
务过程中所提供的任何程序、文档、测试结果、方案、支持等资料和信息,都仅供参考,客
户有权不使用或自行参考修改,本公司不提供任何的完整性、可靠性等保证,若在客户使用
过程中因任何原因造成的特别的、偶然的或间接的损失,本公司不承担任何责任。
产品应用笔记
©2017 Guangzhou ZHIYUAN Electronics Co., Ltd.
8
2024年3月19日发(作者:龚意蕴)
Application
Note
移植WM8960
基于A6G2C/M6G2C核心板
AN01010101 V1.00 Date: 2017/07/25
产品应用笔记
类别
关键词
摘要
内容
WM8960、移植
基于A6G2C/M6G2C核心板移植WM8960驱动
广州致远电子有限公司
广州致远电子有限公司
移植WM8960
基于A6G2C/M6G2C核心板
修订历史
版本
V1.00
日期
2017/07/25
原因
创建文档
产品应用笔记
©2017 Guangzhou ZHIYUAN Electronics Co., Ltd.
i
广州致远电子有限公司
移植WM8960
基于A6G2C/M6G2C核心板
目 录
第1章 适用范围 .......................................................................................................... 1
第2章 开发环境 .......................................................................................................... 2
第3章 技术实现 .......................................................................................................... 3
3.1 硬件连接 .................................................................................................................... 3
3.2 解压内核源码 ............................................................................................................ 3
3.3 调整设备树 ................................................................................................................ 3
3.3.1 更新sound结点 ............................................................................................... 4
3.3.2 修改sai2结点 .................................................................................................. 5
3.3.3 增加codec结点 ............................................................................................... 6
3.4 编译WM8960 ........................................................................................................... 6
3.5 增加系统补丁 ............................................................................................................ 7
第4章 免责声明 .......................................................................................................... 8
产品应用笔记
©2017 Guangzhou ZHIYUAN Electronics Co., Ltd.
i
广州致远电子有限公司
移植WM8960
基于A6G2C/M6G2C核心板
第1章 适用范围
本文主要介绍在EPC-6G2C-L(M6G2C)上,移植WM8960驱动。其应用原理及移植步骤,
也适用于A6GxC系列其他产品。
产品应用笔记
©2017 Guangzhou ZHIYUAN Electronics Co., Ltd.
1
广州致远电子有限公司
移植WM8960
基于A6G2C/M6G2C核心板
第2章 开发环境
开发主机环境:Ubuntu 12.04(64 位)、gcc-linaro-arm-linux-gnueabihf-4.9-2014.09
系列交叉工具链。
硬件清单:A6G2C/M6G2C核心板+带WM8960芯片的底板(底板其它配置与
EPC-6G2C-L一致)。
软件资源:光盘EPC_IoT_M6GxC_A6GxC内核源码包:
(或者更高版本光盘资料提供的内核源码包)。
产品应用笔记
©2017 Guangzhou ZHIYUAN Electronics Co., Ltd.
2
广州致远电子有限公司
移植WM8960
基于A6G2C/M6G2C核心板
第3章 技术实现
注意:在开始进行下面的操作之前,请首先确认 ubuntu 主机的开发环境已经搭建好。
如需了解这方面的内容,请参考产品光盘资料中的《嵌入式Linux开发教程 (上册) —— 基
于》,第6章 嵌入式Linux开发环境构建。
3.1 硬件连接
WM8960需要与CPU的任意一路SAI接口以及I2C接口连接。
如WM8960与CPU的SAI2接口连接,则对应的引脚连接应该是:
WM8960
DACLRC(引脚:13)
BCLK(引脚:12)
ADCDAT(引脚:16)
DACDAT(引脚:14)
MCLK(引脚:11)
CPU
JTAG_TDO(功能:SAI2_SYNC)
JTAG_TDI(功能:SAI2_BCLK)
JTAG_TCK(功能:SAI2_RXD)
JTAG_nTRST(功能:SAI2_TXD)
JTAG_TMS(功能:SAI2_MCLK)
具体的硬件电路可参考《wm8960电路.xps》。
请注意:A6G2C核心板上的SAI2的引脚有外接电容,这个会影响波形产生,因此如果
使用SAI2时需要去除核心板上SAI2相关的电容。同样的,Iot-6G2C-L及EPC-6G2C-L底
板的SAI2的引脚也有外接电容,也需要去除。
3.2 解压内核源码
将EPC_IoT_M6GxC_A6GxC V1.03光盘中的源码包,复制到
ubuntu系统home下自建的目录中,将其解压得到linux-src目录,参考命令如下:
vmuser@Linux-host:~/A7-kernel$ tar zxvf
进入解压之后的目录,修改“”脚本。
vmuser@Linux-host:~/A7-kernel$ cd linux-src/
vmuser@Linux-host:~/A7-kernel/linux-src$ vi
选择需要的配置文件,保存并退出。我们选择epc_m6g2c_defconfig配置,作为举例
#!/bin/sh
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- distclean &&
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- epc_m6g2c_defconfig &&
#make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- epc_m6g2c_mfg_defconfig &&
#make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- epc_m6g2c_no_encrypt_defconfig &&
#make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- epc_m6g2c_wifi_defconfig &&
#make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- epc_m6g2c_wifi_no_encrypt_defconfig &&
#make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- dcp_1000l_defconfig && make ARCH=arm
CROSS_COMPILE=arm-linux-gnueabihf- menuconfig
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- all -j8
3.3 调整设备树
A6G2C/M6G2C均不带WM8960芯片,因此其设备树中并未配置WM8960对应结点。
故移植WM8960,需要在设备树中增加WM8960的结点。
产品应用笔记
©2017 Guangzhou ZHIYUAN Electronics Co., Ltd.
3
广州致远电子有限公司
移植WM8960
基于A6G2C/M6G2C核心板
A6G2C/M6G2C默认使用的是CPU内部自带的MQS编解码器,如图3.1所示为对应设
备树 (/) 中的sound-mqs结点。
图3.1 sound-mqs结点
3.3.1 更新sound结点
移植WM8960,需要在设备树中增加WM8960的结点,因此需要将设备树中的
sound(sound-mqs)结点更新:
sound {
compatible = "fsl,imx6ul-evk-wm8960",
"fsl,imx-audio-wm8960";
model = "wm8960-audio";
cpu-dai = <&sai2>;
audio-codec = <&codec>;
asrc-controller = <&asrc>;
codec-master;
gpr = <&gpr>;
/*
* hp-det =
* hp-det-pin: JD1 JD2 or JD3
* hp-det-polarity = 0: hp detect high for headphone
* hp-det-polarity = 1: hp detect high for speaker
*/
hp-det = <3 0>;
hp-det-gpios = <&gpio5 4 0>;
mic-det-gpios = <&gpio5 4 0>;
audio-routing =
"Headphone Jack", "HP_L",
"Headphone Jack", "HP_R",
"Ext Spk", "SPK_LP",
"Ext Spk", "SPK_LN",
"Ext Spk", "SPK_RP",
"Ext Spk", "SPK_RN",
"LINPUT2", "Mic Jack",
"LINPUT3", "Mic Jack",
"RINPUT1", "Main MIC",
"RINPUT2", "Main MIC",
"Mic Jack", "MICB",
产品应用笔记
©2017 Guangzhou ZHIYUAN Electronics Co., Ltd.
4
广州致远电子有限公司
移植WM8960
基于A6G2C/M6G2C核心板
"Main MIC", "MICB",
"CPU-Playback", "ASRC-Playback",
"Playback", "CPU-Playback",
"ASRC-Capture", "CPU-Capture",
"CPU-Capture", "Capture";
};
上述结点中,
cpu-dai = <&sai2>; 表示的是使用哪路sai接口,需要根据硬件连接填写。由于sai2默认
在设备树中仅进行配置,并未启动,因此还需要修改sai2结点。见3.3.2节。如果连接
的是其他sai接口,请参考sai2进行修改;
audio-codec = <&codec>; 表示的是使用的编解码器,这里应该是指定使用wm8960编码
器,并且该编码器需要挂到I2C结点下,具体的codec结点见3.3.3 节;
hp-det = <3 0>; 表示的是使用的JACK DETECT引脚。WM8960硬件上可以使用JD2(引
脚2)或者JD3(引脚7)作为JACK DETECT引脚,则填入对应的JD值即可;
hp-det-gpios = <&gpio5 4 0>; mic-det-gpios = <&gpio5 4 0>; 表示WM8960的
ADCLRC(引脚15)与CPU连接的引脚号(GPIO5_IO04),0表示低电平有效;
其他属性不建议修改,具体结点内容参考内核源码arch/arm/boot/dts/
文件,或参考内核源码中Documentation/devicetree/bindings/sound/。
3.3.2 修改sai2结点
sai2结点的配置已在中进行配置,但其中的状态为”disabled”,也即该
结点并未工作,因此需要在设备树中对sai2结点修改。
可在设备树文件(/)中的&mqs结点前面,增加
sai2的结点,结点内容如下:
&sai2 {
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_sai2>;
assigned-clocks = <&clks IMX6UL_CLK_SAI2_SEL>,
<&clks IMX6UL_CLK_SAI2>;
assigned-clock-parents = <&clks IMX6UL_CLK_PLL4_AUDIO_DIV>;
assigned-clock-rates = <0>, <12288000>;
status = "okay";
};
在sai2结点中,需要使用到pinctrl_sai2结点,因此需要配置sai2的结点。
在&iomuxc结点下,增加pinctrl_sai2结点:
pinctrl_sai2: sai2grp {
fsl,pins = <
MX6UL_PAD_JTAG_TDI__SAI2_TX_BCLK 0x17088
MX6UL_PAD_JTAG_TDO__SAI2_TX_SYNC 0x17088
MX6UL_PAD_JTAG_TRST_B__SAI2_TX_DATA 0x11088
MX6UL_PAD_JTAG_TCK__SAI2_RX_DATA 0x11088
MX6UL_PAD_JTAG_TMS__SAI2_MCLK 0x17088
产品应用笔记
©2017 Guangzhou ZHIYUAN Electronics Co., Ltd.
5
广州致远电子有限公司
移植WM8960
基于A6G2C/M6G2C核心板
MX6UL_PAD_SNVS_TAMPER4__GPIO5_IO04 0x17059
>;
};
由于一个引脚在同一时刻只能为一个状态,因此在将sai2相关的引脚配置成sai接口时,
需要保证这些引脚不会被配置成其他模式,否则会造成sai2工作不正常。同样的,配置其
他sai接口时,也需要注意该问题。
3.3.3 增加codec结点
WM8960是使用I2C进行控制的,因此需要将WM8960结点增加到I2C结点下。而对
应的I2C结点,需要以实际的硬件接入的I2C为准。
这里假设接入的是GPIO模拟的I2C(对应的I2C引脚要接入GPIO5_7、GPIO5_8),则
要将codec结点放置到i2c_gpio结点内。增加codec结点:
codec: wm8960@1a {
compatible = "wlf,wm8960";
reg = <0x1a>;
clocks = <&clks IMX6UL_CLK_SAI2>;
clock-names = "mclk";
wlf,shared-lrclk;
};
上述codec结点中,
reg = <0x1a>; 这个值是由WM8960芯片决定的,该芯片的I2C从机地址是0x1a。
clocks = <&clks IMX6UL_CLK_SAI2>; 这个是由于WM8960使用的是sai2接口,如果
使用其他接口,请更换成对应的时钟。
3.4 编译WM8960
内核源码中,已经自带WM8960源码,对应代码路径是sound/soc/codecs/wm8960.c。
设备树增加完成后,需要让内核编码WM8960源码,因此需要将WM8960对应的宏配
置。
在编译服务器上进入内核源码,并配置好编译环境后,输入:
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig
并依次进入” Device Drivers” “Sound card support” “Advanced Linux Sound
Architecture” “ALSA for SoC audio support” “SoC Audio for Freescale CPUs”。
选中” SoC Audio support for boards with wm8960”;
如图3.2所示,取消选中” SoC Audio support for boards with MQS”。
产品应用笔记
©2017 Guangzhou ZHIYUAN Electronics Co., Ltd.
6
广州致远电子有限公司
移植WM8960
基于A6G2C/M6G2C核心板
图3.2 配置wm8960
保存配置并推出menuconfig界面,重新编译:
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- all -j8
最后根据相关的烧录文档重新烧录内核镜像和设备树dtb文件。
3.5 增加系统补丁
出厂的文件系统,并未对wm8960芯片进行支持,因此就算是硬件制作完成,也无法正
常播放,因此需要为文件系统打上补丁文件(rootfs_)。
可将补丁文件放置到板子系统中,之后执行命令:
[root@IoT-A6G2C ~]# wr tar -xvf rootfs_ –C /
然后再重启板子进入系统即可。
产品应用笔记
©2017 Guangzhou ZHIYUAN Electronics Co., Ltd.
7
广州致远电子有限公司
移植WM8960
基于A6G2C/M6G2C核心板
第4章 免责声明
广州致远电子有限公司所提供的所有服务内容旨在协助客户加速产品的研发进度,在服
务过程中所提供的任何程序、文档、测试结果、方案、支持等资料和信息,都仅供参考,客
户有权不使用或自行参考修改,本公司不提供任何的完整性、可靠性等保证,若在客户使用
过程中因任何原因造成的特别的、偶然的或间接的损失,本公司不承担任何责任。
产品应用笔记
©2017 Guangzhou ZHIYUAN Electronics Co., Ltd.
8