• Home
  • Raw
  • Download

Lines Matching +full:max +full:- +full:clk +full:- +full:rate +full:- +full:hz

2  * Copyright (c) 2006-2008 Simtec Electronics
21 #include <linux/clk.h>
32 #include <plat/cpu-freq-core.h>
34 #include <mach/regs-clock.h>
36 /* note, cpufreq support deals in kHz, no Hz */
46 static struct clk *_clk_mpll;
47 static struct clk *_clk_xtal;
48 static struct clk *clk_fclk;
49 static struct clk *clk_hclk;
50 static struct clk *clk_pclk;
51 static struct clk *clk_arm;
69 cfg->freq.fclk = fclk = clk_get_rate(clk_fclk); in s3c_cpufreq_getcur()
70 cfg->freq.hclk = hclk = clk_get_rate(clk_hclk); in s3c_cpufreq_getcur()
71 cfg->freq.pclk = pclk = clk_get_rate(clk_pclk); in s3c_cpufreq_getcur()
72 cfg->freq.armclk = armclk = clk_get_rate(clk_arm); in s3c_cpufreq_getcur()
74 cfg->pll.driver_data = __raw_readl(S3C2410_MPLLCON); in s3c_cpufreq_getcur()
75 cfg->pll.frequency = fclk; in s3c_cpufreq_getcur()
77 cfg->freq.hclk_tns = 1000000000 / (cfg->freq.hclk / 10); in s3c_cpufreq_getcur()
79 cfg->divs.h_divisor = fclk / hclk; in s3c_cpufreq_getcur()
80 cfg->divs.p_divisor = fclk / pclk; in s3c_cpufreq_getcur()
85 unsigned long pll = cfg->pll.frequency; in s3c_cpufreq_calc()
87 cfg->freq.fclk = pll; in s3c_cpufreq_calc()
88 cfg->freq.hclk = pll / cfg->divs.h_divisor; in s3c_cpufreq_calc()
89 cfg->freq.pclk = pll / cfg->divs.p_divisor; in s3c_cpufreq_calc()
92 cfg->freq.hclk_tns = 1000000000 / (cfg->freq.hclk / 10); in s3c_cpufreq_calc()
97 int diff_cur = abs(target - c); in closer()
98 int diff_new = abs(target - n); in closer()
107 pfx, cfg->pll.frequency, cfg->freq.fclk, cfg->freq.armclk, in s3c_cpufreq_show()
108 cfg->freq.hclk, cfg->divs.h_divisor, in s3c_cpufreq_show()
109 cfg->freq.pclk, cfg->divs.p_divisor); in s3c_cpufreq_show()
116 if (cfg->info->set_iotiming) in s3c_cpufreq_setio()
117 (cfg->info->set_iotiming)(cfg, &s3c24xx_iotiming); in s3c_cpufreq_setio()
122 if (cfg->info->calc_iotiming) in s3c_cpufreq_calcio()
123 return (cfg->info->calc_iotiming)(cfg, &s3c24xx_iotiming); in s3c_cpufreq_calcio()
130 (cfg->info->set_refresh)(cfg); in s3c_cpufreq_setrefresh()
135 (cfg->info->set_divs)(cfg); in s3c_cpufreq_setdivs()
140 return (cfg->info->calc_divs)(cfg); in s3c_cpufreq_calcdivs()
145 cfg->mpll = _clk_mpll; in s3c_cpufreq_setfvco()
146 (cfg->info->set_fvco)(cfg); in s3c_cpufreq_setfvco()
149 static inline void s3c_cpufreq_updateclk(struct clk *clk, in s3c_cpufreq_updateclk() argument
152 clk_set_rate(clk, freq); in s3c_cpufreq_updateclk()
167 /* TODO - check for DMA currently outstanding */ in s3c_cpufreq_settarget()
220 * re-write the IO or the refresh timings whilst we are changing in s3c_cpufreq_settarget()
268 return -EINVAL; in s3c_cpufreq_settarget()
304 target_freq *= 1000; /* convert target to Hz */ in s3c_cpufreq_target()
315 /* we keep the cpu pll table in Hz, to ensure we get an in s3c_cpufreq_target()
318 tmp_policy.min = policy->min * 1000; in s3c_cpufreq_target()
319 tmp_policy.max = policy->max * 1000; in s3c_cpufreq_target()
320 tmp_policy.cpu = policy->cpu; in s3c_cpufreq_target()
332 __func__, target_freq, pll->frequency); in s3c_cpufreq_target()
334 target_freq = pll->frequency; in s3c_cpufreq_target()
340 struct clk *s3c_cpufreq_clk_get(struct device *dev, const char *name) in s3c_cpufreq_clk_get()
342 struct clk *clk; in s3c_cpufreq_clk_get() local
344 clk = clk_get(dev, name); in s3c_cpufreq_clk_get()
345 if (IS_ERR(clk)) in s3c_cpufreq_clk_get()
348 return clk; in s3c_cpufreq_clk_get()
353 policy->clk = clk_arm; in s3c_cpufreq_init()
354 policy->cpuinfo.transition_latency = cpu_cur.info->latency; in s3c_cpufreq_init()
355 policy->freq_table = ftab; in s3c_cpufreq_init()
372 return -ENOENT; in s3c_cpufreq_initclks()
406 /* whilst we will be called later on, we try and re-set the in s3c_cpufreq_resume()
408 * up resuming devices and then immediately having to re-set in s3c_cpufreq_resume()
412 * have been un-suspended and at that time they should have in s3c_cpufreq_resume()
442 if (!info || !info->name) { in s3c_cpufreq_register()
444 return -EINVAL; in s3c_cpufreq_register()
448 info->name); in s3c_cpufreq_register()
452 BUG_ON(info->set_refresh == NULL); in s3c_cpufreq_register()
453 BUG_ON(info->set_divs == NULL); in s3c_cpufreq_register()
454 BUG_ON(info->calc_divs == NULL); in s3c_cpufreq_register()
456 /* info->set_fvco is optional, depending on whether there in s3c_cpufreq_register()
472 return -EINVAL; in s3c_cpufreq_setboard()
480 return -ENOMEM; in s3c_cpufreq_setboard()
492 if (!cpu_cur.info->get_iotiming) { in s3c_cpufreq_auto_io()
494 return -ENOENT; in s3c_cpufreq_auto_io()
499 ret = (cpu_cur.info->get_iotiming)(&cpu_cur, &s3c24xx_iotiming); in s3c_cpufreq_auto_io()
510 * s3c_cpufreq_freq_min - find the minimum settings for the given freq.
516 * unless the entry is zero when it is ignored and the non-zero argument
522 dst->fclk = do_min(a->fclk, b->fclk); in s3c_cpufreq_freq_min()
523 dst->hclk = do_min(a->hclk, b->hclk); in s3c_cpufreq_freq_min()
524 dst->pclk = do_min(a->pclk, b->pclk); in s3c_cpufreq_freq_min()
525 dst->armclk = do_min(a->armclk, b->armclk); in s3c_cpufreq_freq_min()
540 unsigned int bits = cpu_cur.info->locktime_bits; in s3c_cpufreq_update_loctkime()
541 u32 rate = (u32)clk_get_rate(_clk_xtal); in s3c_cpufreq_update_loctkime() local
549 val = calc_locktime(rate, cpu_cur.info->locktime_u) << bits; in s3c_cpufreq_update_loctkime()
550 val |= calc_locktime(rate, cpu_cur.info->locktime_m); in s3c_cpufreq_update_loctkime()
562 size = cpu_cur.info->calc_freqtable(&cpu_cur, NULL, 0); in s3c_cpufreq_build_freq()
567 return -ENOMEM; in s3c_cpufreq_build_freq()
571 ret = cpu_cur.info->calc_freqtable(&cpu_cur, ftab, size); in s3c_cpufreq_build_freq()
590 if (cpu_cur.board->auto_io) { in s3c_cpufreq_initcall()
599 if (cpu_cur.board->need_io && !cpu_cur.info->set_iotiming) { in s3c_cpufreq_initcall()
601 ret = -EINVAL; in s3c_cpufreq_initcall()
605 if (!cpu_cur.info->need_pll) in s3c_cpufreq_initcall()
610 s3c_cpufreq_freq_min(&cpu_cur.max, &cpu_cur.board->max, in s3c_cpufreq_initcall()
611 &cpu_cur.info->max); in s3c_cpufreq_initcall()
613 if (cpu_cur.info->calc_freqtable) in s3c_cpufreq_initcall()
626 * s3c_plltab_register - register CPU PLL table.
648 vals->frequency = CPUFREQ_TABLE_END; in s3c_plltab_register()
654 return vals ? 0 : -ENOMEM; in s3c_plltab_register()