--- arch/i386/kernel/speedstep.c.orig 2003-05-21 22:59:41.000000000 -0400 +++ arch/i386/kernel/speedstep.c 2003-05-21 23:08:17.000000000 -0400 @@ -49,6 +49,7 @@ */ static unsigned int speedstep_processor = 0; static int speedstep_coppermine = 0; +static int speedstep_default_speed = 0; #define SPEEDSTEP_PROCESSOR_PIII_C 0x00000001 /* Coppermine core */ #define SPEEDSTEP_PROCESSOR_PIII_T 0x00000002 /* Tualatin core */ @@ -638,11 +639,15 @@ (speed / 1000)); /* cpuinfo and default policy values */ - policy->policy = (speed == speedstep_low_freq) ? - CPUFREQ_POLICY_POWERSAVE : CPUFREQ_POLICY_PERFORMANCE; + if(speedstep_default_speed==0) + policy->policy = (speed == speedstep_low_freq) ? + CPUFREQ_POLICY_POWERSAVE : CPUFREQ_POLICY_PERFORMANCE; + else + policy->policy = speedstep_default_speed; + policy->cpuinfo.transition_latency = CPUFREQ_ETERNAL; policy->cur = speed; - + return cpufreq_frequency_table_cpuinfo(policy, &speedstep_freqs[0]); } @@ -663,7 +668,32 @@ speedstep_coppermine = simple_strtoul(str, &str, 0); return 1; } + +/** + * speedstep_set_default + * + * Ripped blatantly from the coppermine handling, this is for + * forcing cpufreq to set a specific policy/speed on init. + * + * Coded up for use with swsusp (it gets weird if you suspend at + * one speed and resume at another) but it might be generally useful. + * + * IANAKG so this may be very wrong. + */ +static int __init speedstep_set_default(char *str) +{ + speedstep_default_speed=simple_strtoul(str,&str,0); + if (speedstep_default_speed != CPUFREQ_POLICY_POWERSAVE && + speedstep_default_speed != CPUFREQ_POLICY_PERFORMANCE) { + printk(KERN_INFO "cpufreq: Unknown default: %s\n",str); + speedstep_default_speed=0; + } else + printk(KERN_INFO "cpufreq: Default forced: %s\n", (speedstep_default_speed == CPUFREQ_POLICY_PERFORMANCE) ? "performance" : "powersave"); + return 1; +} + __setup("speedstep_coppermine=", speedstep_setup); +__setup("speedstep_default=", speedstep_set_default); #endif @@ -672,7 +702,7 @@ .target = speedstep_target, .init = speedstep_cpu_init, .exit = NULL, - .policy = NULL, + .policy = (speedstep_set_default? speedstep_set_default : NULL), .name = "speedstep", }; @@ -719,7 +749,7 @@ MODULE_PARM (speedstep_coppermine, "i"); - +MODULE_PARM (speedstep_default_speed, "i"); MODULE_AUTHOR ("Dave Jones , Dominik Brodowski "); MODULE_DESCRIPTION ("Speedstep driver for Intel mobile processors."); MODULE_LICENSE ("GPL");