diff options
author | Mark Brown <broonie@kernel.org> | 2024-06-12 19:26:15 +0200 |
---|---|---|
committer | Mark Brown <broonie@kernel.org> | 2024-06-12 19:26:15 +0200 |
commit | 37a2c94c68ce543bc7e2105d5ab178b03bafc797 (patch) | |
tree | d143ccae41078b05079efdb52f1d90088aad4e51 /sound/soc/ti | |
parent | ASoC: ti: omap-hdmi: Fix too long driver name (diff) | |
parent | ASoC: ti: davinci-mcasp: Set min period size using FIFO config (diff) | |
download | linux-37a2c94c68ce543bc7e2105d5ab178b03bafc797.tar.xz linux-37a2c94c68ce543bc7e2105d5ab178b03bafc797.zip |
Fixes for McASP and dmaengine_pcm
Merge series from Jai Luthra <j-luthra@ti.com>:
This series fixes two patches:
1. Fix the dmaengine API usage by calling dmaengine_synchronize() after
dmaengine_terminate_async() when xrun events occur in application
2. Use the McASP AFIFO property from DT to refine the period size,
instead of hardcoding minimum to 64 samples
Diffstat (limited to 'sound/soc/ti')
-rw-r--r-- | sound/soc/ti/davinci-mcasp.c | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/sound/soc/ti/davinci-mcasp.c b/sound/soc/ti/davinci-mcasp.c index 1e760c315521..2b1ed91a736c 100644 --- a/sound/soc/ti/davinci-mcasp.c +++ b/sound/soc/ti/davinci-mcasp.c @@ -1472,10 +1472,11 @@ static int davinci_mcasp_hw_rule_min_periodsize( { struct snd_interval *period_size = hw_param_interval(params, SNDRV_PCM_HW_PARAM_PERIOD_SIZE); + u8 numevt = *((u8 *)rule->private); struct snd_interval frames; snd_interval_any(&frames); - frames.min = 64; + frames.min = numevt; frames.integer = 1; return snd_interval_refine(period_size, &frames); @@ -1490,6 +1491,7 @@ static int davinci_mcasp_startup(struct snd_pcm_substream *substream, u32 max_channels = 0; int i, dir, ret; int tdm_slots = mcasp->tdm_slots; + u8 *numevt; /* Do not allow more then one stream per direction */ if (mcasp->substreams[substream->stream]) @@ -1589,9 +1591,12 @@ static int davinci_mcasp_startup(struct snd_pcm_substream *substream, return ret; } + numevt = (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) ? + &mcasp->txnumevt : + &mcasp->rxnumevt; snd_pcm_hw_rule_add(substream->runtime, 0, SNDRV_PCM_HW_PARAM_PERIOD_SIZE, - davinci_mcasp_hw_rule_min_periodsize, NULL, + davinci_mcasp_hw_rule_min_periodsize, numevt, SNDRV_PCM_HW_PARAM_PERIOD_SIZE, -1); return 0; |