]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
ALSA: virtio: Add missing 384 kHz PCM rate mapping
authorCássio Gabriel <cassiogabrielcontato@gmail.com>
Fri, 15 May 2026 13:32:25 +0000 (10:32 -0300)
committerTakashi Iwai <tiwai@suse.de>
Sat, 16 May 2026 13:42:30 +0000 (15:42 +0200)
The VirtIO sound UAPI defines VIRTIO_SND_PCM_RATE_384000, and ALSA
has SNDRV_PCM_RATE_384000. However, virtio-snd's rate conversion
tables stop at 192 kHz.

A device advertising only 384 kHz is rejected as having no supported
PCM frame rates. A device advertising 384 kHz together with lower rates
does not expose 384 kHz through the ALSA hardware constraints. The
selected ALSA rate also needs a reverse mapping for SET_PARAMS.

Add the missing 384 kHz entries to both conversion tables.

Fixes: 29b96bf50ba9 ("ALSA: virtio: build PCM devices and substream hardware descriptors")
Fixes: da76e9f3e43a ("ALSA: virtio: PCM substream operators")
Cc: stable@vger.kernel.org
Signed-off-by: Cássio Gabriel <cassiogabrielcontato@gmail.com>
Link: https://patch.msgid.link/20260515-alsa-virtio-384k-rate-v1-1-35ecb5df835c@gmail.com
Signed-off-by: Takashi Iwai <tiwai@suse.de>
sound/virtio/virtio_pcm.c
sound/virtio/virtio_pcm_ops.c

index eb9cc8131905daaac8ca9f2694fc47d975184698..be3893de40a5594bdf7bb40b3ff63771719404e1 100644 (file)
@@ -77,7 +77,8 @@ static const struct virtsnd_v2a_rate g_v2a_rate_map[] = {
        [VIRTIO_SND_PCM_RATE_88200] = { SNDRV_PCM_RATE_88200, 88200 },
        [VIRTIO_SND_PCM_RATE_96000] = { SNDRV_PCM_RATE_96000, 96000 },
        [VIRTIO_SND_PCM_RATE_176400] = { SNDRV_PCM_RATE_176400, 176400 },
-       [VIRTIO_SND_PCM_RATE_192000] = { SNDRV_PCM_RATE_192000, 192000 }
+       [VIRTIO_SND_PCM_RATE_192000] = { SNDRV_PCM_RATE_192000, 192000 },
+       [VIRTIO_SND_PCM_RATE_384000] = { SNDRV_PCM_RATE_384000, 384000 }
 };
 
 /**
index 6297a9c61e70b06a1b9689a79aeceddd2df5a917..1105e7ff3523a085c845109755cbc62f12fb8a31 100644 (file)
@@ -90,7 +90,8 @@ static const struct virtsnd_a2v_rate g_a2v_rate_map[] = {
        { 88200, VIRTIO_SND_PCM_RATE_88200 },
        { 96000, VIRTIO_SND_PCM_RATE_96000 },
        { 176400, VIRTIO_SND_PCM_RATE_176400 },
-       { 192000, VIRTIO_SND_PCM_RATE_192000 }
+       { 192000, VIRTIO_SND_PCM_RATE_192000 },
+       { 384000, VIRTIO_SND_PCM_RATE_384000 }
 };
 
 static int virtsnd_pcm_sync_stop(struct snd_pcm_substream *substream);