summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJinyoung Park <jinyoungp@nvidia.com>2012-03-02 14:17:09 +0900
committerRohan Somvanshi <rsomvanshi@nvidia.com>2012-03-15 09:33:20 -0700
commit79daf9e1a977947fa1c0721876ba7a93d221097d (patch)
tree85953b603ea3c51646df9280df3b223e76dd8ecc
parent219aa9fafb0402226dd72db01985ded236dcdd1e (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.c43
-rw-r--r--arch/arm/mach-tegra/include/mach/clk.h2
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