diff options
author | Mark Brown <broonie@kernel.org> | 2024-11-12 13:09:50 +0000 |
---|---|---|
committer | Mark Brown <broonie@kernel.org> | 2024-11-12 13:16:37 +0000 |
commit | 2ae6da569e34e1d26c5275442d17ffd75fd343b3 (patch) | |
tree | f8f54cde867b49f1db96e28c4047d28a69422aab | |
parent | d859923faeca740ae9235e2b9328999836e681b9 (diff) | |
download | lwn-2ae6da569e34e1d26c5275442d17ffd75fd343b3.tar.gz lwn-2ae6da569e34e1d26c5275442d17ffd75fd343b3.zip |
ASoC: max9768: Fix event generation for playback mute
The max9768 has a custom control for playback mute which unconditionally
returns 0 from the put() operation, rather than returning 1 on change to
ensure notifications are generated to userspace. Check to see if the value
has changed and return appropriately.
Signed-off-by: Mark Brown <broonie@kernel.org>
Link: https://patch.msgid.link/20241112-asoc-max9768-event-v1-1-ba5d50599787@kernel.org
Signed-off-by: Mark Brown <broonie@kernel.org>
-rw-r--r-- | sound/soc/codecs/max9768.c | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/sound/soc/codecs/max9768.c b/sound/soc/codecs/max9768.c index e4793a5d179e..8af3c7e5317f 100644 --- a/sound/soc/codecs/max9768.c +++ b/sound/soc/codecs/max9768.c @@ -54,10 +54,17 @@ static int max9768_set_gpio(struct snd_kcontrol *kcontrol, { struct snd_soc_component *c = snd_soc_kcontrol_component(kcontrol); struct max9768 *max9768 = snd_soc_component_get_drvdata(c); + bool val = !ucontrol->value.integer.value[0]; + int ret; - gpiod_set_value_cansleep(max9768->mute, !ucontrol->value.integer.value[0]); + if (val != gpiod_get_value_cansleep(max9768->mute)) + ret = 1; + else + ret = 0; - return 0; + gpiod_set_value_cansleep(max9768->mute, val); + + return ret; } static const DECLARE_TLV_DB_RANGE(volume_tlv, |