查看: 1400|回复: 0

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

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

    [LV.8]以坛为家I

    3300

    主题

    6547

    帖子

    0

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    32032
    最后登录
    2024-4-26
    发表于 2020-4-30 15:00:37 | 显示全部楼层 |阅读模式
    在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,
          },

    };




    未完>>>
    点击查看完整版本

    签到签到
    回复

    使用道具 举报

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

    本版积分规则

    关闭

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

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

    GMT+8, 2024-4-27 07:06 , Processed in 0.106656 second(s), 18 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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