Gitweb:     
http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=90cf9b853281a39555cce8a42fc0fabad75b42a8
Commit:     90cf9b853281a39555cce8a42fc0fabad75b42a8
Parent:     51c80cb65ff9b7bdf172f9075138793c2bce6883
Author:     Rene Herman <[EMAIL PROTECTED]>
AuthorDate: Mon Sep 10 23:19:55 2007 +0200
Committer:  Jaroslav Kysela <[EMAIL PROTECTED]>
CommitDate: Tue Oct 16 16:49:24 2007 +0200

    [ALSA] ad1838/cs4231 - fix MCE timeout upon initial load
    
    When the ad1848/cs2431 is first being initialized, auto-calibration may not
    be set causing a timeout waiting for it in snd_ad1848/cs4231_mce_down().
    This has no dire consequences other than an alarming printk, but since what
    we need to wait for is for the calibration to _finish_, let's just check for
    that instead.
    The early chips need a slight delay (as commented -- 5 sample periods) to be
    sure that _if_ calibration is going to happen, it has started when we check
    While the CS4231A datasheet implies it'll happen immediately on downing MCE,
    some testing is showing that there's a window there as well, so just do the
    delay everywhere.
    Thanks to Krysztof Helt for pinpointing this problem.
    
    Signed-off-by: Rene Herman <[EMAIL PROTECTED]>
    Signed-off-by: Takashi Iwai <[EMAIL PROTECTED]>
    Signed-off-by: Jaroslav Kysela <[EMAIL PROTECTED]>
---
 sound/isa/ad1848/ad1848_lib.c |   15 +++++++--------
 sound/isa/cs423x/cs4231_lib.c |   16 +++++++---------
 2 files changed, 14 insertions(+), 17 deletions(-)

diff --git a/sound/isa/ad1848/ad1848_lib.c b/sound/isa/ad1848/ad1848_lib.c
index f01e564..d454d11 100644
--- a/sound/isa/ad1848/ad1848_lib.c
+++ b/sound/isa/ad1848/ad1848_lib.c
@@ -229,16 +229,15 @@ static void snd_ad1848_mce_down(struct snd_ad1848 *chip)
                spin_unlock_irqrestore(&chip->reg_lock, flags);
                return;
        }
-       /* calibration process */
 
-       for (timeout = 500; timeout > 0 && (snd_ad1848_in(chip, 
AD1848_TEST_INIT) & AD1848_CALIB_IN_PROGRESS) == 0; timeout--);
-       if ((snd_ad1848_in(chip, AD1848_TEST_INIT) & AD1848_CALIB_IN_PROGRESS) 
== 0) {
-               snd_printd("mce_down - auto calibration time out (1)\n");
-               spin_unlock_irqrestore(&chip->reg_lock, flags);
-               return;
-       }
+       /*
+        * Wait for (possible -- during init auto-calibration may not be set)
+        * calibration process to start. Needs upto 5 sample periods on AD1848
+        * which at the slowest possible rate of 5.5125 kHz means 907 us.
+        */
+       msleep(1);
 #if 0
-       printk("(2) timeout = %i, jiffies = %li\n", timeout, jiffies);
+       printk("(2) jiffies = %li\n", jiffies);
 #endif
        time = HZ / 4;
        while (snd_ad1848_in(chip, AD1848_TEST_INIT) & 
AD1848_CALIB_IN_PROGRESS) {
diff --git a/sound/isa/cs423x/cs4231_lib.c b/sound/isa/cs423x/cs4231_lib.c
index db9bba1..0e604bf 100644
--- a/sound/isa/cs423x/cs4231_lib.c
+++ b/sound/isa/cs423x/cs4231_lib.c
@@ -336,16 +336,14 @@ void snd_cs4231_mce_down(struct snd_cs4231 *chip)
        }
        snd_cs4231_busy_wait(chip);
 
-       /* calibration process */
-
-       for (timeout = 500; timeout > 0 && (snd_cs4231_in(chip, 
CS4231_TEST_INIT) & CS4231_CALIB_IN_PROGRESS) == 0; timeout--)
-               udelay(10);
-       if ((snd_cs4231_in(chip, CS4231_TEST_INIT) & CS4231_CALIB_IN_PROGRESS) 
== 0) {
-               snd_printd("cs4231_mce_down - auto calibration time out (1)\n");
-               return;
-       }
+       /*
+        * Wait for (possible -- during init auto-calibration may not be set)
+        * calibration process to start. Needs upto 5 sample periods on AD1848
+        * which at the slowest possible rate of 5.5125 kHz means 907 us.
+        */
+       msleep(1);
 #if 0
-       printk("(2) timeout = %i, jiffies = %li\n", timeout, jiffies);
+       printk("(2) jiffies = %li\n", jiffies);
 #endif
        /* in 10 ms increments, check condition, up to 250 ms */
        timeout = 25;
-
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to