*
* 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
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);
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;
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:
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:
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;
*
* 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
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 */
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;
/*
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,
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;
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.