• Nicolin Chen's avatar
    ASoC: fsl_sai: Improve enable flow in fsl_sai_trigger() · a3fdc674
    Nicolin Chen authored
    The previous enable flow:
    1, Enable TE&RE (SAI starts to consume tx FIFO and feed rx FIFO)
    2, Mask IRQ of Tx/Rx to enable its interrupt.
    3, Enable DMA request of Tx/Rx.
    
    As this flow would enable DMA request later than TERE, the Tx FIFO
    would be easily emptied into underrun while Rx FIFO would be easily
    stuffed into overrun due to the delayed DMA transfering.
    
    This issue happened merely occational before the patch 'ASoC: fsl_sai:
    Reset FIFOs after disabling TE/RE' because there were useless data
    remaining in the FIFO for the gap. However, it manifested after FIFO
    reset's implemented.
    
    After this patch, the new flow:
    1, Enable DMA request of Tx/Rx.
    2, Enable TE&RE (SAI starts to consume tx FIFO and feed rx FIFO)
    3, Mask IRQ of Tx/Rx to enable its interrupt.
    Signed-off-by: default avatarNicolin Chen <nicoleotsuka@gmail.com>
    Signed-off-by: default avatarMark Brown <broonie@linaro.org>
    a3fdc674
fsl_sai.c 16.4 KB