• Charles Keepax's avatar
    ASoC: compress: Correct handling of copy callback · 290df4d3
    Charles Keepax authored
    The soc_compr_copy callback is currently broken. Since the
    changes to move the compr_ops over to the component the return
    value is not correctly propagated, always returning zero on
    success rather than the number of bytes copied. This causes
    user-space to stall continuously reading as it does not believe
    it has received any data.
    
    Furthermore, the changes to move the compr_ops over to the
    component iterate through the list of components and will call
    the copy callback for any that have compressed ops. There isn't
    currently any consensus on the mechanism to combine the results
    of multiple copy callbacks.
    
    To fix this issue for now halt searching the component list when
    we locate a copy callback and return the result of that single
    callback. Additional work should probably be done to look at the
    other ops, tidy things up, and work out if we want to support
    multiple components on a single compressed, but this is the only
    fix required to get things working again.
    
    Fixes: 9e7e3738 ("ASoC: snd_soc_component_driver has snd_compr_ops")
    Signed-off-by: default avatarCharles Keepax <ckeepax@opensource.cirrus.com>
    Signed-off-by: default avatarMark Brown <broonie@kernel.org>
    Cc: stable@vger.kernel.org
    290df4d3
soc-compress.c 32.5 KB