看一看文件sound/soc/omap/omap3beagle.c和include/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時,你如何找到這個宏定義的位置? (我當前的方法是一個需要9分鐘的grep ...哈哈)我使用Eclipse,但F3並沒有帶我到宏定義,就像它會帶我到一個函數定義。 (編輯:你提供的是有用的,但我問如果你沒有告訴我在哪裏可以找到SND_SOC_DAIFMT_CBM_CFM。例如,哪裏是SND_SOC_DAIFMT_I2S? – SwimBikeRun
@SwimBikeRun我使用ctags/utags併爲所有必需的文件夾生成標籤。然後使用vim作爲這個標籤文件,並且只是通過任何funcion /宏等步驟。例如SND_SOC_DAIFMT_I2S在我的內核的第27行的soc-dai.h中。 – Michael
@SwimBikeRun你也可以使用http:// lxr。 free-electrons.com/或者只是谷歌。 – Michael