{
        struct snd_soc_codec *codec = snd_soc_dapm_to_codec(w->dapm);
        struct da7213_priv *da7213 = snd_soc_codec_get_drvdata(codec);
+       u8 pll_ctrl, pll_status;
+       int i = 0;
+       bool srm_lock = false;
 
        switch (event) {
        case SND_SOC_DAPM_PRE_PMU:
                        snd_soc_update_bits(codec, DA7213_DAI_CLK_MODE,
                                            DA7213_DAI_CLK_EN_MASK,
                                            DA7213_DAI_CLK_EN_MASK);
+
+               /* Slave mode, if SRM not enabled no need for status checks */
+               pll_ctrl = snd_soc_read(codec, DA7213_PLL_CTRL);
+               if (!(pll_ctrl & DA7213_PLL_SRM_EN))
+                       return 0;
+
+               /* Check SRM has locked */
+               do {
+                       pll_status = snd_soc_read(codec, DA7213_PLL_STATUS);
+                       if (pll_status & DA7219_PLL_SRM_LOCK) {
+                               srm_lock = true;
+                       } else {
+                               ++i;
+                               msleep(50);
+                       }
+               } while ((i < DA7213_SRM_CHECK_RETRIES) & (!srm_lock));
+
+               if (!srm_lock)
+                       dev_warn(codec->dev, "SRM failed to lock\n");
+
                return 0;
        case SND_SOC_DAPM_POST_PMD:
                /* Disable DAI clks if in master mode */
 
  * Bit fields
  */
 
+/* DA7213_PLL_STATUS = 0x03 */
+#define DA7219_PLL_SRM_LOCK                                    (0x1 << 1)
+
 /* DA7213_SR = 0x22 */
 #define DA7213_SR_8000                                         (0x1 << 0)
 #define DA7213_SR_11025                                                (0x2 << 0)
 #define DA7213_PLL_INDIV_10_20_MHZ_VAL 4
 #define DA7213_PLL_INDIV_20_40_MHZ_VAL 8
 #define DA7213_PLL_INDIV_40_54_MHZ_VAL 16
+#define DA7213_SRM_CHECK_RETRIES       8
 
 enum da7213_clk_src {
        DA7213_CLKSRC_MCLK = 0,