]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
ALSA: usb-audio: map UAC3 front wide channels in convert_chmap_v3()
authorCássio Gabriel <cassiogabrielcontato@gmail.com>
Wed, 11 Mar 2026 20:00:10 +0000 (17:00 -0300)
committerTakashi Iwai <tiwai@suse.de>
Thu, 12 Mar 2026 06:36:18 +0000 (07:36 +0100)
convert_chmap_v3() translates UAC3 channel relationship values into
ALSA channel-map positions.

UAC3_CH_FRONT_WIDE_LEFT and UAC3_CH_FRONT_WIDE_RIGHT currently fall
back to SNDRV_CHMAP_UNKNOWN, although ALSA already provides matching
channel-map positions via SNDRV_CHMAP_FLW and SNDRV_CHMAP_FRW.

Map these two UAC3 positions to their ALSA equivalents and update the
comment to clarify that unsupported UAC3 channel relationships remain
reported as SNDRV_CHMAP_UNKNOWN.

No functional change for other channel relationships.

Signed-off-by: Cássio Gabriel <cassiogabrielcontato@gmail.com>
Link: https://patch.msgid.link/20260311200010.103710-1-cassiogabrielcontato@gmail.com
Signed-off-by: Takashi Iwai <tiwai@suse.de>
sound/usb/stream.c

index d38c39e28f38fad37f031bbc1ed713c385367b40..2532bf97e05e001ddb6b879eb98082617982bb18 100644 (file)
@@ -366,6 +366,8 @@ snd_pcm_chmap_elem *convert_chmap_v3(struct uac3_cluster_header_descriptor
                        /*
                         * TODO: this conversion is not complete, update it
                         * after adding UAC3 values to asound.h
+                        * NOTE: not all UAC3 channel relationship have a
+                        * direct ALSA chmap equivalent.
                         */
                        switch (is->bChRelationship) {
                        case UAC3_CH_MONO:
@@ -390,6 +392,12 @@ snd_pcm_chmap_elem *convert_chmap_v3(struct uac3_cluster_header_descriptor
                        case UAC3_CH_FRONT_RIGHT_OF_CENTER:
                                map = SNDRV_CHMAP_FRC;
                                break;
+                       case UAC3_CH_FRONT_WIDE_LEFT:
+                               map = SNDRV_CHMAP_FLW;
+                               break;
+                       case UAC3_CH_FRONT_WIDE_RIGHT:
+                               map = SNDRV_CHMAP_FRW;
+                               break;
                        case UAC3_CH_SIDE_LEFT:
                                map = SNDRV_CHMAP_SL;
                                break;