ASoC: dmaengine_pcm: Add support for packed transfers
authorMatthias Reichl <hias@horus.com>
Wed, 27 Apr 2016 13:26:51 +0000 (15:26 +0200)
committerMark Brown <broonie@kernel.org>
Wed, 27 Apr 2016 16:34:11 +0000 (17:34 +0100)
commit73fe01cfb3babff01748a9fbc95cc3ea2079cc7f
treef3f6b72b1fa9e2d0374f9417c9e97f1779d5af4a
parentf55532a0c0b8bb6148f4e07853b876ef73bc69ca
ASoC: dmaengine_pcm: Add support for packed transfers

dmaengine_pcm currently only supports setups where FIFO reads/writes
correspond to exactly one sample, eg 16-bit sample data is transferred
via 16-bit FIFO accesses, 32-bit data via 32-bit accesses.

This patch adds support for setups with fixed width FIFOs where
multiple samples are packed into a larger word.

For example setups with a 32-bit wide FIFO register that expect
16-bit sample transfers to be done with the left+right sample data
packed into a 32-bit word.

Support for packed transfers is controlled via the
SND_DMAENGINE_PCM_DAI_FLAG_PACK flag in snd_dmaengine_dai_dma_data.flags

If this flag is set dmaengine_pcm doesn't put any restriction on the
supported formats and sets the DMA transfer width to undefined.

This means control over the constraints is now transferred to the DAI
driver and it's responsible to provide proper configuration and
check for possible corner cases that aren't handled by the ALSA core.

Signed-off-by: Matthias Reichl <hias@horus.com>
Acked-by: Lars-Peter Clausen <lars@metafoo.de>
Tested-by: Martin Sperl <kernel@martin.sperl.org>
Signed-off-by: Mark Brown <broonie@kernel.org>
include/sound/dmaengine_pcm.h
sound/core/pcm_dmaengine.c
sound/soc/soc-generic-dmaengine-pcm.c