summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormillerliang <millerliang@google.com>2023-06-26 17:51:29 +0800
committerMiller Liang <millerliang@google.com>2023-09-13 02:55:49 +0000
commit897e404fa79ddeeb5a156f40d3bd689d33de5db7 (patch)
treed0909f1e423177bcf935ed650d6563d92b2db9b2
parent88d2aee3ebaee9f71daa00165df87ab165630e9d (diff)
downloadaoc-897e404fa79ddeeb5a156f40d3bd689d33de5db7.tar.gz
alsa: support dynamic stream type for pcm playback
Set the stream type for pcm playback to mmaped if runtime->access is SNDRV_PCM_ACCESS_MMAP_INTERLEAVED. Bug: 283402753 Test: Playback and Record Change-Id: Ib62931a42364089b44b32289b661a4798c0e23f4 Signed-off-by: millerliang <millerliang@google.com> (cherry picked from commit d86f91a0e010d078d499184135fc460d3ecb30ab)
-rw-r--r--alsa/aoc_alsa_pcm.c16
1 files changed, 9 insertions, 7 deletions
diff --git a/alsa/aoc_alsa_pcm.c b/alsa/aoc_alsa_pcm.c
index 157d265..1654ca0 100644
--- a/alsa/aoc_alsa_pcm.c
+++ b/alsa/aoc_alsa_pcm.c
@@ -569,13 +569,15 @@ static int snd_aoc_pcm_prepare(struct snd_soc_component *component,
pr_debug("buffer_size=%d, period_size=%d pos=%d frame_bits=%d\n", alsa_stream->buffer_size,
alsa_stream->period_size, alsa_stream->pos, runtime->frame_bits);
- /* Advance the write ptr in the DRAM ring buffer for mmap-based playback */
- if (alsa_stream->stream_type == MMAPED &&
- alsa_stream->substream->stream == SNDRV_PCM_STREAM_PLAYBACK) {
- avail = aoc_ring_bytes_available_to_write(dev->service, AOC_DOWN);
- if (!aoc_service_advance_write_index(dev->service, AOC_DOWN, avail)) {
- dev_err(&(dev->dev), "ERR: in advancing pcm playback writer ptr\n");
- }
+ if (alsa_stream->substream->stream == SNDRV_PCM_STREAM_PLAYBACK) {
+ if (runtime->access == SNDRV_PCM_ACCESS_MMAP_INTERLEAVED) {
+ alsa_stream->stream_type = MMAPED;
+ /* Advance the write ptr in the DRAM ring buffer for mmap-based playback */
+ avail = aoc_ring_bytes_available_to_write(dev->service, AOC_DOWN);
+ if (!aoc_service_advance_write_index(dev->service, AOC_DOWN, avail))
+ dev_err(&(dev->dev), "ERR: in advancing pcm playback writer ptr\n");
+ } else
+ alsa_stream->stream_type = NORMAL;
}
out: