Re: 2.6.0-test1+ Alsa + Intel 82801CA/CAM AC'97 Audio OOPS

Valdis.Kletnieks
2003-07-19T04:31:18Z

[-- Attachment #1.1: Type: text/plain, Size: 762 bytes --]

On Fri, 18 Jul 2003 22:10:12 EDT, Simon Boulet <simon.boulet@divahost.net> said:

> Also, the OSS (non-ALSA) Intel ICH (i8xx) loads correctly but the sound
> output is slow (rate or clocking problem?). My sound was fine under
> 2.4.21.
>

> i810_audio: only 48Khz playback available.

> i810_audio: setting clocking to 64937

I was having problems with i810_audio clocking as well. It turned out to be
the Intel Speedstep support, of all things. *IF* your kernel includes:

CONFIG_X86_SPEEDSTEP_ICH=y

it was possible to end up with a broken value for loops_per_jiffie. I've
attached a patch that fixes the bug and does a few cleanups...

If you don't have the SpeedStep support in your kernel, then your
problem is elsewhere... Good luck... ;)

/Valdis

[-- Attachment #1.2: speedstep.patch2 --]
[-- Type: text/plain , Size: 1750 bytes --]

--- arch/i386/kernel/cpu/cpufreq/speedstep-ich.c.linus 2003-07-03 23:31:43.000000000 -0400
+++ arch/i386/kernel/cpu/cpufreq/speedstep-ich.c 2003-07-04 09:57:07.981299808 -0400
@@ -77,15 +77,17 @@
u8 value;
unsigned long flags;
struct cpufreq_freqs freqs;
+ int newfreq;

if (!speedstep_chipset_dev || (state > 0x1))
return;

freqs.old = speedstep_get_processor_frequency(speedstep_processor);
- freqs.new = speedstep_freqs[SPEEDSTEP_LOW].frequency;
+ freqs.new = speedstep_freqs[state].frequency;
freqs.cpu = 0; /* speedstep.c is UP only driver */

- if (notify)
+ /* make sure we've initialized before calling notify */
+ if (notify && (freqs.new != 0))
cpufreq_notify_transition(&freqs, CPUFREQ_PRECHANGE);

/* get PMBASE */
@@ -136,13 +138,16 @@

dprintk(KERN_DEBUG "cpufreq: read at pmbase 0x%x + 0x50 returned 0x%x\n", pmbase, value);

+ /* freqs.new may not be set yet - need local copy */
+ newfreq = speedstep_get_processor_frequency(speedstep_processor);
if (state == (value & 0x1)) {
- dprintk (KERN_INFO "cpufreq: change to %u MHz succeeded\n", (freqs.new / 1000));
+ dprintk (KERN_INFO "cpufreq: change to %u MHz succeeded\n", (newfreq / 1000));
} else {
printk (KERN_ERR "cpufreq: change failed - I/O error\n");
}

- if (notify)
+ /* Make sure we're initialized before calling notify */
+ if (notify && (freqs.new != 0))
cpufreq_notify_transition(&freqs, CPUFREQ_POSTCHANGE);

return;
@@ -295,7 +300,7 @@
return -EIO;

dprintk(KERN_INFO "cpufreq: currently at %s speed setting - %i MHz\n",
- (speed == speedstep_low_freq) ? "low" : "high",
+ (speed == speedstep_freqs[SPEEDSTEP_LOW].frequency) ? "low" : "high",
(speed / 1000));

/* cpuinfo and default policy values */

[-- Attachment #2: Type: application/pgp-signature, Size: 226 bytes --]