linux 2.6.16.38 w/ vs2.0.3-rc1
[linux-2.6.git] / arch / i386 / kernel / cpu / cpufreq / elanfreq.c
index f317276..3f7caa4 100644 (file)
@@ -1,16 +1,16 @@
 /*
- *     elanfreq:       cpufreq driver for the AMD ELAN family
+ *     elanfreq:       cpufreq driver for the AMD ELAN family
  *
  *     (c) Copyright 2002 Robert Schwebel <r.schwebel@pengutronix.de>
  *
- *     Parts of this code are (c) Sven Geggus <sven@geggus.net>
+ *     Parts of this code are (c) Sven Geggus <sven@geggus.net> 
  *
- *      All Rights Reserved.
+ *      All Rights Reserved. 
  *
  *     This program is free software; you can redistribute it and/or
  *     modify it under the terms of the GNU General Public License
  *     as published by the Free Software Foundation; either version
- *     2 of the License, or (at your option) any later version.
+ *     2 of the License, or (at your option) any later version. 
  *
  *     2002-02-13: - initial revision for 2.4.18-pre9 by Robert Schwebel
  *
@@ -28,7 +28,7 @@
 #include <asm/timex.h>
 #include <asm/io.h>
 
-#define REG_CSCIR 0x22         /* Chip Setup and Control Index Register    */
+#define REG_CSCIR 0x22                 /* Chip Setup and Control Index Register    */
 #define REG_CSCDR 0x23         /* Chip Setup and Control Data  Register    */
 
 /* Module parameter */
@@ -41,7 +41,7 @@ struct s_elan_multiplier {
 };
 
 /*
- * It is important that the frequencies
+ * It is important that the frequencies 
  * are listed in ascending order here!
  */
 struct s_elan_multiplier elan_multiplier[] = {
@@ -72,79 +72,78 @@ static struct cpufreq_frequency_table elanfreq_table[] = {
  *     elanfreq_get_cpu_frequency: determine current cpu speed
  *
  *     Finds out at which frequency the CPU of the Elan SOC runs
- *     at the moment. Frequencies from 1 to 33 MHz are generated
+ *     at the moment. Frequencies from 1 to 33 MHz are generated 
  *     the normal way, 66 and 99 MHz are called "Hyperspeed Mode"
- *     and have the rest of the chip running with 33 MHz.
+ *     and have the rest of the chip running with 33 MHz. 
  */
 
 static unsigned int elanfreq_get_cpu_frequency(unsigned int cpu)
 {
-       u8 clockspeed_reg;    /* Clock Speed Register */
-
+        u8 clockspeed_reg;    /* Clock Speed Register */
+       
        local_irq_disable();
-       outb_p(0x80,REG_CSCIR);
-       clockspeed_reg = inb_p(REG_CSCDR);
+        outb_p(0x80,REG_CSCIR);
+        clockspeed_reg = inb_p(REG_CSCDR);
        local_irq_enable();
 
-       if ((clockspeed_reg & 0xE0) == 0xE0)
-               return 0;
+        if ((clockspeed_reg & 0xE0) == 0xE0) { return 0; }
 
-       /* Are we in CPU clock multiplied mode (66/99 MHz)? */
-       if ((clockspeed_reg & 0xE0) == 0xC0) {
-               if ((clockspeed_reg & 0x01) == 0)
+        /* Are we in CPU clock multiplied mode (66/99 MHz)? */
+        if ((clockspeed_reg & 0xE0) == 0xC0) {
+                if ((clockspeed_reg & 0x01) == 0) {
                        return 66000;
-               else
-                       return 99000;
-       }
+               } else {
+                       return 99000;             
+               }
+        }
 
        /* 33 MHz is not 32 MHz... */
        if ((clockspeed_reg & 0xE0)==0xA0)
                return 33000;
 
-       return ((1<<((clockspeed_reg & 0xE0) >> 5)) * 1000);
+        return ((1<<((clockspeed_reg & 0xE0) >> 5)) * 1000);
 }
 
 
 /**
- *     elanfreq_set_cpu_frequency: Change the CPU core frequency
- *     @cpu: cpu number
+ *      elanfreq_set_cpu_frequency: Change the CPU core frequency
+ *     @cpu: cpu number
  *     @freq: frequency in kHz
  *
- *     This function takes a frequency value and changes the CPU frequency
+ *      This function takes a frequency value and changes the CPU frequency 
  *     according to this. Note that the frequency has to be checked by
  *     elanfreq_validatespeed() for correctness!
- *
- *     There is no return value.
+ *     
+ *     There is no return value. 
  */
 
-static void elanfreq_set_cpu_state (unsigned int state)
-{
+static void elanfreq_set_cpu_state (unsigned int state) {
+
        struct cpufreq_freqs    freqs;
 
        freqs.old = elanfreq_get_cpu_frequency(0);
        freqs.new = elan_multiplier[state].clock;
        freqs.cpu = 0; /* elanfreq.c is UP only driver */
-
+       
        cpufreq_notify_transition(&freqs, CPUFREQ_PRECHANGE);
 
-       printk(KERN_INFO "elanfreq: attempting to set frequency to %i kHz\n",
-                       elan_multiplier[state].clock);
+       printk(KERN_INFO "elanfreq: attempting to set frequency to %i kHz\n",elan_multiplier[state].clock);
 
 
-       /*
-        * Access to the Elan's internal registers is indexed via
-        * 0x22: Chip Setup & Control Register Index Register (CSCI)
-        * 0x23: Chip Setup & Control Register Data  Register (CSCD)
+       /* 
+        * Access to the Elan's internal registers is indexed via    
+        * 0x22: Chip Setup & Control Register Index Register (CSCI) 
+        * 0x23: Chip Setup & Control Register Data  Register (CSCD) 
         *
         */
 
-       /*
-        * 0x40 is the Power Management Unit's Force Mode Register.
+       /* 
+        * 0x40 is the Power Management Unit's Force Mode Register. 
         * Bit 6 enables Hyperspeed Mode (66/100 MHz core frequency)
         */
 
        local_irq_disable();
-       outb_p(0x40,REG_CSCIR);         /* Disable hyperspeed mode */
+       outb_p(0x40,REG_CSCIR);         /* Disable hyperspeed mode          */
        outb_p(0x00,REG_CSCDR);
        local_irq_enable();             /* wait till internal pipelines and */
        udelay(1000);                   /* buffers have cleaned up          */
@@ -167,10 +166,10 @@ static void elanfreq_set_cpu_state (unsigned int state)
 
 /**
  *     elanfreq_validatespeed: test if frequency range is valid
- *     @policy: the policy to validate
+ *      @policy: the policy to validate
  *
- *     This function checks if a given frequency range in kHz is valid
- *     for the hardware supported by the driver.
+ *     This function checks if a given frequency range in kHz is valid 
+ *      for the hardware supported by the driver. 
  */
 
 static int elanfreq_verify (struct cpufreq_policy *policy)
@@ -178,11 +177,11 @@ static int elanfreq_verify (struct cpufreq_policy *policy)
        return cpufreq_frequency_table_verify(policy, &elanfreq_table[0]);
 }
 
-static int elanfreq_target (struct cpufreq_policy *policy,
-                           unsigned int target_freq,
+static int elanfreq_target (struct cpufreq_policy *policy, 
+                           unsigned int target_freq, 
                            unsigned int relation)
 {
-       unsigned int newstate = 0;
+       unsigned int    newstate = 0;
 
        if (cpufreq_frequency_table_target(policy, &elanfreq_table[0], target_freq, relation, &newstate))
                return -EINVAL;
@@ -213,7 +212,7 @@ static int elanfreq_cpu_init(struct cpufreq_policy *policy)
                max_freq = elanfreq_get_cpu_frequency(0);
 
        /* table init */
-       for (i=0; (elanfreq_table[i].frequency != CPUFREQ_TABLE_END); i++) {
+       for (i=0; (elanfreq_table[i].frequency != CPUFREQ_TABLE_END); i++) {
                if (elanfreq_table[i].frequency > max_freq)
                        elanfreq_table[i].frequency = CPUFREQ_ENTRY_INVALID;
        }
@@ -227,7 +226,8 @@ static int elanfreq_cpu_init(struct cpufreq_policy *policy)
        if (result)
                return (result);
 
-       cpufreq_frequency_table_get_attr(elanfreq_table, policy->cpu);
+        cpufreq_frequency_table_get_attr(elanfreq_table, policy->cpu);
+
        return 0;
 }
 
@@ -268,9 +268,9 @@ static struct freq_attr* elanfreq_attr[] = {
 
 
 static struct cpufreq_driver elanfreq_driver = {
-       .get            = elanfreq_get_cpu_frequency,
-       .verify         = elanfreq_verify,
-       .target         = elanfreq_target,
+       .get            = elanfreq_get_cpu_frequency,
+       .verify         = elanfreq_verify,
+       .target         = elanfreq_target,
        .init           = elanfreq_cpu_init,
        .exit           = elanfreq_cpu_exit,
        .name           = "elanfreq",
@@ -279,21 +279,23 @@ static struct cpufreq_driver elanfreq_driver = {
 };
 
 
-static int __init elanfreq_init(void)
-{
+static int __init elanfreq_init(void) 
+{      
        struct cpuinfo_x86 *c = cpu_data;
 
        /* Test if we have the right hardware */
        if ((c->x86_vendor != X86_VENDOR_AMD) ||
-               (c->x86 != 4) || (c->x86_model!=10)) {
+               (c->x86 != 4) || (c->x86_model!=10))
+       {
                printk(KERN_INFO "elanfreq: error: no Elan processor found!\n");
                 return -ENODEV;
        }
+       
        return cpufreq_register_driver(&elanfreq_driver);
 }
 
 
-static void __exit elanfreq_exit(void)
+static void __exit elanfreq_exit(void) 
 {
        cpufreq_unregister_driver(&elanfreq_driver);
 }
@@ -307,3 +309,4 @@ MODULE_DESCRIPTION("cpufreq driver for AMD's Elan CPUs");
 
 module_init(elanfreq_init);
 module_exit(elanfreq_exit);
+