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

Commit b875d650 authored by Takashi Iwai's avatar Takashi Iwai Committed by Jaroslav Kysela
Browse files

[ALSA] Fix thinko in cs4231 mce down check



The last patches to replace with schedule_timeout() don't work as expected.

Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
Signed-off-by: default avatarJaroslav Kysela <perex@suse.cz>
parent 56f91585
Loading
Loading
Loading
Loading
+7 −6
Original line number Diff line number Diff line
@@ -313,6 +313,7 @@ void snd_cs4231_mce_up(struct snd_cs4231 *chip)
void snd_cs4231_mce_down(struct snd_cs4231 *chip)
{
	unsigned long flags;
	unsigned long end_time;
	int timeout;

	snd_cs4231_busy_wait(chip);
@@ -344,28 +345,28 @@ void snd_cs4231_mce_down(struct snd_cs4231 *chip)
	snd_printdd("(1) jiffies = %lu\n", jiffies);

	/* check condition up to 250 ms */
	timeout = msecs_to_jiffies(250);
	end_time = jiffies + msecs_to_jiffies(250);
	while (snd_cs4231_in(chip, CS4231_TEST_INIT) &
		CS4231_CALIB_IN_PROGRESS) {

		if (timeout <= 0) {
		if (time_after(jiffies, end_time)) {
			snd_printk(KERN_ERR "mce_down - "
					"auto calibration time out (2)\n");
			return;
		}
		timeout = schedule_timeout(timeout);
		msleep(1);
	}

	snd_printdd("(2) jiffies = %lu\n", jiffies);

	/* check condition up to 100 ms */
	timeout = msecs_to_jiffies(100);
	end_time = jiffies + msecs_to_jiffies(100);
	while (cs4231_inb(chip, CS4231P(REGSEL)) & CS4231_INIT) {
		if (timeout <= 0) {
		if (time_after(jiffies, end_time)) {
			snd_printk(KERN_ERR "mce_down - auto calibration time out (3)\n");
			return;
		}
		timeout = schedule_timeout(timeout);
		msleep(1);
	}

	snd_printdd("(3) jiffies = %lu\n", jiffies);
+7 −6
Original line number Diff line number Diff line
@@ -401,6 +401,7 @@ static void snd_cs4231_mce_up(struct snd_cs4231 *chip)
static void snd_cs4231_mce_down(struct snd_cs4231 *chip)
{
	unsigned long flags;
	unsigned long end_time;
	int timeout;

	spin_lock_irqsave(&chip->lock, flags);
@@ -431,30 +432,30 @@ static void snd_cs4231_mce_down(struct snd_cs4231 *chip)
	msleep(1);

	/* check condition up to 250ms */
	timeout = msecs_to_jiffies(250);
	end_time = jiffies + msecs_to_jiffies(250);
	while (snd_cs4231_in(chip, CS4231_TEST_INIT) &
		CS4231_CALIB_IN_PROGRESS) {

		spin_unlock_irqrestore(&chip->lock, flags);
		if (timeout <= 0) {
		if (time_after(jiffies, end_time)) {
			snd_printk("mce_down - "
				   "auto calibration time out (2)\n");
			return;
		}
		timeout = schedule_timeout(timeout);
		msleep(1);
		spin_lock_irqsave(&chip->lock, flags);
	}

	/* check condition up to 100ms */
	timeout = msecs_to_jiffies(100);
	end_time = jiffies + msecs_to_jiffies(100);
	while (__cs4231_readb(chip, CS4231U(chip, REGSEL)) & CS4231_INIT) {
		spin_unlock_irqrestore(&chip->lock, flags);
		if (timeout <= 0) {
		if (time_after(jiffies, end_time)) {
			snd_printk("mce_down - "
				   "auto calibration time out (3)\n");
			return;
		}
		timeout = schedule_timeout(timeout);
		msleep(1);
		spin_lock_irqsave(&chip->lock, flags);
	}
	spin_unlock_irqrestore(&chip->lock, flags);