Настройка I2C и I2S в ALSA ASoC
Я работаю с BeagleBoard под управлением Linux 3.0.63 и пытаюсь заставить работать интерфейсы I2C и I2S с конечной целью - воспроизвести файл WAV на beagleboard и правильно настроить I2C и I2S.
В настоящее время я застрял на установке BeagleBoard в качестве главных часов для линии I2S. Или рабские часы тоже могут работать. В любом случае, я понятия не имею, где в коде ядра установлен материал I2S. Я предполагал в arch/arm/mach-omap3/board-omap3beagle.c
, но я не могу его найти.
Кстати, есть ли скрытая документация о том, как это сделать, о которой я не знаю?
1 ответ
Посмотрите на файлы sound / soc / omap / omap3beagle.c и включите / 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 для "Stereo I2S mode", как вам нужно. Есть много других вариантов, но я думаю, что это именно то, что вам нужно.
Некоторая документация может быть найдена в Documentation / sound / alsa / soc.