> fsl_sai_config_disable() polls TE/RE with an open-coded loop and
> continues silently if the bit does not clear within 1ms. Also, if
> regmap_read() fails, the loop condition evaluates xcsr uninitialized.

>       /* TERE will remain set till the end of current frame */
> -     do {
> -             udelay(10);
> -             regmap_read(sai->regmap, FSL_SAI_xCSR(tx, ofs), &xcsr);
> -     } while (--count && xcsr & FSL_SAI_CSR_TERE);
> +     ret = regmap_read_poll_timeout_atomic(sai->regmap, FSL_SAI_xCSR(tx, 
> ofs),
> +                                           xcsr, !(xcsr & FSL_SAI_CSR_TERE),
> +                                           10, 1000);
> +     if (ret == -ETIMEDOUT)
> +             dev_warn(&sai->pdev->dev, "%cx not disabled at frame end\n",

There wasn't a warning before...

> +     else if (ret)
> +             dev_err(&sai->pdev->dev, "failed to read %cSCR : %d\n",

%cCSR.

-- 
Mark Brown <[email protected]>

Reply via email to