diff options
| author | Vladyslav Tymoshchuk <tvlad744@gmail.com> | 2026-10-14 19:27:01 +0300 |
|---|---|---|
| committer | Mark Brown <broonie@kernel.org> | 2026-10-15 16:53:45 +0100 |
| commit | 0337b8129cf676b8eb767b2a1f312955760a5460 (patch) | |
| tree | caecd9f97f3fc6d61c134fec689232d297e5e3ce /scripts/basic/split-include.c | |
| parent | 0ea3e0b196f9dcc17b40ac881a6efef06459975b (diff) | |
| download | linux-0337b8129cf676b8eb767b2a1f312955760a5460.tar.gz linux-0337b8129cf676b8eb767b2a1f312955760a5460.zip | |
ASoC: qcom: q6apm: reset the hw pointer with the fragment queue
On every prepare in queue mode, q6apm_dai_prepare() frees and allocates
the fragments again, and q6apm_alloc_fragments() resets dsp_buf, so the
first buffer queued after it is the first one of the ring. The hw
pointer that q6apm_dai_pointer() reports is left as it was.
q6apm-dai used to keep its own position and cleared it in prepare.
Since commit a93dad6f4e6a ("ASoC: q6apm-dai: make use of
q6apm_get_hw_pointer") the position comes from the hw pointer, so a
stream that is prepared again, e.g. to recover from an xrun, reports
the position of the previous run until the DSP returns its first
buffer, while ALSA has reset its own pointer to 0.
Reset the hw pointer together with dsp_buf.
Fixes: a93dad6f4e6a ("ASoC: q6apm-dai: make use of q6apm_get_hw_pointer")
Cc: stable@vger.kernel.org
Assisted-by: Claude:claude-opus-5-5
Signed-off-by: Vladyslav Tymoshchuk <tvlad744@gmail.com>
Reviewed-by: Srinivas Kandagatla <srinivas.kandagatla@oss.qualcomm.com>
Tested-by: Srinivas Kandagatla <srinivas.kandagatla@oss.qualcomm.com>
Link: https://patch.msgid.link/20261014162703.10172-3-tvlad744@gmail.com
Signed-off-by: Mark Brown <broonie@kernel.org>
Diffstat (limited to 'scripts/basic/split-include.c')
0 files changed, 0 insertions, 0 deletions
