|
@@ -459,14 +459,14 @@ static int va_macro_swr_pwr_event(struct snd_soc_dapm_widget *w,
|
|
|
dev_dbg(va_dev, "%s: clock switch failed\n",
|
|
|
__func__);
|
|
|
if (va_priv->lpi_enable) {
|
|
|
- bolero_register_event_listener(component, true);
|
|
|
+ bolero_register_event_listener(component, true, false);
|
|
|
va_priv->register_event_listener = true;
|
|
|
}
|
|
|
break;
|
|
|
case SND_SOC_DAPM_POST_PMD:
|
|
|
if (va_priv->register_event_listener) {
|
|
|
va_priv->register_event_listener = false;
|
|
|
- bolero_register_event_listener(component, false);
|
|
|
+ bolero_register_event_listener(component, false, false);
|
|
|
}
|
|
|
if (bolero_tx_clk_switch(component, CLK_SRC_TX_RCG))
|
|
|
dev_dbg(va_dev, "%s: clock switch failed\n",__func__);
|
|
@@ -482,6 +482,45 @@ static int va_macro_swr_pwr_event(struct snd_soc_dapm_widget *w,
|
|
|
return ret;
|
|
|
}
|
|
|
|
|
|
+static int va_macro_swr_intr_event(struct snd_soc_dapm_widget *w,
|
|
|
+ struct snd_kcontrol *kcontrol, int event)
|
|
|
+{
|
|
|
+ struct snd_soc_component *component =
|
|
|
+ snd_soc_dapm_to_component(w->dapm);
|
|
|
+ int ret = 0;
|
|
|
+ struct device *va_dev = NULL;
|
|
|
+ struct va_macro_priv *va_priv = NULL;
|
|
|
+
|
|
|
+ if (!va_macro_get_data(component, &va_dev, &va_priv, __func__))
|
|
|
+ return -EINVAL;
|
|
|
+
|
|
|
+ dev_dbg(va_dev, "%s: event = %d, lpi_enable = %d\n",
|
|
|
+ __func__, event, va_priv->lpi_enable);
|
|
|
+
|
|
|
+ if (!va_priv->lpi_enable)
|
|
|
+ return ret;
|
|
|
+
|
|
|
+ switch (event) {
|
|
|
+ case SND_SOC_DAPM_PRE_PMU:
|
|
|
+ if (va_priv->lpi_enable) {
|
|
|
+ bolero_register_event_listener(component, true, true);
|
|
|
+ va_priv->register_event_listener = true;
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case SND_SOC_DAPM_POST_PMD:
|
|
|
+ if (va_priv->register_event_listener) {
|
|
|
+ va_priv->register_event_listener = false;
|
|
|
+ bolero_register_event_listener(component, false, true);
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ dev_err(va_priv->dev,
|
|
|
+ "%s: invalid DAPM event %d\n", __func__, event);
|
|
|
+ ret = -EINVAL;
|
|
|
+ }
|
|
|
+ return ret;
|
|
|
+}
|
|
|
+
|
|
|
static int va_macro_tx_swr_clk_event_v2(struct snd_soc_dapm_widget *w,
|
|
|
struct snd_kcontrol *kcontrol, int event)
|
|
|
{
|
|
@@ -1989,6 +2028,10 @@ static const struct snd_soc_dapm_widget va_macro_dapm_widgets_v3[] = {
|
|
|
SND_SOC_DAPM_SUPPLY_S("VA_SWR_PWR", -1, SND_SOC_NOPM, 0, 0,
|
|
|
va_macro_swr_pwr_event,
|
|
|
SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD),
|
|
|
+
|
|
|
+ SND_SOC_DAPM_SUPPLY_S("VA_SWR_INTR", 0, SND_SOC_NOPM, 0, 0,
|
|
|
+ va_macro_swr_intr_event,
|
|
|
+ SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD),
|
|
|
};
|
|
|
|
|
|
static const struct snd_soc_dapm_widget va_macro_dapm_widgets[] = {
|
|
@@ -2133,6 +2176,10 @@ static const struct snd_soc_dapm_widget va_macro_dapm_widgets[] = {
|
|
|
SND_SOC_DAPM_SUPPLY_S("VA_MCLK", -1, SND_SOC_NOPM, 0, 0,
|
|
|
va_macro_mclk_event,
|
|
|
SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD),
|
|
|
+
|
|
|
+ SND_SOC_DAPM_SUPPLY_S("VA_SWR_INTR", 0, SND_SOC_NOPM, 0, 0,
|
|
|
+ va_macro_swr_intr_event,
|
|
|
+ SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD),
|
|
|
};
|
|
|
|
|
|
static const struct snd_soc_dapm_widget va_macro_wod_dapm_widgets[] = {
|
|
@@ -2279,6 +2326,15 @@ static const struct snd_soc_dapm_route va_audio_map_v3[] = {
|
|
|
{"VA SMIC MUX3", "SWR_MIC9", "VA SWR_INPUT"},
|
|
|
{"VA SMIC MUX3", "SWR_MIC10", "VA SWR_INPUT"},
|
|
|
{"VA SMIC MUX3", "SWR_MIC11", "VA SWR_INPUT"},
|
|
|
+
|
|
|
+ {"VA DMIC0", NULL, "VA_SWR_INTR"},
|
|
|
+ {"VA DMIC1", NULL, "VA_SWR_INTR"},
|
|
|
+ {"VA DMIC2", NULL, "VA_SWR_INTR"},
|
|
|
+ {"VA DMIC3", NULL, "VA_SWR_INTR"},
|
|
|
+ {"VA DMIC4", NULL, "VA_SWR_INTR"},
|
|
|
+ {"VA DMIC5", NULL, "VA_SWR_INTR"},
|
|
|
+ {"VA DMIC6", NULL, "VA_SWR_INTR"},
|
|
|
+ {"VA DMIC7", NULL, "VA_SWR_INTR"},
|
|
|
};
|
|
|
|
|
|
static const struct snd_soc_dapm_route va_audio_map_v2[] = {
|
|
@@ -2515,6 +2571,15 @@ static const struct snd_soc_dapm_route va_audio_map[] = {
|
|
|
{"VA SMIC MUX7", "SWR_DMIC6", "VA SWR_MIC6"},
|
|
|
{"VA SMIC MUX7", "SWR_DMIC7", "VA SWR_MIC7"},
|
|
|
|
|
|
+ {"VA DMIC0", NULL, "VA_SWR_INTR"},
|
|
|
+ {"VA DMIC1", NULL, "VA_SWR_INTR"},
|
|
|
+ {"VA DMIC2", NULL, "VA_SWR_INTR"},
|
|
|
+ {"VA DMIC3", NULL, "VA_SWR_INTR"},
|
|
|
+ {"VA DMIC4", NULL, "VA_SWR_INTR"},
|
|
|
+ {"VA DMIC5", NULL, "VA_SWR_INTR"},
|
|
|
+ {"VA DMIC6", NULL, "VA_SWR_INTR"},
|
|
|
+ {"VA DMIC7", NULL, "VA_SWR_INTR"},
|
|
|
+
|
|
|
{"VA SWR_ADC0", NULL, "VA_SWR_PWR"},
|
|
|
{"VA SWR_ADC1", NULL, "VA_SWR_PWR"},
|
|
|
{"VA SWR_ADC2", NULL, "VA_SWR_PWR"},
|