2

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

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

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

4

1 回答 1

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找到。

于 2013-11-21T19:53:28.747 回答