tristate "SoC Machine driver for SC7280 boards"
        depends on I2C && SOUNDWIRE
        select SND_SOC_QCOM_COMMON
+       select SND_SOC_QCOM_SDW
        select SND_SOC_LPASS_SC7280
        select SND_SOC_MAX98357A
        select SND_SOC_WCD938X_SDW
 
 #include "common.h"
 #include "lpass.h"
 #include "qdsp6/q6afe.h"
+#include "sdw.h"
 
 #define DEFAULT_MCLK_RATE              19200000
 #define RT5682_PLL_FREQ (48000 * 512)
        struct snd_soc_card *card = rtd->card;
        struct sc7280_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 MI2S_PRIMARY:
        default:
                break;
        }
+
+       data->sruntime[cpu_dai->id] = NULL;
+       sdw_release_stream(sruntime);
 }
 
 static int sc7280_snd_startup(struct snd_pcm_substream *substream)
        switch (cpu_dai->id) {
        case MI2S_PRIMARY:
                ret = sc7280_rt5682_init(rtd);
+               if (ret)
+                       return ret;
                break;
        case SECONDARY_MI2S_RX:
                codec_dai_fmt |= SND_SOC_DAIFMT_NB_NF | SND_SOC_DAIFMT_I2S;
        default:
                break;
        }
-       return ret;
+
+       return qcom_snd_sdw_startup(substream);
 }
 
 static const struct snd_soc_ops sc7280_ops = {