Lines Matching +full:clkdiv +full:- +full:-
1 // SPDX-License-Identifier: GPL-2.0-only
3 * Copyright (c) 2006-2009 Simtec Electronics
23 #include <linux/soc/samsung/s3c-cpufreq-core.h>
24 #include <linux/soc/samsung/s3c-pm.h>
54 long diff = a - b; in within_khz()
56 return (diff >= -1000 && diff <= 1000); in within_khz()
60 * s3c2440_cpufreq_calcdivs - calculate divider settings
73 fclk = cfg->freq.fclk; in s3c2440_cpufreq_calcdivs()
74 armclk = cfg->freq.armclk; in s3c2440_cpufreq_calcdivs()
75 hclk_max = cfg->max.hclk; in s3c2440_cpufreq_calcdivs()
103 pdiv = (hclk > cfg->max.pclk) ? 2 : 1; in s3c2440_cpufreq_calcdivs()
105 if ((hclk / pdiv) > cfg->max.pclk) in s3c2440_cpufreq_calcdivs()
124 cfg->divs.dvs = 1; in s3c2440_cpufreq_calcdivs()
127 cfg->divs.dvs = 0; in s3c2440_cpufreq_calcdivs()
129 cfg->freq.armclk = armclk; in s3c2440_cpufreq_calcdivs()
133 cfg->divs.h_divisor = hdiv; in s3c2440_cpufreq_calcdivs()
134 cfg->divs.p_divisor = pdiv; in s3c2440_cpufreq_calcdivs()
139 return -EINVAL; in s3c2440_cpufreq_calcdivs()
146 * s3c2440_cpufreq_setdivs - set the cpu frequency divider settings
154 unsigned long clkdiv, camdiv; in s3c2440_cpufreq_setdivs() local
157 cfg->divs.h_divisor, cfg->divs.p_divisor); in s3c2440_cpufreq_setdivs()
159 clkdiv = s3c24xx_read_clkdivn(); in s3c2440_cpufreq_setdivs()
162 clkdiv &= ~(S3C2440_CLKDIVN_HDIVN_MASK | S3C2440_CLKDIVN_PDIVN); in s3c2440_cpufreq_setdivs()
165 switch (cfg->divs.h_divisor) { in s3c2440_cpufreq_setdivs()
167 clkdiv |= S3C2440_CLKDIVN_HDIVN_1; in s3c2440_cpufreq_setdivs()
171 clkdiv |= S3C2440_CLKDIVN_HDIVN_2; in s3c2440_cpufreq_setdivs()
177 clkdiv |= S3C2440_CLKDIVN_HDIVN_3_6; in s3c2440_cpufreq_setdivs()
183 clkdiv |= S3C2440_CLKDIVN_HDIVN_4_8; in s3c2440_cpufreq_setdivs()
190 if (cfg->divs.p_divisor != cfg->divs.h_divisor) in s3c2440_cpufreq_setdivs()
191 clkdiv |= S3C2440_CLKDIVN_PDIVN; in s3c2440_cpufreq_setdivs()
193 /* todo - set pclk. */ in s3c2440_cpufreq_setdivs()
196 * when we write clkdiv we will under-frequency instead of over. We in s3c2440_cpufreq_setdivs()
201 s3c24xx_write_clkdivn(clkdiv); in s3c2440_cpufreq_setdivs()
206 clk_set_parent(armclk, cfg->divs.dvs ? hclk : fclk); in s3c2440_cpufreq_setdivs()
233 static int hclk_divs[] = { 1, 2, 3, 4, 6, 8, -1 };
241 WARN_ON(cfg->info == NULL); in s3c2440_cpufreq_calctable()
242 WARN_ON(cfg->board == NULL); in s3c2440_cpufreq_calctable()
244 ret = run_freq_for(cfg->info->max.hclk, in s3c2440_cpufreq_calctable()
245 cfg->info->max.fclk, in s3c2440_cpufreq_calctable()
289 return -ENOENT; in s3c2440_cpufreq_add()