OSDN Git Service

ASoC: qcom: sdm845: only setup slim ports once
authorSrinivas Kandagatla <srinivas.kandagatla@linaro.org>
Tue, 16 Nov 2021 11:50:21 +0000 (11:50 +0000)
committerMark Brown <broonie@kernel.org>
Tue, 16 Nov 2021 14:29:58 +0000 (14:29 +0000)
Currently same slim channel map setup for every dai link, which is redundant.
Fix this by adding a flag and conditionally setting these channel maps.

Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
Link: https://lore.kernel.org/r/20211116115021.14213-1-srinivas.kandagatla@linaro.org
Signed-off-by: Mark Brown <broonie@kernel.org>
sound/soc/qcom/sdm845.c

index 0adfc57..10d724b 100644 (file)
@@ -33,6 +33,7 @@
 struct sdm845_snd_data {
        struct snd_soc_jack jack;
        bool jack_setup;
+       bool slim_port_setup;
        bool stream_prepared[AFE_PORT_MAX];
        struct snd_soc_card *card;
        uint32_t pri_mi2s_clk_count;
@@ -224,6 +225,7 @@ static int sdm845_dai_init(struct snd_soc_pcm_runtime *rtd)
        struct snd_soc_dai *codec_dai = asoc_rtd_to_codec(rtd, 0);
        struct snd_soc_dai *cpu_dai = asoc_rtd_to_cpu(rtd, 0);
        struct sdm845_snd_data *pdata = snd_soc_card_get_drvdata(card);
+       struct snd_soc_dai_link *link = rtd->dai_link;
        struct snd_jack *jack;
        /*
         * Codec SLIMBUS configuration
@@ -276,6 +278,10 @@ static int sdm845_dai_init(struct snd_soc_pcm_runtime *rtd)
                }
                break;
        case SLIMBUS_0_RX...SLIMBUS_6_TX:
+               /* setting up wcd multiple times for slim port is redundant */
+               if (pdata->slim_port_setup || !link->no_pcm)
+                       return 0;
+
                for_each_rtd_codec_dais(rtd, i, codec_dai) {
                        rval = snd_soc_dai_set_channel_map(codec_dai,
                                                          ARRAY_SIZE(tx_ch),
@@ -295,8 +301,10 @@ static int sdm845_dai_init(struct snd_soc_pcm_runtime *rtd)
                                dev_warn(card->dev, "Failed to set jack: %d\n", rval);
                                return rval;
                        }
-
                }
+
+               pdata->slim_port_setup = true;
+
                break;
        default:
                break;