diff options
author | Jinyoung Park <jinyoungp@nvidia.com> | 2012-03-02 14:17:09 +0900 |
---|---|---|
committer | Rohan Somvanshi <rsomvanshi@nvidia.com> | 2012-03-15 09:33:20 -0700 |
commit | 79daf9e1a977947fa1c0721876ba7a93d221097d (patch) | |
tree | 85953b603ea3c51646df9280df3b223e76dd8ecc | |
parent | 219aa9fafb0402226dd72db01985ded236dcdd1e (diff) |
ARM: tegra: clock: Add tegra_cpu_user_cap_set function
To set cpu_user_cap in tegra drivers, added tegra_cpu_user_cap_set
function.
Bug 945552
Signed-off-by: Jinyoung Park <jinyoungp@nvidia.com>
Reviewed-on: http://git-master/r/87109
(cherry picked from commit db954aafdfdbe1fa122466b8e8ec4ea4273efb90)
Change-Id: I765c44de4ed4ae908ef56914db53533605bd6d88
Reviewed-on: http://git-master/r/89740
Reviewed-by: Rohan Somvanshi <rsomvanshi@nvidia.com>
Tested-by: Rohan Somvanshi <rsomvanshi@nvidia.com>
-rw-r--r-- | arch/arm/mach-tegra/cpu-tegra.c | 43 | ||||
-rw-r--r-- | arch/arm/mach-tegra/include/mach/clk.h | 2 |
2 files changed, 30 insertions, 15 deletions
diff --git a/arch/arm/mach-tegra/cpu-tegra.c b/arch/arm/mach-tegra/cpu-tegra.c index 4d9758670b60..b4ba093952c7 100644 --- a/arch/arm/mach-tegra/cpu-tegra.c +++ b/arch/arm/mach-tegra/cpu-tegra.c @@ -87,6 +87,32 @@ module_param_cb(force_policy_max, &policy_ops, &force_policy_max, 0644); static unsigned int cpu_user_cap; +static inline void _cpu_user_cap_set_locked(void) +{ +#ifndef CONFIG_TEGRA_CPU_CAP_EXACT_FREQ + if (cpu_user_cap != 0) { + int i; + for (i = 0; freq_table[i].frequency != CPUFREQ_TABLE_END; i++) { + if (freq_table[i].frequency > cpu_user_cap) + break; + } + i = (i == 0) ? 0 : i - 1; + cpu_user_cap = freq_table[i].frequency; + } +#endif + tegra_cpu_set_speed_cap(NULL); +} + +void tegra_cpu_user_cap_set(unsigned int speed_khz) +{ + mutex_lock(&tegra_cpu_lock); + + cpu_user_cap = speed_khz; + _cpu_user_cap_set_locked(); + + mutex_unlock(&tegra_cpu_lock); +} + static int cpu_user_cap_set(const char *arg, const struct kernel_param *kp) { int ret; @@ -94,21 +120,8 @@ static int cpu_user_cap_set(const char *arg, const struct kernel_param *kp) mutex_lock(&tegra_cpu_lock); ret = param_set_uint(arg, kp); - if (ret == 0) { -#ifndef CONFIG_TEGRA_CPU_CAP_EXACT_FREQ - if (cpu_user_cap != 0) { - int i; - for (i = 0; freq_table[i].frequency != - CPUFREQ_TABLE_END; i++) { - if (freq_table[i].frequency > cpu_user_cap) - break; - } - i = (i == 0) ? 0 : i - 1; - cpu_user_cap = freq_table[i].frequency; - } -#endif - tegra_cpu_set_speed_cap(NULL); - } + if (ret == 0) + _cpu_user_cap_set_locked(); mutex_unlock(&tegra_cpu_lock); return ret; diff --git a/arch/arm/mach-tegra/include/mach/clk.h b/arch/arm/mach-tegra/include/mach/clk.h index abd7b11dc8b9..0fbbf24d5959 100644 --- a/arch/arm/mach-tegra/include/mach/clk.h +++ b/arch/arm/mach-tegra/include/mach/clk.h @@ -66,4 +66,6 @@ void tegra_unregister_clk_rate_notifier( */ int tegra_is_clk_enabled(struct clk *clk); +void tegra_cpu_user_cap_set(unsigned int speed_khz); + #endif |