mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-10 14:19:09 -04:00
asoc: bolero: Do not disable mclk in widget power down upon enable failure
If mclk enable is failed during mclk widget power up event, it would still send a power down event for the widget during disable, which could disable the mclk voted by other client like soundwire. Do not disable mclk during power down if enable is failed during power up. Change-Id: If782b34f9ef414501590ed8cf681bbe58f1dda76 Signed-off-by: Ramprasad Katkam <katkam@codeaurora.org>
This commit is contained in:
parent
cbb6f02c95
commit
452772abf9
3 changed files with 21 additions and 3 deletions
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
Loading…
Reference in a new issue