On 17 April 2022 20:28, Mark Brown wrote: > The tone generator frequency control just returns 0 on successful write, > not a boolean value indicating if there was a change or not. Compare > what was written with the value that was there previously so that > notifications are generated appropraitely when the value changes. s/appropraitely/appropriately/ Thanks for the update. Good spot. > > Signed-off-by: Mark Brown <broonie@xxxxxxxxxx> > --- > sound/soc/codecs/da7219.c | 14 ++++++++++---- > 1 file changed, 10 insertions(+), 4 deletions(-) > > diff --git a/sound/soc/codecs/da7219.c b/sound/soc/codecs/da7219.c > index a28d3601b932..c08e15830cec 100644 > --- a/sound/soc/codecs/da7219.c > +++ b/sound/soc/codecs/da7219.c > @@ -446,7 +446,7 @@ static int da7219_tonegen_freq_put(struct snd_kcontrol > *kcontrol, > struct soc_mixer_control *mixer_ctrl = > (struct soc_mixer_control *) kcontrol->private_value; > unsigned int reg = mixer_ctrl->reg; > - __le16 val; > + __le16 val_new, val_old; > int ret; > > /* > @@ -454,13 +454,19 @@ static int da7219_tonegen_freq_put(struct > snd_kcontrol *kcontrol, > * Therefore we need to convert to little endian here to align with > * HW registers. > */ > - val = cpu_to_le16(ucontrol->value.integer.value[0]); > + val_new = cpu_to_le16(ucontrol->value.integer.value[0]); > > mutex_lock(&da7219->ctrl_lock); > - ret = regmap_raw_write(da7219->regmap, reg, &val, sizeof(val)); > + ret = regmap_raw_read(da7219->regmap, reg, &val_old, sizeof(val_old)); > + if (ret == 0) Wouldn't it make sense here to only perform the write if the values weren't the same? > + ret = regmap_raw_write(da7219->regmap, reg, > + &val_new, sizeof(val_new)); > mutex_unlock(&da7219->ctrl_lock); > > - return ret; > + if (ret < 0) > + return ret; > + > + return val_old != val_new; > } > > > -- > 2.30.2