Subject: KNOT / CONTINUOUS (was: [PATCH] ASoC: kirkwood: Fix invalid SPDIF format)

From: [email-masked] (Jean-Francois Moine)
Date: Tue, 26 Nov 2013 20:09:16 +0100

On Tue, 26 Nov 2013 11:20:48 +0100
Takashi Iwai <[email-masked]> wrote:

> Not against the patch itself, but just found looking through it:
> 
> > @@ -493,7 +497,7 @@ static struct snd_soc_dai_driver kirkwood_i2s_dai_extclk[2] = {
> >  		.rates = SNDRV_PCM_RATE_8000_192000 |
> >  			 SNDRV_PCM_RATE_CONTINUOUS |
> >  			 SNDRV_PCM_RATE_KNOT,
> 
> Setting both CONTINUOUS and KNOT doesn't make sense.

Hi Takashi,

I understand 'continuous', but I could not find any clear definition of
'knot'. May you explain what is its purpose?

BTW, if you may help me, while looking for SNDRV_PCM_RATE_KNOT,
I found this sequence in soc-pcm.c:

	if (codec_stream->rates
		& (SNDRV_PCM_RATE_KNOT | SNDRV_PCM_RATE_CONTINUOUS))
		hw->rates |= cpu_stream->rates;
	if (cpu_stream->rates
		& (SNDRV_PCM_RATE_KNOT | SNDRV_PCM_RATE_CONTINUOUS))
		hw->rates |= codec_stream->rates;

and it seems related to the problem I have:

- the cpu dai (kirkwood i2s) may generate any continuous rate
  8000..192000 as shown in the patch.

- the HDMI transmitter (tda998x) accepts either i2s or s/pdif audio
  input at any continuous rate, but when getting audio from s/pdif, the
  lowest rate is 22.06kHz.

In the associated codec, if I define:

	.rates = SNDRV_PCM_RATE_22050 |
		SNDRV_PCM_RATE_32000 |
		...
		SNDRV_PCM_RATE_192000 |
		SNDRV_PCM_RATE_CONTINUOUS,

audio works fine with streams at 33.075kHz (the kirkwood clock is
exactly 33.075kHz). But when I want a stream at 7850Hz, the kirkwood
i2s driver gets a clock at 8000Hz and the tda998x cannot do audio
output.

Otherwise, removing SNDRV_PCM_RATE_CONTINUOUS in the codec, I can hear
the 7850Hz stream which is converted to 22.05 kHz by vlc, but when I
want a stream at 33.075kHz, vlc converts it to 32kHz.

So, with the commit d9ad6296ec3b4a55b "ASoC: PCM_RATE: Check for KNOT
and CONTINUOUS flags", I cannot get the exact clock I want.

Do you know the reason of this patch, and, if it must stay, is there
any possible bypass?

Thanks.

-- 
Ken ar c'henta?	|	      ** Breizh ha Linux atav! **
Jef		|		http://moinejf.free.fr/