[PATCH] alsa: remove existing hardware config before setting a new one

From: Michael Forney <mforney_at_mforney.org>
Date: Fri, 26 Feb 2021 15:20:19 -0800
In Linux 5.11, a behavior change for USB audio devices was introduced[0]
that prevents changing parameters such as sample rate or period
size once they are initially set without a snd_pcm_hw_free in
between. This causes sndio to get forced to 48000 Hz and and a
period size of 4800, since those are the parameters set during
sio_open.

To fix this, call snd_pcm_hw_free at the start of sio_alsa_setpar_hw
to remove any previous configuration before setting a new one.

[0] https://bugzilla.kernel.org/show_bug.cgi?id=211941
---
 libsndio/sio_alsa.c | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/libsndio/sio_alsa.c b/libsndio/sio_alsa.c
index c544c4a..7ae69c2 100644
--- a/libsndio/sio_alsa.c
+++ b/libsndio/sio_alsa.c
_at_@ -554,6 +554,11 @@ sio_alsa_setpar_hw(snd_pcm_t *pcm, snd_pcm_hw_params_t *hwp,
 
 	req_rate = *rate;
 
+	err = snd_pcm_hw_free(pcm);
+	if (err < 0) {
+		DALSA("couldn't reset hw configuration", err);
+		return 0;
+	}
 	err = snd_pcm_hw_params_any(pcm, hwp);
 	if (err < 0) {
 		DALSA("couldn't init pars", err);
-- 
2.30.0
Received on Sat Feb 27 2021 - 00:20:19 CET

This archive was generated by hypermail 2.3.0 : Tue Aug 09 2022 - 16:23:51 CEST