Loading 4.0/asoc/codecs/bolero/va-macro.c +46 −2 Original line number Diff line number Diff line Loading @@ -169,6 +169,8 @@ struct va_macro_priv { int va_swr_clk_cnt; int va_clk_status; int tx_clk_status; bool lpi_enable; bool register_event_listener; }; static bool va_macro_get_data(struct snd_soc_codec *codec, Loading Loading @@ -401,10 +403,16 @@ static int va_macro_swr_pwr_event(struct snd_soc_dapm_widget *w, if (bolero_tx_clk_switch(codec)) dev_dbg(va_dev, "%s: clock switch failed\n", __func__); if (va_priv->lpi_enable) { bolero_register_event_listener(codec, 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(codec, false); } if (bolero_tx_clk_switch(codec)) dev_dbg(va_dev, "%s: clock switch failed\n",__func__); if (va_priv->lpass_audio_hw_vote) Loading Loading @@ -847,6 +855,38 @@ static int va_macro_put_dec_enum(struct snd_kcontrol *kcontrol, return snd_soc_dapm_put_enum_double(kcontrol, ucontrol); } static int va_macro_lpi_get(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) { struct snd_soc_codec *codec = snd_soc_kcontrol_codec(kcontrol); struct device *va_dev = NULL; struct va_macro_priv *va_priv = NULL; if (!va_macro_get_data(codec, &va_dev, &va_priv, __func__)) return -EINVAL; ucontrol->value.integer.value[0] = va_priv->lpi_enable; return 0; } static int va_macro_lpi_put(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) { struct snd_soc_codec *codec = snd_soc_kcontrol_codec(kcontrol); struct device *va_dev = NULL; struct va_macro_priv *va_priv = NULL; if (!va_macro_get_data(codec, &va_dev, &va_priv, __func__)) return -EINVAL; va_priv->lpi_enable = ucontrol->value.integer.value[0]; return 0; } static int va_macro_tx_mixer_get(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) { Loading Loading @@ -2272,6 +2312,8 @@ static const struct snd_kcontrol_new va_macro_snd_controls[] = { SOC_SINGLE_SX_TLV("VA_DEC7 Volume", BOLERO_CDC_VA_TX7_TX_VOL_CTL, 0, -84, 40, digital_gain), SOC_SINGLE_EXT("LPI Enable", 0, 0, 1, 0, va_macro_lpi_get, va_macro_lpi_put), }; static const struct snd_kcontrol_new va_macro_snd_controls_common[] = { Loading Loading @@ -2361,6 +2403,8 @@ static int va_macro_init(struct snd_soc_codec *codec) "%s: priv is null for macro!\n", __func__); return -EINVAL; } va_priv->lpi_enable = false; va_priv->register_event_listener = false; if (va_priv->va_without_decimation) { ret = snd_soc_dapm_new_controls(dapm, va_macro_wod_dapm_widgets, Loading Loading
4.0/asoc/codecs/bolero/va-macro.c +46 −2 Original line number Diff line number Diff line Loading @@ -169,6 +169,8 @@ struct va_macro_priv { int va_swr_clk_cnt; int va_clk_status; int tx_clk_status; bool lpi_enable; bool register_event_listener; }; static bool va_macro_get_data(struct snd_soc_codec *codec, Loading Loading @@ -401,10 +403,16 @@ static int va_macro_swr_pwr_event(struct snd_soc_dapm_widget *w, if (bolero_tx_clk_switch(codec)) dev_dbg(va_dev, "%s: clock switch failed\n", __func__); if (va_priv->lpi_enable) { bolero_register_event_listener(codec, 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(codec, false); } if (bolero_tx_clk_switch(codec)) dev_dbg(va_dev, "%s: clock switch failed\n",__func__); if (va_priv->lpass_audio_hw_vote) Loading Loading @@ -847,6 +855,38 @@ static int va_macro_put_dec_enum(struct snd_kcontrol *kcontrol, return snd_soc_dapm_put_enum_double(kcontrol, ucontrol); } static int va_macro_lpi_get(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) { struct snd_soc_codec *codec = snd_soc_kcontrol_codec(kcontrol); struct device *va_dev = NULL; struct va_macro_priv *va_priv = NULL; if (!va_macro_get_data(codec, &va_dev, &va_priv, __func__)) return -EINVAL; ucontrol->value.integer.value[0] = va_priv->lpi_enable; return 0; } static int va_macro_lpi_put(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) { struct snd_soc_codec *codec = snd_soc_kcontrol_codec(kcontrol); struct device *va_dev = NULL; struct va_macro_priv *va_priv = NULL; if (!va_macro_get_data(codec, &va_dev, &va_priv, __func__)) return -EINVAL; va_priv->lpi_enable = ucontrol->value.integer.value[0]; return 0; } static int va_macro_tx_mixer_get(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) { Loading Loading @@ -2272,6 +2312,8 @@ static const struct snd_kcontrol_new va_macro_snd_controls[] = { SOC_SINGLE_SX_TLV("VA_DEC7 Volume", BOLERO_CDC_VA_TX7_TX_VOL_CTL, 0, -84, 40, digital_gain), SOC_SINGLE_EXT("LPI Enable", 0, 0, 1, 0, va_macro_lpi_get, va_macro_lpi_put), }; static const struct snd_kcontrol_new va_macro_snd_controls_common[] = { Loading Loading @@ -2361,6 +2403,8 @@ static int va_macro_init(struct snd_soc_codec *codec) "%s: priv is null for macro!\n", __func__); return -EINVAL; } va_priv->lpi_enable = false; va_priv->register_event_listener = false; if (va_priv->va_without_decimation) { ret = snd_soc_dapm_new_controls(dapm, va_macro_wod_dapm_widgets, Loading