Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f998f257 authored by Mark Brown's avatar Mark Brown
Browse files

ASoC: Fix WM8996 DC servo operation without IRQ



We need to count the timeout down.

Reported-by: default avatarAxel Lin <axel.lin@gmail.com>
Signed-off-by: default avatarMark Brown <broonie@opensource.wolfsonmicro.com>
Acked-by: default avatarLiam Girdwood <lrg@ti.com>
parent 7803e329
Loading
Loading
Loading
Loading
+3 −6
Original line number Diff line number Diff line
@@ -719,7 +719,7 @@ static void wait_for_dc_servo(struct snd_soc_codec *codec, u16 mask)
{
	struct i2c_client *i2c = to_i2c_client(codec->dev);
	struct wm8996_priv *wm8996 = snd_soc_codec_get_drvdata(codec);
	int i, ret;
	int ret;
	unsigned long timeout = 200;

	snd_soc_write(codec, WM8996_DC_SERVO_2, mask);
@@ -734,15 +734,12 @@ static void wait_for_dc_servo(struct snd_soc_codec *codec, u16 mask)

		} else {
			msleep(1);
			if (--i) {
				timeout = 0;
				break;
			}
			timeout--;
		}

		ret = snd_soc_read(codec, WM8996_DC_SERVO_2);
		dev_dbg(codec->dev, "DC servo state: %x\n", ret);
	} while (ret & mask);
	} while (timeout && ret & mask);

	if (timeout == 0)
		dev_err(codec->dev, "DC servo timed out for %x\n", mask);