Use GPT dma event to instead of esai dma event can't totally
resolve/workaround the hardware issue, There is two GPT, one
GPT is to get the failing edge of dma event, then to trigger
EDMA copy data, another one is to get the raising edge, then to
clear the interrupt of both GPT, sometimes, the clear operation
may clear the failing edge event wrongly in race condition.
then the EDMA will stop.
In test result, the high sample rate and multi-channel is easy
to trigger this issue. so add constraint for them to make the
workaround stable
Signed-off-by: Shengjiu Wang <shengjiu.wang@freescale.com>
esai_priv->dma_params_rx.maxburst);
}
+ if (esai_priv->soc->dma_workaround) {
+ snd_pcm_hw_constraint_minmax(substream->runtime,
+ SNDRV_PCM_HW_PARAM_CHANNELS, 1, 2);
+ snd_pcm_hw_constraint_minmax(substream->runtime,
+ SNDRV_PCM_HW_PARAM_RATE, 48000, 48000);
+ }
+
return 0;
err_fsysclk: