[alsa-devel] [PATCH v2] ASoC: fsl_ssi: Fix channel swap on playback start
Caleb Crome
caleb at crome.org
Mon Apr 3 22:50:01 CEST 2017
On Mon, Apr 3, 2017 at 1:32 PM, Caleb Crome <caleb at crome.org> wrote:
> On Sat, Apr 1, 2017 at 7:48 AM, Fabio Estevam <festevam at gmail.com> wrote:
>>
>> From: Fabio Estevam <fabio.estevam at nxp.com>
>>
>> Commit f8fdf5375e2005f2 ("ASoC: fsl-ssi: add SSIEN errata work around")
>> implemented the workaround for the following erratum found on i.MX35
>> errata document:
>>
>> ENGcm06222: SSI:Transmission does not take place in bit length early
>> frame sync configuration
>>
>> and also for ENGcm06222 from the same document.
>>
>> However it has been only applied for AC97 mode. Apply it to I2S mode
>> as well so that it can fix audio channel swap during playback start.
>>
>> The channel swap can be noticed in about 10% of the times an audio track
>> starts.
>>
>> With the recommended workaround in place no more channel swap
>> happened after running audio start/stop sequence in more than
>> 2000 times.
>>
>> Tested on a mx6dl-wandboard.
>>
>> Signed-off-by: Fabio Estevam <fabio.estevam at nxp.com>
>> ---
>> Changes since v1:
>> - Do not impact 61fcf10a0ee44763e0 ("ASoC: fsl_ssi: Fix channel slipping in
>> Playback at startup")
>>
>> sound/soc/fsl/fsl_ssi.c | 4 +++-
>> 1 file changed, 3 insertions(+), 1 deletion(-)
>>
>> diff --git a/sound/soc/fsl/fsl_ssi.c b/sound/soc/fsl/fsl_ssi.c
>> index 17f92b8..549b2a5 100644
>> --- a/sound/soc/fsl/fsl_ssi.c
>> +++ b/sound/soc/fsl/fsl_ssi.c
>> @@ -575,7 +575,9 @@ static void fsl_ssi_config(struct fsl_ssi_private *ssi_private, bool enable,
>> "Timeout waiting TX FIFO filling\n");
>> }
>> }
>> - regmap_update_bits(regs, CCSR_SSI_SCR, vals->scr, vals->scr);
>> + regmap_update_bits(regs, CCSR_SSI_SCR,
>> + CCSR_SSI_SCR_SSIEN | CCSR_SSI_SCR_TE | CCSR_SSI_SCR_RE,
>> + CCSR_SSI_SCR_SSIEN | CCSR_SSI_SCR_TE | CCSR_SSI_SCR_RE);
>> }
>> }
>>
>> --
>> 2.7.4
>>
>
> This patch definitely breaks the i.mx6 channel alignment. In fact it
> breaks it so that the channels are never aligned properly.
>
> My test setup is as follows:
> * Get vanilla kernel, tag v4.11-rc5
> * apply a couple patches to allow AUD4 on the wandboard external
> connectors (and disable internal audio)
FYI, for anybody that wants to test for themselves, I just posted the
patches for the wandboard here.
https://github.com/ccrome/linux-caleb-dev/wiki
Now that the SSI patches are in the mainline kernel, these 2 simple
patches should make testing the i.mx6 ssi pretty much trivial for
anybody.
-Caleb
More information about the Alsa-devel
mailing list