Commit 5f55c969 authored by Srinivas Kandagatla's avatar Srinivas Kandagatla Committed by Mark Brown

ASoC: qcom: sdm845: only setup slim ports once

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: default avatarSrinivas Kandagatla <srinivas.kandagatla@linaro.org>
Link: https://lore.kernel.org/r/20211116115021.14213-1-srinivas.kandagatla@linaro.orgSigned-off-by: default avatarMark Brown <broonie@kernel.org>
parent 5ecc573d
...@@ -33,6 +33,7 @@ ...@@ -33,6 +33,7 @@
struct sdm845_snd_data { struct sdm845_snd_data {
struct snd_soc_jack jack; struct snd_soc_jack jack;
bool jack_setup; bool jack_setup;
bool slim_port_setup;
bool stream_prepared[AFE_PORT_MAX]; bool stream_prepared[AFE_PORT_MAX];
struct snd_soc_card *card; struct snd_soc_card *card;
uint32_t pri_mi2s_clk_count; uint32_t pri_mi2s_clk_count;
...@@ -224,6 +225,7 @@ static int sdm845_dai_init(struct snd_soc_pcm_runtime *rtd) ...@@ -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 *codec_dai = asoc_rtd_to_codec(rtd, 0);
struct snd_soc_dai *cpu_dai = asoc_rtd_to_cpu(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 sdm845_snd_data *pdata = snd_soc_card_get_drvdata(card);
struct snd_soc_dai_link *link = rtd->dai_link;
struct snd_jack *jack; struct snd_jack *jack;
/* /*
* Codec SLIMBUS configuration * Codec SLIMBUS configuration
...@@ -276,6 +278,10 @@ static int sdm845_dai_init(struct snd_soc_pcm_runtime *rtd) ...@@ -276,6 +278,10 @@ static int sdm845_dai_init(struct snd_soc_pcm_runtime *rtd)
} }
break; break;
case SLIMBUS_0_RX...SLIMBUS_6_TX: 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) { for_each_rtd_codec_dais(rtd, i, codec_dai) {
rval = snd_soc_dai_set_channel_map(codec_dai, rval = snd_soc_dai_set_channel_map(codec_dai,
ARRAY_SIZE(tx_ch), ARRAY_SIZE(tx_ch),
...@@ -295,8 +301,10 @@ static int sdm845_dai_init(struct snd_soc_pcm_runtime *rtd) ...@@ -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); dev_warn(card->dev, "Failed to set jack: %d\n", rval);
return rval; return rval;
} }
} }
pdata->slim_port_setup = true;
break; break;
default: default:
break; break;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment