查看: 2053|回复: 1

[分享] 在 i.MX8MQ / 8MM 中添加录音驱动程序

[复制链接]
  • TA的每日心情
    开心
    2024-3-26 15:16
  • 签到天数: 266 天

    [LV.8]以坛为家I

    3298

    主题

    6545

    帖子

    0

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    32017
    最后登录
    2024-4-9
    发表于 2020-4-26 15:20:27 | 显示全部楼层 |阅读模式
    在 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,

    };
    ———————————————————————————————————————
    。。。
    未完>>>
    点击查看完整版

    签到签到
    回复

    使用道具 举报

    该用户从未签到

    0

    主题

    1

    帖子

    0

    新手上路

    Rank: 1

    积分
    8
    最后登录
    2022-3-20
    发表于 2022-3-20 11:18:52 | 显示全部楼层
    micarray_rates和micarray_channels如何定义的呢
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /4 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2024-4-24 18:17 , Processed in 0.113451 second(s), 19 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

    快速回复 返回顶部 返回列表