summaryrefslogtreecommitdiffstats
path: root/sound
diff options
context:
space:
mode:
authorShuming Fan <shumingf@realtek.com>2021-04-22 18:32:35 +0800
committerMark Brown <broonie@kernel.org>2021-04-23 15:36:12 +0100
commita1aee7f7b71155595a06f21f2d021b6a58d04017 (patch)
treeb2584a4fb1efa8d14cb144d1a383f0908070eda2 /sound
parentca5118c0c00f6bc8b7d0c82c95485159db3a5584 (diff)
downloadlinux-a1aee7f7b71155595a06f21f2d021b6a58d04017.tar.gz
linux-a1aee7f7b71155595a06f21f2d021b6a58d04017.tar.bz2
linux-a1aee7f7b71155595a06f21f2d021b6a58d04017.zip
ASoC: rt711-sdca: add the notification when volume changed
This patch adds the return value when the volume settings were changed. The userspace application might monitor the kcontrols to check which control changed. Signed-off-by: Shuming Fan <shumingf@realtek.com> Link: https://lore.kernel.org/r/20210422103235.22048-1-shumingf@realtek.com Signed-off-by: Mark Brown <broonie@kernel.org>
Diffstat (limited to 'sound')
-rw-r--r--sound/soc/codecs/rt711-sdca.c13
1 files changed, 11 insertions, 2 deletions
diff --git a/sound/soc/codecs/rt711-sdca.c b/sound/soc/codecs/rt711-sdca.c
index 39848d2641c3..cc36739f7fcf 100644
--- a/sound/soc/codecs/rt711-sdca.c
+++ b/sound/soc/codecs/rt711-sdca.c
@@ -509,12 +509,16 @@ static int rt711_sdca_set_gain_put(struct snd_kcontrol *kcontrol,
(struct soc_mixer_control *)kcontrol->private_value;
struct rt711_sdca_priv *rt711 = snd_soc_component_get_drvdata(component);
unsigned int read_l, read_r, gain_l_val, gain_r_val;
- unsigned int i, adc_vol_flag = 0;
+ unsigned int i, adc_vol_flag = 0, changed = 0;
+ unsigned int lvalue, rvalue;
if (strstr(ucontrol->id.name, "FU1E Capture Volume") ||
strstr(ucontrol->id.name, "FU0F Capture Volume"))
adc_vol_flag = 1;
+ regmap_read(rt711->mbq_regmap, mc->reg, &lvalue);
+ regmap_read(rt711->mbq_regmap, mc->rreg, &rvalue);
+
/* control value to 2's complement value */
/* L Channel */
gain_l_val = ucontrol->value.integer.value[0];
@@ -560,6 +564,11 @@ static int rt711_sdca_set_gain_put(struct snd_kcontrol *kcontrol,
gain_r_val &= 0xffff;
}
+ if (lvalue != gain_l_val || rvalue != gain_r_val)
+ changed = 1;
+ else
+ return 0;
+
for (i = 0; i < 3; i++) { /* retry 3 times at most */
/* Lch*/
regmap_write(rt711->mbq_regmap, mc->reg, gain_l_val);
@@ -573,7 +582,7 @@ static int rt711_sdca_set_gain_put(struct snd_kcontrol *kcontrol,
break;
}
- return i == 3 ? -EIO : 0;
+ return i == 3 ? -EIO : changed;
}
static int rt711_sdca_set_gain_get(struct snd_kcontrol *kcontrol,