• Richard Fitzgerald's avatar
    ASoC: wm_adsp: Improve handling of raw byte streams · 7726e498
    Richard Fitzgerald authored
    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: default avatarRichard Fitzgerald <rf@opensource.cirrus.com>
    Link: https://lore.kernel.org/r/20201216112512.26503-1-rf@opensource.cirrus.comSigned-off-by: default avatarMark Brown <broonie@kernel.org>
    7726e498
wm_adsp.c 113 KB