[PATCH v2 03/10] ASoC: tegra: Fix kcontrol put callback in DMIC

Sameer Pujar
2021-11-03T13:53:21Z

that change notifications are sent to subscribed applications. Update
the DMIC driver accordingly.

Fixes: 8c8ff982e9e2 ("ASoC: tegra: Add Tegra210 based DMIC driver")
Suggested-by: Jaroslav Kysela <perex@perex.cz>
Suggested-by: Mark Brown <broonie@kernel.org>
Signed-off-by: Sameer Pujar <spujar@nvidia.com>
---
sound/soc/tegra/tegra210_dmic.c | 35 +++++++++++++++++++++++++++--------
1 file changed, 27 insertions(+), 8 deletions(-)

diff --git a/sound/soc/tegra/tegra210_dmic.c b/sound/soc/tegra/tegra210_dmic.c
index b096478..39a63ed 100644
--- a/sound/soc/tegra/tegra210_dmic.c
+++ b/sound/soc/tegra/tegra210_dmic.c
@@ -185,20 +185,39 @@ static int tegra210_dmic_put_control(struct snd_kcontrol *kcontrol,
struct tegra210_dmic *dmic = snd_soc_component_get_drvdata(comp);
int value = ucontrol->value.integer.value[0];

- if (strstr(kcontrol->id.name, "Boost Gain Volume"))
+ if (strstr(kcontrol->id.name, "Boost Gain Volume")) {
+ if (dmic->boost_gain == value)
+ return 0;
+
dmic->boost_gain = value;
- else if (strstr(kcontrol->id.name, "Channel Select"))
- dmic->ch_select = ucontrol->value.integer.value[0];
- else if (strstr(kcontrol->id.name, "Mono To Stereo"))
+ } else if (strstr(kcontrol->id.name, "Channel Select")) {
+ if (dmic->ch_select == value)
+ return 0;
+
+ dmic->ch_select = value;
+ } else if (strstr(kcontrol->id.name, "Mono To Stereo")) {
+ if (dmic->mono_to_stereo == value)
+ return 0;
+
dmic->mono_to_stereo = value;
- else if (strstr(kcontrol->id.name, "Stereo To Mono"))
+ } else if (strstr(kcontrol->id.name, "Stereo To Mono")) {
+ if (dmic->stereo_to_mono == value)
+ return 0;
+
dmic->stereo_to_mono = value;
- else if (strstr(kcontrol->id.name, "OSR Value"))
+ } else if (strstr(kcontrol->id.name, "OSR Value")) {
+ if (dmic->osr_val == value)
+ return 0;
+
dmic->osr_val = value;
- else if (strstr(kcontrol->id.name, "LR Polarity Select"))
+ } else if (strstr(kcontrol->id.name, "LR Polarity Select")) {
+ if (dmic->lrsel == value)
+ return 0;
+
dmic->lrsel = value;
+ }

- return 0;
+ return 1;
}

static const struct snd_soc_dai_ops tegra210_dmic_dai_ops = {
--
2.7.4