Lines Matching +full:clkdiv +full:- +full:-
2 * Copyright (c) 2006-2009 Simtec Electronics
30 #include <mach/regs-clock.h>
33 #include <plat/cpu-freq-core.h>
44 long diff = a - b; in within_khz()
46 return (diff >= -1000 && diff <= 1000); in within_khz()
50 * s3c2440_cpufreq_calcdivs - calculate divider settings
63 fclk = cfg->freq.fclk; in s3c2440_cpufreq_calcdivs()
64 armclk = cfg->freq.armclk; in s3c2440_cpufreq_calcdivs()
65 hclk_max = cfg->max.hclk; in s3c2440_cpufreq_calcdivs()
93 pdiv = (hclk > cfg->max.pclk) ? 2 : 1; in s3c2440_cpufreq_calcdivs()
95 if ((hclk / pdiv) > cfg->max.pclk) in s3c2440_cpufreq_calcdivs()
114 cfg->divs.dvs = 1; in s3c2440_cpufreq_calcdivs()
117 cfg->divs.dvs = 0; in s3c2440_cpufreq_calcdivs()
119 cfg->freq.armclk = armclk; in s3c2440_cpufreq_calcdivs()
123 cfg->divs.h_divisor = hdiv; in s3c2440_cpufreq_calcdivs()
124 cfg->divs.p_divisor = pdiv; in s3c2440_cpufreq_calcdivs()
129 return -EINVAL; in s3c2440_cpufreq_calcdivs()
136 * s3c2440_cpufreq_setdivs - set the cpu frequency divider settings
144 unsigned long clkdiv, camdiv; in s3c2440_cpufreq_setdivs() local
147 cfg->divs.h_divisor, cfg->divs.p_divisor); in s3c2440_cpufreq_setdivs()
149 clkdiv = __raw_readl(S3C2410_CLKDIVN); in s3c2440_cpufreq_setdivs()
152 clkdiv &= ~(S3C2440_CLKDIVN_HDIVN_MASK | S3C2440_CLKDIVN_PDIVN); in s3c2440_cpufreq_setdivs()
155 switch (cfg->divs.h_divisor) { in s3c2440_cpufreq_setdivs()
157 clkdiv |= S3C2440_CLKDIVN_HDIVN_1; in s3c2440_cpufreq_setdivs()
161 clkdiv |= S3C2440_CLKDIVN_HDIVN_2; in s3c2440_cpufreq_setdivs()
167 clkdiv |= S3C2440_CLKDIVN_HDIVN_3_6; in s3c2440_cpufreq_setdivs()
173 clkdiv |= S3C2440_CLKDIVN_HDIVN_4_8; in s3c2440_cpufreq_setdivs()
180 if (cfg->divs.p_divisor != cfg->divs.h_divisor) in s3c2440_cpufreq_setdivs()
181 clkdiv |= S3C2440_CLKDIVN_PDIVN; in s3c2440_cpufreq_setdivs()
183 /* todo - set pclk. */ in s3c2440_cpufreq_setdivs()
186 * when we write clkdiv we will under-frequency instead of over. We in s3c2440_cpufreq_setdivs()
191 __raw_writel(clkdiv, S3C2410_CLKDIVN); in s3c2440_cpufreq_setdivs()
196 clk_set_parent(armclk, cfg->divs.dvs ? hclk : fclk); in s3c2440_cpufreq_setdivs()
223 static int hclk_divs[] = { 1, 2, 3, 4, 6, 8, -1 };
231 WARN_ON(cfg->info == NULL); in s3c2440_cpufreq_calctable()
232 WARN_ON(cfg->board == NULL); in s3c2440_cpufreq_calctable()
234 ret = run_freq_for(cfg->info->max.hclk, in s3c2440_cpufreq_calctable()
235 cfg->info->max.fclk, in s3c2440_cpufreq_calctable()
279 return -ENOENT; in s3c2440_cpufreq_add()