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>
 {
        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,