]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
ASoC: qcom: q6apm-lpass-dais: Implement proper channel mapping
authorKrzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
Mon, 20 May 2024 14:19:57 +0000 (16:19 +0200)
committerMark Brown <broonie@kernel.org>
Mon, 27 May 2024 00:30:59 +0000 (01:30 +0100)
The set_channel_map() implementation in q6apm-lpass-dais driver was
copying older pre-Audioreach code from q6afe-dai driver, but not really
using it.  The code sets active channel mask based on passed channel
mapping, but Audioreach code does not use that mask ever.  Audioreach
module configuration does have on the other hand proper channel mapping
field, which should supersed that active channel mask.

Drop the unused active channel mask and implement proper mapping of
channels in q6apm-lpass-dais driver.

Signed-off-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
Link: https://msgid.link/r/20240520-asoc-x1e80100-4-channel-mapping-v4-2-f657159b4aad@linaro.org
Signed-off-by: Mark Brown <broonie@kernel.org>
sound/soc/qcom/qdsp6/audioreach.h
sound/soc/qcom/qdsp6/q6apm-lpass-dais.c

index 2c82917b71621a9875fbf06c51032462ff74d29c..eb9306280988fefa2e4f5478cfea8dc80a5b9f46 100644 (file)
@@ -755,7 +755,6 @@ struct audioreach_module_config {
 
        u16     data_format;
        u16     num_channels;
-       u16     active_channels_mask;
        u16     dp_idx;
        u32     channel_allocation;
        u32     sd_line_mask;
index 6bfbb52345e1fd8a0f32dfe267f2349363829399..a4ad1d0e6abd74afc90f4cd2ca4cfa51e345b0ef 100644 (file)
@@ -33,7 +33,7 @@ static int q6dma_set_channel_map(struct snd_soc_dai *dai,
 
        struct q6apm_lpass_dai_data *dai_data = dev_get_drvdata(dai->dev);
        struct audioreach_module_config *cfg = &dai_data->module_config[dai->id];
-       int ch_mask;
+       int i;
 
        switch (dai->id) {
        case WSA_CODEC_DMA_TX_0:
@@ -58,7 +58,8 @@ static int q6dma_set_channel_map(struct snd_soc_dai *dai,
                                tx_num);
                        return -EINVAL;
                }
-               ch_mask = *tx_ch_mask;
+               for (i = 0; i < tx_num; i++)
+                       cfg->channel_map[i] = tx_ch_mask[i];
 
                break;
        case WSA_CODEC_DMA_RX_0:
@@ -81,7 +82,8 @@ static int q6dma_set_channel_map(struct snd_soc_dai *dai,
                                rx_num);
                        return -EINVAL;
                }
-               ch_mask = *rx_ch_mask;
+               for (i = 0; i < rx_num; i++)
+                       cfg->channel_map[i] = rx_ch_mask[i];
 
                break;
        default:
@@ -90,8 +92,6 @@ static int q6dma_set_channel_map(struct snd_soc_dai *dai,
                return -EINVAL;
        }
 
-       cfg->active_channels_mask = ch_mask;
-
        return 0;
 }