From fa21d8cd20fb442954277cba8f7e5102353847a4 Mon Sep 17 00:00:00 2001 From: Xiaojun Sang Date: Fri, 22 Sep 2017 17:05:02 +0800 Subject: [PATCH] ASoC: wsa: add mixer ctl to set boost value Add a new mixer ctl to set WSA boost value for speaker protection v3. Boost value for different stages are packed together. Change-Id: Ie80d7bea4d3af00b74935f8b680e72ee967717f6 Signed-off-by: Xiaojun Sang --- asoc/codecs/wsa881x.c | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/asoc/codecs/wsa881x.c b/asoc/codecs/wsa881x.c index bff0ad539792..0755cdcab8b6 100644 --- a/asoc/codecs/wsa881x.c +++ b/asoc/codecs/wsa881x.c @@ -676,6 +676,36 @@ static int wsa881x_set_visense(struct snd_kcontrol *kcontrol, return 0; } +static int wsa881x_set_boost_level(struct snd_kcontrol *kcontrol, + struct snd_ctl_elem_value *ucontrol) +{ + struct snd_soc_codec *codec = snd_soc_kcontrol_codec(kcontrol); + u8 wsa_boost_level = 0; + + dev_dbg(codec->dev, "%s: ucontrol->value.integer.value[0] = %ld\n", + __func__, ucontrol->value.integer.value[0]); + + wsa_boost_level = ucontrol->value.integer.value[0]; + snd_soc_update_bits(codec, WSA881X_BOOST_PRESET_OUT1, + 0xff, wsa_boost_level); + + return 0; +} + +static int wsa881x_get_boost_level(struct snd_kcontrol *kcontrol, + struct snd_ctl_elem_value *ucontrol) +{ + struct snd_soc_codec *codec = snd_soc_kcontrol_codec(kcontrol); + u8 wsa_boost_level = 0; + + wsa_boost_level = snd_soc_read(codec, WSA881X_BOOST_PRESET_OUT1); + ucontrol->value.integer.value[0] = wsa_boost_level; + dev_dbg(codec->dev, "%s: boost level = 0x%x\n", __func__, + wsa_boost_level); + + return 0; +} + static const struct snd_kcontrol_new wsa881x_snd_controls[] = { SOC_SINGLE_EXT("COMP Switch", SND_SOC_NOPM, 0, 1, 0, wsa881x_get_compander, wsa881x_set_compander), @@ -685,6 +715,9 @@ static const struct snd_kcontrol_new wsa881x_snd_controls[] = { SOC_SINGLE_EXT("VISENSE Switch", SND_SOC_NOPM, 0, 1, 0, wsa881x_get_visense, wsa881x_set_visense), + + SOC_SINGLE_EXT("Boost Level", SND_SOC_NOPM, 0, 0xff, 0, + wsa881x_get_boost_level, wsa881x_set_boost_level), }; static const struct snd_kcontrol_new swr_dac_port[] = {