On Thu, Mar 27, 2014 at 07:06:59PM +0800, Nicolin Chen wrote:
It's quite cricial to clear error flags because SAI might hang if getting FIFO underrun during playback (I haven't confirmed the same issue on Rx overflow though).
So this patch enables those irq and adds isr() to clear the flags so as to keep playback entirely safe.
So, I've applied this since we're (hopefully!) very near the merge window opening and it seems like it should be an improvement overall. However a few things below:
- /* Only handle those what we enabled */
- mask = (FSL_SAI_FLAGS >> FSL_SAI_CSR_xIE_SHIFT) << FSL_SAI_CSR_xF_SHIFT;
The shifting here could use a comment.
- regmap_update_bits(sai->regmap, FSL_SAI_RCSR,
FSL_SAI_CSR_xF_W_MASK | FSL_SAI_CSR_FR, xcsr);
Using update_bits() is going to do an extra read, better to do this as:
if (xcsr) regmap_write(sai->regmap, FSL_SAI_RCSR, xcsr);
otherwise we might be ignoring any of the bits that are actually clear on read (it seems like there are some?).
- return IRQ_HANDLED;
I'd expect to see IRQ_NONE if we didn't actually see an interrupt source.