ASoC: mediatek: mt6358: initialize setting when ramping volume
authorTzung-Bi Shih <tzungbi@google.com>
Tue, 7 May 2019 10:12:18 +0000 (18:12 +0800)
committerMark Brown <broonie@kernel.org>
Wed, 8 May 2019 08:11:53 +0000 (17:11 +0900)
Mt6358 ramps up from the smallest volume (i.e. -10dB) to target dB when
opening and ramps down from target dB to mute (i.e. -40dB) when closing.
If target is equal to -10dB when opening, headset_volume_ramp() simply
leaves current setting (which may not be -10dB) unchanged.

Execute the loop at least once to initialize the setting to the
starting point (i.e. from).

Signed-off-by: Tzung-Bi Shih <tzungbi@google.com>
Signed-off-by: Mark Brown <broonie@kernel.org>
sound/soc/codecs/mt6358.c

index d4c4fee..96547ae 100644 (file)
@@ -405,10 +405,9 @@ static bool is_valid_hp_pga_idx(int reg_idx)
               reg_idx == DL_GAIN_N_40DB;
 }
 
-static void headset_volume_ramp(struct mt6358_priv *priv,
-                               int from, int to)
+static void headset_volume_ramp(struct mt6358_priv *priv, int from, int to)
 {
-       int offset = 0, count = 1, reg_idx;
+       int offset = 0, count = 0, reg_idx;
 
        if (!is_valid_hp_pga_idx(from) || !is_valid_hp_pga_idx(to))
                dev_warn(priv->dev, "%s(), volume index is not valid, from %d, to %d\n",
@@ -422,7 +421,7 @@ static void headset_volume_ramp(struct mt6358_priv *priv,
        else
                offset = from - to;
 
-       while (offset > 0) {
+       while (offset >= 0) {
                if (to > from)
                        reg_idx = from + count;
                else