diff --git a/asoc/codecs/bolero/va-macro.c b/asoc/codecs/bolero/va-macro.c index 9efebe6c78fd..14e55d6a331f 100644 --- a/asoc/codecs/bolero/va-macro.c +++ b/asoc/codecs/bolero/va-macro.c @@ -173,6 +173,7 @@ struct va_macro_priv { bool lpi_enable; bool register_event_listener; int dec_mode[VA_MACRO_NUM_DECIMATORS]; + int disable_afe_wakeup_event_listener; }; static bool va_macro_get_data(struct snd_soc_component *component, @@ -435,7 +436,8 @@ static int va_macro_swr_pwr_event(struct snd_soc_dapm_widget *w, "%s: lpass audio hw enable failed\n", __func__); } - if (va_priv->lpi_enable) { + if (va_priv->lpi_enable && + !va_priv->disable_afe_wakeup_event_listener) { bolero_register_event_listener(component, true); va_priv->register_event_listener = true; } @@ -2995,7 +2997,10 @@ static int va_macro_probe(struct platform_device *pdev) u32 default_clk_id = 0; struct clk *lpass_audio_hw_vote = NULL; u32 is_used_va_swr_gpio = 0; + u32 disable_afe_wakeup_event_listener = 0; const char *is_used_va_swr_gpio_dt = "qcom,is-used-swr-gpio"; + const char *disable_afe_wakeup_event_listener_dt = + "qcom,disable-afe-wakeup-event-listener"; va_priv = devm_kzalloc(&pdev->dev, sizeof(struct va_macro_priv), GFP_KERNEL); @@ -3037,6 +3042,19 @@ static int va_macro_probe(struct platform_device *pdev) is_used_va_swr_gpio = 0; } } + + if (of_find_property(pdev->dev.of_node, + disable_afe_wakeup_event_listener_dt, NULL)) { + ret = of_property_read_u32(pdev->dev.of_node, + disable_afe_wakeup_event_listener_dt, + &disable_afe_wakeup_event_listener); + if (ret) + dev_dbg(&pdev->dev, "%s: error reading %s in dt\n", + __func__, disable_afe_wakeup_event_listener_dt); + } + va_priv->disable_afe_wakeup_event_listener = + disable_afe_wakeup_event_listener; + va_priv->va_swr_gpio_p = of_parse_phandle(pdev->dev.of_node, "qcom,va-swr-gpios", 0); if (!va_priv->va_swr_gpio_p && is_used_va_swr_gpio) {