logo

oasis

Own branch of Oasis Linux (upstream: <https://git.sr.ht/~mcf/oasis/>) git clone https://anongit.hacktivis.me/git/oasis.git
commit: b7872f76ea1238add98024442dec443e34aba6fc
parent d95cf9fbc10110f1512b183ee22183a420645a72
Author: Michael Forney <mforney@mforney.org>
Date:   Fri, 26 Feb 2021 20:05:16 -0800

sndio: Fix for Linux 5.11 USB audio

Diffstat:

Apkg/sndio/patch/0003-alsa-remove-existing-hardware-config-before-setting-.patch40++++++++++++++++++++++++++++++++++++++++
Mpkg/sndio/ver2+-
2 files changed, 41 insertions(+), 1 deletion(-)

diff --git a/pkg/sndio/patch/0003-alsa-remove-existing-hardware-config-before-setting-.patch b/pkg/sndio/patch/0003-alsa-remove-existing-hardware-config-before-setting-.patch @@ -0,0 +1,40 @@ +From 82a55b09bd247594a34bbc2fc08a3f129b3b4343 Mon Sep 17 00:00:00 2001 +From: Michael Forney <mforney@mforney.org> +Date: Fri, 26 Feb 2021 15:03:35 -0800 +Subject: [PATCH] alsa: remove existing hardware config before setting a new + one + +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 +@@ -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 + diff --git a/pkg/sndio/ver b/pkg/sndio/ver @@ -1 +1 @@ -1.7.0-18-gae7637d r0 +1.7.0-18-gae7637d r1