summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLinux Build Service Account <lnxbuild@localhost>2020-05-31 04:29:01 -0700
committerLinux Build Service Account <lnxbuild@localhost>2020-05-31 04:29:01 -0700
commit7662011c80176975c8a30197124757b96ba17ae2 (patch)
treefa6acac4a0bbc80420c5beb24b0f873f7a04b0e2
parent9c484b7ebfa40b576db2f3e6fe66ca12ea3cf7b0 (diff)
parentf72925e07bf0fb2d758a5db7d9b8308a1ac2ba0f (diff)
downloadmsm-extra-7662011c80176975c8a30197124757b96ba17ae2.tar.gz
Merge f72925e07bf0fb2d758a5db7d9b8308a1ac2ba0f on remote branch
Change-Id: Ic4b1cf3520c03f9ba1240cef231d30e34948686c
-rw-r--r--asoc/codecs/bolero/bolero-cdc.c10
-rw-r--r--asoc/codecs/bolero/bolero-cdc.h1
-rw-r--r--asoc/codecs/bolero/rx-macro.c14
-rw-r--r--asoc/codecs/bolero/tx-macro.c39
-rw-r--r--asoc/codecs/bolero/va-macro.c8
-rw-r--r--asoc/codecs/bolero/wsa-macro.c12
-rw-r--r--asoc/codecs/wcd937x/internal.h1
-rw-r--r--asoc/codecs/wcd937x/wcd937x.c15
-rw-r--r--asoc/codecs/wcd938x/internal.h1
-rw-r--r--asoc/codecs/wcd938x/wcd938x.c15
-rw-r--r--asoc/codecs/wsa883x/wsa883x.c7
-rw-r--r--dsp/q6asm.c13
-rw-r--r--soc/swr-mstr-ctrl.c23
-rw-r--r--soc/swr-mstr-ctrl.h4
14 files changed, 128 insertions, 35 deletions
diff --git a/asoc/codecs/bolero/bolero-cdc.c b/asoc/codecs/bolero/bolero-cdc.c
index fea1686b..38b12817 100644
--- a/asoc/codecs/bolero/bolero-cdc.c
+++ b/asoc/codecs/bolero/bolero-cdc.c
@@ -835,11 +835,19 @@ static int bolero_ssr_enable(struct device *dev, void *data)
priv->component,
BOLERO_MACRO_EVT_CLK_RESET, 0x0);
}
+ trace_printk("%s: clk count reset\n", __func__);
if (priv->rsc_clk_cb)
priv->rsc_clk_cb(priv->clk_dev, BOLERO_MACRO_EVT_SSR_GFMUX_UP);
- trace_printk("%s: clk count reset\n", __func__);
+ for (macro_idx = START_MACRO; macro_idx < MAX_MACRO; macro_idx++) {
+ if (!priv->macro_params[macro_idx].event_handler)
+ continue;
+ priv->macro_params[macro_idx].event_handler(
+ priv->component,
+ BOLERO_MACRO_EVT_PRE_SSR_UP, 0x0);
+ }
+
regcache_cache_only(priv->regmap, false);
mutex_lock(&priv->clk_lock);
priv->dev_up = true;
diff --git a/asoc/codecs/bolero/bolero-cdc.h b/asoc/codecs/bolero/bolero-cdc.h
index 7528eaed..5e90f27c 100644
--- a/asoc/codecs/bolero/bolero-cdc.h
+++ b/asoc/codecs/bolero/bolero-cdc.h
@@ -54,6 +54,7 @@ enum {
BOLERO_MACRO_EVT_RX_COMPANDER_SOFT_RST,
BOLERO_MACRO_EVT_BCS_CLK_OFF,
BOLERO_MACRO_EVT_SSR_GFMUX_UP,
+ BOLERO_MACRO_EVT_PRE_SSR_UP,
};
enum {
diff --git a/asoc/codecs/bolero/rx-macro.c b/asoc/codecs/bolero/rx-macro.c
index 22d636e8..523f3c70 100644
--- a/asoc/codecs/bolero/rx-macro.c
+++ b/asoc/codecs/bolero/rx-macro.c
@@ -378,6 +378,7 @@ struct rx_swr_ctrl_platform_data {
void *data),
void *swrm_handle,
int action);
+ int (*pinctrl_setup)(void *handle, bool enable);
};
enum {
@@ -1388,11 +1389,7 @@ static int rx_macro_event_handler(struct snd_soc_component *component,
}
}
break;
- case BOLERO_MACRO_EVT_SSR_UP:
- trace_printk("%s, enter SSR up\n", __func__);
- rx_priv->dev_up = true;
- /* reset swr after ssr/pdr */
- rx_priv->reset_swr = true;
+ case BOLERO_MACRO_EVT_PRE_SSR_UP:
/* enable&disable RX_CORE_CLK to reset GFMUX reg */
ret = bolero_clk_rsc_request_clock(rx_priv->dev,
rx_priv->default_clk_id,
@@ -1405,6 +1402,12 @@ static int rx_macro_event_handler(struct snd_soc_component *component,
bolero_clk_rsc_request_clock(rx_priv->dev,
rx_priv->default_clk_id,
RX_CORE_CLK, false);
+ break;
+ case BOLERO_MACRO_EVT_SSR_UP:
+ trace_printk("%s, enter SSR up\n", __func__);
+ rx_priv->dev_up = true;
+ /* reset swr after ssr/pdr */
+ rx_priv->reset_swr = true;
if (rx_priv->swr_ctrl_data)
swrm_wcd_notify(
@@ -4068,6 +4071,7 @@ static int rx_macro_probe(struct platform_device *pdev)
rx_priv->swr_plat_data.clk = rx_swrm_clock;
rx_priv->swr_plat_data.core_vote = rx_macro_core_vote;
rx_priv->swr_plat_data.handle_irq = NULL;
+ rx_priv->swr_plat_data.pinctrl_setup = NULL;
ret = of_property_read_u8_array(pdev->dev.of_node,
"qcom,rx-bcl-pmic-params", bcl_pmic_params,
diff --git a/asoc/codecs/bolero/tx-macro.c b/asoc/codecs/bolero/tx-macro.c
index ff941984..85e5e954 100644
--- a/asoc/codecs/bolero/tx-macro.c
+++ b/asoc/codecs/bolero/tx-macro.c
@@ -81,6 +81,7 @@ struct tx_macro_swr_ctrl_platform_data {
void *data),
void *swrm_handle,
int action);
+ int (*pinctrl_setup)(void *handle, bool enable);
};
enum {
@@ -410,6 +411,9 @@ static int tx_macro_event_handler(struct snd_soc_component *component,
else
tx_priv->hs_slow_insert_complete = false;
break;
+ default:
+ pr_debug("%s Invalid Event\n", __func__);
+ break;
}
return 0;
}
@@ -2384,12 +2388,30 @@ static const struct snd_kcontrol_new tx_macro_snd_controls[] = {
tx_macro_get_bcs, tx_macro_set_bcs),
};
+static int tx_macro_pinctrl_setup(void *handle, bool enable)
+{
+ struct tx_macro_priv *tx_priv = (struct tx_macro_priv *) handle;
+
+ if (tx_priv == NULL) {
+ pr_err("%s: tx priv data is NULL\n", __func__);
+ return -EINVAL;
+ }
+ if (enable)
+ msm_cdc_pinctrl_set_wakeup_capable(
+ tx_priv->tx_swr_gpio_p, true);
+ else
+ msm_cdc_pinctrl_set_wakeup_capable(
+ tx_priv->tx_swr_gpio_p, false);
+ return 0;
+}
+
static int tx_macro_register_event_listener(struct snd_soc_component *component,
bool enable, bool is_dmic_sva)
{
struct device *tx_dev = NULL;
struct tx_macro_priv *tx_priv = NULL;
int ret = 0;
+ u32 dmic_sva = is_dmic_sva;
if (!component)
return -EINVAL;
@@ -2411,17 +2433,17 @@ static int tx_macro_register_event_listener(struct snd_soc_component *component,
if (enable) {
ret = swrm_wcd_notify(
tx_priv->swr_ctrl_data[0].tx_swr_pdev,
- SWR_REGISTER_WAKEUP, NULL);
- if (!is_dmic_sva)
- msm_cdc_pinctrl_set_wakeup_capable(
- tx_priv->tx_swr_gpio_p, false);
+ SWR_REGISTER_WAKEUP, &dmic_sva);
+ msm_cdc_pinctrl_set_wakeup_capable(
+ tx_priv->tx_swr_gpio_p, false);
} else {
- if (!is_dmic_sva)
- msm_cdc_pinctrl_set_wakeup_capable(
- tx_priv->tx_swr_gpio_p, true);
+ /* while teardown we can reset the flag */
+ dmic_sva = 0;
+ msm_cdc_pinctrl_set_wakeup_capable(
+ tx_priv->tx_swr_gpio_p, true);
ret = swrm_wcd_notify(
tx_priv->swr_ctrl_data[0].tx_swr_pdev,
- SWR_DEREGISTER_WAKEUP, NULL);
+ SWR_DEREGISTER_WAKEUP, &dmic_sva);
}
}
@@ -3230,6 +3252,7 @@ static int tx_macro_probe(struct platform_device *pdev)
tx_priv->swr_plat_data.clk = tx_macro_swrm_clock;
tx_priv->swr_plat_data.core_vote = tx_macro_core_vote;
tx_priv->swr_plat_data.handle_irq = NULL;
+ tx_priv->swr_plat_data.pinctrl_setup = tx_macro_pinctrl_setup;
mutex_init(&tx_priv->swr_clk_lock);
}
tx_priv->is_used_tx_swr_gpio = is_used_tx_swr_gpio;
diff --git a/asoc/codecs/bolero/va-macro.c b/asoc/codecs/bolero/va-macro.c
index de834ade..46e45434 100644
--- a/asoc/codecs/bolero/va-macro.c
+++ b/asoc/codecs/bolero/va-macro.c
@@ -130,6 +130,7 @@ struct va_macro_swr_ctrl_platform_data {
void *data),
void *swrm_handle,
int action);
+ int (*pinctrl_setup)(void *handle, bool enable);
};
struct va_macro_priv {
@@ -298,8 +299,7 @@ static int va_macro_event_handler(struct snd_soc_component *component,
"%s: va_mclk_users is non-zero still, audio SSR fail!!\n",
__func__);
break;
- case BOLERO_MACRO_EVT_SSR_UP:
- trace_printk("%s, enter SSR up\n", __func__);
+ case BOLERO_MACRO_EVT_PRE_SSR_UP:
/* enable&disable VA_CORE_CLK to reset GFMUX reg */
ret = bolero_clk_rsc_request_clock(va_priv->dev,
va_priv->default_clk_id,
@@ -312,6 +312,9 @@ static int va_macro_event_handler(struct snd_soc_component *component,
bolero_clk_rsc_request_clock(va_priv->dev,
va_priv->default_clk_id,
VA_CORE_CLK, false);
+ break;
+ case BOLERO_MACRO_EVT_SSR_UP:
+ trace_printk("%s, enter SSR up\n", __func__);
/* reset swr after ssr/pdr */
va_priv->reset_swr = true;
if (va_priv->swr_ctrl_data)
@@ -3213,6 +3216,7 @@ static int va_macro_probe(struct platform_device *pdev)
va_priv->swr_plat_data.clk = va_macro_swrm_clock;
va_priv->swr_plat_data.core_vote = va_macro_core_vote;
va_priv->swr_plat_data.handle_irq = NULL;
+ va_priv->swr_plat_data.pinctrl_setup = NULL;
mutex_init(&va_priv->swr_clk_lock);
}
va_priv->is_used_va_swr_gpio = is_used_va_swr_gpio;
diff --git a/asoc/codecs/bolero/wsa-macro.c b/asoc/codecs/bolero/wsa-macro.c
index 1bc8f9d2..858e6c28 100644
--- a/asoc/codecs/bolero/wsa-macro.c
+++ b/asoc/codecs/bolero/wsa-macro.c
@@ -166,6 +166,7 @@ struct wsa_macro_swr_ctrl_platform_data {
void *data),
void *swrm_handle,
int action);
+ int (*pinctrl_setup)(void *handle, bool enable);
};
struct wsa_macro_bcl_pmic_params {
@@ -1022,10 +1023,7 @@ static int wsa_macro_event_handler(struct snd_soc_component *component,
}
}
break;
- case BOLERO_MACRO_EVT_SSR_UP:
- trace_printk("%s, enter SSR up\n", __func__);
- /* reset swr after ssr/pdr */
- wsa_priv->reset_swr = true;
+ case BOLERO_MACRO_EVT_PRE_SSR_UP:
/* enable&disable WSA_CORE_CLK to reset GFMUX reg */
ret = bolero_clk_rsc_request_clock(wsa_priv->dev,
wsa_priv->default_clk_id,
@@ -1038,6 +1036,11 @@ static int wsa_macro_event_handler(struct snd_soc_component *component,
bolero_clk_rsc_request_clock(wsa_priv->dev,
wsa_priv->default_clk_id,
WSA_CORE_CLK, false);
+ break;
+ case BOLERO_MACRO_EVT_SSR_UP:
+ trace_printk("%s, enter SSR up\n", __func__);
+ /* reset swr after ssr/pdr */
+ wsa_priv->reset_swr = true;
if (wsa_priv->swr_ctrl_data)
swrm_wcd_notify(
wsa_priv->swr_ctrl_data[0].wsa_swr_pdev,
@@ -3195,6 +3198,7 @@ static int wsa_macro_probe(struct platform_device *pdev)
wsa_priv->swr_plat_data.clk = wsa_swrm_clock;
wsa_priv->swr_plat_data.core_vote = wsa_macro_core_vote;
wsa_priv->swr_plat_data.handle_irq = NULL;
+ wsa_priv->swr_plat_data.pinctrl_setup = NULL;
ret = of_property_read_u32(pdev->dev.of_node, "qcom,default-clk-id",
&default_clk_id);
diff --git a/asoc/codecs/wcd937x/internal.h b/asoc/codecs/wcd937x/internal.h
index 381634ca..f998bf1f 100644
--- a/asoc/codecs/wcd937x/internal.h
+++ b/asoc/codecs/wcd937x/internal.h
@@ -87,6 +87,7 @@ struct wcd937x_priv {
int ear_rx_path;
int ana_clk_count;
struct mutex ana_tx_clk_lock;
+ bool usbc_hs_status;
};
struct wcd937x_micbias_setting {
diff --git a/asoc/codecs/wcd937x/wcd937x.c b/asoc/codecs/wcd937x/wcd937x.c
index d5315c89..6e4f6872 100644
--- a/asoc/codecs/wcd937x/wcd937x.c
+++ b/asoc/codecs/wcd937x/wcd937x.c
@@ -1566,6 +1566,17 @@ static int wcd937x_get_logical_addr(struct swr_device *swr_dev)
return 0;
}
+static bool get_usbc_hs_status(struct snd_soc_component *component,
+ struct wcd_mbhc_config *mbhc_cfg)
+{
+ if (mbhc_cfg->enable_usbc_analog) {
+ if (!(snd_soc_component_read32(component, WCD937X_ANA_MBHC_MECH)
+ & 0x20))
+ return true;
+ }
+ return false;
+}
+
static int wcd937x_event_notify(struct notifier_block *block,
unsigned long val,
void *data)
@@ -1601,6 +1612,8 @@ static int wcd937x_event_notify(struct notifier_block *block,
case BOLERO_WCD_EVT_SSR_DOWN:
wcd937x->mbhc->wcd_mbhc.deinit_in_progress = true;
mbhc = &wcd937x->mbhc->wcd_mbhc;
+ wcd937x->usbc_hs_status = get_usbc_hs_status(component,
+ mbhc->mbhc_cfg);
wcd937x_mbhc_ssr_down(wcd937x->mbhc, component);
wcd937x_reset_low(wcd937x->dev);
break;
@@ -1621,6 +1634,8 @@ static int wcd937x_event_notify(struct notifier_block *block,
__func__);
} else {
wcd937x_mbhc_hs_detect(component, mbhc->mbhc_cfg);
+ if (wcd937x->usbc_hs_status)
+ mdelay(500);
}
wcd937x->mbhc->wcd_mbhc.deinit_in_progress = false;
break;
diff --git a/asoc/codecs/wcd938x/internal.h b/asoc/codecs/wcd938x/internal.h
index f8a47fdb..2bc6f1f6 100644
--- a/asoc/codecs/wcd938x/internal.h
+++ b/asoc/codecs/wcd938x/internal.h
@@ -101,6 +101,7 @@ struct wcd938x_priv {
int flyback_cur_det_disable;
int ear_rx_path;
bool dev_up;
+ bool usbc_hs_status;
};
struct wcd938x_micbias_setting {
diff --git a/asoc/codecs/wcd938x/wcd938x.c b/asoc/codecs/wcd938x/wcd938x.c
index 26174dcd..950f7312 100644
--- a/asoc/codecs/wcd938x/wcd938x.c
+++ b/asoc/codecs/wcd938x/wcd938x.c
@@ -1973,6 +1973,17 @@ static int wcd938x_get_logical_addr(struct swr_device *swr_dev)
return 0;
}
+static bool get_usbc_hs_status(struct snd_soc_component *component,
+ struct wcd_mbhc_config *mbhc_cfg)
+{
+ if (mbhc_cfg->enable_usbc_analog) {
+ if (!(snd_soc_component_read32(component, WCD938X_ANA_MBHC_MECH)
+ & 0x20))
+ return true;
+ }
+ return false;
+}
+
static int wcd938x_event_notify(struct notifier_block *block,
unsigned long val,
void *data)
@@ -2018,6 +2029,8 @@ static int wcd938x_event_notify(struct notifier_block *block,
wcd938x->dev_up = false;
wcd938x->mbhc->wcd_mbhc.deinit_in_progress = true;
mbhc = &wcd938x->mbhc->wcd_mbhc;
+ wcd938x->usbc_hs_status = get_usbc_hs_status(component,
+ mbhc->mbhc_cfg);
wcd938x_mbhc_ssr_down(wcd938x->mbhc, component);
wcd938x_reset_low(wcd938x->dev);
break;
@@ -2040,6 +2053,8 @@ static int wcd938x_event_notify(struct notifier_block *block,
__func__);
} else {
wcd938x_mbhc_hs_detect(component, mbhc->mbhc_cfg);
+ if (wcd938x->usbc_hs_status)
+ mdelay(500);
}
wcd938x->mbhc->wcd_mbhc.deinit_in_progress = false;
wcd938x->dev_up = true;
diff --git a/asoc/codecs/wsa883x/wsa883x.c b/asoc/codecs/wsa883x/wsa883x.c
index 84331854..fa725850 100644
--- a/asoc/codecs/wsa883x/wsa883x.c
+++ b/asoc/codecs/wsa883x/wsa883x.c
@@ -1274,9 +1274,10 @@ static int wsa883x_event_notify(struct notifier_block *nb,
switch (event) {
case BOLERO_WSA_EVT_PA_OFF_PRE_SSR:
- snd_soc_component_update_bits(wsa883x->component,
- WSA883X_PA_FSM_CTL,
- 0x01, 0x00);
+ if (test_bit(SPKR_STATUS, &wsa883x->status_mask))
+ snd_soc_component_update_bits(wsa883x->component,
+ WSA883X_PA_FSM_CTL,
+ 0x01, 0x00);
wsa883x_swr_down(wsa883x);
break;
diff --git a/dsp/q6asm.c b/dsp/q6asm.c
index e56c7c54..235cdbd4 100644
--- a/dsp/q6asm.c
+++ b/dsp/q6asm.c
@@ -11000,14 +11000,23 @@ EXPORT_SYMBOL(q6asm_get_path_delay);
int q6asm_get_apr_service_id(int session_id)
{
+ int service_id;
+
pr_debug("%s:\n", __func__);
if (session_id <= 0 || session_id > ASM_ACTIVE_STREAMS_ALLOWED) {
pr_err("%s: invalid session_id = %d\n", __func__, session_id);
return -EINVAL;
}
-
- return ((struct apr_svc *)(session[session_id].ac)->apr)->id;
+ mutex_lock(&session[session_id].mutex_lock_per_session);
+ if (session[session_id].ac != NULL)
+ if ((session[session_id].ac)->apr != NULL) {
+ service_id = ((struct apr_svc *)(session[session_id].ac)->apr)->id;
+ mutex_unlock(&session[session_id].mutex_lock_per_session);
+ return service_id;
+ }
+ mutex_unlock(&session[session_id].mutex_lock_per_session);
+ return -EINVAL;
}
uint8_t q6asm_get_asm_stream_id(int session_id)
diff --git a/soc/swr-mstr-ctrl.c b/soc/swr-mstr-ctrl.c
index 6358437f..981060cd 100644
--- a/soc/swr-mstr-ctrl.c
+++ b/soc/swr-mstr-ctrl.c
@@ -2552,6 +2552,8 @@ static int swrm_probe(struct platform_device *pdev)
ret = -EINVAL;
goto err_pdata_fail;
}
+ swrm->pinctrl_setup = pdata->pinctrl_setup;
+
if (of_property_read_u32(pdev->dev.of_node,
"qcom,swr-clock-stop-mode0",
&swrm->clk_stop_mode0_supp)) {
@@ -2873,7 +2875,6 @@ static int swrm_runtime_resume(struct device *dev)
int ret = 0;
bool swrm_clk_req_err = false;
bool hw_core_err = false;
- bool aud_core_err = false;
struct swr_master *mstr = &swrm->master;
struct swr_device *swr_dev;
@@ -2891,7 +2892,7 @@ static int swrm_runtime_resume(struct device *dev)
if (swrm_request_hw_vote(swrm, LPASS_AUDIO_CORE, true)) {
dev_err(dev, "%s:lpass audio hw enable failed\n",
__func__);
- aud_core_err = true;
+ swrm->aud_core_err = true;
}
if ((swrm->state == SWR_MSTR_DOWN) ||
@@ -2910,6 +2911,9 @@ static int swrm_runtime_resume(struct device *dev)
irq_get_irq_data(swrm->wake_irq)))
disable_irq_nosync(swrm->wake_irq);
mutex_unlock(&swrm->irq_lock);
+ if (swrm->dmic_sva && swrm->pinctrl_setup)
+ swrm->pinctrl_setup(swrm->handle,
+ false);
}
if (swrm->ipc_wakeup)
msm_aud_evt_blocking_notifier_call_chain(
@@ -2977,7 +2981,7 @@ static int swrm_runtime_resume(struct device *dev)
swrm->state = SWR_MSTR_UP;
}
exit:
- if (!aud_core_err)
+ if (ret && !swrm->aud_core_err)
swrm_request_hw_vote(swrm, LPASS_AUDIO_CORE, false);
if (!hw_core_err)
swrm_request_hw_vote(swrm, LPASS_HW_CORE, false);
@@ -3000,7 +3004,6 @@ static int swrm_runtime_suspend(struct device *dev)
struct swr_mstr_ctrl *swrm = platform_get_drvdata(pdev);
int ret = 0;
bool hw_core_err = false;
- bool aud_core_err = false;
struct swr_master *mstr = &swrm->master;
struct swr_device *swr_dev;
int current_state = 0;
@@ -3019,11 +3022,6 @@ static int swrm_runtime_suspend(struct device *dev)
__func__);
hw_core_err = true;
}
- if (swrm_request_hw_vote(swrm, LPASS_AUDIO_CORE, true)) {
- dev_err(dev, "%s:lpass audio hw enable failed\n",
- __func__);
- aud_core_err = true;
- }
if ((current_state == SWR_MSTR_UP) ||
(current_state == SWR_MSTR_SSR)) {
@@ -3108,6 +3106,8 @@ static int swrm_runtime_suspend(struct device *dev)
if (swrm->clk_stop_mode0_supp) {
if (swrm->wake_irq > 0) {
+ if (swrm->dmic_sva && swrm->pinctrl_setup)
+ swrm->pinctrl_setup(swrm->handle, true);
enable_irq(swrm->wake_irq);
} else if (swrm->ipc_wakeup) {
msm_aud_evt_blocking_notifier_call_chain(
@@ -3121,10 +3121,11 @@ static int swrm_runtime_suspend(struct device *dev)
if (current_state != SWR_MSTR_SSR)
swrm->state = SWR_MSTR_DOWN;
exit:
- if (!aud_core_err)
+ if (!swrm->aud_core_err)
swrm_request_hw_vote(swrm, LPASS_AUDIO_CORE, false);
if (!hw_core_err)
swrm_request_hw_vote(swrm, LPASS_HW_CORE, false);
+ swrm->aud_core_err = false;
mutex_unlock(&swrm->reslock);
trace_printk("%s: pm_runtime: suspend done state: %d\n",
__func__, swrm->state);
@@ -3451,10 +3452,12 @@ int swrm_wcd_notify(struct platform_device *pdev, u32 id, void *data)
case SWR_REGISTER_WAKEUP:
msm_aud_evt_blocking_notifier_call_chain(
SWR_WAKE_IRQ_REGISTER, (void *)swrm);
+ swrm->dmic_sva = *(u32 *)data;
break;
case SWR_DEREGISTER_WAKEUP:
msm_aud_evt_blocking_notifier_call_chain(
SWR_WAKE_IRQ_DEREGISTER, (void *)swrm);
+ swrm->dmic_sva = 0;
break;
case SWR_SET_PORT_MAP:
if (!data) {
diff --git a/soc/swr-mstr-ctrl.h b/soc/swr-mstr-ctrl.h
index ec5bbd2f..5439ce6f 100644
--- a/soc/swr-mstr-ctrl.h
+++ b/soc/swr-mstr-ctrl.h
@@ -108,6 +108,7 @@ struct swr_ctrl_platform_data {
int (*core_vote)(void *handle, bool enable);
int (*reg_irq)(void *handle, irqreturn_t(*irq_handler)(int irq,
void *data), void *swr_handle, int type);
+ int (*pinctrl_setup)(void *handle, bool enable);
};
struct swr_mstr_ctrl {
@@ -140,6 +141,7 @@ struct swr_mstr_ctrl {
int (*core_vote)(void *handle, bool enable);
int (*reg_irq)(void *handle, irqreturn_t(*irq_handler)(int irq,
void *data), void *swr_handle, int type);
+ int (*pinctrl_setup)(void *handle, bool enable);
int irq;
int wake_irq;
int version;
@@ -165,8 +167,10 @@ struct swr_mstr_ctrl {
u32 clk_stop_mode0_supp;
struct work_struct wakeup_work;
u32 ipc_wakeup;
+ u32 dmic_sva;
bool dev_up;
bool ipc_wakeup_triggered;
+ bool aud_core_err;
struct pm_qos_request pm_qos_req;
enum swrm_pm_state pm_state;
wait_queue_head_t pm_wq;