]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
ASoC: qcom: sdm845: make use of common helpers
authorSrinivas Kandagatla <srinivas.kandagatla@oss.qualcomm.com>
Wed, 22 Oct 2025 14:33:48 +0000 (15:33 +0100)
committerMark Brown <broonie@kernel.org>
Wed, 29 Oct 2025 14:54:39 +0000 (14:54 +0000)
sdm845 machine driver can make use of common sdw functions to do most of
the soundwire related operations. Remove such redundant code from sdm845
driver.

Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@oss.qualcomm.com>
Tested-by: Steev Klimaszewski <threeway@gmail.com> # Thinkpad X13s
Link: https://patch.msgid.link/20251022143349.1081513-4-srinivas.kandagatla@oss.qualcomm.com
Signed-off-by: Mark Brown <broonie@kernel.org>
sound/soc/qcom/sdm845.c

index a233b80049ee742fbb0287aecbd514228981b295..e18a8e44f2db5846009f44239cc62435f880f7b2 100644 (file)
@@ -40,7 +40,6 @@ struct sdm845_snd_data {
        uint32_t pri_mi2s_clk_count;
        uint32_t sec_mi2s_clk_count;
        uint32_t quat_tdm_clk_count;
-       struct sdw_stream_runtime *sruntime[AFE_PORT_MAX];
 };
 
 static struct snd_soc_jack_pin sdm845_jack_pins[] = {
@@ -62,18 +61,11 @@ static int sdm845_slim_snd_hw_params(struct snd_pcm_substream *substream,
        struct snd_soc_pcm_runtime *rtd = snd_soc_substream_to_rtd(substream);
        struct snd_soc_dai *cpu_dai = snd_soc_rtd_to_cpu(rtd, 0);
        struct snd_soc_dai *codec_dai;
-       struct sdm845_snd_data *pdata = snd_soc_card_get_drvdata(rtd->card);
        u32 rx_ch[SLIM_MAX_RX_PORTS], tx_ch[SLIM_MAX_TX_PORTS];
-       struct sdw_stream_runtime *sruntime;
        u32 rx_ch_cnt = 0, tx_ch_cnt = 0;
        int ret = 0, i;
 
        for_each_rtd_codec_dais(rtd, i, codec_dai) {
-               sruntime = snd_soc_dai_get_stream(codec_dai,
-                                                 substream->stream);
-               if (sruntime != ERR_PTR(-ENOTSUPP))
-                       pdata->sruntime[cpu_dai->id] = sruntime;
-
                ret = snd_soc_dai_get_channel_map(codec_dai,
                                &tx_ch_cnt, tx_ch, &rx_ch_cnt, rx_ch);
 
@@ -430,7 +422,6 @@ static void  sdm845_snd_shutdown(struct snd_pcm_substream *substream)
        struct snd_soc_card *card = rtd->card;
        struct sdm845_snd_data *data = snd_soc_card_get_drvdata(card);
        struct snd_soc_dai *cpu_dai = snd_soc_rtd_to_cpu(rtd, 0);
-       struct sdw_stream_runtime *sruntime = data->sruntime[cpu_dai->id];
 
        switch (cpu_dai->id) {
        case PRIMARY_MI2S_RX:
@@ -471,8 +462,7 @@ static void  sdm845_snd_shutdown(struct snd_pcm_substream *substream)
                break;
        }
 
-       data->sruntime[cpu_dai->id] = NULL;
-       sdw_release_stream(sruntime);
+       qcom_snd_sdw_shutdown(substream);
 }
 
 static int sdm845_snd_prepare(struct snd_pcm_substream *substream)
@@ -480,38 +470,8 @@ static int sdm845_snd_prepare(struct snd_pcm_substream *substream)
        struct snd_soc_pcm_runtime *rtd = snd_soc_substream_to_rtd(substream);
        struct sdm845_snd_data *data = snd_soc_card_get_drvdata(rtd->card);
        struct snd_soc_dai *cpu_dai = snd_soc_rtd_to_cpu(rtd, 0);
-       struct sdw_stream_runtime *sruntime = data->sruntime[cpu_dai->id];
-       int ret;
-
-       if (!sruntime)
-               return 0;
-
-       if (data->stream_prepared[cpu_dai->id]) {
-               sdw_disable_stream(sruntime);
-               sdw_deprepare_stream(sruntime);
-               data->stream_prepared[cpu_dai->id] = false;
-       }
 
-       ret = sdw_prepare_stream(sruntime);
-       if (ret)
-               return ret;
-
-       /**
-        * NOTE: there is a strict hw requirement about the ordering of port
-        * enables and actual WSA881x PA enable. PA enable should only happen
-        * after soundwire ports are enabled if not DC on the line is
-        * accumulated resulting in Click/Pop Noise
-        * PA enable/mute are handled as part of codec DAPM and digital mute.
-        */
-
-       ret = sdw_enable_stream(sruntime);
-       if (ret) {
-               sdw_deprepare_stream(sruntime);
-               return ret;
-       }
-       data->stream_prepared[cpu_dai->id] = true;
-
-       return ret;
+       return qcom_snd_sdw_prepare(substream, &data->stream_prepared[cpu_dai->id]);
 }
 
 static int sdm845_snd_hw_free(struct snd_pcm_substream *substream)
@@ -519,15 +479,8 @@ static int sdm845_snd_hw_free(struct snd_pcm_substream *substream)
        struct snd_soc_pcm_runtime *rtd = snd_soc_substream_to_rtd(substream);
        struct sdm845_snd_data *data = snd_soc_card_get_drvdata(rtd->card);
        struct snd_soc_dai *cpu_dai = snd_soc_rtd_to_cpu(rtd, 0);
-       struct sdw_stream_runtime *sruntime = data->sruntime[cpu_dai->id];
-
-       if (sruntime && data->stream_prepared[cpu_dai->id]) {
-               sdw_disable_stream(sruntime);
-               sdw_deprepare_stream(sruntime);
-               data->stream_prepared[cpu_dai->id] = false;
-       }
 
-       return 0;
+       return qcom_snd_sdw_hw_free(substream, &data->stream_prepared[cpu_dai->id]);
 }
 
 static const struct snd_soc_ops sdm845_be_ops = {