diff --git a/asoc/codecs/bolero/rx-macro.c b/asoc/codecs/bolero/rx-macro.c index ec7390a0cbc5..4d9ccb43761c 100644 --- a/asoc/codecs/bolero/rx-macro.c +++ b/asoc/codecs/bolero/rx-macro.c @@ -344,6 +344,7 @@ struct rx_macro_priv { u16 prim_int_users[INTERP_MAX]; int rx_mclk_users; int swr_clk_users; + bool dapm_mclk_enable; bool reset_swr; int clsh_users; int rx_mclk_cnt; @@ -1152,9 +1153,14 @@ static int rx_macro_mclk_event(struct snd_soc_dapm_widget *w, rx_priv->swr_ctrl_data[0].rx_swr_pdev, SWR_CLK_FREQ, &mclk_freq); ret = rx_macro_mclk_enable(rx_priv, 1, true); + if (ret) + rx_priv->dapm_mclk_enable = false; + else + rx_priv->dapm_mclk_enable = true; break; case SND_SOC_DAPM_POST_PMD: - ret = rx_macro_mclk_enable(rx_priv, 0, true); + if (rx_priv->dapm_mclk_enable) + ret = rx_macro_mclk_enable(rx_priv, 0, true); break; default: dev_err(rx_priv->dev, diff --git a/asoc/codecs/bolero/tx-macro.c b/asoc/codecs/bolero/tx-macro.c index 4cbf0aaccbff..ec5616672210 100644 --- a/asoc/codecs/bolero/tx-macro.c +++ b/asoc/codecs/bolero/tx-macro.c @@ -127,6 +127,7 @@ struct tx_macro_priv { bool dec_active[NUM_DECIMATORS]; int tx_mclk_users; int swr_clk_users; + bool dapm_mclk_enable; bool reset_swr; struct clk *tx_core_clk; struct clk *tx_npl_clk; @@ -260,9 +261,14 @@ static int tx_macro_mclk_event(struct snd_soc_dapm_widget *w, switch (event) { case SND_SOC_DAPM_PRE_PMU: ret = tx_macro_mclk_enable(tx_priv, 1); + if (ret) + tx_priv->dapm_mclk_enable = false; + else + tx_priv->dapm_mclk_enable = true; break; case SND_SOC_DAPM_POST_PMD: - ret = tx_macro_mclk_enable(tx_priv, 0); + if (tx_priv->dapm_mclk_enable) + ret = tx_macro_mclk_enable(tx_priv, 0); break; default: dev_err(tx_priv->dev, diff --git a/asoc/codecs/bolero/wsa-macro.c b/asoc/codecs/bolero/wsa-macro.c index 85417bc3df33..00d3d2c7782b 100644 --- a/asoc/codecs/bolero/wsa-macro.c +++ b/asoc/codecs/bolero/wsa-macro.c @@ -192,6 +192,7 @@ struct wsa_macro_priv { u16 prim_int_users[WSA_MACRO_RX1 + 1]; u16 wsa_mclk_users; u16 swr_clk_users; + bool dapm_mclk_enable; bool reset_swr; unsigned int vi_feed_value; struct mutex mclk_lock; @@ -870,9 +871,14 @@ static int wsa_macro_mclk_event(struct snd_soc_dapm_widget *w, switch (event) { case SND_SOC_DAPM_PRE_PMU: ret = wsa_macro_mclk_enable(wsa_priv, 1, true); + if (ret) + wsa_priv->dapm_mclk_enable = false; + else + wsa_priv->dapm_mclk_enable = true; break; case SND_SOC_DAPM_POST_PMD: - wsa_macro_mclk_enable(wsa_priv, 0, true); + if (wsa_priv->dapm_mclk_enable) + wsa_macro_mclk_enable(wsa_priv, 0, true); break; default: dev_err(wsa_priv->dev,