OSDN Git Service

ASoC: wm_adsp: Improve handling of raw byte streams
authorRichard Fitzgerald <rf@opensource.cirrus.com>
Wed, 16 Dec 2020 11:25:12 +0000 (11:25 +0000)
committerMark Brown <broonie@kernel.org>
Mon, 28 Dec 2020 12:24:43 +0000 (12:24 +0000)
commit7726e49837af634accaec317c8d246d1d90d8fc5
tree45af6845d85f32b8af261141a83e6b8ba491a0fc
parenta9830fc388817c90282925694474fae005fec990
ASoC: wm_adsp: Improve handling of raw byte streams

As the register map is 16-bit or 32-bit big-endian, the 24-bit
DSP words appear padded and with the bytes swapped. When reading a
raw stream of bytes, the pad bytes must be removed and the data bytes
swapped back to their original order.

The previous implementation of this assumed that the be32_to_cpu() in
wm_adsp_read_data_block() would swap back to little-endian. But this is
obviously only true on a little-endian CPU. It also made two walks
through the data, once to endian-swap and again to strip the pad bytes.

This patch re-works the code so that the endian-swap and unpad are done
together in a single walk, and it is not dependent on the endianness of
the CPU. The data_word_size argument to wm_adsp_remove_padding() has been
dropped because currently this is always 3.

Signed-off-by: Richard Fitzgerald <rf@opensource.cirrus.com>
Link: https://lore.kernel.org/r/20201216112512.26503-1-rf@opensource.cirrus.com
Signed-off-by: Mark Brown <broonie@kernel.org>
sound/soc/codecs/wm_adsp.c