在线时间4067 小时
UID3441752
注册时间2017-11-21
NXP金币759444
TA的每日心情 | 开心 2024-3-26 15:16 |
---|
签到天数: 266 天 [LV.8]以坛为家I
管理员
- 积分
- 32017
- 最后登录
- 2024-4-9
|
在 i.MX8MQ / 8MM 中添加录音驱动程序
在 i.MX8MQ 和 i.MX8M Mini 中,使用的编解码器为 WM8524,仅支持音频回放。虽然8M Mini 确实具有 PDM 麦克风接口(MICFIL),但不支持通过 I2S 进行音频记录。本指南将逐步向您展示如何在 i.MX8MQ&8MM 中添加录音驱动程序。
硬件:i.MX8MQ / 8MM Evk,I2S 输出数字麦克风
操作系统:Android / Linux
内核版本:4.14.78
该驱动程序的代码基于 wm8524,新驱动程序命名为“ micarray”。本文以 i.MX8MM Android 为例。
对内核进行全面修改:
———————————————————————————————————————
Changes not staged for commit:
(use "git add <file>..." to update what will be committed) (use "git checkout --<file>..." to discard changes in
working directory)
modified: arch/arm64/boot/dts/freescale/fsl-imx8mm-evk.dts
modified: arch/arm64/configs/android_defconfig
modified: sound/soc/codecs/Kconfig
modified: sound/soc/codecs/Makefile
modified: sound/soc/fsl/Kconfig
modified: sound/soc/fsl/Makefile
modified: sound/soc/fsl/fsl_sai.c
Untracked files:
(use "git add <file>..." to include in what will be committed)
sound/soc/codecs/micarray.c
sound/soc/fsl/imx-micarray.c
———————————————————————————————————————
1. 修改 arch / arm64 / boot / dts / freescale / fsl-imx8mm-evk.dts
添加“micarray”节点并注释“wm8524”:
———————————————————————————————————————
@@ -107,6 +107,23 @@
};
};
+ micarray: micarray {
+ compatible = "fsl,micarray";
+ clocks = <&clk IMX8MM_CLK_SAI1_ROOT>;
+ clock-names = "mclk";
+ wlf,mute-gpios = <&gpio5 21 GPIO_ACTIVE_LOW>;
+ };
+
+ sound-micarray {
+ compatible = "fsl,imx-audio-micarray";
+ model = "micarray-audio";
+ audio-cpu = <&sai1>;
+ audio-codec = <&micarray>;
+ audio-routing =
+ "Line Out Jack", "LINEVOUTL",
+ "Line Out Jack", "LINEVOUTR";
+ };
+/*
wm8524: wm8524 {
compatible = "wlf,wm8524";
clocks = <&clk IMX8MM_CLK_SAI3_ROOT>; @@ -123,13 +140,14 @@
"Line Out Jack", "LINEVOUTL",
"Line Out Jack", "LINEVOUTR";
};
-
+*/
———————————————————————————————————————
修改 SAI1 配置用以记录:
———————————————————————————————————————
@@ -295,6 +314,12 @@
MX8MM_IOMUXC_SAI1_TXD5_SAI1_TX_DATA5 0xd6
MX8MM_IOMUXC_SAI1_TXD6_SAI1_TX_DATA6 0xd6
MX8MM_IOMUXC_SAI1_TXD7_SAI1_TX_DATA7 0xd6
+MX8MM_IOMUXC_SAI1_RXFS_SAI1_RX_SYNC 0xd6
+MX8MM_IOMUXC_SAI1_RXC_SAI1_RX_BCLK 0xd6
+MX8MM_IOMUXC_SAI1_RXD0_SAI1_RX_DATA0 0xd6
+MX8MM_IOMUXC_SAI1_RXD1_SAI1_RX_DATA1 0xd6
+MX8MM_IOMUXC_SAI1_RXD2_SAI1_RX_DATA2 0xd6
+MX8MM_IOMUXC_SAI1_RXD3_SAI1_RX_DATA3 0xd6
>;
};
@@ -868,15 +899,15 @@
assigned-clocks = <&clk IMX8MM_CLK_SAI1_SRC>, <&clk
IMX8MM_CLK_SAI1_DIV>;
assigned-clock-parents = <&clk IMX8MM_AUDIO_PLL1_OUT>;
- assigned-clock-rates = <0>, <49152000>;
+ assigned-clock-rates = <0>, <24576000>;
clocks = <&clk IMX8MM_CLK_SAI1_IPG>, <&clk
IMX8MM_CLK_DUMMY>,
<&clk IMX8MM_CLK_SAI1_ROOT>, <&clk
IMX8MM_CLK_DUMMY>,
<&clk IMX8MM_CLK_DUMMY>, <&clk
IMX8MM_AUDIO_PLL1_OUT>,
<&clk IMX8MM_AUDIO_PLL2_OUT>;
clock-names = "bus", "mclk0", "mclk1", "mclk2", "mclk3", "pll8k", "pll11k";
- fsl,sai-multi-lane;
- fsl,dataline,dsd = <0 0xff 0xff 2 0xff 0x11>;
- dmas = <&sdma2 0 26 0>, <&sdma2 1 26 0>;
+ //fsl,sai-multi-lane;
+ //fsl,dataline,dsd = <0 0xff 0xff 2 0xff 0x11>;
+ //dmas = <&sdma2 0 26 0>, <&sdma2 1 26 0>;
status = "okay";
};
———————————————————————————————————————
2. 添加编解码器驱动程序
复制 sound / soc / codec / wm8524.c 并重命名为 micarray.c,并将 capture 添加到 dai 驱动程
序:
———————————————————————————————————————
- #define WM8524_RATES SNDRV_PCM_RATE_8000_192000
- #define WM8524_FORMATS (SNDRV_PCM_FMTBIT_S16_LE |
SNDRV_PCM_FMTBIT_S24_LE |\
- SNDRV_PCM_FMTBIT_S32_LE)
+ #define WM8524_RATES SNDRV_PCM_RATE_8000_192000
+ #define WM8524_FORMATS (SNDRV_PCM_FMTBIT_S16_LE |
SNDRV_PCM_FMTBIT_S24_LE |\
+ SNDRV_PCM_FMTBIT_S32_LE)
static struct snd_soc_dai_driver wm8524_dai = {
.name = "micarray-hifi",
.playback = {
.stream_name = "Playback",
.channels_min = 2,
.channels_max = 8,
.rates = MICARRAY_RATES,
.formats = MICARRAY_FORMATS,
},
+ .capture = {
+ .stream_name = "Capture",
+ .channels_min = 1,
+ .channels_max = 8,
+ .rates = SNDRV_PCM_RATE_KNOT,
+ .formats = MICARRAY_FORMATS,
+ },
.ops = &wm8524_dai_ops,
};
———————————————————————————————————————
。。。
未完>>>
点击查看完整版
|
|