Merge "soc: swr: avoid SSR state when switching between 44.1 and 48k family"
diff --git a/asoc/codecs/bolero/rx-macro.c b/asoc/codecs/bolero/rx-macro.c
index 03dea20..322d1de 100644
--- a/asoc/codecs/bolero/rx-macro.c
+++ b/asoc/codecs/bolero/rx-macro.c
@@ -1147,18 +1147,6 @@
 	dev_dbg(rx_dev, "%s: event = %d\n", __func__, event);
 	switch (event) {
 	case SND_SOC_DAPM_PRE_PMU:
-		/* if swr_clk_users > 0, call device down */
-		if (rx_priv->swr_clk_users > 0) {
-			if ((rx_priv->clk_id == rx_priv->default_clk_id &&
-			     rx_priv->is_native_on) ||
-			    (rx_priv->clk_id == RX_CORE_CLK &&
-			     !rx_priv->is_native_on)) {
-				if (rx_priv->swr_ctrl_data)
-					swrm_wcd_notify(
-					rx_priv->swr_ctrl_data[0].rx_swr_pdev,
-					SWR_DEVICE_DOWN, NULL);
-			}
-		}
 		if (rx_priv->is_native_on)
 			mclk_freq = MCLK_FREQ_NATIVE;
 		if (rx_priv->swr_ctrl_data)
diff --git a/soc/swr-mstr-ctrl.c b/soc/swr-mstr-ctrl.c
index d1b8ebf..c4deb20 100644
--- a/soc/swr-mstr-ctrl.c
+++ b/soc/swr-mstr-ctrl.c
@@ -2480,6 +2480,8 @@
 			swr_master_write(swrm, SWRM_COMP_SW_RESET, 0x01);
 			swr_master_write(swrm, SWRM_COMP_SW_RESET, 0x01);
 			swrm_master_init(swrm);
+			/* wait for hw enumeration to complete */
+			usleep_range(100, 105);
 			swrm_cmd_fifo_wr_cmd(swrm, 0x4, 0xF, 0x0,
 						SWRS_SCP_INT_STATUS_MASK_1);
 			if (swrm->state == SWR_MSTR_SSR) {
@@ -2621,22 +2623,14 @@
 {
 	struct platform_device *pdev = to_platform_device(dev);
 	struct swr_mstr_ctrl *swrm = platform_get_drvdata(pdev);
-	int ret = 0;
 
 	dev_dbg(dev, "%s: swrm state: %d\n", __func__, swrm->state);
 
 	mutex_lock(&swrm->force_down_lock);
 	swrm->state = SWR_MSTR_SSR;
 	mutex_unlock(&swrm->force_down_lock);
-	if (!pm_runtime_enabled(dev) || !pm_runtime_suspended(dev)) {
-		ret = swrm_runtime_suspend(dev);
-		if (!ret) {
-			pm_runtime_disable(dev);
-			pm_runtime_set_suspended(dev);
-			pm_runtime_enable(dev);
-		}
-	}
 
+	swrm_device_suspend(dev);
 	return 0;
 }
 
@@ -2770,6 +2764,14 @@
 			ret = -EINVAL;
 		} else {
 			mutex_lock(&swrm->mlock);
+			if (swrm->mclk_freq != *(int *)data) {
+				dev_dbg(swrm->dev, "%s: freq change: force mstr down\n", __func__);
+				if (swrm->state == SWR_MSTR_DOWN)
+					dev_dbg(swrm->dev, "%s:SWR master is already Down:%d\n",
+						__func__, swrm->state);
+				else
+					swrm_device_suspend(&pdev->dev);
+			}
 			swrm->mclk_freq = *(int *)data;
 			mutex_unlock(&swrm->mlock);
 		}