ASoC: pxa-ssp: atomically set stream active masks
authorDaniel Mack <zonque@gmail.com>
Mon, 19 Mar 2012 08:12:53 +0000 (09:12 +0100)
committerMark Brown <broonie@opensource.wolfsonmicro.com>
Mon, 19 Mar 2012 12:47:25 +0000 (12:47 +0000)
commit273b72c8ce6b28df6b49423d775c3e59072c73c5
treeb96da830969b5c433ad672cb5f87a350fb9ff447
parent70ac07bb633dee75ac554195b9a4d69adfa7803c
ASoC: pxa-ssp: atomically set stream active masks

PXA's SSP engine fails to take its current channel phase into account
when enabling a stream while the engine is already running. This
results in randomly swapped left/right channels on either the record
or the playback side, depending on which one was enabled first.

The following patch fixes this by factoring out the bit field
modifications in question to a separate function that pauses the
engine temporarily, modifies the bits and kicks it off again
afterwards. Appearantly, a transition of SSCR0_SSE syncs both
directions properly.

The patch has been rolled out to quite a number of devices over the
last weeks and seems to fix the issue reliably.

Signed-off-by: Daniel Mack <zonque@gmail.com>
Reported-and-tested-by: Sven Neumann <s.neumann@raumfeld.com>
Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Cc: stable@vger.kernel.org
sound/soc/pxa/pxa-ssp.c