]> git.hungrycats.org Git - linux/commitdiff
[ARM] cpufreq updates - new, more flexible initialisation handling.
authorRussell King <rmk@flint.arm.linux.org.uk>
Tue, 9 Jul 2002 22:38:15 +0000 (23:38 +0100)
committerRussell King <rmk@flint.arm.linux.org.uk>
Tue, 9 Jul 2002 22:38:15 +0000 (23:38 +0100)
This round of cpufreq cleanups came from Dominik's work on the core
cpufreq code.

arch/arm/mach-integrator/cpu.c
arch/arm/mach-sa1100/cpu-sa1100.c
arch/arm/mach-sa1100/cpu-sa1110.c
arch/arm/mach-sa1100/generic.c

index 6a6919adbeed7e28738d4231e73e9ab67d25293a..f2e7938bcc423b8261f6f3e98dd0435623856a31 100644 (file)
@@ -3,7 +3,7 @@
  *
  *  Copyright (C) 2001 Deep Blue Solutions Ltd.
  *
- *  $Id: cpu.c,v 1.4 2002/05/29 11:41:55 rmk Exp $
+ *  $Id: cpu.c,v 1.5 2002/07/06 16:53:17 rmk Exp $
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License version 2 as
@@ -121,8 +121,16 @@ static int __init cpu_init(void)
        cpu_freq_khz = vco_to_freq(vco, 1);
 
 #ifdef CONFIG_CPU_FREQ
-       cpufreq_init(cpu_freq_khz, 1000, 0);
-       cpufreq_setfunctions(integrator_validatespeed, integrator_setspeed);
+       {
+               struct cpufreq_driver cpufreq_driver;
+
+               cpufreq_driver.freq.min = 12000;
+               cpufreq_driver.freq.max = 160000;
+               cpufreq_driver.freq.cur = cpu_freq_khz;
+               cpufreq_driver.validate = &integrator_validatespeed;
+               cpufreq_driver.setspeed = &integrator_setspeed;
+               cpufreq_register(cpufreq_driver);
+       }
 #endif
 
        cm_stat = __raw_readl(CM_STAT);
index a0fece054e6ba4ec7cc420a37922124de1a14277..dd353855e3f8b7a0921cb02f8b6242c5efeadd80 100644 (file)
@@ -92,7 +92,7 @@
 
 extern unsigned int sa11x0_freq_to_ppcr(unsigned int khz);
 extern unsigned int sa11x0_validatespeed(unsigned int khz);
-
+extern unsigned int sa11x0_getspeed(void);
 
 typedef struct {
        int speed;
@@ -187,7 +187,7 @@ static void sa1100_update_dram_timings(int current_speed, int new_speed)
 static int sa1100_dram_notifier(struct notifier_block *nb, 
                                unsigned long val, void *data)
 {
-       struct cpufreq_info *ci = data;
+       struct cpufreq_freqs *ci = data;
        
        switch(val) {
        case CPUFREQ_MINMAX:
@@ -195,13 +195,13 @@ static int sa1100_dram_notifier(struct notifier_block *nb,
                break;
 
        case CPUFREQ_PRECHANGE:
-               if(ci->new_freq > ci->old_freq)
-                       sa1100_update_dram_timings(ci->old_freq, ci->new_freq);
+               if(ci->new > ci->cur)
+                       sa1100_update_dram_timings(ci->cur, ci->new);
                break;
 
        case CPUFREQ_POSTCHANGE:
-               if(ci->new_freq < ci->old_freq)
-                       sa1100_update_dram_timings(ci->old_freq, ci->new_freq);
+               if(ci->new < ci->cur)
+                       sa1100_update_dram_timings(ci->cur, ci->new);
                break;
                
        default:
@@ -230,9 +230,19 @@ static int __init sa1100_dram_init(void)
        int ret = -ENODEV;
 
        if ((processor_id & CPU_SA1100_MASK) == CPU_SA1100_ID) {
+               cpufreq_driver_t cpufreq_driver;
+
                ret = cpufreq_register_notifier(&sa1100_dram_block);
+               if (ret)
+                       return ret;
+
+               cpufreq_driver.freq.min = 59000;
+               cpufreq_driver.freq.max = 287000;
+               cpufreq_driver.freq.cur = sa11x0_getspeed();
+               cpufreq_driver.validate = &sa11x0_validatespeed;
+               cpufreq_driver.setspeed = &sa1100_setspeed;
 
-               cpufreq_setfunctions(sa11x0_validatespeed, sa1100_setspeed);
+               ret = cpufreq_register(cpufreq_driver);<
        }
 
        return ret;
index 5fcd1e9d3f78fb06d25bcc4b74718a951c589bee..bdd74df51ad424d9c9cec99121f136da68d611fc 100644 (file)
@@ -3,7 +3,7 @@
  *
  *  Copyright (C) 2001 Russell King
  *
- *  $Id: cpu-sa1110.c,v 1.8 2002/01/09 17:13:27 rmk Exp $
+ *  $Id: cpu-sa1110.c,v 1.9 2002/07/06 16:53:18 rmk Exp $
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License version 2 as
@@ -31,6 +31,7 @@
 
 extern unsigned int sa11x0_freq_to_ppcr(unsigned int khz);
 extern unsigned int sa11x0_validatespeed(unsigned int khz);
+extern unsigned int sa11x0_getspeed(void);
 
 struct sdram_params {
        u_char  rows;           /* bits                          */
@@ -88,6 +89,16 @@ static struct sdram_params samsung_km416s4030ct __initdata = {
        cas_latency:         3,
 };
 
+static struct sdram_params wbond_w982516ah75l_cl3_params __initdata = {
+       rows:               16,
+       tck:                 8,
+       trcd:               20,
+       trp:                20,
+       twr:                 8,
+       refresh:         64000,
+       cas_latency:         3,
+};
+
 static struct sdram_params sdram_params;
 
 /*
@@ -287,6 +298,8 @@ static int __init sa1110_clk_init(void)
                sdram = &samsung_km416s4030ct;
 
        if (sdram) {
+               struct cpufreq_driver cpufreq_driver;
+
                printk(KERN_DEBUG "SDRAM: tck: %d trcd: %d trp: %d"
                        " twr: %d refresh: %d cas_latency: %d\n",
                        sdram->tck, sdram->trcd, sdram->trp,
@@ -294,8 +307,15 @@ static int __init sa1110_clk_init(void)
 
                memcpy(&sdram_params, sdram, sizeof(sdram_params));
 
-               sa1110_setspeed(cpufreq_get(0));
-               cpufreq_setfunctions(sa11x0_validatespeed, sa1110_setspeed);
+               sa1110_setspeed(sa11x0_getspeed());
+
+               cpufreq_driver.freq.min = 59000;
+               cpufreq_driver.freq.max = 287000;
+               cpufreq_driver.freq.cur = sa11x0_getspeed();
+               cpufreq_driver.validate = &sa11x0_validatespeed;
+               cpufreq_driver.setspeed = &sa1110_setspeed;
+
+               return cpufreq_register(cpufreq_driver);
        }
 
        return 0;
index 3c6a1ac01e9497067c243150b3067dc4ce114d81..43425899690b0a75761e30ffa6cd70ece503aba4 100644 (file)
@@ -76,13 +76,10 @@ unsigned int sa11x0_validatespeed(unsigned int khz)
        return cclk_frequency_100khz[sa11x0_freq_to_ppcr(khz)] * 100;
 }
 
-static int __init sa11x0_init_clock(void)
+unsigned int sa11x0_getspeed(void)
 {
-       cpufreq_init(cclk_frequency_100khz[PPCR & 0xf] * 100, 59000, 287000);
-       return 0;
+       return cclk_frequency_100khz[PPCR & 0xf] * 100;
 }
-
-__initcall(sa11x0_init_clock);
 #else
 /*
  * We still need to provide this so building without cpufreq works.