[alsa-cvslog] alsa-kernel: Official ALSA project GIT repository for Linux 2.6 branch, master now at
Brought to you by:
perex
From: <nor...@al...> - 2009-04-15 08:19:57
|
Hello, This is an automated email from the git hooks/update script, it was generated because a ref change was pushed to the repository. Updating branch, master, via 2ec775e7053c82bc90858ede011b35aeb416995b (commit) from 29dab4fd3176e25dfab6cd763beb02d87973c288 (commit) - Log ----------------------------------------------------------------- commit 2ec775e7053c82bc90858ede011b35aeb416995b Author: Jaroslav Kysela <pe...@pe...> AuthorDate: Wed Apr 15 10:16:24 2009 +0200 Commit: Jaroslav Kysela <pe...@pe...> CommitDate: Wed Apr 15 10:16:24 2009 +0200 [ALSA] intel8x0: add one retry to the ac97_clock measurement routine It seems that on some hardware platforms, the first measurement is wrong. This patch adds second measurement to this case. Signed-off-by: Jaroslav Kysela <pe...@pe...> ----------------------------------------------------------------------- Diffstat: sound/pci/intel8x0.c | 15 +++++++++++---- 1 files changed, 11 insertions(+), 4 deletions(-) Patch -------------- (max 1500 lines) diff --git a/sound/pci/intel8x0.c b/sound/pci/intel8x0.c index 10f8609..5dced5b 100644 --- a/sound/pci/intel8x0.c +++ b/sound/pci/intel8x0.c @@ -2676,12 +2676,13 @@ static void __devinit intel8x0_measure_ac97_clock(struct intel8x0 *chip) struct ichdev *ichdev; unsigned long port; unsigned long pos, pos1, t; - int civ, timeout = 1000; + int civ, timeout = 1000, attempt = 1; struct timespec start_time, stop_time; if (chip->ac97_bus->clock != 48000) return; /* specified in module option */ + __again: subs = chip->pcm[0]->streams[0].substream; if (! subs || subs->dma_buffer.bytes < INTEL8X0_TESTBUF_SIZE) { snd_printk(KERN_WARNING "no playback buffer allocated - aborting measure ac97 clock\n"); @@ -2749,6 +2750,11 @@ static void __devinit intel8x0_measure_ac97_clock(struct intel8x0 *chip) if (pos == 0) { snd_printk(KERN_ERR "intel8x0: measure - unreliable DMA position..\n"); + __retry: + if (attempt < 2) { + attempt++; + goto __again; + } return; } @@ -2759,14 +2765,15 @@ static void __devinit intel8x0_measure_ac97_clock(struct intel8x0 *chip) printk(KERN_INFO "%s: measured %lu usecs (%lu samples)\n", __func__, t, pos); if (t == 0) { snd_printk(KERN_ERR "intel8x0: ?? calculation error..\n"); - return; + goto __retry; } pos *= 1000; pos = (pos / t) * 1000 + ((pos % t) * 1000) / t; - if (pos < 40000 || pos >= 60000) + if (pos < 40000 || pos >= 60000) { /* abnormal value. hw problem? */ printk(KERN_INFO "intel8x0: measured clock %ld rejected\n", pos); - else if (pos > 40500 && pos < 41500) + goto __retry; + } else if (pos > 40500 && pos < 41500) /* first exception - 41000Hz reference clock */ chip->ac97_bus->clock = 41000; else if (pos > 43600 && pos < 44600) ------- End of patch hooks/update --- Git Source Code Management System hooks/update refs/heads/master \ 29dab4fd3176e25dfab6cd763beb02d87973c288 \ 2ec775e7053c82bc90858ede011b35aeb416995b |