【问题标题】:Configuring I2C and I2S in ALSA ASoC在 ALSA ASoC 中配置 I2C 和 I2S
【发布时间】:2013-12-06 11:19:24
【问题描述】:

我正在使用运行 Linux 3.0.63 的 BeagleBoard,我正在尝试让 I2C 和 I2S 接口工作,最终目标是在 beagleboard 上播放 .wav 文件并设置 I2C 和 I2S正确。

我目前坚持将 BeagleBoard 设置为 I2S 线路的主时钟。或者从时钟也可以工作。无论如何,我不知道内核代码中 I2S 的设置在哪里。我假设在arch/arm/mach-omap3/board-omap3beagle.c,但我找不到它。

顺便说一句,是否有关于如何执行此操作的隐藏文档我不知道?

【问题讨论】:

    标签: linux-kernel alsa beagleboard system-on-chip


    【解决方案1】:

    查看文件sound/soc/omap/omap3beagle.cinclude/sound/soc-dai.h

    第一个有一个功能:

    static int omap3beagle_hw_params(struct snd_pcm_substream *substream,
        struct snd_pcm_hw_params *params)
    {
        /* couple of lines */
        switch (params_channels(params)) {
        case 2: /* Stereo I2S mode */
            fmt =   SND_SOC_DAIFMT_I2S |
                SND_SOC_DAIFMT_NB_NF |
                SND_SOC_DAIFMT_CBM_CFM;
            break;
        case 4: /* Four channel TDM mode */
            fmt =   SND_SOC_DAIFMT_DSP_A |
                SND_SOC_DAIFMT_IB_NF |
                SND_SOC_DAIFMT_CBM_CFM;
            break;
        default:
            return -EINVAL;
        }
        /* some stuff */
    }
    

    第二个有宏定义:

    /*
     * DAI hardware clock masters.
     *
     * This is wrt the codec, the inverse is true for the interface
     * i.e. if the codec is clk and FRM master then the interface is
     * clk and frame slave.
     */
    #define SND_SOC_DAIFMT_CBM_CFM      (1 << 12) /* codec clk & FRM master */
    #define SND_SOC_DAIFMT_CBS_CFM      (2 << 12) /* codec clk slave & FRM master */
    #define SND_SOC_DAIFMT_CBM_CFS      (3 << 12) /* codec clk master & frame slave */
    #define SND_SOC_DAIFMT_CBS_CFS      (4 << 12) /* codec clk & FRM slave */
    

    因此,您可以根据需要调整“立体声 I2S 模式”的 I2S 时钟。 还有很多其他选择,但我想这些正是您需要的。

    一些文档可以在Documentation/sound/alsa/soc找到。

    【讨论】:

    • 当您在 omap3beagle.c 中看到 SND_SOC_DAIFMT_CBM_CFM 时,如何定位该宏的定义位置? (我当前的方法是 grep 需要 9 分钟......哈哈)我正在使用 Eclipse,但 F3 不会像将我带到函数定义那样将我带到宏定义。 (编辑:您提供的内容很有帮助,但我想问的是,如果您没有告诉我在哪里可以找到 SND_SOC_DAIFMT_CBM_CFM。例如,SND_SOC_DAIFMT_I2S 在哪里?
    • @SwimBikeRun 我使用 ctags/utags 并为所有必要的文件夹生成标签。然后对这个标签文件使用 vim 并逐步执行任何函数/宏等。例如 SND_SOC_DAIFMT_I2S 在我内核第 27 行的 soc-dai.h 中。
    • @SwimBikeRun 您也可以只使用lxr.free-electrons.com 或只使用google。
    猜你喜欢
    • 2014-03-03
    • 2013-08-31
    • 2019-08-20
    • 2018-02-12
    • 2020-05-21
    • 2015-11-28
    • 1970-01-01
    • 2015-12-07
    • 2020-01-13
    相关资源
    最近更新 更多