diff options
Diffstat (limited to 'sound/sparc')
-rw-r--r-- | sound/sparc/cs4231.c | 33 |
1 files changed, 14 insertions, 19 deletions
diff --git a/sound/sparc/cs4231.c b/sound/sparc/cs4231.c index 4f515a64e03f..ab39860e2404 100644 --- a/sound/sparc/cs4231.c +++ b/sound/sparc/cs4231.c | |||
@@ -422,44 +422,39 @@ static void snd_cs4231_mce_down(struct snd_cs4231 *chip) | |||
422 | spin_unlock_irqrestore(&chip->lock, flags); | 422 | spin_unlock_irqrestore(&chip->lock, flags); |
423 | return; | 423 | return; |
424 | } | 424 | } |
425 | snd_cs4231_busy_wait(chip); | ||
426 | |||
427 | /* calibration process */ | ||
428 | 425 | ||
429 | snd_cs4231_ready(chip); | 426 | /* |
430 | snd_cs4231_ready(chip); | 427 | * Wait for (possible -- during init auto-calibration may not be set) |
431 | timeout = snd_cs4231_in(chip, CS4231_TEST_INIT); | 428 | * calibration process to start. Needs upto 5 sample periods on AD1848 |
432 | if ((timeout & CS4231_CALIB_IN_PROGRESS) == 0) { | 429 | * which at the slowest possible rate of 5.5125 kHz means 907 us. |
433 | snd_printd("cs4231_mce_down - auto calibration time out (1)\n"); | 430 | */ |
434 | spin_unlock_irqrestore(&chip->lock, flags); | 431 | msleep(1); |
435 | return; | ||
436 | } | ||
437 | 432 | ||
438 | /* in 10ms increments, check condition, up to 250ms */ | 433 | /* check condition up to 250ms */ |
439 | timeout = 25; | 434 | timeout = msecs_to_jiffies(250); |
440 | while (snd_cs4231_in(chip, CS4231_TEST_INIT) & | 435 | while (snd_cs4231_in(chip, CS4231_TEST_INIT) & |
441 | CS4231_CALIB_IN_PROGRESS) { | 436 | CS4231_CALIB_IN_PROGRESS) { |
442 | 437 | ||
443 | spin_unlock_irqrestore(&chip->lock, flags); | 438 | spin_unlock_irqrestore(&chip->lock, flags); |
444 | if (--timeout < 0) { | 439 | if (timeout <= 0) { |
445 | snd_printk("mce_down - " | 440 | snd_printk("mce_down - " |
446 | "auto calibration time out (2)\n"); | 441 | "auto calibration time out (2)\n"); |
447 | return; | 442 | return; |
448 | } | 443 | } |
449 | msleep(10); | 444 | timeout = schedule_timeout(timeout); |
450 | spin_lock_irqsave(&chip->lock, flags); | 445 | spin_lock_irqsave(&chip->lock, flags); |
451 | } | 446 | } |
452 | 447 | ||
453 | /* in 10ms increments, check condition, up to 100ms */ | 448 | /* check condition up to 100ms */ |
454 | timeout = 10; | 449 | timeout = msecs_to_jiffies(100); |
455 | while (__cs4231_readb(chip, CS4231U(chip, REGSEL)) & CS4231_INIT) { | 450 | while (__cs4231_readb(chip, CS4231U(chip, REGSEL)) & CS4231_INIT) { |
456 | spin_unlock_irqrestore(&chip->lock, flags); | 451 | spin_unlock_irqrestore(&chip->lock, flags); |
457 | if (--timeout < 0) { | 452 | if (timeout <= 0) { |
458 | snd_printk("mce_down - " | 453 | snd_printk("mce_down - " |
459 | "auto calibration time out (3)\n"); | 454 | "auto calibration time out (3)\n"); |
460 | return; | 455 | return; |
461 | } | 456 | } |
462 | msleep(10); | 457 | timeout = schedule_timeout(timeout); |
463 | spin_lock_irqsave(&chip->lock, flags); | 458 | spin_lock_irqsave(&chip->lock, flags); |
464 | } | 459 | } |
465 | spin_unlock_irqrestore(&chip->lock, flags); | 460 | spin_unlock_irqrestore(&chip->lock, flags); |