[alsa-devel] [Q] ASoC: What's the real meaning of SND_SOC_DAIFMT_NB_NF?
javier Martin
javier.martin at vista-silicon.com
Thu Feb 23 16:58:09 CET 2012
On 23 February 2012 16:19, Mark Brown
<broonie at opensource.wolfsonmicro.com> wrote:
> On Thu, Feb 23, 2012 at 01:40:40PM +0100, javier Martin wrote:
>
>> As I wasn't sure about the meaning of 'normal' I've dug into the code
>> of some platforms to see what they do. What I've found, however, is
>> that it doesn't seem to be an agreement about it.
>
> It's whatever is standard for the given format - the Wolfson datasheets
> are a pretty good reference, they have clear diagrams.
So, let's see if I understood properly. If I want to configure the
i.MX SSI into standard, I2S format I should do:
dai_format = SND_SOC_DAIFMT_I2S | SND_SOC_DAIFMT_NB_NF;
snd_soc_dai_set_fmt(cpu_dai, dai_format);
However, this doesn't work with the imx-ssi driver which does the following:
http://lxr.linux.no/#linux+v3.2.7/sound/soc/imx/imx-ssi.c#L83
case SND_SOC_DAIFMT_I2S:
/* data on rising edge of bclk, frame low 1clk before data */
strcr |= SSI_STCR_TFSI | SSI_STCR_TEFS | SSI_STCR_TXBIT0;
scr |= SSI_SCR_NET;
if (ssi->flags & IMX_SSI_USE_I2S_SLAVE) {
scr &= ~SSI_I2S_MODE_MASK;
scr |= SSI_SCR_I2S_MODE_SLAVE;
}
break;
[...]
case SND_SOC_DAIFMT_NB_NF:
strcr &= ~SSI_STCR_TFSI;
strcr |= SSI_STCR_TSCKP;
break;
While initially TFSI bit is set because of I2S flag, it is then
cleared because of the NB_NF.
Does this mean this is a bug then? If it is, I would gladly fix it but
there is at least one platform relying on this misleading behavior
that I can't test:
http://lxr.linux.no/#linux+v3.2.7/sound/soc/imx/wm1133-ev1.c#L81
--
Javier Martin
Vista Silicon S.L.
CDTUC - FASE C - Oficina S-345
Avda de los Castros s/n
39005- Santander. Cantabria. Spain
+34 942 25 32 60
www.vista-silicon.com
More information about the Alsa-devel
mailing list