• Nicolin Chen's avatar
    ASoC: soc-pcm: add symmetry for channels and sample bits · 3635bf09
    Nicolin Chen authored
    Some SoCs can only work in mono or stereo mode at one time. So if
    we let them capture a mono stream while playing a stereo stream,
    there might be a problem occur to one of these two streams: double
    paced or slowed down.
    
    In soc-pcm.c, we have soc_pcm_apply_symmetry() to apply the rate
    symmetry. But we don't have one for channels.
    
    Likewise, we can treat symmetric_rate as a solution for those SoCs
    or CODECs which can not handle asymmetrical LRCLK. But it's also
    impossible for them to handle asymmetrical BCLK. And accodring to
    BCLK = LRCLK * channel number * slot size(fixed or sample bits),
    sample bits might also be a problem if they are not using a fixed
    slot size.
    
    Thus, this patch applys symmetry for channels and sample bits.
    
    Meanwhile, there might be a race between two substreams if starting
    simultaneously. Previously, we only added warning to compalin but
    still using conservative way to let it carry on. However, this patch
    rejects the second stream with any unmatched parameter to make sure
    the first existing stream won't be broken.
    Signed-off-by: default avatarNicolin Chen <b42378@freescale.com>
    Signed-off-by: default avatarMark Brown <broonie@linaro.org>
    3635bf09
soc-pcm.c 68.3 KB