[alsa-devel] WM8731 using I2S on omap3 McBSP2 issues
Peter Ujfalusi
peter.ujfalusi at nokia.com
Fri Sep 25 08:03:06 CEST 2009
Hello,
On Thursday 24 September 2009 20:06:07 ext Rick Bronson wrote:
> Hi,
>
> I'm working on getting a WM8731 (in SLAVE) working using I2S on
> omap3 McBSP2 (in MASTER).
> static int omap3csb740_hw_params(struct snd_pcm_substream *substream,
> ...
> ret = snd_soc_dai_set_fmt(codec_dai, SND_SOC_DAIFMT_I2S |
> SND_SOC_DAIFMT_NB_NF | SND_SOC_DAIFMT_CBS_CFS);
> ret = snd_soc_dai_set_fmt(cpu_dai, SND_SOC_DAIFMT_I2S |
> SND_SOC_DAIFMT_NB_NF | SND_SOC_DAIFMT_CBS_CFS);
> ret = snd_soc_dai_set_sysclk(codec_dai, 0, 12288000, SND_SOC_CLOCK_IN);
> ret = snd_soc_dai_set_sysclk(cpu_dai, OMAP_MCBSP_SYSCLK_CLKS_EXT, 0,
> SND_SOC_CLOCK_IN);
I think the problem is here.
The MCBSP_CLKS pin is connected to CLK256FS pin of TWL4030 (or TPA).
Since you are not using the TWL codec, there will be no clock on the MCBSP_CLKS
pin, thus no functional clock for McBSP, thus no bits are shifted in or out.
You can try to use the internal functional clock:
ret = snd_soc_dai_set_sysclk(cpu_dai, OMAP_MCBSP_SYSCLK_CLKS_FCLK, 0,
SND_SOC_CLOCK_IN);
Than set the correct divider, which depends on the frequency you would like to
play. The source for the CLKS_FCLK is (in case of McBSP2) PER_96M_FCLK, so
96MHz. Now you have to divide this to get the correct value, as I recall quite a
long time ago there were some discussion about this here, and I have sent some
'formula' to calculate it, but I can not find it now :(
> ret = snd_soc_dai_set_clkdiv(cpu_dai, OMAP_MCBSP_CLKGDV, 256);
>
> Any help is greatly appreciated.
>
> Rick Bronson
>
--
Péter
More information about the Alsa-devel
mailing list