[PATCH v2] ASoC: da7219: Fix change notifications for tone generator frequency
Adam Thomson
Adam.Thomson.Opensource at diasemi.com
Wed Apr 20 10:40:58 CEST 2022
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 at kernel.org>
> ---
> 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
More information about the Alsa-devel
mailing list