Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit bbeefb36 authored by qctecmdr's avatar qctecmdr Committed by Gerrit - the friendly Code Review server
Browse files

Merge "asoc: bolero: add mixer control for LPI enable flag"

parents 6e6f1246 f1904b44
Loading
Loading
Loading
Loading
+46 −2
Original line number Diff line number Diff line
@@ -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,
@@ -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)
@@ -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)
{
@@ -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[] = {
@@ -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,