在线时间4069 小时
UID3441752
注册时间2017-11-21
NXP金币753015
TA的每日心情 | 开心 2024-3-26 15:16 |
---|
签到天数: 266 天 [LV.8]以坛为家I
管理员
- 积分
- 32032
- 最后登录
- 2024-4-26
|
在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 inworking 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>, <&clkIMX8MM_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>, <&clkIMX8MM_CLK_DUMMY>,
<&clk IMX8MM_CLK_SAI1_ROOT>, <&clkIMX8MM_CLK_DUMMY>,
<&clk IMX8MM_CLK_DUMMY>, <&clkIMX8MM_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,
};
在 micarray.c 中更改驱动程序名称:
static const struct of_device_id wm8524_of_match[] = {
- { .compatible = "wlf,wm8524" },
+ { .compatible = "fsl,micarray" },
{ /* sentinel*/ }
};
static struct platform_driver wm8524_codec_driver = {
.probe = wm8524_codec_probe,
.remove = wm8524_codec_remove,
.driver = {
- .name = "wm8524-codec",
+ .name = "micarray-codec",
.of_match_table = wm8524_of_match,
},
};
未完>>>
点击查看完整版本
|
|