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

Commit 69058cd6 authored by Russell King's avatar Russell King
Browse files

ALSA: AACI: fix timeout condition checking



Ensure that a timeout coincident with the condition being waited for
results in success rather than failure.  This helps avoid timeout
conditions being inappropriately flagged.

Signed-off-by: default avatarRussell King <rmk+kernel@arm.linux.org.uk>
parent fd015480
Loading
Loading
Loading
Loading
+3 −3
Original line number Original line Diff line number Diff line
@@ -88,7 +88,7 @@ static void aaci_ac97_write(struct snd_ac97 *ac97, unsigned short reg,
		v = readl(aaci->base + AACI_SLFR);
		v = readl(aaci->base + AACI_SLFR);
	} while ((v & (SLFR_1TXB|SLFR_2TXB)) && --timeout);
	} while ((v & (SLFR_1TXB|SLFR_2TXB)) && --timeout);


	if (!timeout)
	if (v & (SLFR_1TXB|SLFR_2TXB))
		dev_err(&aaci->dev->dev,
		dev_err(&aaci->dev->dev,
			"timeout waiting for write to complete\n");
			"timeout waiting for write to complete\n");


@@ -124,7 +124,7 @@ static unsigned short aaci_ac97_read(struct snd_ac97 *ac97, unsigned short reg)
		v = readl(aaci->base + AACI_SLFR);
		v = readl(aaci->base + AACI_SLFR);
	} while ((v & SLFR_1TXB) && --timeout);
	} while ((v & SLFR_1TXB) && --timeout);


	if (!timeout) {
	if (v & SLFR_1TXB) {
		dev_err(&aaci->dev->dev, "timeout on slot 1 TX busy\n");
		dev_err(&aaci->dev->dev, "timeout on slot 1 TX busy\n");
		v = ~0;
		v = ~0;
		goto out;
		goto out;
@@ -145,7 +145,7 @@ static unsigned short aaci_ac97_read(struct snd_ac97 *ac97, unsigned short reg)
		v = readl(aaci->base + AACI_SLFR) & (SLFR_1RXV|SLFR_2RXV);
		v = readl(aaci->base + AACI_SLFR) & (SLFR_1RXV|SLFR_2RXV);
	} while ((v != (SLFR_1RXV|SLFR_2RXV)) && --timeout);
	} while ((v != (SLFR_1RXV|SLFR_2RXV)) && --timeout);


	if (!timeout) {
	if (v != (SLFR_1RXV|SLFR_2RXV)) {
		dev_err(&aaci->dev->dev, "timeout on RX valid\n");
		dev_err(&aaci->dev->dev, "timeout on RX valid\n");
		v = ~0;
		v = ~0;
		goto out;
		goto out;