From 9ec39843ed28511e7c5415cf61ab9b67eb8a60f9 Mon Sep 17 00:00:00 2001 From: Chih-Yang Hsia Date: Sat, 11 Dec 2021 17:39:48 +0800 Subject: [PATCH] devices: virtio: snd: Add 4/6 channel playback support ARCVM is using 4 ch with chmap {FL, FR, RL, RR}. Borealis is using 6 ch with chmap {FL, FR, FC, LFE, RL, RR}. From amixer we should see ``` localhost / # amixer -c0 cget numid=1 numid=1,iface=PCM,name='Playback Channel Map' ; type=INTEGER,access=r----R--,values=6,min=0,max=36,step=0 : values=0,0,0,0,0,0 | container | chmap-fixed=FL,FR | chmap-fixed=FL,FR,RL,RR | chmap-fixed=FL,FR,FC,LFE,RL,RR ``` BUG=b:199001477 BUG=b:201382814 TEST=`amixer -c0 cget numid=1` TEST=alsa_conformance_test -Phw:0,0 -c 4 TEST=alsa_conformance_test -Phw:0,0 -c 6 Change-Id: I6b8a6e4a637fe0413ba9b8d91727bf5c4ee8cd26 Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/3331977 Reviewed-by: Woody Chow Reviewed-by: Chirantan Ekbote Tested-by: kokoro Commit-Queue: Chih-Yang Hsia --- devices/src/virtio/snd/cras_backend/mod.rs | 26 ++++++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) diff --git a/devices/src/virtio/snd/cras_backend/mod.rs b/devices/src/virtio/snd/cras_backend/mod.rs index 4d5cc147ee..da1a9516cc 100644 --- a/devices/src/virtio/snd/cras_backend/mod.rs +++ b/devices/src/virtio/snd/cras_backend/mod.rs @@ -462,7 +462,7 @@ pub fn hardcoded_virtio_snd_config(params: &Parameters) -> virtio_snd_config { virtio_snd_config { jacks: 0.into(), streams: (params.num_output_streams + params.num_input_streams).into(), - chmaps: 2.into(), + chmaps: 4.into(), } } @@ -482,7 +482,7 @@ fn hardcoded_snd_data(params: &Parameters) -> SndData { rates: SUPPORTED_FRAME_RATES.into(), direction: VIRTIO_SND_D_OUTPUT, channels_min: 1, - channels_max: 2, + channels_max: 6, padding: [0; 5], }); } @@ -522,6 +522,28 @@ fn hardcoded_snd_data(params: &Parameters) -> SndData { channels: 2, positions, }); + positions[2] = VIRTIO_SND_CHMAP_RL; + positions[3] = VIRTIO_SND_CHMAP_RR; + chmap_info.push(virtio_snd_chmap_info { + hdr: virtio_snd_info { + hda_fn_nid: 0.into(), + }, + direction: VIRTIO_SND_D_OUTPUT, + channels: 4, + positions, + }); + positions[2] = VIRTIO_SND_CHMAP_FC; + positions[3] = VIRTIO_SND_CHMAP_LFE; + positions[4] = VIRTIO_SND_CHMAP_RL; + positions[5] = VIRTIO_SND_CHMAP_RR; + chmap_info.push(virtio_snd_chmap_info { + hdr: virtio_snd_info { + hda_fn_nid: 0.into(), + }, + direction: VIRTIO_SND_D_OUTPUT, + channels: 6, + positions, + }); SndData { jack_info,