From: Grazvydas Ignotas <notasas@gmail.com>
To: alsa-devel@alsa-project.org
Cc: Peter Ujfalusi <peter.ujfalusi@ti.com>,
Mark Brown <broonie@opensource.wolfsonmicro.com>,
Liam Girdwood <lrg@ti.com>,
Jarkko Nikula <jarkko.nikula@bitmer.com>,
Grazvydas Ignotas <notasas@gmail.com>
Subject: [PATCH 3/3] ASoC: omap-mcbsp: make minimum period size larger than FIFO
Date: Fri, 9 Mar 2012 01:19:17 +0200 [thread overview]
Message-ID: <1331248757-3408-4-git-send-email-notasas@gmail.com> (raw)
In-Reply-To: <1331248757-3408-1-git-send-email-notasas@gmail.com>
With a program operating in minimum sized periods, first write
will cause a transfer that will fill mcbsp FIFO quickly, and there
will be no more data to DMA before program manages to do another
write. As the core considers this as underflow condition, we may
get many underflows at the start.
Increase minimum period size by half to deal with this problem.
Signed-off-by: Grazvydas Ignotas <notasas@gmail.com>
---
sound/soc/omap/omap-mcbsp.c | 11 +++++++++++
1 files changed, 11 insertions(+), 0 deletions(-)
diff --git a/sound/soc/omap/omap-mcbsp.c b/sound/soc/omap/omap-mcbsp.c
index b9d1272..b373a0b 100644
--- a/sound/soc/omap/omap-mcbsp.c
+++ b/sound/soc/omap/omap-mcbsp.c
@@ -108,6 +108,17 @@ static int omap_mcbsp_hwrule_min_period_size(struct snd_pcm_hw_params *params,
size = mcbsp->pdata->buffer_size;
frames.min = size / channels->min;
+
+ /*
+ * If period is not larger than FIFO, it may be transfered faster than
+ * program operating in period sizes is able to send 2 periods, so
+ * underrun condition can be triggered at the beginning of stream.
+ * This is because underrun is triggered as soon as DMA has no more
+ * data to send, and we get this from the start if period is too small.
+ * To deal with this, set period larger than FIFO size.
+ */
+ frames.min = frames.min + frames.min / 2;
+
frames.integer = 1;
return snd_interval_refine(period_size, &frames);
}
--
1.7.0.4
next prev parent reply other threads:[~2012-03-08 23:19 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-03-08 23:19 [PATCH 0/3] ASoC: omap-mcbsp: fixes for some underflow problems Grazvydas Ignotas
2012-03-08 23:19 ` [PATCH 1/3] ASoC: omap-mcbsp: fix snd_pcm_hw_rule_add arguments Grazvydas Ignotas
2012-03-09 10:08 ` Peter Ujfalusi
2012-03-09 10:45 ` Grazvydas Ignotas
2012-03-09 12:01 ` Peter Ujfalusi
2012-03-09 12:02 ` Peter Ujfalusi
2012-03-09 12:19 ` Mark Brown
2012-03-08 23:19 ` [PATCH 2/3] ASoC: omap-mcbsp: place size constrain on period, not buffer Grazvydas Ignotas
2012-03-09 12:19 ` Mark Brown
2012-03-08 23:19 ` Grazvydas Ignotas [this message]
2012-03-09 12:20 ` [PATCH 3/3] ASoC: omap-mcbsp: make minimum period size larger than FIFO Mark Brown
2012-03-09 12:42 ` Peter Ujfalusi
2012-03-09 13:25 ` Grazvydas Ignotas
2012-03-09 13:42 ` Peter Ujfalusi
2012-03-09 21:07 ` Grazvydas Ignotas
2012-03-11 17:39 ` Jarkko Nikula
2012-03-12 12:05 ` Grazvydas Ignotas
2012-03-12 12:15 ` Mark Brown
2012-03-12 12:41 ` Peter Ujfalusi
2012-03-12 14:06 ` Grazvydas Ignotas
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1331248757-3408-4-git-send-email-notasas@gmail.com \
--to=notasas@gmail.com \
--cc=alsa-devel@alsa-project.org \
--cc=broonie@opensource.wolfsonmicro.com \
--cc=jarkko.nikula@bitmer.com \
--cc=lrg@ti.com \
--cc=peter.ujfalusi@ti.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.